diff --git a/.github/licenserc.yml b/.github/licenserc.yml index 52976b36f8686..97565bdc1c476 100644 --- a/.github/licenserc.yml +++ b/.github/licenserc.yml @@ -10,6 +10,7 @@ header: - '.golangci.yml' - '.golangci_br.yml' - 'LICENSES/' + - '**/*.key' - '**/*.md' - '**/*.json' - '**/*.pem' @@ -28,4 +29,6 @@ header: - '.github/' - 'parser/' - 'dumpling/' + - 'tidb-binlog/driver/example' + - 'tidb-binlog/proto/go-binlog/secondary_binlog.pb.go' comment: on-failure diff --git a/.github/workflows/br_compatible_test.yml b/.github/workflows/br_compatible_test.yml index aeccfb0a2eff0..149b70db1b068 100644 --- a/.github/workflows/br_compatible_test.yml +++ b/.github/workflows/br_compatible_test.yml @@ -46,7 +46,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.16 + go-version: 1.18 - name: Generate compatibility test backup data timeout-minutes: 15 diff --git a/.github/workflows/compile_br.yaml b/.github/workflows/compile_br.yaml index acfbc2d27bad5..3d6ae87beea7c 100644 --- a/.github/workflows/compile_br.yaml +++ b/.github/workflows/compile_br.yaml @@ -48,7 +48,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.16 + go-version: 1.18 - name: Run build run: make build_tools @@ -73,7 +73,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.16 + go-version: 1.18 - name: Run build run: make build_tools @@ -88,7 +88,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.16 + go-version: 1.18 - name: Compile for FreeBSD run: GOOS=freebsd make build_tools diff --git a/.github/workflows/dumpling_integration_test.yml b/.github/workflows/dumpling_integration_test.yml index 8390ef961f44d..75395b9e271ef 100644 --- a/.github/workflows/dumpling_integration_test.yml +++ b/.github/workflows/dumpling_integration_test.yml @@ -50,10 +50,10 @@ jobs: - uses: actions/checkout@v2 - name: Shutdown Ubuntu MySQL (SUDO) run: sudo service mysql stop # Shutdown the Default MySQL, "sudo" is necessary, please not remove it - - name: Set up Go 1.16 + - name: Set up Go 1.18 uses: actions/setup-go@v2 with: - go-version: 1.16 + go-version: 1.18 - uses: actions/cache@v2 with: path: ~/go/pkg/mod @@ -87,10 +87,10 @@ jobs: - uses: actions/checkout@v2 - name: Shutdown Ubuntu MySQL (SUDO) run: sudo service mysql stop # Shutdown the Default MySQL, "sudo" is necessary, please not remove it - - name: Set up Go 1.16 + - name: Set up Go 1.18 uses: actions/setup-go@v2 with: - go-version: 1.16 + go-version: 1.18 - uses: actions/cache@v2 with: path: ~/go/pkg/mod @@ -124,10 +124,10 @@ jobs: - uses: actions/checkout@v2 - name: Shutdown Ubuntu MySQL (SUDO) run: sudo service mysql stop # Shutdown the Default MySQL, "sudo" is necessary, please not remove it - - name: Set up Go 1.16 + - name: Set up Go 1.18 uses: actions/setup-go@v2 with: - go-version: 1.16 + go-version: 1.18 - uses: actions/cache@v2 with: path: ~/go/pkg/mod diff --git a/Makefile b/Makefile index 4e0c2f578535e..300001fc923e6 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ all: dev server benchkv parser: @echo "remove this command later, when our CI script doesn't call it" -dev: checklist check explaintest gogenerate br_unit_test test_part_parser_dev +dev: checklist check explaintest gogenerate br_unit_test test_part_parser_dev ut @>&2 echo "Great, all tests passed." # Install the check tools. @@ -47,7 +47,7 @@ check-static: tools/bin/golangci-lint GO111MODULE=on CGO_ENABLED=0 tools/bin/golangci-lint run -v $$($(PACKAGE_DIRECTORIES)) --config .golangci.yml unconvert:tools/bin/unconvert - @echo "unconvert check(skip check the genenrated or copied code in lightning)" + @echo "unconvert check(skip check the generated or copied code in lightning)" @GO111MODULE=on tools/bin/unconvert $(UNCONVERT_PACKAGES) gogenerate: @@ -245,7 +245,11 @@ tools/bin/errdoc-gen: tools/check/go.mod $(GO) build -o ../bin/errdoc-gen github.com/pingcap/errors/errdoc-gen tools/bin/golangci-lint: - curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b ./tools/bin v1.41.1 + cd tools/check; \ + $(GO) build -o ../bin/golangci-lint github.com/golangci/golangci-lint/cmd/golangci-lint + # Build from source is not recommand. See https://golangci-lint.run/usage/install/ + # But the following script from their website doesn't work with Go1.18: + # curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b ./tools/bin v1.44.2 tools/bin/vfsgendev: tools/check/go.mod cd tools/check; \ diff --git a/Makefile.common b/Makefile.common index 8ea85d6a24694..163c901861fd1 100644 --- a/Makefile.common +++ b/Makefile.common @@ -54,7 +54,7 @@ PACKAGE_DIRECTORIES_TIDB_TESTS := $(PACKAGE_LIST_TIDB_TESTS) | sed 's|github.com FILES := $$(find $$($(PACKAGE_DIRECTORIES)) -name "*.go") FILES_TIDB_TESTS := $$(find $$($(PACKAGE_DIRECTORIES_TIDB_TESTS)) -name "*.go") -UNCONVERT_PACKAGES_LIST := go list ./...| grep -vE "lightning\/checkpoints|lightning\/manual|lightning\/common" +UNCONVERT_PACKAGES_LIST := go list ./...| grep -vE "lightning\/checkpoints|lightning\/manual|lightning\/common|tidb-binlog\/proto\/go-binlog" UNCONVERT_PACKAGES := $$($(UNCONVERT_PACKAGES_LIST)) FAILPOINT_ENABLE := find $$PWD/ -type d | grep -vE "(\.git|tools)" | xargs tools/bin/failpoint-ctl enable diff --git a/bindinfo/bind_cache.go b/bindinfo/bind_cache.go index 1742a39972410..aa9f0079a2903 100644 --- a/bindinfo/bind_cache.go +++ b/bindinfo/bind_cache.go @@ -15,6 +15,7 @@ package bindinfo import ( + "errors" "sync" "github.com/cznic/mathutil" @@ -54,7 +55,7 @@ func newBindCache() *bindCache { cache := kvcache.NewSimpleLRUCache(mathutil.MaxUint, 0, 0) c := bindCache{ cache: cache, - memCapacity: variable.MemQuotaBindCache.Load(), + memCapacity: variable.MemQuotaBindingCache.Load(), memTracker: memory.NewTracker(memory.LabelForBindCache, -1), } return &c @@ -73,12 +74,30 @@ func (c *bindCache) get(key bindCacheKey) []*BindRecord { return typedValue } +// getCopiedVal gets a copied cache item according to cache key. +// The return value can be modified. +// If you want to modify the return value, use the 'getCopiedVal' function rather than 'get' function. +// We use the copy on write way to operate the bindRecord in cache for safety and accuracy of memory usage. +func (c *bindCache) getCopiedVal(key bindCacheKey) []*BindRecord { + bindRecords := c.get(key) + if bindRecords != nil { + copiedRecords := make([]*BindRecord, len(bindRecords)) + for i, bindRecord := range bindRecords { + copiedRecords[i] = bindRecord.shallowCopy() + } + return copiedRecords + } + return bindRecords +} + // set inserts an item to the cache. It's not thread-safe. // Only other functions of the bindCache can use this function. -func (c *bindCache) set(key bindCacheKey, value []*BindRecord) bool { +// The set operation will return error message when the memory usage of binding_cache exceeds its capacity. +func (c *bindCache) set(key bindCacheKey, value []*BindRecord) (ok bool, err error) { mem := calcBindCacheKVMem(key, value) if mem > c.memCapacity { // ignore this kv pair if its size is too large - return false + err = errors.New("The memory usage of all available bindings exceeds the cache's mem quota. As a result, all available bindings cannot be held on the cache. Please increase the value of the system variable 'tidb_mem_quota_binding_cache' and execute 'admin reload bindings' to ensure that all bindings exist in the cache and can be used normally") + return } bindRecords := c.get(key) if bindRecords != nil { @@ -86,15 +105,17 @@ func (c *bindCache) set(key bindCacheKey, value []*BindRecord) bool { mem -= calcBindCacheKVMem(key, bindRecords) } for mem+c.memTracker.BytesConsumed() > c.memCapacity { + err = errors.New("The memory usage of all available bindings exceeds the cache's mem quota. As a result, all available bindings cannot be held on the cache. Please increase the value of the system variable 'tidb_mem_quota_binding_cache' and execute 'admin reload bindings' to ensure that all bindings exist in the cache and can be used normally") evictedKey, evictedValue, evicted := c.cache.RemoveOldest() if !evicted { - return false + return } c.memTracker.Consume(-calcBindCacheKVMem(evictedKey.(bindCacheKey), evictedValue.([]*BindRecord))) } c.memTracker.Consume(mem) c.cache.Put(key, value) - return true + ok = true + return } // delete remove an item from the cache. It's not thread-safe. @@ -105,8 +126,9 @@ func (c *bindCache) delete(key bindCacheKey) bool { mem := calcBindCacheKVMem(key, bindRecords) c.cache.Delete(key) c.memTracker.Consume(-mem) + return true } - return true + return false } // GetBindRecord gets the BindRecord from the cache. @@ -140,17 +162,18 @@ func (c *bindCache) GetAllBindRecords() []*BindRecord { // SetBindRecord sets the BindRecord to the cache. // The function is thread-safe. -func (c *bindCache) SetBindRecord(hash string, meta *BindRecord) { +func (c *bindCache) SetBindRecord(hash string, meta *BindRecord) (err error) { c.lock.Lock() defer c.lock.Unlock() cacheKey := bindCacheKey(hash) - metas := c.get(cacheKey) + metas := c.getCopiedVal(cacheKey) for i := range metas { if metas[i].OriginalSQL == meta.OriginalSQL { metas[i] = meta } } - c.set(cacheKey, []*BindRecord{meta}) + _, err = c.set(cacheKey, []*BindRecord{meta}) + return } // RemoveBindRecord removes the BindRecord which has same originSQL with specified BindRecord. @@ -158,7 +181,7 @@ func (c *bindCache) SetBindRecord(hash string, meta *BindRecord) { func (c *bindCache) RemoveBindRecord(hash string, meta *BindRecord) { c.lock.Lock() defer c.lock.Unlock() - metas := c.get(bindCacheKey(hash)) + metas := c.getCopiedVal(bindCacheKey(hash)) if metas == nil { return } @@ -175,7 +198,9 @@ func (c *bindCache) RemoveBindRecord(hash string, meta *BindRecord) { } } } - c.set(bindCacheKey(hash), metas) + // This function can guarantee the memory usage for the cache will never grow up. + // So we don't need to handle the return value here. + _, _ = c.set(bindCacheKey(hash), metas) } // SetMemCapacity sets the memory capacity for the cache. @@ -187,6 +212,14 @@ func (c *bindCache) SetMemCapacity(capacity int64) { c.memCapacity = capacity } +// GetMemUsage get the memory Usage for the cache. +// The function is thread-safe. +func (c *bindCache) GetMemUsage() int64 { + c.lock.Lock() + defer c.lock.Unlock() + return c.memTracker.BytesConsumed() +} + // GetMemCapacity get the memory capacity for the cache. // The function is thread-safe. func (c *bindCache) GetMemCapacity() int64 { @@ -197,17 +230,22 @@ func (c *bindCache) GetMemCapacity() int64 { // Copy copies a new bindCache from the origin cache. // The function is thread-safe. -func (c *bindCache) Copy() *bindCache { +func (c *bindCache) Copy() (newCache *bindCache, err error) { c.lock.Lock() defer c.lock.Unlock() - newCache := newBindCache() + newCache = newBindCache() + if c.memTracker.BytesConsumed() > newCache.GetMemCapacity() { + err = errors.New("The memory usage of all available bindings exceeds the cache's mem quota. As a result, all available bindings cannot be held on the cache. Please increase the value of the system variable 'tidb_mem_quota_binding_cache' and execute 'admin reload bindings' to ensure that all bindings exist in the cache and can be used normally") + } keys := c.cache.Keys() for _, key := range keys { cacheKey := key.(bindCacheKey) v := c.get(cacheKey) bindRecords := make([]*BindRecord, len(v)) copy(bindRecords, v) - newCache.set(cacheKey, bindRecords) + // The memory usage of cache has been handled at the beginning of this function. + // So we don't need to handle the return value here. + _, _ = newCache.set(cacheKey, bindRecords) } - return newCache + return newCache, err } diff --git a/bindinfo/bind_cache_test.go b/bindinfo/bind_cache_test.go index be5b33dc07321..7234038f40acf 100644 --- a/bindinfo/bind_cache_test.go +++ b/bindinfo/bind_cache_test.go @@ -25,39 +25,55 @@ import ( ) func TestBindCache(t *testing.T) { - variable.MemQuotaBindCache.Store(100) + variable.MemQuotaBindingCache.Store(200) bindCache := newBindCache() value := make([][]*BindRecord, 3) key := make([]bindCacheKey, 3) + var bigKey string for i := 0; i < 3; i++ { cacheKey := strings.Repeat(strconv.Itoa(i), 50) key[i] = bindCacheKey(hack.Slice(cacheKey)) record := &BindRecord{OriginalSQL: cacheKey, Db: ""} value[i] = []*BindRecord{record} + bigKey += cacheKey require.Equal(t, int64(100), calcBindCacheKVMem(key[i], value[i])) } - ok := bindCache.set(key[0], value[0]) + ok, err := bindCache.set(key[0], value[0]) require.True(t, ok) + require.Nil(t, err) result := bindCache.get(key[0]) require.NotNil(t, result) - ok = bindCache.set(key[1], value[1]) + ok, err = bindCache.set(key[1], value[1]) require.True(t, ok) + require.Nil(t, err) result = bindCache.get(key[1]) require.NotNil(t, result) - ok = bindCache.set(key[2], value[2]) + ok, err = bindCache.set(key[2], value[2]) require.True(t, ok) + require.NotNil(t, err) result = bindCache.get(key[2]) require.NotNil(t, result) - // Both key[0] and key[1] are not in the cache + // key[0] is not in the cache result = bindCache.get(key[0]) require.Nil(t, result) + // key[1] is still in the cache result = bindCache.get(key[1]) + require.NotNil(t, result) + + bigBindCacheKey := bindCacheKey(hack.Slice(bigKey)) + bigRecord := &BindRecord{OriginalSQL: bigKey, Db: ""} + bigBindCacheValue := []*BindRecord{bigRecord} + require.Equal(t, int64(300), calcBindCacheKVMem(bigBindCacheKey, bigBindCacheValue)) + ok, err = bindCache.set(bigBindCacheKey, bigBindCacheValue) + require.False(t, ok) + require.NotNil(t, err) + result = bindCache.get(bigBindCacheKey) require.Nil(t, result) } diff --git a/bindinfo/bind_record.go b/bindinfo/bind_record.go index 8d8662c5b7466..bdb8301befb0f 100644 --- a/bindinfo/bind_record.go +++ b/bindinfo/bind_record.go @@ -27,7 +27,15 @@ import ( ) const ( + // Enabled is the bind info's in enabled status. + // It is the same as the previous 'Using' status. + // Only use 'Enabled' status in the future, not the 'Using' status. + // The 'Using' status is preserved for compatibility. + Enabled = "enabled" + // Disabled is the bind info's in disabled status. + Disabled = "disabled" // Using is the bind info's in use status. + // The 'Using' status is preserved for compatibility. Using = "using" // deleted is the bind info's deleted status. deleted = "deleted" @@ -53,7 +61,7 @@ type Binding struct { BindSQL string // Status represents the status of the binding. It can only be one of the following values: // 1. deleted: BindRecord is deleted, can not be used anymore. - // 2. using: Binding is in the normal active mode. + // 2. enabled, using: Binding is in the normal active mode. Status string CreateTime types.Time UpdateTime types.Time @@ -74,6 +82,18 @@ func (b *Binding) isSame(rb *Binding) bool { return b.BindSQL == rb.BindSQL } +// IsBindingEnabled returns whether the binding is enabled. +func (b *Binding) IsBindingEnabled() bool { + return b.Status == Enabled || b.Status == Using +} + +// IsBindingAvailable returns whether the binding is available. +// The available means the binding can be used or can be converted into a usable status. +// It includes the 'Enabled', 'Using' and 'Disabled' status. +func (b *Binding) IsBindingAvailable() bool { + return b.IsBindingEnabled() || b.Status == Disabled +} + // SinceUpdateTime returns the duration since last update time. Export for test. func (b *Binding) SinceUpdateTime() (time.Duration, error) { updateTime, err := b.UpdateTime.GoTime(time.Local) @@ -91,21 +111,33 @@ type BindRecord struct { Bindings []Binding } -// HasUsingBinding checks if there are any using bindings in bind record. -func (br *BindRecord) HasUsingBinding() bool { +// HasEnabledBinding checks if there are any enabled bindings in bind record. +func (br *BindRecord) HasEnabledBinding() bool { + for _, binding := range br.Bindings { + if binding.IsBindingEnabled() { + return true + } + } + return false +} + +// HasAvailableBinding checks if there are any available bindings in bind record. +// The available means the binding can be used or can be converted into a usable status. +// It includes the 'Enabled', 'Using' and 'Disabled' status. +func (br *BindRecord) HasAvailableBinding() bool { for _, binding := range br.Bindings { - if binding.Status == Using { + if binding.IsBindingAvailable() { return true } } return false } -// FindUsingBinding gets the using binding. -// There is at most one binding that can be used now -func (br *BindRecord) FindUsingBinding() *Binding { +// FindEnabledBinding gets the enabled binding. +// There is at most one binding that can be used now. +func (br *BindRecord) FindEnabledBinding() *Binding { for _, binding := range br.Bindings { - if binding.Status == Using { + if binding.IsBindingEnabled() { return &binding } } @@ -242,7 +274,7 @@ func (br *BindRecord) size() float64 { } var statusIndex = map[string]int{ - Using: 0, + Enabled: 0, deleted: 1, Invalid: 2, } diff --git a/bindinfo/bind_test.go b/bindinfo/bind_test.go index 7ffb1eb95deff..7e003aa846b5a 100644 --- a/bindinfo/bind_test.go +++ b/bindinfo/bind_test.go @@ -406,7 +406,7 @@ func TestBindingSymbolList(t *testing.T) { bind := bindData.Bindings[0] require.Equal(t, "SELECT `a`,`b` FROM `test`.`t` USE INDEX (`ib`) WHERE `a` = 1 LIMIT 0,1", bind.BindSQL) require.Equal(t, "test", bindData.Db) - require.Equal(t, "using", bind.Status) + require.Equal(t, bindinfo.Enabled, bind.Status) require.NotNil(t, bind.Charset) require.NotNil(t, bind.Collation) require.NotNil(t, bind.CreateTime) @@ -498,7 +498,7 @@ func TestBestPlanInBaselines(t *testing.T) { bind := bindData.Bindings[0] require.Equal(t, "SELECT /*+ use_index(@`sel_1` `test`.`t` `ia`)*/ `a`,`b` FROM `test`.`t` WHERE `a` = 1 LIMIT 0,1", bind.BindSQL) require.Equal(t, "test", bindData.Db) - require.Equal(t, "using", bind.Status) + require.Equal(t, bindinfo.Enabled, bind.Status) tk.MustQuery("select a, b from t where a = 3 limit 1, 10") require.Equal(t, "t:ia", tk.Session().GetSessionVars().StmtCtx.IndexNames[0]) @@ -532,7 +532,7 @@ func TestErrorBind(t *testing.T) { bind := bindData.Bindings[0] require.Equal(t, "SELECT * FROM `test`.`t` USE INDEX (`index_t`) WHERE `i` > 100", bind.BindSQL) require.Equal(t, "test", bindData.Db) - require.Equal(t, "using", bind.Status) + require.Equal(t, bindinfo.Enabled, bind.Status) require.NotNil(t, bind.Charset) require.NotNil(t, bind.Collation) require.NotNil(t, bind.CreateTime) @@ -651,7 +651,7 @@ func TestAddEvolveTasks(t *testing.T) { require.Len(t, rows, 2) require.Equal(t, "SELECT /*+ use_index(@`sel_1` `test`.`t` )*/ * FROM `test`.`t` WHERE `a` >= 4 AND `b` >= 1 AND `c` = 0", rows[0][1]) status := rows[0][3].(string) - require.True(t, status == "using" || status == "rejected") + require.True(t, status == bindinfo.Enabled || status == bindinfo.Rejected) } func TestRuntimeHintsInEvolveTasks(t *testing.T) { @@ -910,7 +910,7 @@ func TestNotEvolvePlanForReadStorageHint(t *testing.T) { // None evolve task, because of the origin binding is a read_from_storage binding. require.Len(t, rows, 1) require.Equal(t, "SELECT /*+ read_from_storage(tiflash[`t`])*/ * FROM `test`.`t` WHERE `a` >= 1 AND `b` >= 1", rows[0][1]) - require.Equal(t, "using", rows[0][3]) + require.Equal(t, bindinfo.Enabled, rows[0][3]) } func TestBindingWithIsolationRead(t *testing.T) { @@ -1038,6 +1038,10 @@ func TestSPMHitInfo(t *testing.T) { require.True(t, tk.HasPlan("SELECT * from t1,t2 where t1.id = t2.id", "MergeJoin")) tk.MustExec("SELECT * from t1,t2 where t1.id = t2.id") tk.MustQuery(`select @@last_plan_from_binding;`).Check(testkit.Rows("1")) + tk.MustExec("set binding disabled for SELECT * from t1,t2 where t1.id = t2.id") + tk.MustExec("SELECT * from t1,t2 where t1.id = t2.id") + tk.MustQuery(`select @@last_plan_from_binding;`).Check(testkit.Rows("0")) + tk.MustExec("drop global binding for SELECT * from t1,t2 where t1.id = t2.id") } @@ -1055,23 +1059,23 @@ func TestReCreateBind(t *testing.T) { tk.MustExec("create global binding for select * from t using select * from t") tk.MustQuery("select original_sql, status from mysql.bind_info where source != 'builtin';").Check(testkit.Rows( - "select * from `test` . `t` using", + "select * from `test` . `t` enabled", )) rows := tk.MustQuery("show global bindings").Rows() require.Len(t, rows, 1) require.Equal(t, "select * from `test` . `t`", rows[0][0]) - require.Equal(t, "using", rows[0][3]) + require.Equal(t, bindinfo.Enabled, rows[0][3]) tk.MustExec("create global binding for select * from t using select * from t") rows = tk.MustQuery("show global bindings").Rows() require.Len(t, rows, 1) require.Equal(t, "select * from `test` . `t`", rows[0][0]) - require.Equal(t, "using", rows[0][3]) + require.Equal(t, bindinfo.Enabled, rows[0][3]) rows = tk.MustQuery("select original_sql, status from mysql.bind_info where source != 'builtin';").Rows() require.Len(t, rows, 2) require.Equal(t, "deleted", rows[0][1]) - require.Equal(t, "using", rows[1][1]) + require.Equal(t, bindinfo.Enabled, rows[1][1]) } func TestExplainShowBindSQL(t *testing.T) { @@ -1165,6 +1169,9 @@ func TestSPMWithoutUseDatabase(t *testing.T) { require.True(t, tk1.MustUseIndex("select * from test.t", "a")) tk1.MustExec("select * from test.t") tk1.MustQuery(`select @@last_plan_from_binding;`).Check(testkit.Rows("1")) + tk1.MustExec("set binding disabled for select * from test.t") + tk1.MustExec("select * from test.t") + tk1.MustQuery(`select @@last_plan_from_binding;`).Check(testkit.Rows("0")) } func TestBindingWithoutCharset(t *testing.T) { @@ -1218,9 +1225,9 @@ func TestGCBindRecord(t *testing.T) { rows := tk.MustQuery("show global bindings").Rows() require.Len(t, rows, 1) require.Equal(t, "select * from `test` . `t` where `a` = ?", rows[0][0]) - require.Equal(t, "using", rows[0][3]) + require.Equal(t, bindinfo.Enabled, rows[0][3]) tk.MustQuery("select status from mysql.bind_info where original_sql = 'select * from `test` . `t` where `a` = ?'").Check(testkit.Rows( - "using", + bindinfo.Enabled, )) h := dom.BindHandle() @@ -1229,9 +1236,9 @@ func TestGCBindRecord(t *testing.T) { rows = tk.MustQuery("show global bindings").Rows() require.Len(t, rows, 1) require.Equal(t, "select * from `test` . `t` where `a` = ?", rows[0][0]) - require.Equal(t, "using", rows[0][3]) + require.Equal(t, bindinfo.Enabled, rows[0][3]) tk.MustQuery("select status from mysql.bind_info where original_sql = 'select * from `test` . `t` where `a` = ?'").Check(testkit.Rows( - "using", + bindinfo.Enabled, )) tk.MustExec("drop global binding for select * from t where a = 1") diff --git a/bindinfo/capture_test.go b/bindinfo/capture_test.go index e86157a9191d2..7ebb419a8adaf 100644 --- a/bindinfo/capture_test.go +++ b/bindinfo/capture_test.go @@ -16,6 +16,7 @@ package bindinfo_test import ( "fmt" + "strings" "testing" "github.com/pingcap/tidb/bindinfo" @@ -119,6 +120,66 @@ func TestCapturePlanBaseline(t *testing.T) { require.Equal(t, "SELECT /*+ use_index(@`sel_1` `test`.`t` )*/ * FROM `test`.`t` WHERE `a` > 10", rows[0][1]) } +func TestCapturePlanBaseline4DisabledStatus(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + + utilCleanBindingEnv(tk, dom) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec("SET GLOBAL tidb_capture_plan_baselines = on") + defer func() { + tk.MustExec("SET GLOBAL tidb_capture_plan_baselines = off") + }() + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, index idx_a(a))") + dom.BindHandle().CaptureBaselines() + tk.MustQuery("show global bindings").Check(testkit.Rows()) + tk.MustExec("select /*+ USE_INDEX(t, idx_a) */ * from t where a > 10") + tk.MustExec("select /*+ USE_INDEX(t, idx_a) */ * from t where a > 10") + tk.MustExec("admin capture bindings") + rows := tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 0) + + require.True(t, tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil)) + tk.MustExec("select * from t where a > 10") + tk.MustExec("select * from t where a > 10") + tk.MustExec("admin capture bindings") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Enabled, rows[0][3]) + require.Equal(t, bindinfo.Capture, rows[0][8]) + + tk.MustExec("select * from t where a > 10") + tk.MustQuery("select @@last_plan_from_binding").Check(testkit.Rows("1")) + + tk.MustExec("set binding disabled for select * from t where a > 10") + + tk.MustExec("select * from t where a > 10") + tk.MustQuery("select @@last_plan_from_binding").Check(testkit.Rows("0")) + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Disabled, rows[0][3]) + + tk.MustExec("select * from t where a > 10") + tk.MustExec("select * from t where a > 10") + tk.MustExec("admin capture bindings") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Disabled, rows[0][3]) + + tk.MustExec("select * from t where a > 10") + tk.MustQuery("select @@last_plan_from_binding").Check(testkit.Rows("0")) + + tk.MustExec("drop global binding for select * from t where a > 10") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 0) + + utilCleanBindingEnv(tk, dom) +} + func TestCaptureDBCaseSensitivity(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -166,7 +227,7 @@ func TestCaptureBaselinesDefaultDB(t *testing.T) { require.Len(t, rows, 1) // Default DB should be "" when all columns have explicit database name. require.Equal(t, "", rows[0][2]) - require.Equal(t, "using", rows[0][3]) + require.Equal(t, bindinfo.Enabled, rows[0][3]) tk.MustExec("use spm") tk.MustExec("select * from spm.t where a > 10") // Should use TableScan because of the "ignore index" binding. @@ -344,7 +405,7 @@ func TestConcurrentCapture(t *testing.T) { // Simulate an existing binding generated by concurrent CREATE BINDING, which has not been synchronized to current tidb-server yet. // Actually, it is more common to be generated by concurrent baseline capture, I use Manual just for simpler test verification. - tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t`', 'select * from `test` . `t`', '', 'using', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + + tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t`', 'select * from `test` . `t`', '', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + bindinfo.Manual + "')") tk.MustQuery("select original_sql, source from mysql.bind_info where source != 'builtin'").Check(testkit.Rows( "select * from `test` . `t` manual", @@ -359,7 +420,7 @@ func TestConcurrentCapture(t *testing.T) { tk.MustExec("admin capture bindings") tk.MustQuery("select original_sql, source, status from mysql.bind_info where source != 'builtin'").Check(testkit.Rows( "select * from `test` . `t` manual deleted", - "select * from `test` . `t` capture using", + "select * from `test` . `t` capture enabled", )) } @@ -460,7 +521,7 @@ func TestIssue20417(t *testing.T) { require.Equal(t, "select * from `test` . `t` where `c` = ?", rows[0][0]) require.Equal(t, "SELECT /*+ use_index(@`sel_1` `test`.`t` `idxc`)*/ * FROM `test`.`t` WHERE `c` = 3924541", rows[0][1]) status := rows[0][3].(string) - require.True(t, status == "using" || status == "rejected") + require.True(t, status == bindinfo.Enabled || status == bindinfo.Rejected) tk.MustExec("set @@tidb_evolve_plan_baselines=0") } @@ -611,6 +672,144 @@ func TestCaptureUserFilter(t *testing.T) { require.Len(t, rows, 0) // filtered by the table filter } +func TestCaptureTableFilterValid(t *testing.T) { + type matchCase struct { + table string + matched bool + } + type filterCase struct { + filter string + valid bool + mcases []matchCase + } + filterCases := []filterCase{ + {"*.*", true, []matchCase{{"db.t", true}}}, + {"***.***", true, []matchCase{{"db.t", true}}}, + {"d*.*", true, []matchCase{{"db.t", true}}}, + {"*.t", true, []matchCase{{"db.t", true}}}, + {"?.t*", true, []matchCase{{"d.t", true}, {"d.tb", true}, {"db.t", false}}}, + {"db.t[1-3]", true, []matchCase{{"db.t1", true}, {"db.t2", true}, {"db.t4", false}}}, + {"!db.table", false, nil}, + {"@db.table", false, nil}, + {"table", false, nil}, + {"", false, nil}, + {"\t ", false, nil}, + } + for _, fc := range filterCases { + f, valid := bindinfo.ParseCaptureTableFilter(fc.filter) + require.Equal(t, fc.valid, valid) + if valid { + for _, mc := range fc.mcases { + tmp := strings.Split(mc.table, ".") + require.Equal(t, mc.matched, f.MatchTable(tmp[0], tmp[1])) + } + } + } +} + +func TestCaptureWildcardFilter(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec("SET GLOBAL tidb_capture_plan_baselines = on") + defer func() { + tk.MustExec("SET GLOBAL tidb_capture_plan_baselines = off") + }() + + require.True(t, tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil)) + dbs := []string{"db11", "db12", "db2"} + tbls := []string{"t11", "t12", "t2"} + for _, db := range dbs { + tk.MustExec(fmt.Sprintf(`drop database if exists %v`, db)) + tk.MustExec(fmt.Sprintf(`create database %v`, db)) + tk.MustExec(fmt.Sprintf(`use %v`, db)) + for _, tbl := range tbls { + tk.MustExec(fmt.Sprintf(`create table %v(a int)`, tbl)) + } + } + mustExecTwice := func() { + for _, db := range dbs { + for _, tbl := range tbls { + tk.MustExec(fmt.Sprintf(`select * from %v.%v where a>10`, db, tbl)) + tk.MustExec(fmt.Sprintf(`select * from %v.%v where a>10`, db, tbl)) + } + } + } + checkBindings := func(dbTbls ...string) { + m := make(map[string]bool) // map[query]existed + for _, dbTbl := range dbTbls { + tmp := strings.Split(dbTbl, ".") + q := fmt.Sprintf("select * from `%v` . `%v` where `a` > ?", tmp[0], tmp[1]) + m[q] = false + } + + tk.MustExec("admin capture bindings") + rows := tk.MustQuery("show global bindings").Sort().Rows() + require.Len(t, rows, len(dbTbls)) + for _, r := range rows { + q := r[0].(string) + if _, exist := m[q]; !exist { // encounter an unexpected binding + t.Fatalf("unexpected binding %v", q) + } + m[q] = true + } + for q, exist := range m { + if !exist { // a expected binding is not existed + t.Fatalf("missed binding %v", q) + } + } + } + + utilCleanBindingEnv(tk, dom) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec(`insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('table', 'db11.t1*')`) + mustExecTwice() + checkBindings("db11.t2", "db12.t11", "db12.t12", "db12.t2", "db2.t11", "db2.t12", "db2.t2") // db11.t11 and db11.t12 are filtered + + utilCleanBindingEnv(tk, dom) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec("delete from mysql.capture_plan_baselines_blacklist") + tk.MustExec(`insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('table', 'db1*.t11')`) + mustExecTwice() + checkBindings("db11.t12", "db11.t2", "db12.t12", "db12.t2", "db2.t11", "db2.t12", "db2.t2") // db11.t11 and db12.t11 are filtered + + utilCleanBindingEnv(tk, dom) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec("delete from mysql.capture_plan_baselines_blacklist") + tk.MustExec(`insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('table', 'db1*.t1*')`) + mustExecTwice() + checkBindings("db11.t2", "db12.t2", "db2.t11", "db2.t12", "db2.t2") // db11.t11 / db12.t11 / db11.t12 / db12.t12 are filtered + + utilCleanBindingEnv(tk, dom) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec("delete from mysql.capture_plan_baselines_blacklist") + tk.MustExec(`insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('table', 'db1*.*')`) + mustExecTwice() + checkBindings("db2.t11", "db2.t12", "db2.t2") // db11.* / db12.* are filtered + + utilCleanBindingEnv(tk, dom) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec("delete from mysql.capture_plan_baselines_blacklist") + tk.MustExec(`insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('table', '*.t1*')`) + mustExecTwice() + checkBindings("db11.t2", "db12.t2", "db2.t2") // *.t11 and *.t12 are filtered + + utilCleanBindingEnv(tk, dom) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec("delete from mysql.capture_plan_baselines_blacklist") + tk.MustExec(`insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('table', 'db*.t*')`) + mustExecTwice() + checkBindings() // all are filtered + + utilCleanBindingEnv(tk, dom) + stmtsummary.StmtSummaryByDigestMap.Clear() + tk.MustExec("delete from mysql.capture_plan_baselines_blacklist") + mustExecTwice() + checkBindings("db11.t11", "db11.t12", "db11.t2", "db12.t11", "db12.t12", "db12.t2", "db2.t11", "db2.t12", "db2.t2") // no filter, all can be captured +} + func TestCaptureFilter(t *testing.T) { store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() @@ -671,7 +870,7 @@ func TestCaptureFilter(t *testing.T) { // Valid database filter. utilCleanBindingEnv(tk, dom) stmtsummary.StmtSummaryByDigestMap.Clear() - tk.MustExec("insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('db', 'mysql')") + tk.MustExec("insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('table', 'mysql.*')") tk.MustExec("select * from mysql.capture_plan_baselines_blacklist") tk.MustExec("select * from mysql.capture_plan_baselines_blacklist") tk.MustExec("admin capture bindings") @@ -754,7 +953,7 @@ func TestCaptureFilter(t *testing.T) { utilCleanBindingEnv(tk, dom) stmtsummary.StmtSummaryByDigestMap.Clear() - tk.MustExec("insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('Db', 'mySQl')") + tk.MustExec("insert into mysql.capture_plan_baselines_blacklist(filter_type, filter_value) values('table', 'mySQl.*')") tk.MustExec("select * from mysql.capture_plan_baselines_blacklist") tk.MustExec("select * from mysql.capture_plan_baselines_blacklist") tk.MustExec("admin capture bindings") @@ -767,3 +966,66 @@ func TestCaptureFilter(t *testing.T) { require.Len(t, rows, 1) require.Equal(t, "select * from `mysql` . `capture_plan_baselines_blacklist`", rows[0][0]) } + +func TestCaptureHints(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("SET GLOBAL tidb_capture_plan_baselines = on") + defer func() { + tk.MustExec("SET GLOBAL tidb_capture_plan_baselines = off") + }() + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(pk int primary key, a int, b int, key(a), key(b))") + require.True(t, tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil)) + + captureCases := []struct { + query string + hint string + }{ + // agg hints + {"select /*+ hash_agg() */ count(1) from t", "hash_agg"}, + {"select /*+ stream_agg() */ count(1) from t", "stream_agg"}, + // join hints + {"select /*+ merge_join(t1, t2) */ * from t t1, t t2 where t1.a=t2.a", "merge_join"}, + {"select /*+ tidb_smj(t1, t2) */ * from t t1, t t2 where t1.a=t2.a", "merge_join"}, + {"select /*+ hash_join(t1, t2) */ * from t t1, t t2 where t1.a=t2.a", "hash_join"}, + {"select /*+ tidb_hj(t1, t2) */ * from t t1, t t2 where t1.a=t2.a", "hash_join"}, + {"select /*+ inl_join(t1, t2) */ * from t t1, t t2 where t1.a=t2.a", "inl_join"}, + {"select /*+ tidb_inlj(t1, t2) */ * from t t1, t t2 where t1.a=t2.a", "inl_join"}, + {"select /*+ inl_hash_join(t1, t2) */ * from t t1, t t2 where t1.a=t2.a", "inl_hash_join"}, + // index hints + {"select * from t use index(primary)", "use_index(@`sel_1` `test`.`t` )"}, + {"select /*+ use_index(primary) */ * from t", "use_index(@`sel_1` `test`.`t` )"}, + {"select * from t use index(a)", "use_index(@`sel_1` `test`.`t` `a`)"}, + {"select /*+ use_index(a) */ * from t use index(a)", "use_index(@`sel_1` `test`.`t` `a`)"}, + {"select * from t use index(b)", "use_index(@`sel_1` `test`.`t` `b`)"}, + {"select /*+ use_index(b) */ * from t use index(b)", "use_index(@`sel_1` `test`.`t` `b`)"}, + {"select /*+ use_index_merge(t, a, b) */ a, b from t where a=1 or b=1", "use_index_merge(@`sel_1` `t` `a`, `b`)"}, + {"select /*+ ignore_index(t, a) */ * from t where a=1", "ignore_index(`t` `a`)"}, + // push-down hints + {"select /*+ limit_to_cop() */ * from t limit 10", "limit_to_cop()"}, + {"select /*+ agg_to_cop() */ a, count(*) from t group by a", "agg_to_cop()"}, + // index-merge hints + {"select /*+ no_index_merge() */ a, b from t where a>1 or b>1", "no_index_merge()"}, + {"select /*+ use_index_merge(t, a, b) */ a, b from t where a>1 or b>1", "use_index_merge(@`sel_1` `t` `a`, `b`)"}, + // runtime hints + {"select /*+ memory_quota(1024 MB) */ * from t", "memory_quota(1024 mb)"}, + {"select /*+ max_execution_time(1000) */ * from t", "max_execution_time(1000)"}, + // storage hints + {"select /*+ read_from_storage(tikv[t]) */ * from t", "read_from_storage(tikv[`t`])"}, + // others + {"select /*+ use_toja(true) */ t1.a, t1.b from t t1 where t1.a in (select t2.a from t t2)", "use_toja(true)"}, + } + for _, capCase := range captureCases { + stmtsummary.StmtSummaryByDigestMap.Clear() + utilCleanBindingEnv(tk, dom) + tk.MustExec(capCase.query) + tk.MustExec(capCase.query) + tk.MustExec("admin capture bindings") + res := tk.MustQuery(`show global bindings`).Rows() + require.Equal(t, len(res), 1) // this query is captured, and + require.True(t, strings.Contains(res[0][1].(string), capCase.hint)) // the binding contains the expected hint + } +} diff --git a/bindinfo/handle.go b/bindinfo/handle.go index 5110fb6e734d6..dc25baff5250e 100644 --- a/bindinfo/handle.go +++ b/bindinfo/handle.go @@ -41,6 +41,7 @@ import ( utilparser "github.com/pingcap/tidb/util/parser" "github.com/pingcap/tidb/util/sqlexec" "github.com/pingcap/tidb/util/stmtsummary" + tablefilter "github.com/pingcap/tidb/util/table-filter" "github.com/pingcap/tidb/util/timeutil" "go.uber.org/zap" ) @@ -142,7 +143,7 @@ func (h *BindHandle) Update(fullLoad bool) (err error) { return err } - newCache := h.bindInfo.Value.Load().(*bindCache).Copy() + newCache, memExceededErr := h.bindInfo.Value.Load().(*bindCache).Copy() defer func() { h.bindInfo.lastUpdateTime = lastUpdateTime h.bindInfo.Value.Store(newCache) @@ -150,6 +151,10 @@ func (h *BindHandle) Update(fullLoad bool) (err error) { }() for _, row := range rows { + // If the memory usage of the binding_cache exceeds its capacity, we will break and do not handle. + if memExceededErr != nil { + break + } // Skip the builtin record which is designed for binding synchronization. if row.GetString(0) == BuiltinPseudoSQL4BindLock { continue @@ -170,12 +175,21 @@ func (h *BindHandle) Update(fullLoad bool) (err error) { oldRecord := newCache.GetBindRecord(hash, meta.OriginalSQL, meta.Db) newRecord := merge(oldRecord, meta).removeDeletedBindings() if len(newRecord.Bindings) > 0 { - newCache.SetBindRecord(hash, newRecord) + err = newCache.SetBindRecord(hash, newRecord) + if err != nil { + memExceededErr = err + } } else { newCache.RemoveBindRecord(hash, newRecord) } updateMetrics(metrics.ScopeGlobal, oldRecord, newCache.GetBindRecord(hash, meta.OriginalSQL, meta.Db), true) } + if memExceededErr != nil { + // When the memory capacity of bing_cache is not enough, + // there will be some memory-related errors in multiple places. + // Only needs to be handled once. + logutil.BgLogger().Warn("[sql-bind] BindHandle.Update", zap.Error(memExceededErr)) + } return nil } @@ -266,7 +280,7 @@ func (h *BindHandle) AddBindRecord(sctx sessionctx.Context, record *BindRecord) if oldRecord != nil { binding := oldRecord.FindBinding(record.Bindings[0].ID) if binding != nil { - // There is already a binding with status `Using`, `PendingVerify` or `Rejected`, we could directly cancel the job. + // There is already a binding with status `Enabled`, `Disabled`, `PendingVerify` or `Rejected`, we could directly cancel the job. if record.Bindings[0].Status == PendingVerify { return nil } @@ -394,6 +408,92 @@ func (h *BindHandle) DropBindRecord(originalSQL, db string, binding *Binding) (e return err } +// SetBindRecordStatus set a BindRecord's status to the storage and bind cache. +func (h *BindHandle) SetBindRecordStatus(originalSQL string, binding *Binding, newStatus string) (ok bool, err error) { + h.bindInfo.Lock() + h.sctx.Lock() + defer func() { + h.sctx.Unlock() + h.bindInfo.Unlock() + }() + exec, _ := h.sctx.Context.(sqlexec.SQLExecutor) + _, err = exec.ExecuteInternal(context.TODO(), "BEGIN PESSIMISTIC") + if err != nil { + return + } + var ( + updateTs types.Time + oldStatus0, oldStatus1 string + affectRows int + ) + if newStatus == Disabled { + // For compatibility reasons, when we need to 'set binding disabled for ', + // we need to consider both the 'enabled' and 'using' status. + oldStatus0 = Using + oldStatus1 = Enabled + } else if newStatus == Enabled { + // In order to unify the code, two identical old statuses are set. + oldStatus0 = Disabled + oldStatus1 = Disabled + } + defer func() { + if err != nil { + _, err1 := exec.ExecuteInternal(context.TODO(), "ROLLBACK") + terror.Log(err1) + return + } + + _, err = exec.ExecuteInternal(context.TODO(), "COMMIT") + if err != nil { + return + } + if affectRows == 0 { + return + } + + // The set binding status operation is success. + ok = true + record := &BindRecord{OriginalSQL: originalSQL} + sqlDigest := parser.DigestNormalized(record.OriginalSQL) + oldRecord := h.GetBindRecord(sqlDigest.String(), originalSQL, "") + setBindingStatusInCacheSucc := false + if oldRecord != nil && len(oldRecord.Bindings) > 0 { + record.Bindings = make([]Binding, len(oldRecord.Bindings)) + copy(record.Bindings, oldRecord.Bindings) + for ind, oldBinding := range record.Bindings { + if oldBinding.Status == oldStatus0 || oldBinding.Status == oldStatus1 { + if binding == nil || (binding != nil && oldBinding.isSame(binding)) { + setBindingStatusInCacheSucc = true + record.Bindings[ind].Status = newStatus + record.Bindings[ind].UpdateTime = updateTs + } + } + } + } + if setBindingStatusInCacheSucc { + h.setBindRecord(sqlDigest.String(), record) + } + }() + + // Lock mysql.bind_info to synchronize with SetBindingStatus on other tidb instances. + if err = h.lockBindInfoTable(); err != nil { + return + } + + updateTs = types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, 3) + updateTsStr := updateTs.String() + + if binding == nil { + _, err = exec.ExecuteInternal(context.TODO(), `UPDATE mysql.bind_info SET status = %?, update_time = %? WHERE original_sql = %? AND update_time < %? AND status IN (%?, %?)`, + newStatus, updateTsStr, originalSQL, updateTsStr, oldStatus0, oldStatus1) + } else { + _, err = exec.ExecuteInternal(context.TODO(), `UPDATE mysql.bind_info SET status = %?, update_time = %? WHERE original_sql = %? AND update_time < %? AND bind_sql = %? AND status IN (%?, %?)`, + newStatus, updateTsStr, originalSQL, updateTsStr, binding.BindSQL, oldStatus0, oldStatus1) + } + affectRows = int(h.sctx.Context.GetSessionVars().StmtCtx.AffectedRows()) + return +} + // GCBindRecord physically removes the deleted bind records in mysql.bind_info. func (h *BindHandle) GCBindRecord() (err error) { h.bindInfo.Lock() @@ -537,11 +637,26 @@ func (h *BindHandle) SetBindCacheCapacity(capacity int64) { h.bindInfo.Load().(*bindCache).SetMemCapacity(capacity) } +// GetMemUsage returns the memory usage for the bind cache. +func (h *BindHandle) GetMemUsage() (memUsage int64) { + return h.bindInfo.Load().(*bindCache).GetMemUsage() +} + +// GetMemCapacity returns the memory capacity for the bind cache. +func (h *BindHandle) GetMemCapacity() (memCapacity int64) { + return h.bindInfo.Load().(*bindCache).GetMemCapacity() +} + // newBindRecord builds BindRecord from a tuple in storage. func (h *BindHandle) newBindRecord(row chunk.Row) (string, *BindRecord, error) { + status := row.GetString(3) + // For compatibility, the 'Using' status binding will be converted to the 'Enabled' status binding. + if status == Using { + status = Enabled + } hint := Binding{ BindSQL: row.GetString(1), - Status: row.GetString(3), + Status: status, CreateTime: row.GetTime(4), UpdateTime: row.GetTime(5), Charset: row.GetString(6), @@ -564,27 +679,43 @@ func (h *BindHandle) newBindRecord(row chunk.Row) (string, *BindRecord, error) { // setBindRecord sets the BindRecord to the cache, if there already exists a BindRecord, // it will be overridden. func (h *BindHandle) setBindRecord(hash string, meta *BindRecord) { - newCache := h.bindInfo.Value.Load().(*bindCache).Copy() + newCache, err0 := h.bindInfo.Value.Load().(*bindCache).Copy() + if err0 != nil { + logutil.BgLogger().Warn("[sql-bind] BindHandle.setBindRecord", zap.Error(err0)) + } oldRecord := newCache.GetBindRecord(hash, meta.OriginalSQL, meta.Db) - newCache.SetBindRecord(hash, meta) + err1 := newCache.SetBindRecord(hash, meta) + if err1 != nil && err0 == nil { + logutil.BgLogger().Warn("[sql-bind] BindHandle.setBindRecord", zap.Error(err1)) + } h.bindInfo.Value.Store(newCache) updateMetrics(metrics.ScopeGlobal, oldRecord, meta, false) } -// appendBindRecord addes the BindRecord to the cache, all the stale BindRecords are +// appendBindRecord adds the BindRecord to the cache, all the stale BindRecords are // removed from the cache after this operation. func (h *BindHandle) appendBindRecord(hash string, meta *BindRecord) { - newCache := h.bindInfo.Value.Load().(*bindCache).Copy() + newCache, err0 := h.bindInfo.Value.Load().(*bindCache).Copy() + if err0 != nil { + logutil.BgLogger().Warn("[sql-bind] BindHandle.appendBindRecord", zap.Error(err0)) + } oldRecord := newCache.GetBindRecord(hash, meta.OriginalSQL, meta.Db) newRecord := merge(oldRecord, meta) - newCache.SetBindRecord(hash, newRecord) + err1 := newCache.SetBindRecord(hash, newRecord) + if err1 != nil && err0 == nil { + // Only need to handle the error once. + logutil.BgLogger().Warn("[sql-bind] BindHandle.appendBindRecord", zap.Error(err1)) + } h.bindInfo.Value.Store(newCache) updateMetrics(metrics.ScopeGlobal, oldRecord, newRecord, false) } // removeBindRecord removes the BindRecord from the cache. func (h *BindHandle) removeBindRecord(hash string, meta *BindRecord) { - newCache := h.bindInfo.Value.Load().(*bindCache).Copy() + newCache, err := h.bindInfo.Value.Load().(*bindCache).Copy() + if err != nil { + logutil.BgLogger().Warn("[sql-bind] ", zap.Error(err)) + } oldRecord := newCache.GetBindRecord(hash, meta.OriginalSQL, meta.Db) newCache.RemoveBindRecord(hash, meta) h.bindInfo.Value.Store(newCache) @@ -600,9 +731,8 @@ func copyBindRecordUpdateMap(oldMap map[string]*bindRecordUpdate) map[string]*bi } type captureFilter struct { - dbs map[string]struct{} frequency int64 - tables map[stmtctx.TableEntry]struct{} + tables []tablefilter.Filter // `schema.table` users map[string]struct{} fail bool @@ -619,10 +749,10 @@ func (cf *captureFilter) Enter(in ast.Node) (out ast.Node, skipChildren bool) { if x.Schema.L == "" { tblEntry.DB = cf.currentDB } - if _, ok := cf.dbs[tblEntry.DB]; ok { - cf.fail = true - } else if _, ok := cf.tables[tblEntry]; ok { - cf.fail = true + for _, tableFilter := range cf.tables { + if tableFilter.MatchTable(tblEntry.DB, tblEntry.Table) { + cf.fail = true // some filter is matched + } } } return in, cf.fail @@ -633,14 +763,31 @@ func (cf *captureFilter) Leave(in ast.Node) (out ast.Node, ok bool) { } func (cf *captureFilter) isEmpty() bool { - return len(cf.dbs) == 0 && len(cf.tables) == 0 && len(cf.users) == 0 + return len(cf.tables) == 0 && len(cf.users) == 0 +} + +// ParseCaptureTableFilter checks whether this filter is valid and parses it. +func ParseCaptureTableFilter(tableFilter string) (f tablefilter.Filter, valid bool) { + // forbid wildcards '!' and '@' for safety, + // please see https://github.com/pingcap/tidb-tools/tree/master/pkg/table-filter for more details. + tableFilter = strings.TrimLeft(tableFilter, " \t") + if tableFilter == "" { + return nil, false + } + if tableFilter[0] == '!' || tableFilter[0] == '@' { + return nil, false + } + var err error + f, err = tablefilter.Parse([]string{tableFilter}) + if err != nil { + return nil, false + } + return f, true } func (h *BindHandle) extractCaptureFilterFromStorage() (filter *captureFilter) { filter = &captureFilter{ - dbs: make(map[string]struct{}), frequency: 1, - tables: make(map[stmtctx.TableEntry]struct{}), users: make(map[string]struct{}), } exec := h.sctx.Context.(sqlexec.RestrictedSQLExecutor) @@ -655,19 +802,13 @@ func (h *BindHandle) extractCaptureFilterFromStorage() (filter *captureFilter) { filterTp := strings.ToLower(row.GetString(0)) valStr := strings.ToLower(row.GetString(1)) switch filterTp { - case "db": - filter.dbs[valStr] = struct{}{} case "table": - strs := strings.Split(valStr, ".") - if len(strs) != 2 { - logutil.BgLogger().Warn("[sql-bind] failed to parse table name, ignore it", zap.String("filter_value", valStr)) + tfilter, valid := ParseCaptureTableFilter(valStr) + if !valid { + logutil.BgLogger().Warn("[sql-bind] capture table filter is invalid, ignore it", zap.String("filter_value", valStr)) continue } - tblEntry := stmtctx.TableEntry{ - DB: strs[0], - Table: strs[1], - } - filter.tables[tblEntry] = struct{}{} + filter.tables = append(filter.tables, tfilter) case "user": filter.users[valStr] = struct{}{} case "frequency": @@ -728,7 +869,7 @@ func (h *BindHandle) CaptureBaselines() { } dbName := utilparser.GetDefaultDB(stmt, bindableStmt.Schema) normalizedSQL, digest := parser.NormalizeDigest(utilparser.RestoreWithDefaultDB(stmt, dbName, bindableStmt.Query)) - if r := h.GetBindRecord(digest.String(), normalizedSQL, dbName); r != nil && r.HasUsingBinding() { + if r := h.GetBindRecord(digest.String(), normalizedSQL, dbName); r != nil && r.HasAvailableBinding() { continue } bindSQL := GenerateBindSQL(context.TODO(), stmt, bindableStmt.PlanHint, true, dbName) @@ -738,7 +879,7 @@ func (h *BindHandle) CaptureBaselines() { charset, collation := h.sctx.GetSessionVars().GetCharsetInfo() binding := Binding{ BindSQL: bindSQL, - Status: Using, + Status: Enabled, Charset: charset, Collation: collation, Source: Capture, @@ -1050,7 +1191,7 @@ func (h *BindHandle) HandleEvolvePlanTask(sctx sessionctx.Context, adminEvolve b zap.String("digestText", digestText), ) } else { - binding.Status = Using + binding.Status = Enabled } // We don't need to pass the `sctx` because the BindSQL has been validated already. return h.AddBindRecord(nil, &BindRecord{OriginalSQL: originalSQL, Db: db, Bindings: []Binding{binding}}) diff --git a/bindinfo/handle_test.go b/bindinfo/handle_test.go index ec6145d714301..10b401c2292d6 100644 --- a/bindinfo/handle_test.go +++ b/bindinfo/handle_test.go @@ -109,7 +109,7 @@ func TestBindingLastUpdateTimeWithInvalidBind(t *testing.T) { updateTime0 := rows0[0][1] require.Equal(t, updateTime0, "0000-00-00 00:00:00") - tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t`', 'select * from `test` . `t` use index(`idx`)', 'test', 'using', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + + tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t`', 'select * from `test` . `t` use index(`idx`)', 'test', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + bindinfo.Manual + "')") tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -137,7 +137,7 @@ func TestBindParse(t *testing.T) { originSQL := "select * from `test` . `t`" bindSQL := "select * from `test` . `t` use index(index_t)" defaultDb := "test" - status := "using" + status := bindinfo.Enabled charset := "utf8mb4" collation := "utf8mb4_bin" source := bindinfo.Manual @@ -156,7 +156,7 @@ func TestBindParse(t *testing.T) { bind := bindData.Bindings[0] require.Equal(t, "select * from `test` . `t` use index(index_t)", bind.BindSQL) require.Equal(t, "test", bindData.Db) - require.Equal(t, "using", bind.Status) + require.Equal(t, bindinfo.Enabled, bind.Status) require.Equal(t, "utf8mb4", bind.Charset) require.Equal(t, "utf8mb4_bin", bind.Collation) require.NotNil(t, bind.CreateTime) @@ -228,7 +228,7 @@ func TestEvolveInvalidBindings(t *testing.T) { tk.MustExec("insert into mysql.bind_info values('select * from test . t where a > ?', 'SELECT /*+ USE_INDEX(t,idx_a) */ * FROM test.t WHERE a > 10', 'test', 'rejected', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + bindinfo.Manual + "')") tk.MustQuery("select bind_sql, status from mysql.bind_info where source != 'builtin'").Sort().Check(testkit.Rows( - "SELECT /*+ USE_INDEX(`t` )*/ * FROM `test`.`t` WHERE `a` > 10 using", + "SELECT /*+ USE_INDEX(`t` )*/ * FROM `test`.`t` WHERE `a` > 10 enabled", "SELECT /*+ USE_INDEX(t,idx_a) */ * FROM test.t WHERE a > 10 rejected", )) // Reload cache from mysql.bind_info. @@ -240,13 +240,118 @@ func TestEvolveInvalidBindings(t *testing.T) { require.Nil(t, dom.BindHandle().Update(false)) rows := tk.MustQuery("show global bindings").Sort().Rows() require.Equal(t, 2, len(rows)) - // Make sure this "using" binding is not overrided. + // Make sure this "enabled" binding is not overrided. require.Equal(t, "SELECT /*+ USE_INDEX(`t` )*/ * FROM `test`.`t` WHERE `a` > 10", rows[0][1]) status := rows[0][3].(string) - require.True(t, status == "using") + require.True(t, status == bindinfo.Enabled) require.Equal(t, "SELECT /*+ USE_INDEX(t,idx_a) */ * FROM test.t WHERE a > 10", rows[1][1]) status = rows[1][3].(string) - require.True(t, status == "using" || status == "rejected") + require.True(t, status == bindinfo.Enabled || status == bindinfo.Rejected) +} + +func TestSetBindingStatus(t *testing.T) { + store, _, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, index idx_a(a))") + tk.MustQuery("show global bindings").Check(testkit.Rows()) + tk.MustExec("create global binding for select * from t where a > 10 using select /*+ USE_INDEX(t, idx_a) */ * from t where a > 10") + rows := tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Enabled, rows[0][3]) + tk.MustExec("select * from t where a > 10") + tk.MustQuery("select @@last_plan_from_binding").Check(testkit.Rows("1")) + + tk.MustExec("set binding disabled for select * from t where a > 10 using select * from t where a > 10") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1105 There are no bindings can be set the status. Please check the SQL text")) + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Enabled, rows[0][3]) + tk.MustExec("select * from t where a > 10") + tk.MustQuery("select @@last_plan_from_binding").Check(testkit.Rows("1")) + + tk.MustExec("set binding disabled for select * from t where a > 10") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Disabled, rows[0][3]) + tk.MustExec("select * from t where a > 10") + tk.MustQuery("select @@last_plan_from_binding").Check(testkit.Rows("0")) + + tk.MustExec("set binding enabled for select * from t where a > 10") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Enabled, rows[0][3]) + + tk.MustExec("set binding disabled for select * from t where a > 10") + tk.MustExec("create global binding for select * from t where a > 10 using select * from t where a > 10") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Enabled, rows[0][3]) + tk.MustExec("select * from t where a > 10") + tk.MustQuery("select @@last_plan_from_binding").Check(testkit.Rows("1")) + + tk.MustExec("set binding disabled for select * from t where a > 10 using select * from t where a > 10") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Disabled, rows[0][3]) + tk.MustExec("select * from t where a > 10") + tk.MustQuery("select @@last_plan_from_binding").Check(testkit.Rows("0")) + + tk.MustExec("set binding enabled for select * from t where a > 10 using select * from t where a > 10") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Enabled, rows[0][3]) + + tk.MustExec("set binding disabled for select * from t where a > 10 using select * from t where a > 10") + tk.MustExec("drop global binding for select * from t where a > 10 using select * from t where a > 10") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 0) +} + +func TestSetBindingStatusWithoutBindingInCache(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, index idx_a(a))") + utilCleanBindingEnv(tk, dom) + tk.MustQuery("show global bindings").Check(testkit.Rows()) + + // Simulate creating bindings on other machines + tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t` where `a` > ?', 'SELECT /*+ USE_INDEX(`t` `idx_a`)*/ * FROM `test`.`t` WHERE `a` > 10', 'test', 'deleted', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + + bindinfo.Manual + "')") + tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t` where `a` > ?', 'SELECT /*+ USE_INDEX(`t` `idx_a`)*/ * FROM `test`.`t` WHERE `a` > 10', 'test', 'enabled', '2000-01-02 09:00:00', '2000-01-02 09:00:00', '', '','" + + bindinfo.Manual + "')") + dom.BindHandle().Clear() + tk.MustExec("set binding disabled for select * from t where a > 10") + tk.MustExec("admin reload bindings") + rows := tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Disabled, rows[0][3]) + + // clear the mysql.bind_info + utilCleanBindingEnv(tk, dom) + + // Simulate creating bindings on other machines + tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t` where `a` > ?', 'SELECT * FROM `test`.`t` WHERE `a` > 10', 'test', 'deleted', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + + bindinfo.Manual + "')") + tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t` where `a` > ?', 'SELECT * FROM `test`.`t` WHERE `a` > 10', 'test', 'disabled', '2000-01-02 09:00:00', '2000-01-02 09:00:00', '', '','" + + bindinfo.Manual + "')") + dom.BindHandle().Clear() + tk.MustExec("set binding enabled for select * from t where a > 10") + tk.MustExec("admin reload bindings") + rows = tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + require.Equal(t, bindinfo.Enabled, rows[0][3]) + + utilCleanBindingEnv(tk, dom) } var testSQLs = []struct { @@ -265,7 +370,7 @@ var testSQLs = []struct { originSQL: "select * from `test` . `t` where `i` > ?", bindSQL: "SELECT * FROM `test`.`t` USE INDEX (`index_t`) WHERE `i` > 99", dropSQL: "binding for select * from t where i>100", - memoryUsage: float64(165), + memoryUsage: float64(167), }, { createSQL: "binding for select * from t union all select * from t using select * from t use index(index_t) union all select * from t use index()", @@ -274,7 +379,7 @@ var testSQLs = []struct { originSQL: "select * from `test` . `t` union all select * from `test` . `t`", bindSQL: "SELECT * FROM `test`.`t` USE INDEX (`index_t`) UNION ALL SELECT * FROM `test`.`t` USE INDEX ()", dropSQL: "binding for select * from t union all select * from t", - memoryUsage: float64(235), + memoryUsage: float64(237), }, { createSQL: "binding for (select * from t) union all (select * from t) using (select * from t use index(index_t)) union all (select * from t use index())", @@ -283,7 +388,7 @@ var testSQLs = []struct { originSQL: "( select * from `test` . `t` ) union all ( select * from `test` . `t` )", bindSQL: "(SELECT * FROM `test`.`t` USE INDEX (`index_t`)) UNION ALL (SELECT * FROM `test`.`t` USE INDEX ())", dropSQL: "binding for (select * from t) union all (select * from t)", - memoryUsage: float64(247), + memoryUsage: float64(249), }, { createSQL: "binding for select * from t intersect select * from t using select * from t use index(index_t) intersect select * from t use index()", @@ -292,7 +397,7 @@ var testSQLs = []struct { originSQL: "select * from `test` . `t` intersect select * from `test` . `t`", bindSQL: "SELECT * FROM `test`.`t` USE INDEX (`index_t`) INTERSECT SELECT * FROM `test`.`t` USE INDEX ()", dropSQL: "binding for select * from t intersect select * from t", - memoryUsage: float64(235), + memoryUsage: float64(237), }, { createSQL: "binding for select * from t except select * from t using select * from t use index(index_t) except select * from t use index()", @@ -301,7 +406,7 @@ var testSQLs = []struct { originSQL: "select * from `test` . `t` except select * from `test` . `t`", bindSQL: "SELECT * FROM `test`.`t` USE INDEX (`index_t`) EXCEPT SELECT * FROM `test`.`t` USE INDEX ()", dropSQL: "binding for select * from t except select * from t", - memoryUsage: float64(229), + memoryUsage: float64(231), }, { createSQL: "binding for select * from t using select /*+ use_index(t,index_t)*/ * from t", @@ -310,7 +415,7 @@ var testSQLs = []struct { originSQL: "select * from `test` . `t`", bindSQL: "SELECT /*+ use_index(`t` `index_t`)*/ * FROM `test`.`t`", dropSQL: "binding for select * from t", - memoryUsage: float64(164), + memoryUsage: float64(166), }, { createSQL: "binding for delete from t where i = 1 using delete /*+ use_index(t,index_t) */ from t where i = 1", @@ -319,7 +424,7 @@ var testSQLs = []struct { originSQL: "delete from `test` . `t` where `i` = ?", bindSQL: "DELETE /*+ use_index(`t` `index_t`)*/ FROM `test`.`t` WHERE `i` = 1", dropSQL: "binding for delete from t where i = 1", - memoryUsage: float64(188), + memoryUsage: float64(190), }, { createSQL: "binding for delete t, t1 from t inner join t1 on t.s = t1.s where t.i = 1 using delete /*+ use_index(t,index_t), hash_join(t,t1) */ t, t1 from t inner join t1 on t.s = t1.s where t.i = 1", @@ -328,7 +433,7 @@ var testSQLs = []struct { originSQL: "delete `test` . `t` , `test` . `t1` from `test` . `t` join `test` . `t1` on `t` . `s` = `t1` . `s` where `t` . `i` = ?", bindSQL: "DELETE /*+ use_index(`t` `index_t`) hash_join(`t`, `t1`)*/ `test`.`t`,`test`.`t1` FROM `test`.`t` JOIN `test`.`t1` ON `t`.`s` = `t1`.`s` WHERE `t`.`i` = 1", dropSQL: "binding for delete t, t1 from t inner join t1 on t.s = t1.s where t.i = 1", - memoryUsage: float64(400), + memoryUsage: float64(402), }, { createSQL: "binding for update t set s = 'a' where i = 1 using update /*+ use_index(t,index_t) */ t set s = 'a' where i = 1", @@ -337,7 +442,7 @@ var testSQLs = []struct { originSQL: "update `test` . `t` set `s` = ? where `i` = ?", bindSQL: "UPDATE /*+ use_index(`t` `index_t`)*/ `test`.`t` SET `s`='a' WHERE `i` = 1", dropSQL: "binding for update t set s = 'a' where i = 1", - memoryUsage: float64(202), + memoryUsage: float64(204), }, { createSQL: "binding for update t, t1 set t.s = 'a' where t.i = t1.i using update /*+ inl_join(t1) */ t, t1 set t.s = 'a' where t.i = t1.i", @@ -346,7 +451,7 @@ var testSQLs = []struct { originSQL: "update ( `test` . `t` ) join `test` . `t1` set `t` . `s` = ? where `t` . `i` = `t1` . `i`", bindSQL: "UPDATE /*+ inl_join(`t1`)*/ (`test`.`t`) JOIN `test`.`t1` SET `t`.`s`='a' WHERE `t`.`i` = `t1`.`i`", dropSQL: "binding for update t, t1 set t.s = 'a' where t.i = t1.i", - memoryUsage: float64(260), + memoryUsage: float64(262), }, { createSQL: "binding for insert into t1 select * from t where t.i = 1 using insert into t1 select /*+ use_index(t,index_t) */ * from t where t.i = 1", @@ -355,7 +460,7 @@ var testSQLs = []struct { originSQL: "insert into `test` . `t1` select * from `test` . `t` where `t` . `i` = ?", bindSQL: "INSERT INTO `test`.`t1` SELECT /*+ use_index(`t` `index_t`)*/ * FROM `test`.`t` WHERE `t`.`i` = 1", dropSQL: "binding for insert into t1 select * from t where t.i = 1", - memoryUsage: float64(252), + memoryUsage: float64(254), }, { createSQL: "binding for replace into t1 select * from t where t.i = 1 using replace into t1 select /*+ use_index(t,index_t) */ * from t where t.i = 1", @@ -364,7 +469,7 @@ var testSQLs = []struct { originSQL: "replace into `test` . `t1` select * from `test` . `t` where `t` . `i` = ?", bindSQL: "REPLACE INTO `test`.`t1` SELECT /*+ use_index(`t` `index_t`)*/ * FROM `test`.`t` WHERE `t`.`i` = 1", dropSQL: "binding for replace into t1 select * from t where t.i = 1", - memoryUsage: float64(254), + memoryUsage: float64(256), }, } @@ -395,10 +500,10 @@ func TestGlobalBinding(t *testing.T) { } pb := &dto.Metric{} - err = metrics.BindTotalGauge.WithLabelValues(metrics.ScopeGlobal, bindinfo.Using).Write(pb) + err = metrics.BindTotalGauge.WithLabelValues(metrics.ScopeGlobal, bindinfo.Enabled).Write(pb) require.NoError(t, err) require.Equal(t, float64(1), pb.GetGauge().GetValue()) - err = metrics.BindMemoryUsage.WithLabelValues(metrics.ScopeGlobal, bindinfo.Using).Write(pb) + err = metrics.BindMemoryUsage.WithLabelValues(metrics.ScopeGlobal, bindinfo.Enabled).Write(pb) require.NoError(t, err) require.Equal(t, testSQL.memoryUsage, pb.GetGauge().GetValue()) @@ -410,7 +515,7 @@ func TestGlobalBinding(t *testing.T) { bind := bindData.Bindings[0] require.Equal(t, testSQL.bindSQL, bind.BindSQL) require.Equal(t, "test", bindData.Db) - require.Equal(t, "using", bind.Status) + require.Equal(t, bindinfo.Enabled, bind.Status) require.NotNil(t, bind.Charset) require.NotNil(t, bind.Collation) require.NotNil(t, bind.CreateTime) @@ -426,7 +531,7 @@ func TestGlobalBinding(t *testing.T) { require.Equal(t, testSQL.originSQL, row.GetString(0)) require.Equal(t, testSQL.bindSQL, row.GetString(1)) require.Equal(t, "test", row.GetString(2)) - require.Equal(t, "using", row.GetString(3)) + require.Equal(t, bindinfo.Enabled, row.GetString(3)) require.NotNil(t, row.GetTime(4)) require.NotNil(t, row.GetTime(5)) require.NotNil(t, row.GetString(6)) @@ -443,7 +548,7 @@ func TestGlobalBinding(t *testing.T) { bind = bindData.Bindings[0] require.Equal(t, testSQL.bindSQL, bind.BindSQL) require.Equal(t, "test", bindData.Db) - require.Equal(t, "using", bind.Status) + require.Equal(t, bindinfo.Enabled, bind.Status) require.NotNil(t, bind.Charset) require.NotNil(t, bind.Collation) require.NotNil(t, bind.CreateTime) @@ -454,10 +559,10 @@ func TestGlobalBinding(t *testing.T) { bindData = dom.BindHandle().GetBindRecord(hash, sql, "test") require.Nil(t, bindData) - err = metrics.BindTotalGauge.WithLabelValues(metrics.ScopeGlobal, bindinfo.Using).Write(pb) + err = metrics.BindTotalGauge.WithLabelValues(metrics.ScopeGlobal, bindinfo.Enabled).Write(pb) require.NoError(t, err) require.Equal(t, float64(0), pb.GetGauge().GetValue()) - err = metrics.BindMemoryUsage.WithLabelValues(metrics.ScopeGlobal, bindinfo.Using).Write(pb) + err = metrics.BindMemoryUsage.WithLabelValues(metrics.ScopeGlobal, bindinfo.Enabled).Write(pb) require.NoError(t, err) // From newly created global bind handle. require.Equal(t, testSQL.memoryUsage, pb.GetGauge().GetValue()) diff --git a/bindinfo/main_test.go b/bindinfo/main_test.go index a2e209ec2dd0b..3b69fc67ec943 100644 --- a/bindinfo/main_test.go +++ b/bindinfo/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/bindinfo/session_handle.go b/bindinfo/session_handle.go index 4256e77851292..742a45473c096 100644 --- a/bindinfo/session_handle.go +++ b/bindinfo/session_handle.go @@ -23,6 +23,8 @@ import ( "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/logutil" + "go.uber.org/zap" ) // SessionHandle is used to handle all session sql bind operations. @@ -42,7 +44,10 @@ func NewSessionBindHandle(parser *parser.Parser) *SessionHandle { // removed from the cache after this operation. func (h *SessionHandle) appendBindRecord(hash string, meta *BindRecord) { oldRecord := h.ch.GetBindRecord(hash, meta.OriginalSQL, meta.Db) - h.ch.SetBindRecord(hash, meta) + err := h.ch.SetBindRecord(hash, meta) + if err != nil { + logutil.BgLogger().Warn("[sql-bind] SessionHandle.appendBindRecord", zap.Error(err)) + } updateMetrics(metrics.ScopeSession, oldRecord, meta, false) } @@ -80,7 +85,11 @@ func (h *SessionHandle) DropBindRecord(originalSQL, db string, binding *Binding) } else { newRecord = record } - h.ch.SetBindRecord(hash, newRecord) + err := h.ch.SetBindRecord(hash, newRecord) + if err != nil { + // Should never reach here, just return an error for safety + return err + } updateMetrics(metrics.ScopeSession, oldRecord, newRecord, false) return nil } diff --git a/bindinfo/session_handle_test.go b/bindinfo/session_handle_test.go index cb908a909b5e7..528af7a5705e7 100644 --- a/bindinfo/session_handle_test.go +++ b/bindinfo/session_handle_test.go @@ -114,10 +114,10 @@ func TestSessionBinding(t *testing.T) { } pb := &dto.Metric{} - err = metrics.BindTotalGauge.WithLabelValues(metrics.ScopeSession, bindinfo.Using).Write(pb) + err = metrics.BindTotalGauge.WithLabelValues(metrics.ScopeSession, bindinfo.Enabled).Write(pb) require.NoError(t, err) require.Equal(t, float64(1), pb.GetGauge().GetValue()) - err = metrics.BindMemoryUsage.WithLabelValues(metrics.ScopeSession, bindinfo.Using).Write(pb) + err = metrics.BindMemoryUsage.WithLabelValues(metrics.ScopeSession, bindinfo.Enabled).Write(pb) require.NoError(t, err) require.Equal(t, testSQL.memoryUsage, pb.GetGauge().GetValue()) @@ -129,7 +129,7 @@ func TestSessionBinding(t *testing.T) { bind := bindData.Bindings[0] require.Equal(t, testSQL.bindSQL, bind.BindSQL) require.Equal(t, "test", bindData.Db) - require.Equal(t, "using", bind.Status) + require.Equal(t, bindinfo.Enabled, bind.Status) require.NotNil(t, bind.Charset) require.NotNil(t, bind.Collation) require.NotNil(t, bind.CreateTime) @@ -152,7 +152,7 @@ func TestSessionBinding(t *testing.T) { require.Equal(t, testSQL.originSQL, row.GetString(0)) require.Equal(t, testSQL.bindSQL, row.GetString(1)) require.Equal(t, "test", row.GetString(2)) - require.Equal(t, "using", row.GetString(3)) + require.Equal(t, bindinfo.Enabled, row.GetString(3)) require.NotNil(t, row.GetTime(4)) require.NotNil(t, row.GetTime(5)) require.NotNil(t, row.GetString(6)) @@ -165,10 +165,10 @@ func TestSessionBinding(t *testing.T) { require.Equal(t, testSQL.originSQL, bindData.OriginalSQL) require.Len(t, bindData.Bindings, 0) - err = metrics.BindTotalGauge.WithLabelValues(metrics.ScopeSession, bindinfo.Using).Write(pb) + err = metrics.BindTotalGauge.WithLabelValues(metrics.ScopeSession, bindinfo.Enabled).Write(pb) require.NoError(t, err) require.Equal(t, float64(0), pb.GetGauge().GetValue()) - err = metrics.BindMemoryUsage.WithLabelValues(metrics.ScopeSession, bindinfo.Using).Write(pb) + err = metrics.BindMemoryUsage.WithLabelValues(metrics.ScopeSession, bindinfo.Enabled).Write(pb) require.NoError(t, err) require.Equal(t, float64(0), pb.GetGauge().GetValue()) } @@ -224,7 +224,7 @@ func TestBaselineDBLowerCase(t *testing.T) { utilCleanBindingEnv(tk, dom) // Simulate existing bindings with upper case default_db. - tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t`', 'SPM', 'using', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + + tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t`', 'SPM', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + bindinfo.Manual + "')") tk.MustQuery("select original_sql, default_db from mysql.bind_info where original_sql = 'select * from `spm` . `t`'").Check(testkit.Rows( "select * from `spm` . `t` SPM", @@ -242,7 +242,7 @@ func TestBaselineDBLowerCase(t *testing.T) { utilCleanBindingEnv(tk, dom) // Simulate existing bindings with upper case default_db. - tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t`', 'SPM', 'using', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + + tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t`', 'SPM', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + bindinfo.Manual + "')") tk.MustQuery("select original_sql, default_db from mysql.bind_info where original_sql = 'select * from `spm` . `t`'").Check(testkit.Rows( "select * from `spm` . `t` SPM", @@ -261,7 +261,7 @@ func TestBaselineDBLowerCase(t *testing.T) { require.Equal(t, "spm", rows[0][2]) tk.MustQuery("select original_sql, default_db, status from mysql.bind_info where original_sql = 'select * from `spm` . `t`'").Check(testkit.Rows( "select * from `spm` . `t` SPM deleted", - "select * from `spm` . `t` spm using", + "select * from `spm` . `t` spm enabled", )) } @@ -280,13 +280,13 @@ func TestShowGlobalBindings(t *testing.T) { rows := tk.MustQuery("show global bindings").Rows() require.Len(t, rows, 0) // Simulate existing bindings in the mysql.bind_info. - tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t` USE INDEX (`a`)', 'SPM', 'using', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + + tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t` USE INDEX (`a`)', 'SPM', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" + bindinfo.Manual + "')") - tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t0`', 'select * from `spm` . `t0` USE INDEX (`a`)', 'SPM', 'using', '2000-01-02 09:00:00', '2000-01-02 09:00:00', '', '','" + + tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t0`', 'select * from `spm` . `t0` USE INDEX (`a`)', 'SPM', 'enabled', '2000-01-02 09:00:00', '2000-01-02 09:00:00', '', '','" + bindinfo.Manual + "')") - tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select /*+ use_index(`t` `a`)*/ * from `spm` . `t`', 'SPM', 'using', '2000-01-03 09:00:00', '2000-01-03 09:00:00', '', '','" + + tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select /*+ use_index(`t` `a`)*/ * from `spm` . `t`', 'SPM', 'enabled', '2000-01-03 09:00:00', '2000-01-03 09:00:00', '', '','" + bindinfo.Manual + "')") - tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t0`', 'select /*+ use_index(`t0` `a`)*/ * from `spm` . `t0`', 'SPM', 'using', '2000-01-04 09:00:00', '2000-01-04 09:00:00', '', '','" + + tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t0`', 'select /*+ use_index(`t0` `a`)*/ * from `spm` . `t0`', 'SPM', 'enabled', '2000-01-04 09:00:00', '2000-01-04 09:00:00', '', '','" + bindinfo.Manual + "')") tk.MustExec("admin reload bindings") rows = tk.MustQuery("show global bindings").Rows() diff --git a/br/cmd/br/backup.go b/br/cmd/br/backup.go index 442672fad871e..c6b49b43f21b1 100644 --- a/br/cmd/br/backup.go +++ b/br/cmd/br/backup.go @@ -105,7 +105,7 @@ func newFullBackupCommand() *cobra.Command { Args: cobra.NoArgs, RunE: func(command *cobra.Command, _ []string) error { // empty db/table means full backup. - return runBackupCommand(command, "Full backup") + return runBackupCommand(command, task.FullBackupCmd) }, } task.DefineFilterFlags(command, acceptAllTables) @@ -119,7 +119,7 @@ func newDBBackupCommand() *cobra.Command { Short: "backup a database", Args: cobra.NoArgs, RunE: func(command *cobra.Command, _ []string) error { - return runBackupCommand(command, "Database backup") + return runBackupCommand(command, task.DBBackupCmd) }, } task.DefineDatabaseFlags(command) @@ -133,7 +133,7 @@ func newTableBackupCommand() *cobra.Command { Short: "backup a table", Args: cobra.NoArgs, RunE: func(command *cobra.Command, _ []string) error { - return runBackupCommand(command, "Table backup") + return runBackupCommand(command, task.TableBackupCmd) }, } task.DefineTableFlags(command) @@ -148,7 +148,7 @@ func newRawBackupCommand() *cobra.Command { Short: "(experimental) backup a raw kv range from TiKV cluster", Args: cobra.NoArgs, RunE: func(command *cobra.Command, _ []string) error { - return runBackupRawCommand(command, "Raw backup") + return runBackupRawCommand(command, task.RawBackupCmd) }, } diff --git a/br/cmd/br/cmd.go b/br/cmd/br/cmd.go index f0480ece4dc00..81e2093381b0a 100644 --- a/br/cmd/br/cmd.go +++ b/br/cmd/br/cmd.go @@ -13,7 +13,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/log" - tidbutils "github.com/pingcap/tidb-tools/pkg/utils" "github.com/pingcap/tidb/br/pkg/gluetidb" "github.com/pingcap/tidb/br/pkg/redact" "github.com/pingcap/tidb/br/pkg/summary" @@ -21,6 +20,7 @@ import ( "github.com/pingcap/tidb/br/pkg/utils" "github.com/pingcap/tidb/br/pkg/version/build" "github.com/pingcap/tidb/config" + tidbutils "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/logutil" "github.com/spf13/cobra" ) diff --git a/br/cmd/br/restore.go b/br/cmd/br/restore.go index c57712ba8bddc..32d04994c793e 100644 --- a/br/cmd/br/restore.go +++ b/br/cmd/br/restore.go @@ -95,7 +95,7 @@ func newFullRestoreCommand() *cobra.Command { Short: "restore all tables", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { - return runRestoreCommand(cmd, "Full restore") + return runRestoreCommand(cmd, task.FullRestoreCmd) }, } task.DefineFilterFlags(command, filterOutSysAndMemTables) @@ -108,7 +108,7 @@ func newDBRestoreCommand() *cobra.Command { Short: "restore tables in a database from the backup data", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { - return runRestoreCommand(cmd, "Database restore") + return runRestoreCommand(cmd, task.DBRestoreCmd) }, } task.DefineDatabaseFlags(command) @@ -121,7 +121,7 @@ func newTableRestoreCommand() *cobra.Command { Short: "restore a table from the backup data", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { - return runRestoreCommand(cmd, "Table restore") + return runRestoreCommand(cmd, task.TableRestoreCmd) }, } task.DefineTableFlags(command) @@ -134,7 +134,7 @@ func newRawRestoreCommand() *cobra.Command { Short: "(experimental) restore a raw kv range to TiKV cluster", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { - return runRestoreRawCommand(cmd, "Raw restore") + return runRestoreRawCommand(cmd, task.RawRestoreCmd) }, } diff --git a/br/cmd/tidb-lightning/main.go b/br/cmd/tidb-lightning/main.go index d70973747eac4..079182ce0863e 100644 --- a/br/cmd/tidb-lightning/main.go +++ b/br/cmd/tidb-lightning/main.go @@ -91,7 +91,7 @@ func main() { if err := cfg.LoadFromGlobal(globalCfg); err != nil { return err } - return app.RunOnce(context.Background(), cfg, nil) + return app.RunOnceWithOptions(context.Background(), cfg) }() finished := true @@ -101,7 +101,7 @@ func main() { } if err != nil { logger.Error("tidb lightning encountered error stack info", zap.Error(err)) - fmt.Fprintln(os.Stderr, "tidb lightning encountered error: ", err) + fmt.Fprintln(os.Stderr, "tidb lightning encountered error:", err) } else { logger.Info("tidb lightning exit", zap.Bool("finished", finished)) exitMsg := "tidb lightning exit successfully" diff --git a/br/pkg/backup/client.go b/br/pkg/backup/client.go index 8933945e115c4..72730293c230f 100644 --- a/br/pkg/backup/client.go +++ b/br/pkg/backup/client.go @@ -21,7 +21,6 @@ import ( "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/log" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" "github.com/pingcap/tidb/br/pkg/conn" berrors "github.com/pingcap/tidb/br/pkg/errors" "github.com/pingcap/tidb/br/pkg/logutil" @@ -39,6 +38,7 @@ import ( "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/ranger" + filter "github.com/pingcap/tidb/util/table-filter" "github.com/tikv/client-go/v2/oracle" "github.com/tikv/client-go/v2/tikv" "github.com/tikv/client-go/v2/txnkv/txnlock" @@ -160,6 +160,11 @@ func (bc *Client) GetGCTTL() int64 { return bc.gcTTL } +// GetStorageBackend gets storage backupend field in client. +func (bc *Client) GetStorageBackend() *backuppb.StorageBackend { + return bc.backend +} + // GetStorage gets storage for this backup. func (bc *Client) GetStorage() storage.ExternalStorage { return bc.storage @@ -282,15 +287,34 @@ func BuildBackupRangeAndSchema( storage kv.Storage, tableFilter filter.Filter, backupTS uint64, -) ([]rtree.Range, *Schemas, error) { + isFullBackup bool, +) ([]rtree.Range, *Schemas, []*backuppb.PlacementPolicy, error) { snapshot := storage.GetSnapshot(kv.NewVersion(backupTS)) m := meta.NewSnapshotMeta(snapshot) + var policies []*backuppb.PlacementPolicy + if isFullBackup { + // according to https://github.com/pingcap/tidb/issues/32290 + // only full backup will record policies in backupMeta. + policyList, err := m.ListPolicies() + if err != nil { + return nil, nil, nil, errors.Trace(err) + } + policies = make([]*backuppb.PlacementPolicy, 0, len(policies)) + for _, policyInfo := range policyList { + p, err := json.Marshal(policyInfo) + if err != nil { + return nil, nil, nil, errors.Trace(err) + } + policies = append(policies, &backuppb.PlacementPolicy{Info: p}) + } + } + ranges := make([]rtree.Range, 0) backupSchemas := newBackupSchemas() dbs, err := m.ListDatabases() if err != nil { - return nil, nil, errors.Trace(err) + return nil, nil, nil, errors.Trace(err) } for _, dbInfo := range dbs { @@ -301,7 +325,7 @@ func BuildBackupRangeAndSchema( tables, err := m.ListTables(dbInfo.ID) if err != nil { - return nil, nil, errors.Trace(err) + return nil, nil, nil, errors.Trace(err) } if len(tables) == 0 { @@ -310,6 +334,12 @@ func BuildBackupRangeAndSchema( continue } + if !isFullBackup { + // according to https://github.com/pingcap/tidb/issues/32290. + // ignore placement policy when not in full backup + dbInfo.PlacementPolicyRef = nil + } + for _, tableInfo := range tables { if !tableFilter.MatchTable(dbInfo.Name.O, tableInfo.Name.O) { // Skip tables other than the given table. @@ -336,16 +366,21 @@ func BuildBackupRangeAndSchema( globalAutoID, err = idAlloc.NextGlobalAutoID() } if err != nil { - return nil, nil, errors.Trace(err) + return nil, nil, nil, errors.Trace(err) } tableInfo.AutoIncID = globalAutoID + if !isFullBackup { + // according to https://github.com/pingcap/tidb/issues/32290. + // ignore placement policy when not in full backup + tableInfo.ClearPlacement() + } if tableInfo.PKIsHandle && tableInfo.ContainsAutoRandomBits() { // this table has auto_random id, we need backup and rebase in restoration var globalAutoRandID int64 globalAutoRandID, err = randAlloc.NextGlobalAutoID() if err != nil { - return nil, nil, errors.Trace(err) + return nil, nil, nil, errors.Trace(err) } tableInfo.AutoRandID = globalAutoRandID logger.Debug("change table AutoRandID", @@ -368,7 +403,7 @@ func BuildBackupRangeAndSchema( tableRanges, err := BuildTableRanges(tableInfo) if err != nil { - return nil, nil, errors.Trace(err) + return nil, nil, nil, errors.Trace(err) } for _, r := range tableRanges { ranges = append(ranges, rtree.Range{ @@ -381,9 +416,9 @@ func BuildBackupRangeAndSchema( if backupSchemas.Len() == 0 { log.Info("nothing to backup") - return nil, nil, nil + return nil, nil, nil, nil } - return ranges, backupSchemas, nil + return ranges, backupSchemas, policies, nil } func skipUnsupportedDDLJob(job *model.Job) bool { @@ -442,6 +477,14 @@ func WriteBackupDDLJobs(metaWriter *metautil.MetaWriter, store kv.Storage, lastB if (job.State == model.JobStateDone || job.State == model.JobStateSynced) && (job.BinlogInfo != nil && job.BinlogInfo.SchemaVersion > lastSchemaVersion) { + if job.BinlogInfo.DBInfo != nil { + // ignore all placement policy info during incremental backup for now. + job.BinlogInfo.DBInfo.PlacementPolicyRef = nil + } + if job.BinlogInfo.TableInfo != nil { + // ignore all placement policy info during incremental backup for now. + job.BinlogInfo.TableInfo.ClearPlacement() + } jobBytes, err := json.Marshal(job) if err != nil { return errors.Trace(err) @@ -461,7 +504,7 @@ func WriteBackupDDLJobs(metaWriter *metautil.MetaWriter, store kv.Storage, lastB func (bc *Client) BackupRanges( ctx context.Context, ranges []rtree.Range, - req backuppb.BackupRequest, + request backuppb.BackupRequest, concurrency uint, metaWriter *metautil.MetaWriter, progressCallBack func(ProgressUnit), @@ -480,10 +523,12 @@ func (bc *Client) BackupRanges( eg, ectx := errgroup.WithContext(ctx) for id, r := range ranges { id := id - sk, ek := r.StartKey, r.EndKey + req := request + req.StartKey, req.EndKey = r.StartKey, r.EndKey + workerPool.ApplyOnErrorGroup(eg, func() error { elctx := logutil.ContextWithField(ectx, logutil.RedactAny("range-sn", id)) - err := bc.BackupRange(elctx, sk, ek, req, metaWriter, progressCallBack) + err := bc.BackupRange(elctx, req, metaWriter, progressCallBack) if err != nil { // The error due to context cancel, stack trace is meaningless, the stack shall be suspended (also clear) if errors.Cause(err) == context.Canceled { @@ -491,7 +536,6 @@ func (bc *Client) BackupRanges( } else { return errors.Trace(err) } - } return nil }) @@ -503,7 +547,6 @@ func (bc *Client) BackupRanges( // Returns an array of files backed up. func (bc *Client) BackupRange( ctx context.Context, - startKey, endKey []byte, req backuppb.BackupRequest, metaWriter *metautil.MetaWriter, progressCallBack func(ProgressUnit), @@ -512,13 +555,13 @@ func (bc *Client) BackupRange( defer func() { elapsed := time.Since(start) logutil.CL(ctx).Info("backup range finished", zap.Duration("take", elapsed)) - key := "range start:" + hex.EncodeToString(startKey) + " end:" + hex.EncodeToString(endKey) + key := "range start:" + hex.EncodeToString(req.StartKey) + " end:" + hex.EncodeToString(req.EndKey) if err != nil { summary.CollectFailureUnit(key, err) } }() logutil.CL(ctx).Info("backup started", - logutil.Key("startKey", startKey), logutil.Key("endKey", endKey), + logutil.Key("startKey", req.StartKey), logutil.Key("endKey", req.EndKey), zap.Uint64("rateLimit", req.RateLimit), zap.Uint32("concurrency", req.Concurrency)) @@ -528,14 +571,8 @@ func (bc *Client) BackupRange( return errors.Trace(err) } - req.StartKey = startKey - req.EndKey = endKey - req.StorageBackend = bc.backend - push := newPushDown(bc.mgr, len(allStores)) - - var results rtree.RangeTree - results, err = push.pushBackup(ctx, req, allStores, progressCallBack) + results, err := push.pushBackup(ctx, req, allStores, progressCallBack) if err != nil { return errors.Trace(err) } @@ -543,10 +580,7 @@ func (bc *Client) BackupRange( // Find and backup remaining ranges. // TODO: test fine grained backup. - err = bc.fineGrainedBackup( - ctx, startKey, endKey, req.StartVersion, req.EndVersion, req.CompressionType, req.CompressionLevel, - req.RateLimit, req.Concurrency, req.IsRawKv, req.CipherInfo, results, progressCallBack) - if err != nil { + if err := bc.fineGrainedBackup(ctx, req, results, progressCallBack); err != nil { return errors.Trace(err) } @@ -555,8 +589,8 @@ func (bc *Client) BackupRange( if req.IsRawKv { logutil.CL(ctx).Info("raw ranges backed up", - logutil.Key("startKey", startKey), - logutil.Key("endKey", endKey), + logutil.Key("startKey", req.StartKey), + logutil.Key("endKey", req.EndKey), zap.String("cf", req.Cf)) } else { logutil.CL(ctx).Info("time range backed up", @@ -618,15 +652,7 @@ func (bc *Client) findRegionLeader(ctx context.Context, key []byte, isRawKv bool func (bc *Client) fineGrainedBackup( ctx context.Context, - startKey, endKey []byte, - lastBackupTS uint64, - backupTS uint64, - compressType backuppb.CompressionType, - compressLevel int32, - rateLimit uint64, - concurrency uint32, - isRawKv bool, - cipherInfo *backuppb.CipherInfo, + req backuppb.BackupRequest, rangeTree rtree.RangeTree, progressCallBack func(ProgressUnit), ) error { @@ -654,7 +680,7 @@ func (bc *Client) fineGrainedBackup( bo := tikv.NewBackoffer(ctx, backupFineGrainedMaxBackoff) for { // Step1, check whether there is any incomplete range - incomplete := rangeTree.GetIncompleteRange(startKey, endKey) + incomplete := rangeTree.GetIncompleteRange(req.StartKey, req.EndKey) if len(incomplete) == 0 { return nil } @@ -675,9 +701,9 @@ func (bc *Client) fineGrainedBackup( go func(boFork *tikv.Backoffer) { defer wg.Done() for rg := range retry { - backoffMs, err := - bc.handleFineGrained(ctx, boFork, rg, lastBackupTS, backupTS, - compressType, compressLevel, rateLimit, concurrency, isRawKv, cipherInfo, respCh) + subReq := req + subReq.StartKey, subReq.EndKey = rg.StartKey, rg.EndKey + backoffMs, err := bc.handleFineGrained(ctx, boFork, subReq, respCh) if err != nil { errCh <- err return @@ -817,37 +843,14 @@ func OnBackupResponse( func (bc *Client) handleFineGrained( ctx context.Context, bo *tikv.Backoffer, - rg rtree.Range, - lastBackupTS uint64, - backupTS uint64, - compressType backuppb.CompressionType, - compressionLevel int32, - rateLimit uint64, - concurrency uint32, - isRawKv bool, - cipherInfo *backuppb.CipherInfo, + req backuppb.BackupRequest, respCh chan<- *backuppb.BackupResponse, ) (int, error) { - leader, pderr := bc.findRegionLeader(ctx, rg.StartKey, isRawKv) + leader, pderr := bc.findRegionLeader(ctx, req.StartKey, req.IsRawKv) if pderr != nil { return 0, errors.Trace(pderr) } storeID := leader.GetStoreId() - - req := backuppb.BackupRequest{ - ClusterId: bc.clusterID, - StartKey: rg.StartKey, // TODO: the range may cross region. - EndKey: rg.EndKey, - StartVersion: lastBackupTS, - EndVersion: backupTS, - StorageBackend: bc.backend, - RateLimit: rateLimit, - Concurrency: concurrency, - IsRawKv: isRawKv, - CompressionType: compressType, - CompressionLevel: compressionLevel, - CipherInfo: cipherInfo, - } lockResolver := bc.mgr.GetLockResolver() client, err := bc.mgr.GetBackupClient(ctx, storeID) if err != nil { @@ -868,7 +871,7 @@ func (bc *Client) handleFineGrained( // Handle responses with the same backoffer. func(resp *backuppb.BackupResponse) error { response, shouldBackoff, err1 := - OnBackupResponse(storeID, bo, backupTS, lockResolver, resp) + OnBackupResponse(storeID, bo, req.EndVersion, lockResolver, resp) if err1 != nil { return err1 } diff --git a/br/pkg/backup/main_test.go b/br/pkg/backup/main_test.go index 29a95f2821f8a..e47b44847e9f7 100644 --- a/br/pkg/backup/main_test.go +++ b/br/pkg/backup/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("github.com/klauspost/compress/zstd.(*blockDec).startDecoder"), goleak.IgnoreTopFunction("github.com/pingcap/goleveldb/leveldb.(*DB).mpoolDrain"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), diff --git a/br/pkg/backup/schema_test.go b/br/pkg/backup/schema_test.go index dc4038bf98051..303eb318b2ed3 100644 --- a/br/pkg/backup/schema_test.go +++ b/br/pkg/backup/schema_test.go @@ -13,7 +13,6 @@ import ( "github.com/golang/protobuf/proto" backuppb "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/kvproto/pkg/encryptionpb" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" "github.com/pingcap/tidb/br/pkg/backup" "github.com/pingcap/tidb/br/pkg/metautil" "github.com/pingcap/tidb/br/pkg/mock" @@ -21,6 +20,7 @@ import ( "github.com/pingcap/tidb/br/pkg/utils" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/testkit" + filter "github.com/pingcap/tidb/util/table-filter" "github.com/stretchr/testify/require" ) @@ -97,16 +97,16 @@ func TestBuildBackupRangeAndSchema(t *testing.T) { // Table t1 is not exist. testFilter, err := filter.Parse([]string{"test.t1"}) require.NoError(t, err) - _, backupSchemas, err := backup.BuildBackupRangeAndSchema( - m.Storage, testFilter, math.MaxUint64) + _, backupSchemas, _, err := backup.BuildBackupRangeAndSchema( + m.Storage, testFilter, math.MaxUint64, false) require.NoError(t, err) require.Nil(t, backupSchemas) // Database is not exist. fooFilter, err := filter.Parse([]string{"foo.t1"}) require.NoError(t, err) - _, backupSchemas, err = backup.BuildBackupRangeAndSchema( - m.Storage, fooFilter, math.MaxUint64) + _, backupSchemas, _, err = backup.BuildBackupRangeAndSchema( + m.Storage, fooFilter, math.MaxUint64, false) require.NoError(t, err) require.Nil(t, backupSchemas) @@ -114,8 +114,8 @@ func TestBuildBackupRangeAndSchema(t *testing.T) { // Filter out system tables manually. noFilter, err := filter.Parse([]string{"*.*", "!mysql.*"}) require.NoError(t, err) - _, backupSchemas, err = backup.BuildBackupRangeAndSchema( - m.Storage, noFilter, math.MaxUint64) + _, backupSchemas, _, err = backup.BuildBackupRangeAndSchema( + m.Storage, noFilter, math.MaxUint64, false) require.NoError(t, err) require.Nil(t, backupSchemas) @@ -123,11 +123,15 @@ func TestBuildBackupRangeAndSchema(t *testing.T) { tk.MustExec("drop table if exists t1;") tk.MustExec("create table t1 (a int);") tk.MustExec("insert into t1 values (10);") + tk.MustExec("create placement policy fivereplicas followers=4;") - _, backupSchemas, err = backup.BuildBackupRangeAndSchema( - m.Storage, testFilter, math.MaxUint64) + var policies []*backuppb.PlacementPolicy + _, backupSchemas, policies, err = backup.BuildBackupRangeAndSchema( + m.Storage, testFilter, math.MaxUint64, false) require.NoError(t, err) require.Equal(t, 1, backupSchemas.Len()) + // we expect no policies collected, because it's not full backup. + require.Equal(t, 0, len(policies)) updateCh := new(simpleProgress) skipChecksum := false es := GetRandomStorage(t) @@ -155,10 +159,12 @@ func TestBuildBackupRangeAndSchema(t *testing.T) { tk.MustExec("insert into t2 values (10);") tk.MustExec("insert into t2 values (11);") - _, backupSchemas, err = backup.BuildBackupRangeAndSchema( - m.Storage, noFilter, math.MaxUint64) + _, backupSchemas, policies, err = backup.BuildBackupRangeAndSchema( + m.Storage, noFilter, math.MaxUint64, true) require.NoError(t, err) require.Equal(t, 2, backupSchemas.Len()) + // we expect the policy fivereplicas collected in full backup. + require.Equal(t, 1, len(policies)) updateCh.reset() es2 := GetRandomStorage(t) @@ -204,7 +210,7 @@ func TestBuildBackupRangeAndSchemaWithBrokenStats(t *testing.T) { f, err := filter.Parse([]string{"test.t3"}) require.NoError(t, err) - _, backupSchemas, err := backup.BuildBackupRangeAndSchema(m.Storage, f, math.MaxUint64) + _, backupSchemas, _, err := backup.BuildBackupRangeAndSchema(m.Storage, f, math.MaxUint64, false) require.NoError(t, err) require.Equal(t, 1, backupSchemas.Len()) @@ -238,7 +244,7 @@ func TestBuildBackupRangeAndSchemaWithBrokenStats(t *testing.T) { // recover the statistics. tk.MustExec("analyze table t3;") - _, backupSchemas, err = backup.BuildBackupRangeAndSchema(m.Storage, f, math.MaxUint64) + _, backupSchemas, _, err = backup.BuildBackupRangeAndSchema(m.Storage, f, math.MaxUint64, false) require.NoError(t, err) require.Equal(t, 1, backupSchemas.Len()) @@ -280,7 +286,7 @@ func TestBackupSchemasForSystemTable(t *testing.T) { f, err := filter.Parse([]string{"mysql.systable*"}) require.NoError(t, err) - _, backupSchemas, err := backup.BuildBackupRangeAndSchema(m.Storage, f, math.MaxUint64) + _, backupSchemas, _, err := backup.BuildBackupRangeAndSchema(m.Storage, f, math.MaxUint64, false) require.NoError(t, err) require.Equal(t, systemTablesCount, backupSchemas.Len()) diff --git a/br/pkg/checksum/main_test.go b/br/pkg/checksum/main_test.go index 04675bb970144..801f0a62c4f06 100644 --- a/br/pkg/checksum/main_test.go +++ b/br/pkg/checksum/main_test.go @@ -23,6 +23,7 @@ import ( func TestMain(m *testing.M) { opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("github.com/klauspost/compress/zstd.(*blockDec).startDecoder"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), diff --git a/br/pkg/conn/main_test.go b/br/pkg/conn/main_test.go index 654909595fc8a..512c52a3fc985 100644 --- a/br/pkg/conn/main_test.go +++ b/br/pkg/conn/main_test.go @@ -23,6 +23,7 @@ import ( func TestMain(m *testing.M) { opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/br/pkg/glue/glue.go b/br/pkg/glue/glue.go index 118b3ce3f8982..24b0852d31290 100644 --- a/br/pkg/glue/glue.go +++ b/br/pkg/glue/glue.go @@ -36,7 +36,9 @@ type Session interface { ExecuteInternal(ctx context.Context, sql string, args ...interface{}) error CreateDatabase(ctx context.Context, schema *model.DBInfo) error CreateTable(ctx context.Context, dbName model.CIStr, table *model.TableInfo) error + CreatePlacementPolicy(ctx context.Context, policy *model.PolicyInfo) error Close() + GetGlobalVariable(name string) (string, error) } // BatchCreateTableSession is an interface to batch create table parallelly diff --git a/br/pkg/gluetidb/glue.go b/br/pkg/gluetidb/glue.go index d95655489a080..d17a098613648 100644 --- a/br/pkg/gluetidb/glue.go +++ b/br/pkg/gluetidb/glue.go @@ -131,6 +131,14 @@ func (gs *tidbSession) CreateDatabase(ctx context.Context, schema *model.DBInfo) } +// CreatePlacementPolicy implements glue.Session. +func (gs *tidbSession) CreatePlacementPolicy(ctx context.Context, policy *model.PolicyInfo) error { + d := domain.GetDomain(gs.se).DDL() + gs.se.SetValue(sessionctx.QueryString, gs.showCreatePlacementPolicy(policy)) + // the default behaviour is ignoring duplicated policy during restore. + return d.CreatePlacementPolicyWithInfo(gs.se, policy, ddl.OnExistIgnore) +} + // CreateTables implements glue.BatchCreateTableSession. func (gs *tidbSession) CreateTables(ctx context.Context, tables map[string][]*model.TableInfo) error { d := domain.GetDomain(gs.se).DDL() @@ -195,6 +203,11 @@ func (gs *tidbSession) Close() { gs.se.Close() } +// GetGlobalVariables implements glue.Session. +func (gs *tidbSession) GetGlobalVariable(name string) (string, error) { + return gs.se.GetSessionVars().GlobalVarsAccessor.GetTiDBTableValue(name) +} + // showCreateTable shows the result of SHOW CREATE TABLE from a TableInfo. func (gs *tidbSession) showCreateTable(tbl *model.TableInfo) (string, error) { table := tbl.Clone() @@ -218,3 +231,7 @@ func (gs *tidbSession) showCreateDatabase(db *model.DBInfo) (string, error) { } return result.String(), nil } + +func (gs *tidbSession) showCreatePlacementPolicy(policy *model.PolicyInfo) string { + return executor.ConstructResultOfShowCreatePlacementPolicy(policy) +} diff --git a/br/pkg/lightning/backend/importer/importer_test.go b/br/pkg/lightning/backend/importer/importer_test.go index dd65db3ee4d5a..b73128d186e44 100644 --- a/br/pkg/lightning/backend/importer/importer_test.go +++ b/br/pkg/lightning/backend/importer/importer_test.go @@ -282,12 +282,12 @@ func TestCheckTiDBVersion(t *testing.T) { require.Error(t, err) require.Regexp(t, "^TiDB version too new", err.Error()) - version = "5.7.25-TiDB-v6.0.0" + version = "5.7.25-TiDB-v7.0.0" err = checkTiDBVersionByTLS(ctx, tls, requiredMinTiDBVersion, requiredMaxTiDBVersion) require.Error(t, err) require.Regexp(t, "^TiDB version too new", err.Error()) - version = "5.7.25-TiDB-v6.0.0-beta" + version = "5.7.25-TiDB-v7.0.0-beta" err = checkTiDBVersionByTLS(ctx, tls, requiredMinTiDBVersion, requiredMaxTiDBVersion) require.Error(t, err) require.Regexp(t, "^TiDB version too new", err.Error()) diff --git a/br/pkg/lightning/backend/kv/session.go b/br/pkg/lightning/backend/kv/session.go index ca0cb2db4529c..2756cc23b70d0 100644 --- a/br/pkg/lightning/backend/kv/session.go +++ b/br/pkg/lightning/backend/kv/session.go @@ -330,6 +330,10 @@ func (se *session) GetBuiltinFunctionUsage() map[string]uint32 { return make(map[string]uint32) } +// BuiltinFunctionUsageInc implements the sessionctx.Context interface. +func (se *session) BuiltinFunctionUsageInc(scalarFuncSigName string) { +} + // GetStmtStats implements the sessionctx.Context interface. func (se *session) GetStmtStats() *stmtstats.StatementStats { return nil diff --git a/br/pkg/lightning/backend/local/local.go b/br/pkg/lightning/backend/local/local.go index 3233ac83b0cda..ae5d292d04dc7 100644 --- a/br/pkg/lightning/backend/local/local.go +++ b/br/pkg/lightning/backend/local/local.go @@ -78,6 +78,10 @@ const ( dialTimeout = 5 * time.Minute maxRetryTimes = 5 defaultRetryBackoffTime = 3 * time.Second + // maxWriteAndIngestRetryTimes is the max retry times for write and ingest. + // A large retry times is for tolerating tikv cluster failures. + maxWriteAndIngestRetryTimes = 30 + maxRetryBackoffTime = 30 * time.Second gRPCKeepAliveTime = 10 * time.Minute gRPCKeepAliveTimeout = 5 * time.Minute @@ -256,7 +260,7 @@ func NewLocalBackend( pdCtl, err := pdutil.NewPdController(ctx, cfg.TiDB.PdAddr, tls.TLSConfig(), tls.ToPDSecurityOption()) if err != nil { - return backend.MakeBackend(nil), errors.Annotate(err, "construct pd client failed") + return backend.MakeBackend(nil), common.NormalizeOrWrapErr(common.ErrCreatePDClient, err) } splitCli := split.NewSplitClient(pdCtl.GetPDClient(), tls.TLSConfig(), false) @@ -274,7 +278,7 @@ func NewLocalBackend( if shouldCreate { err = os.Mkdir(localFile, 0o700) if err != nil { - return backend.MakeBackend(nil), errors.Annotate(err, "invalid sorted-kv-dir for local backend, please change the config or delete the path") + return backend.MakeBackend(nil), common.ErrInvalidSortedKVDir.Wrap(err).GenWithStackByArgs(localFile) } } @@ -282,20 +286,20 @@ func NewLocalBackend( if cfg.TikvImporter.DuplicateResolution != config.DupeResAlgNone { duplicateDB, err = openDuplicateDB(localFile) if err != nil { - return backend.MakeBackend(nil), errors.Annotate(err, "open duplicate db failed") + return backend.MakeBackend(nil), common.ErrOpenDuplicateDB.Wrap(err).GenWithStackByArgs() } } // The following copies tikv.NewTxnClient without creating yet another pdClient. spkv, err := tikvclient.NewEtcdSafePointKV(strings.Split(cfg.TiDB.PdAddr, ","), tls.TLSConfig()) if err != nil { - return backend.MakeBackend(nil), err + return backend.MakeBackend(nil), common.ErrCreateKVClient.Wrap(err).GenWithStackByArgs() } rpcCli := tikvclient.NewRPCClient(tikvclient.WithSecurity(tls.ToTiKVSecurityConfig())) pdCliForTiKV := &tikvclient.CodecPDClient{Client: pdCtl.GetPDClient()} tikvCli, err := tikvclient.NewKVStore("lightning-local-backend", pdCliForTiKV, spkv, rpcCli) if err != nil { - return backend.MakeBackend(nil), err + return backend.MakeBackend(nil), common.ErrCreateKVClient.Wrap(err).GenWithStackByArgs() } importClientFactory := newImportClientFactoryImpl(splitCli, tls, rangeConcurrency) duplicateDetection := cfg.TikvImporter.DuplicateResolution != config.DupeResAlgNone @@ -331,7 +335,7 @@ func NewLocalBackend( bufferPool: membuf.NewPool(membuf.WithAllocator(manual.Allocator{})), } if err = local.checkMultiIngestSupport(ctx); err != nil { - return backend.MakeBackend(nil), err + return backend.MakeBackend(nil), common.ErrCheckMultiIngest.Wrap(err).GenWithStackByArgs() } return backend.MakeBackend(local), nil @@ -1276,9 +1280,9 @@ func (local *local) writeAndIngestByRanges(ctx context.Context, engine *Engine, wg.Done() }() var err error - // max retry backoff time: 2+4+8+16=30s + // max retry backoff time: 2+4+8+16+30*26=810s backOffTime := time.Second - for i := 0; i < maxRetryTimes; i++ { + for i := 0; i < maxWriteAndIngestRetryTimes; i++ { err = local.writeAndIngestByRange(ctx, engine, startKey, endKey, regionSplitSize, regionSplitKeys) if err == nil || common.IsContextCanceledError(err) { return @@ -1286,6 +1290,9 @@ func (local *local) writeAndIngestByRanges(ctx context.Context, engine *Engine, log.L().Warn("write and ingest by range failed", zap.Int("retry time", i+1), log.ShortError(err)) backOffTime *= 2 + if backOffTime > maxRetryBackoffTime { + backOffTime = maxRetryBackoffTime + } select { case <-time.After(backOffTime): case <-ctx.Done(): @@ -1305,6 +1312,9 @@ func (local *local) writeAndIngestByRanges(ctx context.Context, engine *Engine, // wait for all sub tasks finish to avoid panic. if we return on the first error, // the outer tasks may close the pebble db but some sub tasks still read from the db wg.Wait() + if allErr == nil { + return ctx.Err() + } return allErr } diff --git a/br/pkg/lightning/checkpoints/checkpoints.go b/br/pkg/lightning/checkpoints/checkpoints.go index 45530c5bee0c7..d2d5320595999 100644 --- a/br/pkg/lightning/checkpoints/checkpoints.go +++ b/br/pkg/lightning/checkpoints/checkpoints.go @@ -21,8 +21,9 @@ import ( "fmt" "io" "math" - "os" + "path" "sort" + "strings" "sync" "github.com/joho/sqltocsv" @@ -33,6 +34,7 @@ import ( "github.com/pingcap/tidb/br/pkg/lightning/log" "github.com/pingcap/tidb/br/pkg/lightning/mydump" verify "github.com/pingcap/tidb/br/pkg/lightning/verification" + "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/br/pkg/version/build" "go.uber.org/zap" "modernc.org/mathutil" @@ -513,7 +515,7 @@ func OpenCheckpointsDB(ctx context.Context, cfg *config.Config) (DB, error) { switch cfg.Checkpoint.Driver { case config.CheckpointDriverMySQL: - db, err := sql.Open("mysql", cfg.Checkpoint.DSN) + db, err := common.ConnectMySQL(cfg.Checkpoint.DSN) if err != nil { return nil, errors.Trace(err) } @@ -525,10 +527,14 @@ func OpenCheckpointsDB(ctx context.Context, cfg *config.Config) (DB, error) { return cpdb, nil case config.CheckpointDriverFile: - return NewFileCheckpointsDB(cfg.Checkpoint.DSN), nil + cpdb, err := NewFileCheckpointsDB(ctx, cfg.Checkpoint.DSN) + if err != nil { + return nil, errors.Trace(err) + } + return cpdb, nil default: - return nil, errors.Errorf("Unknown checkpoint driver %s", cfg.Checkpoint.Driver) + return nil, common.ErrUnknownCheckpointDriver.GenWithStackByArgs(cfg.Checkpoint.Driver) } } @@ -556,16 +562,18 @@ func IsCheckpointsDBExists(ctx context.Context, cfg *config.Config) (bool, error return result, nil case config.CheckpointDriverFile: - _, err := os.Stat(cfg.Checkpoint.DSN) - if err == nil { - return true, err - } else if os.IsNotExist(err) { - return false, nil + s, fileName, err := createExstorageByCompletePath(ctx, cfg.Checkpoint.DSN) + if err != nil { + return false, errors.Trace(err) } - return false, errors.Trace(err) + result, err := s.FileExists(ctx, fileName) + if err != nil { + return false, errors.Trace(err) + } + return result, nil default: - return false, errors.Errorf("Unknown checkpoint driver %s", cfg.Checkpoint.Driver) + return false, common.ErrUnknownCheckpointDriver.GenWithStackByArgs(cfg.Checkpoint.Driver) } } @@ -940,63 +948,143 @@ func (cpdb *MySQLCheckpointsDB) Update(checkpointDiffs map[string]*TableCheckpoi type FileCheckpointsDB struct { lock sync.Mutex // we need to ensure only a thread can access to `checkpoints` at a time checkpoints checkpointspb.CheckpointsModel + ctx context.Context path string + fileName string + exStorage storage.ExternalStorage } -func NewFileCheckpointsDB(path string) *FileCheckpointsDB { +func newFileCheckpointsDB( + ctx context.Context, + path string, + exStorage storage.ExternalStorage, + fileName string, +) (*FileCheckpointsDB, error) { cpdb := &FileCheckpointsDB{ - path: path, checkpoints: checkpointspb.CheckpointsModel{ TaskCheckpoint: &checkpointspb.TaskCheckpointModel{}, Checkpoints: map[string]*checkpointspb.TableCheckpointModel{}, }, + ctx: ctx, + path: path, + fileName: fileName, + exStorage: exStorage, } - // ignore all errors -- file maybe not created yet (and it is fine). - content, err := os.ReadFile(path) - if err == nil { - err2 := cpdb.checkpoints.Unmarshal(content) - if err2 != nil { - log.L().Error("checkpoint file is broken", zap.String("path", path), zap.Error(err2)) - } - // FIXME: patch for empty map may need initialize manually, because currently - // FIXME: a map of zero size -> marshall -> unmarshall -> become nil, see checkpoint_test.go - if cpdb.checkpoints.Checkpoints == nil { - cpdb.checkpoints.Checkpoints = map[string]*checkpointspb.TableCheckpointModel{} - } - for _, table := range cpdb.checkpoints.Checkpoints { - if table.Engines == nil { - table.Engines = map[int32]*checkpointspb.EngineCheckpointModel{} - } - for _, engine := range table.Engines { - if engine.Chunks == nil { - engine.Chunks = map[string]*checkpointspb.ChunkCheckpointModel{} - } - } - } - } else { + + if cpdb.fileName == "" { + return nil, errors.Errorf("the checkpoint DSN '%s' must not be a directory", path) + } + + exist, err := cpdb.exStorage.FileExists(ctx, cpdb.fileName) + if err != nil { + return nil, errors.Trace(err) + } + if !exist { log.L().Info("open checkpoint file failed, going to create a new one", zap.String("path", path), log.ShortError(err), ) + return cpdb, nil + } + content, err := cpdb.exStorage.ReadFile(ctx, cpdb.fileName) + if err != nil { + return nil, errors.Trace(err) + } + err = cpdb.checkpoints.Unmarshal(content) + if err != nil { + log.L().Error("checkpoint file is broken", zap.String("path", path), zap.Error(err)) + } + // FIXME: patch for empty map may need initialize manually, because currently + // FIXME: a map of zero size -> marshall -> unmarshall -> become nil, see checkpoint_test.go + if cpdb.checkpoints.Checkpoints == nil { + cpdb.checkpoints.Checkpoints = map[string]*checkpointspb.TableCheckpointModel{} + } + for _, table := range cpdb.checkpoints.Checkpoints { + if table.Engines == nil { + table.Engines = map[int32]*checkpointspb.EngineCheckpointModel{} + } + for _, engine := range table.Engines { + if engine.Chunks == nil { + engine.Chunks = map[string]*checkpointspb.ChunkCheckpointModel{} + } + } } - return cpdb + return cpdb, nil } -func (cpdb *FileCheckpointsDB) save() error { - serialized, err := cpdb.checkpoints.Marshal() +func NewFileCheckpointsDB(ctx context.Context, path string) (*FileCheckpointsDB, error) { + // init ExternalStorage + s, fileName, err := createExstorageByCompletePath(ctx, path) if err != nil { - return errors.Trace(err) + return nil, errors.Trace(err) } - // because `os.WriteFile` is not atomic, directly write into it may reset the file - // to an empty file if write is not finished. - tmpPath := cpdb.path + ".tmp" - if err := os.WriteFile(tmpPath, serialized, 0o600); err != nil { - return errors.Trace(err) + return newFileCheckpointsDB(ctx, path, s, fileName) +} + +func NewFileCheckpointsDBWithExstorageFileName( + ctx context.Context, + path string, + s storage.ExternalStorage, + fileName string, +) (*FileCheckpointsDB, error) { + return newFileCheckpointsDB(ctx, path, s, fileName) +} + +// createExstorageByCompletePath create ExternalStorage by completePath and return fileName. +func createExstorageByCompletePath(ctx context.Context, completePath string) (storage.ExternalStorage, string, error) { + if completePath == "" { + return nil, "", nil + } + fileName, newPath, err := separateCompletePath(completePath) + if err != nil { + return nil, "", errors.Trace(err) + } + u, err := storage.ParseBackend(newPath, nil) + if err != nil { + return nil, "", errors.Trace(err) + } + s, err := storage.New(ctx, u, &storage.ExternalStorageOptions{}) + if err != nil { + return nil, "", errors.Trace(err) + } + return s, fileName, nil +} + +// separateCompletePath separates fileName from completePath, returns fileName and newPath. +func separateCompletePath(completePath string) (string, string, error) { + if completePath == "" { + return "", "", nil + } + var fileName, newPath string + purl, err := storage.ParseRawURL(completePath) + if err != nil { + return "", "", errors.Trace(err) } - if err := os.Rename(tmpPath, cpdb.path); err != nil { + // not url format, we don't use url library to avoid being escaped or unescaped + if purl.Scheme == "" { + // no fileName, just path + if strings.HasSuffix(completePath, "/") { + return "", completePath, nil + } + fileName = path.Base(completePath) + newPath = path.Dir(completePath) + } else { + if strings.HasSuffix(purl.Path, "/") { + return "", completePath, nil + } + fileName = path.Base(purl.Path) + purl.Path = path.Dir(purl.Path) + newPath = purl.String() + } + return fileName, newPath, nil +} + +func (cpdb *FileCheckpointsDB) save() error { + serialized, err := cpdb.checkpoints.Marshal() + if err != nil { return errors.Trace(err) } - return nil + return cpdb.exStorage.WriteFile(cpdb.ctx, cpdb.fileName, serialized) } func (cpdb *FileCheckpointsDB) Initialize(ctx context.Context, cfg *config.Config, dbInfo map[string]*TidbDBInfo) error { @@ -1352,9 +1440,12 @@ func (cpdb *MySQLCheckpointsDB) IgnoreErrorCheckpoint(ctx context.Context, table colName = columnTableName } + // nolint:gosec engineQuery := fmt.Sprintf(` UPDATE %s.%s SET status = %d WHERE %s = ? AND status <= %d; `, cpdb.schema, CheckpointTableNameEngine, CheckpointStatusLoaded, colName, CheckpointStatusMaxInvalid) + + // nolint:gosec tableQuery := fmt.Sprintf(` UPDATE %s.%s SET status = %d WHERE %s = ? AND status <= %d; `, cpdb.schema, CheckpointTableNameTable, CheckpointStatusLoaded, colName, CheckpointStatusMaxInvalid) @@ -1398,12 +1489,18 @@ func (cpdb *MySQLCheckpointsDB) DestroyErrorCheckpoint(ctx context.Context, tabl WHERE %[2]s = ? AND t.status <= %[3]d GROUP BY t.table_name; `, cpdb.schema, aliasedColName, CheckpointStatusMaxInvalid, CheckpointTableNameTable, CheckpointTableNameEngine) + + // nolint:gosec deleteChunkQuery := fmt.Sprintf(` DELETE FROM %[1]s.%[4]s WHERE table_name IN (SELECT table_name FROM %[1]s.%[5]s WHERE %[2]s = ? AND status <= %[3]d) `, cpdb.schema, colName, CheckpointStatusMaxInvalid, CheckpointTableNameChunk, CheckpointTableNameTable) + + // nolint:gosec deleteEngineQuery := fmt.Sprintf(` DELETE FROM %[1]s.%[4]s WHERE table_name IN (SELECT table_name FROM %[1]s.%[5]s WHERE %[2]s = ? AND status <= %[3]d) `, cpdb.schema, colName, CheckpointStatusMaxInvalid, CheckpointTableNameEngine, CheckpointTableNameTable) + + // nolint:gosec deleteTableQuery := fmt.Sprintf(` DELETE FROM %s.%s WHERE %s = ? AND status <= %d `, cpdb.schema, CheckpointTableNameTable, colName, CheckpointStatusMaxInvalid) @@ -1529,7 +1626,7 @@ func (cpdb *FileCheckpointsDB) RemoveCheckpoint(_ context.Context, tableName str if tableName == allTables { cpdb.checkpoints.Reset() - return errors.Trace(os.Remove(cpdb.path)) + return errors.Trace(cpdb.exStorage.DeleteFile(cpdb.ctx, cpdb.fileName)) } delete(cpdb.checkpoints.Checkpoints, tableName) @@ -1540,8 +1637,8 @@ func (cpdb *FileCheckpointsDB) MoveCheckpoints(ctx context.Context, taskID int64 cpdb.lock.Lock() defer cpdb.lock.Unlock() - newPath := fmt.Sprintf("%s.%d.bak", cpdb.path, taskID) - return errors.Trace(os.Rename(cpdb.path, newPath)) + newFileName := fmt.Sprintf("%s.%d.bak", cpdb.fileName, taskID) + return cpdb.exStorage.Rename(cpdb.ctx, cpdb.fileName, newFileName) } func (cpdb *FileCheckpointsDB) GetLocalStoringTables(_ context.Context) (map[string][]int32, error) { diff --git a/br/pkg/lightning/checkpoints/checkpoints_file_test.go b/br/pkg/lightning/checkpoints/checkpoints_file_test.go index 947819fd77999..5911b9952a1c2 100644 --- a/br/pkg/lightning/checkpoints/checkpoints_file_test.go +++ b/br/pkg/lightning/checkpoints/checkpoints_file_test.go @@ -28,12 +28,13 @@ func newTestConfig() *config.Config { func newFileCheckpointsDB(t *testing.T) (*checkpoints.FileCheckpointsDB, func()) { dir := t.TempDir() - cpdb := checkpoints.NewFileCheckpointsDB(filepath.Join(dir, "cp.pb")) ctx := context.Background() + cpdb, err := checkpoints.NewFileCheckpointsDB(ctx, filepath.Join(dir, "cp.pb")) + require.NoError(t, err) // 2. initialize with checkpoint data. cfg := newTestConfig() - err := cpdb.Initialize(ctx, cfg, map[string]*checkpoints.TidbDBInfo{ + err = cpdb.Initialize(ctx, cfg, map[string]*checkpoints.TidbDBInfo{ "db1": { Name: "db1", Tables: map[string]*checkpoints.TidbTableInfo{ diff --git a/br/pkg/lightning/checkpoints/checkpoints_test.go b/br/pkg/lightning/checkpoints/checkpoints_test.go index da15d1ad2c55a..7676809312d56 100644 --- a/br/pkg/lightning/checkpoints/checkpoints_test.go +++ b/br/pkg/lightning/checkpoints/checkpoints_test.go @@ -1,6 +1,7 @@ package checkpoints import ( + "context" "path/filepath" "testing" @@ -285,14 +286,56 @@ func TestApplyDiff(t *testing.T) { func TestCheckpointMarshallUnmarshall(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "filecheckpoint") - fileChkp := NewFileCheckpointsDB(path) + ctx := context.Background() + fileChkp, err := NewFileCheckpointsDB(ctx, path) + require.NoError(t, err) fileChkp.checkpoints.Checkpoints["a"] = &checkpointspb.TableCheckpointModel{ Status: uint32(CheckpointStatusLoaded), Engines: map[int32]*checkpointspb.EngineCheckpointModel{}, } - fileChkp.Close() + err = fileChkp.Close() + require.NoError(t, err) - fileChkp2 := NewFileCheckpointsDB(path) + fileChkp2, err := NewFileCheckpointsDB(ctx, path) + require.NoError(t, err) // if not recover empty map explicitly, it will become nil require.NotNil(t, fileChkp2.checkpoints.Checkpoints["a"].Engines) } + +func TestSeparateCompletePath(t *testing.T) { + + testCases := []struct { + complete string + expectFileName string + expectPath string + }{ + {"", "", ""}, + {"/a/", "", "/a/"}, + {"test.log", "test.log", "."}, + {"./test.log", "test.log", "."}, + {"./tmp/test.log", "test.log", "tmp"}, + {"tmp/test.log", "test.log", "tmp"}, + {"/test.log", "test.log", "/"}, + {"/tmp/test.log", "test.log", "/tmp"}, + {"/a%3F%2Fbc/a%3F%2Fbc.log", "a%3F%2Fbc.log", "/a%3F%2Fbc"}, + {"/a??bc/a??bc.log", "a??bc.log", "/a??bc"}, + {"/t-%C3%8B%21s%60t/t-%C3%8B%21s%60t.log", "t-%C3%8B%21s%60t.log", "/t-%C3%8B%21s%60t"}, + {"/t-Ë!s`t/t-Ë!s`t.log", "t-Ë!s`t.log", "/t-Ë!s`t"}, + {"file:///a%3F%2Fbc/a%3F%2Fcd.log", "cd.log", "file:///a%3F/bc/a%3F"}, + {"file:///a?/bc/a?/cd.log", "a", "file:///?/bc/a?/cd.log"}, + {"file:///a/?/bc/a?/cd.log", "", "file:///a/?/bc/a?/cd.log"}, + {"file:///t-%C3%8B%21s%60t/t-%C3%8B%21s%60t.log", "t-Ë!s`t.log", "file:///t-%C3%8B%21s%60t"}, + {"file:///t-Ë!s`t/t-Ë!s`t.log", "t-Ë!s`t.log", "file:///t-%C3%8B%21s%60t"}, + {"s3://bucket2/test.log", "test.log", "s3://bucket2/"}, + {"s3://bucket2/test/test.log", "test.log", "s3://bucket2/test"}, + {"s3://bucket3/prefix/test.log?access-key=NXN7IPIOSAAKDEEOLMAF&secret-access-key=nREY/7Dt+PaIbYKrKlEEMMF/ExCiJEX=XMLPUANw", "test.log", + "s3://bucket3/prefix?access-key=NXN7IPIOSAAKDEEOLMAF&secret-access-key=nREY/7Dt%2BPaIbYKrKlEEMMF/ExCiJEX=XMLPUANw"}, + } + + for _, testCase := range testCases { + fileName, newPath, err := separateCompletePath(testCase.complete) + require.NoError(t, err) + require.Equal(t, testCase.expectFileName, fileName) + require.Equal(t, testCase.expectPath, newPath) + } +} diff --git a/br/pkg/lightning/checkpoints/main_test.go b/br/pkg/lightning/checkpoints/main_test.go index 43a529e2dc1bf..a12dce75ecf1b 100644 --- a/br/pkg/lightning/checkpoints/main_test.go +++ b/br/pkg/lightning/checkpoints/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("github.com/klauspost/compress/zstd.(*blockDec).startDecoder"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/br/pkg/lightning/common/errors.go b/br/pkg/lightning/common/errors.go new file mode 100644 index 0000000000000..da9efab5b3087 --- /dev/null +++ b/br/pkg/lightning/common/errors.go @@ -0,0 +1,211 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 common + +import ( + "fmt" + "io" + "strings" + + "github.com/pingcap/errors" + berrors "github.com/pingcap/tidb/br/pkg/errors" +) + +var ( + ErrUnknown = errors.Normalize("unknown error", errors.RFCCodeText("Lightning:Common:ErrUnknown")) + ErrInvalidArgument = errors.Normalize("invalid argument", errors.RFCCodeText("Lightning:Common:ErrInvalidArgument")) + ErrVersionMismatch = errors.Normalize("version mismatch", errors.RFCCodeText("Lightning:Common:ErrVersionMismatch")) + + ErrReadConfigFile = errors.Normalize("cannot read config file '%s'", errors.RFCCodeText("Lightning:Config:ErrReadConfigFile")) + ErrParseConfigFile = errors.Normalize("cannot parse config file '%s'", errors.RFCCodeText("Lightning:Config:ErrParseConfigFile")) + ErrInvalidConfig = errors.Normalize("invalid config", errors.RFCCodeText("Lightning:Config:ErrInvalidConfig")) + ErrInvalidTLSConfig = errors.Normalize("invalid tls config", errors.RFCCodeText("Lightning:Config:ErrInvalidTLSConfig")) + ErrInvalidSortedKVDir = errors.Normalize("invalid sorted-kv-dir '%s' for local backend, please change the config or delete the path", errors.RFCCodeText("Lightning:Config:ErrInvalidSortedKVDir")) + + ErrStorageUnknown = errors.Normalize("unknown storage error", errors.RFCCodeText("Lightning:Storage:ErrStorageUnknown")) + ErrInvalidPermission = errors.Normalize("invalid permission", errors.RFCCodeText("Lightning:Storage:ErrInvalidPermission")) + ErrInvalidStorageConfig = errors.Normalize("invalid data-source-dir", errors.RFCCodeText("Lightning:Storage:ErrInvalidStorageConfig")) + ErrEmptySourceDir = errors.Normalize("data-source-dir '%s' doesn't exist or contains no files", errors.RFCCodeText("Lightning:Storage:ErrEmptySourceDir")) + + ErrTableRoute = errors.Normalize("table route error", errors.RFCCodeText("Lightning:Loader:ErrTableRoute")) + ErrInvalidSchemaFile = errors.Normalize("invalid schema file", errors.RFCCodeText("Lightning:Loader:ErrInvalidSchemaFile")) + + ErrSystemRequirementNotMet = errors.Normalize("system requirement not met", errors.RFCCodeText("Lightning:PreCheck:ErrSystemRequirementNotMet")) + ErrCheckpointSchemaConflict = errors.Normalize("checkpoint schema conflict", errors.RFCCodeText("Lightning:PreCheck:ErrCheckpointSchemaConflict")) + ErrPreCheckFailed = errors.Normalize("tidb-lightning pre-check failed: %s", errors.RFCCodeText("Lightning:PreCheck:ErrPreCheckFailed")) + ErrCheckClusterRegion = errors.Normalize("check tikv cluster region error", errors.RFCCodeText("Lightning:PreCheck:ErrCheckClusterRegion")) + ErrCheckLocalResource = errors.Normalize("check local storage resource error", errors.RFCCodeText("Lightning:PreCheck:ErrCheckLocalResource")) + ErrCheckTableEmpty = errors.Normalize("check table empty error", errors.RFCCodeText("Lightning:PreCheck:ErrCheckTableEmpty")) + ErrCheckCSVHeader = errors.Normalize("check csv header error", errors.RFCCodeText("Lightning:PreCheck:ErrCheckCSVHeader")) + ErrCheckDataSource = errors.Normalize("check data source error", errors.RFCCodeText("Lightning:PreCheck:ErrCheckDataSource")) + + ErrOpenCheckpoint = errors.Normalize("open checkpoint error", errors.RFCCodeText("Lightning:Checkpoint:ErrOpenCheckpoint")) + ErrReadCheckpoint = errors.Normalize("read checkpoint error", errors.RFCCodeText("Lightning:Checkpoint:ErrReadCheckpoint")) + ErrUpdateCheckpoint = errors.Normalize("update checkpoint error", errors.RFCCodeText("Lightning:Checkpoint:ErrUpdateCheckpoint")) + ErrUnknownCheckpointDriver = errors.Normalize("unknown checkpoint driver '%s'", errors.RFCCodeText("Lightning:Checkpoint:ErrUnknownCheckpointDriver")) + ErrInvalidCheckpoint = errors.Normalize("invalid checkpoint", errors.RFCCodeText("Lightning:Checkpoint:ErrInvalidCheckpoint")) + ErrCheckpointNotFound = errors.Normalize("checkpoint not found", errors.RFCCodeText("Lightning:Checkpoint:ErrCheckpointNotFound")) + ErrInitCheckpoint = errors.Normalize("init checkpoint error", errors.RFCCodeText("Lightning:Checkpoint:ErrInitCheckpoint")) + ErrCleanCheckpoint = errors.Normalize("clean checkpoint error", errors.RFCCodeText("Lightning:Checkpoint:ErrCleanCheckpoint")) + + ErrMetaMgrUnknown = errors.Normalize("unknown error occur on meta manager", errors.RFCCodeText("Lightning:MetaMgr:ErrMetaMgrUnknown")) + + ErrDBConnect = errors.Normalize("failed to connect database", errors.RFCCodeText("Lightning:DB:ErrDBConnect")) + ErrInitErrManager = errors.Normalize("init error manager error", errors.RFCCodeText("Lightning:DB:ErrInitErrManager")) + ErrInitMetaManager = errors.Normalize("init meta manager error", errors.RFCCodeText("Lightning:DB:ErrInitMetaManager")) + + ErrUpdatePD = errors.Normalize("update pd error", errors.RFCCodeText("Lightning:PD:ErrUpdatePD")) + ErrCreatePDClient = errors.Normalize("create pd client error", errors.RFCCodeText("Lightning:PD:ErrCreatePDClient")) + ErrPauseGC = errors.Normalize("pause gc error", errors.RFCCodeText("Lightning:PD:ErrPauseGC")) + + ErrCheckKVVersion = errors.Normalize("check tikv version error", errors.RFCCodeText("Lightning:KV:ErrCheckKVVersion")) + ErrCreateKVClient = errors.Normalize("create kv client error", errors.RFCCodeText("Lightning:KV:ErrCreateKVClient")) + ErrCheckMultiIngest = errors.Normalize("check multi-ingest support error", errors.RFCCodeText("Lightning:KV:ErrCheckMultiIngest")) + + ErrUnknownBackend = errors.Normalize("unknown backend %s", errors.RFCCodeText("Lightning:Restore:ErrUnknownBackend")) + ErrCheckLocalFile = errors.Normalize("cannot find local file for table: %s engineDir: %s", errors.RFCCodeText("Lightning:Restore:ErrCheckLocalFile")) + ErrOpenDuplicateDB = errors.Normalize("open duplicate db error", errors.RFCCodeText("Lightning:Restore:ErrOpenDuplicateDB")) + ErrSchemaNotExists = errors.Normalize("table `%s`.`%s` schema not found", errors.RFCCodeText("Lightning:Restore:ErrSchemaNotExists")) + ErrInvalidSchemaStmt = errors.Normalize("invalid schema statement: '%s'", errors.RFCCodeText("Lightning:Restore:ErrInvalidSchemaStmt")) + ErrCreateSchema = errors.Normalize("create schema failed, table: %s, stmt: %s", errors.RFCCodeText("Lightning:Restore:ErrCreateSchema")) + ErrUnknownColumns = errors.Normalize("unknown columns in header (%s) for table %s", errors.RFCCodeText("Lightning:Restore:ErrUnknownColumns")) + ErrChecksumMismatch = errors.Normalize("checksum mismatched remote vs local => (checksum: %d vs %d) (total_kvs: %d vs %d) (total_bytes:%d vs %d)", errors.RFCCodeText("Lighting:Restore:ErrChecksumMismatch")) + ErrRestoreTable = errors.Normalize("restore table %s failed", errors.RFCCodeText("Lightning:Restore:ErrRestoreTable")) + ErrEncodeKV = errors.Normalize("encode kv error in file %s at offset %d", errors.RFCCodeText("Lightning:Restore:ErrEncodeKV")) + ErrAllocTableRowIDs = errors.Normalize("allocate table row id error", errors.RFCCodeText("Lightning:Restore:ErrAllocTableRowIDs")) + ErrInvalidMetaStatus = errors.Normalize("invalid meta status: '%s'", errors.RFCCodeText("Lightning:Restore:ErrInvalidMetaStatus")) + ErrTableIsChecksuming = errors.Normalize("table '%s' is checksuming", errors.RFCCodeText("Lightning:Restore:ErrTableIsChecksuming")) +) + +type withStack struct { + error + errors.StackTracer +} + +func (w *withStack) Cause() error { + return w.error +} + +func (w *withStack) Unwrap() error { + return w.error +} + +func (w *withStack) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v", w.Cause()) + w.StackTrace().Format(s, verb) + return + } + fallthrough + case 's': + _, _ = io.WriteString(s, w.Error()) + case 'q': + fmt.Fprintf(s, "%q", w.Error()) + } +} + +// NormalizeError converts an arbitrary error to *errors.Error based above predefined errors. +// If the underlying err is already an *error.Error which is prefixed by "Lightning:", leave +// error ID unchanged. Otherwise, converts the error ID to Lightning's predefined error IDs. +func NormalizeError(err error) error { + if err == nil { + return nil + } + if IsContextCanceledError(err) { + return err + } + + // Retain the original stack tracer. + stackTracker, hasStack := err.(errors.StackTracer) + maybeAddStack := func(err error) error { + if !hasStack { + return err + } + return &withStack{error: err, StackTracer: stackTracker} + } + + // Find the underlying expectErr. + var normalizedErr *errors.Error + foundErr := errors.Find(err, func(e error) bool { + _, ok := e.(*errors.Error) + return ok + }) + if foundErr != nil { + normalizedErr = foundErr.(*errors.Error) + errMsg := err.Error() + nErrMsg := normalizedErr.Error() + // A workaround for https://github.com/pingcap/tidb/issues/32133. + // Ensure that error code description is always placed at the beginning of the error string. + if errMsg != nErrMsg && strings.HasSuffix(errMsg, ": "+nErrMsg) { + errMsg = errMsg[:len(errMsg)-len(nErrMsg)-2] + causeErr := normalizedErr.Unwrap() + normalizedErr = errors.Normalize(errMsg, errors.RFCCodeText(string(normalizedErr.RFCCode()))) + if causeErr != nil { + normalizedErr = normalizedErr.Wrap(causeErr) + } + err = maybeAddStack(normalizedErr) + } + } + + if normalizedErr != nil { + if strings.HasPrefix(string(normalizedErr.ID()), "Lightning:") { + return err + } + // Convert BR error id to Lightning error id. + var errID errors.ErrorID + switch normalizedErr.ID() { + case berrors.ErrStorageUnknown.ID(): + errID = ErrStorageUnknown.ID() + case berrors.ErrStorageInvalidConfig.ID(): + errID = ErrInvalidStorageConfig.ID() + case berrors.ErrStorageInvalidPermission.ID(): + errID = ErrInvalidPermission.ID() + case berrors.ErrPDUpdateFailed.ID(): + errID = ErrUpdatePD.ID() + case berrors.ErrVersionMismatch.ID(): + errID = ErrVersionMismatch.ID() + default: + errID = ErrUnknown.ID() + } + causeErr := normalizedErr.Unwrap() + normalizedErr = errors.Normalize(normalizedErr.GetMsg(), errors.RFCCodeText(string(errID))) + if causeErr != nil { + normalizedErr = normalizedErr.Wrap(causeErr) + } + err = maybeAddStack(normalizedErr) + } else { + err = ErrUnknown.Wrap(err) + } + // TODO: Do we need to optimize the output error messages for aws errors or gRPC errors. + return err +} + +// NormalizeOrWrapErr tries to normalize err. If the returned error is ErrUnknown, wraps it with the given rfcErr. +func NormalizeOrWrapErr(rfcErr *errors.Error, err error, args ...interface{}) error { + if err == nil { + return nil + } + if IsContextCanceledError(err) { + return err + } + normalizedErr := NormalizeError(err) + if berrors.Is(normalizedErr, ErrUnknown) { + return rfcErr.Wrap(err).GenWithStackByArgs(args...) + } else { + return normalizedErr + } +} diff --git a/br/pkg/lightning/common/errors_test.go b/br/pkg/lightning/common/errors_test.go new file mode 100644 index 0000000000000..f5dcff0ada801 --- /dev/null +++ b/br/pkg/lightning/common/errors_test.go @@ -0,0 +1,94 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 common + +import ( + "fmt" + "io" + "testing" + + "github.com/pingcap/errors" + berrors "github.com/pingcap/tidb/br/pkg/errors" + "github.com/stretchr/testify/require" +) + +func TestNormalizeError(t *testing.T) { + err := NormalizeError(nil) + require.NoError(t, err) + err = NormalizeError(io.EOF) + require.True(t, berrors.Is(err, ErrUnknown)) + + testCases := []struct { + rfcErr *errors.Error + errMsg string + expectErr *errors.Error + expectErrMsg string + }{ + { + rfcErr: berrors.ErrStorageUnknown, + errMsg: "ContentRange is empty", + expectErr: ErrStorageUnknown, + expectErrMsg: "[Lightning:Storage:ErrStorageUnknown]ContentRange is empty", + }, + { + rfcErr: berrors.ErrStorageInvalidConfig, + errMsg: "host not found in endpoint", + expectErr: ErrInvalidStorageConfig, + expectErrMsg: "[Lightning:Storage:ErrInvalidStorageConfig]host not found in endpoint", + }, + { + rfcErr: berrors.ErrStorageInvalidPermission, + errMsg: "check permission failed", + expectErr: ErrInvalidPermission, + expectErrMsg: "[Lightning:Storage:ErrInvalidPermission]check permission failed", + }, + { + rfcErr: berrors.ErrPDUpdateFailed, + errMsg: "create pd client failed", + expectErr: ErrUpdatePD, + expectErrMsg: "[Lightning:PD:ErrUpdatePD]create pd client failed", + }, + { + rfcErr: ErrInvalidConfig, + errMsg: "tikv-importer.backend must not be empty!", + expectErr: ErrInvalidConfig, + expectErrMsg: "[Lightning:Config:ErrInvalidConfig]tikv-importer.backend must not be empty!", + }, + } + + for _, tc := range testCases { + err = errors.Annotate(tc.rfcErr, tc.errMsg) + normalizedErr := NormalizeError(err) + require.Error(t, normalizedErr) + require.True(t, berrors.Is(normalizedErr, tc.expectErr)) + require.EqualError(t, normalizedErr, tc.expectErrMsg) + stackTrace, ok := normalizedErr.(errors.StackTracer) + require.True(t, ok) + errStack := fmt.Sprintf("%+v", err.(errors.StackTracer).StackTrace()) + errStack2 := fmt.Sprintf("%+v", stackTrace.StackTrace()) + require.Equal(t, errStack, errStack2) + } +} + +func TestNormalizeOrWrapErr(t *testing.T) { + err := NormalizeOrWrapErr(ErrInvalidArgument, nil) + require.NoError(t, err) + err = NormalizeOrWrapErr(ErrInvalidArgument, ErrInvalidConfig.GenWithStack("tikv-importer.backend must not be empty!")) + require.Error(t, err) + require.True(t, berrors.Is(err, ErrInvalidConfig)) + err = NormalizeOrWrapErr(ErrInvalidArgument, io.EOF) + require.Error(t, err) + require.True(t, berrors.Is(err, ErrInvalidArgument)) +} diff --git a/br/pkg/lightning/common/main_test.go b/br/pkg/lightning/common/main_test.go index 8182878986d18..716589aa28a7c 100644 --- a/br/pkg/lightning/common/main_test.go +++ b/br/pkg/lightning/common/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } goleak.VerifyTestMain(m, opts...) diff --git a/br/pkg/lightning/common/util.go b/br/pkg/lightning/common/util.go index c24ee74fe37a2..054edcbb17d90 100644 --- a/br/pkg/lightning/common/util.go +++ b/br/pkg/lightning/common/util.go @@ -17,6 +17,7 @@ package common import ( "context" "database/sql" + "encoding/base64" "encoding/json" "fmt" "io" @@ -27,9 +28,12 @@ import ( "syscall" "time" + "github.com/go-sql-driver/mysql" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/br/pkg/lightning/log" "github.com/pingcap/tidb/br/pkg/utils" + tmysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/parser/model" "go.uber.org/zap" ) @@ -64,13 +68,55 @@ func (param *MySQLConnectParam) ToDSN() string { return dsn } -func (param *MySQLConnectParam) Connect() (*sql.DB, error) { - db, err := sql.Open("mysql", param.ToDSN()) +func tryConnectMySQL(dsn string) (*sql.DB, error) { + driverName := "mysql" + failpoint.Inject("MockMySQLDriver", func(val failpoint.Value) { + driverName = val.(string) + }) + db, err := sql.Open(driverName, dsn) + if err != nil { + return nil, errors.Trace(err) + } + if err = db.Ping(); err != nil { + _ = db.Close() + return nil, errors.Trace(err) + } + return db, nil +} + +// ConnectMySQL connects MySQL with the dsn. If access is denied and the password is a valid base64 encoding, +// we will try to connect MySQL with the base64 decoding of the password. +func ConnectMySQL(dsn string) (*sql.DB, error) { + cfg, err := mysql.ParseDSN(dsn) if err != nil { return nil, errors.Trace(err) } + // Try plain password first. + db, firstErr := tryConnectMySQL(dsn) + if firstErr == nil { + return db, nil + } + // If access is denied and password is encoded by base64, try the decoded string as well. + if mysqlErr, ok := errors.Cause(firstErr).(*mysql.MySQLError); ok && mysqlErr.Number == tmysql.ErrAccessDenied { + // If password is encoded by base64, try the decoded string as well. + if password, decodeErr := base64.StdEncoding.DecodeString(cfg.Passwd); decodeErr == nil && string(password) != cfg.Passwd { + cfg.Passwd = string(password) + db, err = tryConnectMySQL(cfg.FormatDSN()) + if err == nil { + return db, nil + } + } + } + // If we can't connect successfully, return the first error. + return nil, errors.Trace(firstErr) +} - return db, errors.Trace(db.Ping()) +func (param *MySQLConnectParam) Connect() (*sql.DB, error) { + db, err := ConnectMySQL(param.ToDSN()) + if err != nil { + return nil, errors.Trace(err) + } + return db, nil } // IsDirExists checks if dir exists. diff --git a/br/pkg/lightning/common/util_test.go b/br/pkg/lightning/common/util_test.go index d06daa00b13f9..3b6ff5f92ef62 100644 --- a/br/pkg/lightning/common/util_test.go +++ b/br/pkg/lightning/common/util_test.go @@ -16,17 +16,26 @@ package common_test import ( "context" + "database/sql" + "database/sql/driver" + "encoding/base64" "encoding/json" + "fmt" "io" + "math/rand" "net/http" "net/http/httptest" + "strconv" "testing" "time" "github.com/DATA-DOG/go-sqlmock" + "github.com/go-sql-driver/mysql" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/br/pkg/lightning/common" "github.com/pingcap/tidb/br/pkg/lightning/log" + tmysql "github.com/pingcap/tidb/errno" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -92,6 +101,66 @@ func TestToDSN(t *testing.T) { require.Equal(t, "root:123456@tcp(127.0.0.1:4000)/?charset=utf8mb4&sql_mode='strict'&maxAllowedPacket=1234&tls=cluster&tidb_distsql_scan_concurrency='1'", param.ToDSN()) } +type mockDriver struct { + driver.Driver + plainPsw string +} + +func (m *mockDriver) Open(dsn string) (driver.Conn, error) { + cfg, err := mysql.ParseDSN(dsn) + if err != nil { + return nil, err + } + accessDenied := cfg.Passwd != m.plainPsw + return &mockConn{accessDenied: accessDenied}, nil +} + +type mockConn struct { + driver.Conn + driver.Pinger + accessDenied bool +} + +func (c *mockConn) Ping(ctx context.Context) error { + if c.accessDenied { + return &mysql.MySQLError{Number: tmysql.ErrAccessDenied, Message: "access denied"} + } + return nil +} + +func (c *mockConn) Close() error { + return nil +} + +func TestConnect(t *testing.T) { + plainPsw := "dQAUoDiyb1ucWZk7" + driverName := "mysql-mock-" + strconv.Itoa(rand.Int()) + sql.Register(driverName, &mockDriver{plainPsw: plainPsw}) + + require.NoError(t, failpoint.Enable( + "github.com/pingcap/tidb/br/pkg/lightning/common/MockMySQLDriver", + fmt.Sprintf("return(\"%s\")", driverName))) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/br/pkg/lightning/common/MockMySQLDriver")) + }() + + param := common.MySQLConnectParam{ + Host: "127.0.0.1", + Port: 4000, + User: "root", + Password: plainPsw, + SQLMode: "strict", + MaxAllowedPacket: 1234, + } + db, err := param.Connect() + require.NoError(t, err) + require.NoError(t, db.Close()) + param.Password = base64.StdEncoding.EncodeToString([]byte(plainPsw)) + db, err = param.Connect() + require.NoError(t, err) + require.NoError(t, db.Close()) +} + func TestIsContextCanceledError(t *testing.T) { require.True(t, common.IsContextCanceledError(context.Canceled)) require.False(t, common.IsContextCanceledError(io.EOF)) diff --git a/br/pkg/lightning/config/config.go b/br/pkg/lightning/config/config.go index 4193a9d879f91..7af314d55950d 100644 --- a/br/pkg/lightning/config/config.go +++ b/br/pkg/lightning/config/config.go @@ -33,12 +33,12 @@ import ( "github.com/docker/go-units" gomysql "github.com/go-sql-driver/mysql" "github.com/pingcap/errors" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" - router "github.com/pingcap/tidb-tools/pkg/table-router" "github.com/pingcap/tidb/br/pkg/lightning/common" "github.com/pingcap/tidb/br/pkg/lightning/log" tidbcfg "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/parser/mysql" + filter "github.com/pingcap/tidb/util/table-filter" + router "github.com/pingcap/tidb/util/table-router" "go.uber.org/atomic" "go.uber.org/zap" ) @@ -492,7 +492,7 @@ func (igCols AllIgnoreColumns) GetIgnoreColumns(db string, table string, caseSen } f, err := filter.Parse(ig.TableFilter) if err != nil { - return nil, errors.Trace(err) + return nil, common.ErrInvalidConfig.GenWithStack("invalid table filter %s in ignore columns", strings.Join(ig.TableFilter, ",")) } if f.MatchTable(db, table) { return igCols[i], nil @@ -806,22 +806,22 @@ func (cfg *Config) Adjust(ctx context.Context) error { // Reject problematic CSV configurations. csv := &cfg.Mydumper.CSV if len(csv.Separator) == 0 { - return errors.New("invalid config: `mydumper.csv.separator` must not be empty") + return common.ErrInvalidConfig.GenWithStack("`mydumper.csv.separator` must not be empty") } if len(csv.Delimiter) > 0 && (strings.HasPrefix(csv.Separator, csv.Delimiter) || strings.HasPrefix(csv.Delimiter, csv.Separator)) { - return errors.New("invalid config: `mydumper.csv.separator` and `mydumper.csv.delimiter` must not be prefix of each other") + return common.ErrInvalidConfig.GenWithStack("`mydumper.csv.separator` and `mydumper.csv.delimiter` must not be prefix of each other") } if csv.BackslashEscape { if csv.Separator == `\` { - return errors.New("invalid config: cannot use '\\' as CSV separator when `mydumper.csv.backslash-escape` is true") + return common.ErrInvalidConfig.GenWithStack("cannot use '\\' as CSV separator when `mydumper.csv.backslash-escape` is true") } if csv.Delimiter == `\` { - return errors.New("invalid config: cannot use '\\' as CSV delimiter when `mydumper.csv.backslash-escape` is true") + return common.ErrInvalidConfig.GenWithStack("cannot use '\\' as CSV delimiter when `mydumper.csv.backslash-escape` is true") } if csv.Terminator == `\` { - return errors.New("invalid config: cannot use '\\' as CSV terminator when `mydumper.csv.backslash-escape` is true") + return common.ErrInvalidConfig.GenWithStack("cannot use '\\' as CSV terminator when `mydumper.csv.backslash-escape` is true") } } @@ -830,11 +830,13 @@ func (cfg *Config) Adjust(ctx context.Context) error { if filepath.IsAbs(rule.Path) { relPath, err := filepath.Rel(cfg.Mydumper.SourceDir, rule.Path) if err != nil { - return errors.Trace(err) + return common.ErrInvalidConfig.Wrap(err). + GenWithStack("cannot find relative path for file route path %s", rule.Path) } // ".." means that this path is not in source dir, so we should return an error if strings.HasPrefix(relPath, "..") { - return errors.Errorf("file route path '%s' is not in source dir '%s'", rule.Path, cfg.Mydumper.SourceDir) + return common.ErrInvalidConfig.GenWithStack( + "file route path '%s' is not in source dir '%s'", rule.Path, cfg.Mydumper.SourceDir) } rule.Path = relPath } @@ -850,7 +852,7 @@ func (cfg *Config) Adjust(ctx context.Context) error { } charset, err1 := ParseCharset(cfg.Mydumper.DataCharacterSet) if err1 != nil { - return err1 + return common.ErrInvalidConfig.Wrap(err1).GenWithStack("invalid `mydumper.data-character-set`") } if charset == GBK || charset == GB18030 { log.L().Warn( @@ -860,7 +862,7 @@ func (cfg *Config) Adjust(ctx context.Context) error { } if cfg.TikvImporter.Backend == "" { - return errors.New("tikv-importer.backend must not be empty!") + return common.ErrInvalidConfig.GenWithStack("tikv-importer.backend must not be empty!") } cfg.TikvImporter.Backend = strings.ToLower(cfg.TikvImporter.Backend) mustHaveInternalConnections := true @@ -879,7 +881,7 @@ func (cfg *Config) Adjust(ctx context.Context) error { } cfg.DefaultVarsForImporterAndLocalBackend() default: - return errors.Errorf("invalid config: unsupported `tikv-importer.backend` (%s)", cfg.TikvImporter.Backend) + return common.ErrInvalidConfig.GenWithStack("unsupported `tikv-importer.backend` (%s)", cfg.TikvImporter.Backend) } // TODO calculate these from the machine's free memory. @@ -903,14 +905,15 @@ func (cfg *Config) Adjust(ctx context.Context) error { switch cfg.TikvImporter.OnDuplicate { case ReplaceOnDup, IgnoreOnDup, ErrorOnDup: default: - return errors.Errorf("invalid config: unsupported `tikv-importer.on-duplicate` (%s)", cfg.TikvImporter.OnDuplicate) + return common.ErrInvalidConfig.GenWithStack( + "unsupported `tikv-importer.on-duplicate` (%s)", cfg.TikvImporter.OnDuplicate) } } var err error cfg.TiDB.SQLMode, err = mysql.GetSQLMode(cfg.TiDB.StrSQLMode) if err != nil { - return errors.Annotate(err, "invalid config: `mydumper.tidb.sql_mode` must be a valid SQL_MODE") + return common.ErrInvalidConfig.Wrap(err).GenWithStack("`mydumper.tidb.sql_mode` must be a valid SQL_MODE") } if err := cfg.CheckAndAdjustSecurity(); err != nil { @@ -921,7 +924,7 @@ func (cfg *Config) Adjust(ctx context.Context) error { if cfg.HasLegacyBlackWhiteList() { log.L().Warn("the config `black-white-list` has been deprecated, please replace with `mydumper.filter`") if !common.StringSliceEqual(cfg.Mydumper.Filter, DefaultFilter) { - return errors.New("invalid config: `mydumper.filter` and `black-white-list` cannot be simultaneously defined") + return common.ErrInvalidConfig.GenWithStack("`mydumper.filter` and `black-white-list` cannot be simultaneously defined") } } @@ -930,7 +933,7 @@ func (cfg *Config) Adjust(ctx context.Context) error { rule.ToLower() } if err := rule.Valid(); err != nil { - return errors.Trace(err) + return common.ErrInvalidConfig.Wrap(err).GenWithStack("file route rule is invalid") } } @@ -944,7 +947,7 @@ func (cfg *Config) Adjust(ctx context.Context) error { func (cfg *Config) CheckAndAdjustForLocalBackend() error { if len(cfg.TikvImporter.SortedKVDir) == 0 { - return errors.Errorf("tikv-importer.sorted-kv-dir must not be empty!") + return common.ErrInvalidConfig.GenWithStack("tikv-importer.sorted-kv-dir must not be empty!") } storageSizeDir := filepath.Clean(cfg.TikvImporter.SortedKVDir) @@ -955,10 +958,11 @@ func (cfg *Config) CheckAndAdjustForLocalBackend() error { return nil case err == nil: if !sortedKVDirInfo.IsDir() { - return errors.Errorf("tikv-importer.sorted-kv-dir ('%s') is not a directory", storageSizeDir) + return common.ErrInvalidConfig. + GenWithStack("tikv-importer.sorted-kv-dir ('%s') is not a directory", storageSizeDir) } default: - return errors.Annotate(err, "invalid tikv-importer.sorted-kv-dir") + return common.ErrInvalidConfig.Wrap(err).GenWithStack("invalid tikv-importer.sorted-kv-dir") } return nil @@ -1009,7 +1013,7 @@ func (cfg *Config) CheckAndAdjustTiDBPort(ctx context.Context, mustHaveInternalC var settings tidbcfg.Config err = tls.GetJSON(ctx, "/settings", &settings) if err != nil { - return errors.Annotate(err, "cannot fetch settings from TiDB, please manually fill in `tidb.port` and `tidb.pd-addr`") + return common.ErrInvalidConfig.Wrap(err).GenWithStack("cannot fetch settings from TiDB, please manually fill in `tidb.port` and `tidb.pd-addr`") } if cfg.TiDB.Port <= 0 { cfg.TiDB.Port = int(settings.Port) @@ -1021,11 +1025,11 @@ func (cfg *Config) CheckAndAdjustTiDBPort(ctx context.Context, mustHaveInternalC } if cfg.TiDB.Port <= 0 { - return errors.New("invalid `tidb.port` setting") + return common.ErrInvalidConfig.GenWithStack("invalid `tidb.port` setting") } if mustHaveInternalConnections && len(cfg.TiDB.PdAddr) == 0 { - return errors.New("invalid `tidb.pd-addr` setting") + return common.ErrInvalidConfig.GenWithStack("invalid `tidb.pd-addr` setting") } return nil } @@ -1045,7 +1049,7 @@ func (cfg *Config) CheckAndAdjustFilePath() error { var err error u, err = url.Parse(cfg.Mydumper.SourceDir) if err != nil { - return errors.Trace(err) + return common.ErrInvalidConfig.Wrap(err).GenWithStack("cannot parse `mydumper.data-source-dir` %s", cfg.Mydumper.SourceDir) } } else { u = &url.URL{} @@ -1053,12 +1057,15 @@ func (cfg *Config) CheckAndAdjustFilePath() error { // convert path and relative path to a valid file url if u.Scheme == "" { + if cfg.Mydumper.SourceDir == "" { + return common.ErrInvalidConfig.GenWithStack("`mydumper.data-source-dir` is not set") + } if !common.IsDirExists(cfg.Mydumper.SourceDir) { - return errors.Errorf("%s: mydumper dir does not exist", cfg.Mydumper.SourceDir) + return common.ErrInvalidConfig.GenWithStack("'%s': `mydumper.data-source-dir` does not exist", cfg.Mydumper.SourceDir) } absPath, err := filepath.Abs(cfg.Mydumper.SourceDir) if err != nil { - return errors.Annotatef(err, "covert data-source-dir '%s' to absolute path failed", cfg.Mydumper.SourceDir) + return common.ErrInvalidConfig.Wrap(err).GenWithStack("covert data-source-dir '%s' to absolute path failed", cfg.Mydumper.SourceDir) } u.Path = filepath.ToSlash(absPath) u.Scheme = "file" @@ -1073,7 +1080,9 @@ func (cfg *Config) CheckAndAdjustFilePath() error { } } if !found { - return errors.Errorf("Unsupported data-source-dir url '%s'", cfg.Mydumper.SourceDir) + return common.ErrInvalidConfig.GenWithStack( + "unsupported data-source-dir url '%s', supported storage types are %s", + cfg.Mydumper.SourceDir, strings.Join(supportedStorageTypes, ",")) } return nil } @@ -1144,12 +1153,12 @@ func (cfg *Config) CheckAndAdjustSecurity() error { } case "cluster": if len(cfg.Security.CAPath) == 0 { - return errors.New("invalid config: cannot set `tidb.tls` to 'cluster' without a [security] section") + return common.ErrInvalidConfig.GenWithStack("cannot set `tidb.tls` to 'cluster' without a [security] section") } case "false", "skip-verify", "preferred": break default: - return errors.Errorf("invalid config: unsupported `tidb.tls` config %s", cfg.TiDB.TLS) + return common.ErrInvalidConfig.GenWithStack("unsupported `tidb.tls` config %s", cfg.TiDB.TLS) } return nil } diff --git a/br/pkg/lightning/config/config_test.go b/br/pkg/lightning/config/config_test.go index 97f702f85f30b..ce2d910102db4 100644 --- a/br/pkg/lightning/config/config_test.go +++ b/br/pkg/lightning/config/config_test.go @@ -139,7 +139,7 @@ func TestAdjustBackendNotSet(t *testing.T) { cfg := config.NewConfig() cfg.TiDB.DistSQLScanConcurrency = 1 err := cfg.Adjust(context.Background()) - require.EqualError(t, err, "tikv-importer.backend must not be empty!") + require.EqualError(t, err, "[Lightning:Config:ErrInvalidConfig]tikv-importer.backend must not be empty!") } func TestAdjustInvalidBackend(t *testing.T) { @@ -147,7 +147,7 @@ func TestAdjustInvalidBackend(t *testing.T) { cfg.TikvImporter.Backend = "no_such_backend" cfg.TiDB.DistSQLScanConcurrency = 1 err := cfg.Adjust(context.Background()) - require.EqualError(t, err, "invalid config: unsupported `tikv-importer.backend` (no_such_backend)") + require.EqualError(t, err, "[Lightning:Config:ErrInvalidConfig]unsupported `tikv-importer.backend` (no_such_backend)") } func TestCheckAndAdjustFilePath(t *testing.T) { @@ -239,7 +239,7 @@ func TestInvalidSetting(t *testing.T) { cfg.TiDB.DistSQLScanConcurrency = 1 err := cfg.Adjust(context.Background()) - require.EqualError(t, err, "invalid `tidb.port` setting") + require.EqualError(t, err, "[Lightning:Config:ErrInvalidConfig]invalid `tidb.port` setting") } func TestInvalidPDAddr(t *testing.T) { @@ -254,7 +254,7 @@ func TestInvalidPDAddr(t *testing.T) { cfg.TiDB.DistSQLScanConcurrency = 1 err := cfg.Adjust(context.Background()) - require.EqualError(t, err, "invalid `tidb.pd-addr` setting") + require.EqualError(t, err, "[Lightning:Config:ErrInvalidConfig]invalid `tidb.pd-addr` setting") } func TestAdjustWillNotContactServerIfEverythingIsDefined(t *testing.T) { @@ -377,7 +377,7 @@ func TestInvalidCSV(t *testing.T) { [mydumper.csv] separator = '' `, - err: "invalid config: `mydumper.csv.separator` must not be empty", + err: "[Lightning:Config:ErrInvalidConfig]`mydumper.csv.separator` must not be empty", }, { input: ` @@ -385,7 +385,7 @@ func TestInvalidCSV(t *testing.T) { separator = 'hello' delimiter = 'hel' `, - err: "invalid config: `mydumper.csv.separator` and `mydumper.csv.delimiter` must not be prefix of each other", + err: "[Lightning:Config:ErrInvalidConfig]`mydumper.csv.separator` and `mydumper.csv.delimiter` must not be prefix of each other", }, { input: ` @@ -393,7 +393,7 @@ func TestInvalidCSV(t *testing.T) { separator = 'hel' delimiter = 'hello' `, - err: "invalid config: `mydumper.csv.separator` and `mydumper.csv.delimiter` must not be prefix of each other", + err: "[Lightning:Config:ErrInvalidConfig]`mydumper.csv.separator` and `mydumper.csv.delimiter` must not be prefix of each other", }, { input: ` @@ -446,7 +446,7 @@ func TestInvalidCSV(t *testing.T) { separator = '|' delimiter = '|' `, - err: "invalid config: `mydumper.csv.separator` and `mydumper.csv.delimiter` must not be prefix of each other", + err: "[Lightning:Config:ErrInvalidConfig]`mydumper.csv.separator` and `mydumper.csv.delimiter` must not be prefix of each other", }, { input: ` @@ -454,7 +454,7 @@ func TestInvalidCSV(t *testing.T) { separator = '\' backslash-escape = true `, - err: "invalid config: cannot use '\\' as CSV separator when `mydumper.csv.backslash-escape` is true", + err: "[Lightning:Config:ErrInvalidConfig]cannot use '\\' as CSV separator when `mydumper.csv.backslash-escape` is true", }, { input: ` @@ -462,14 +462,14 @@ func TestInvalidCSV(t *testing.T) { delimiter = '\' backslash-escape = true `, - err: "invalid config: cannot use '\\' as CSV delimiter when `mydumper.csv.backslash-escape` is true", + err: "[Lightning:Config:ErrInvalidConfig]cannot use '\\' as CSV delimiter when `mydumper.csv.backslash-escape` is true", }, { input: ` [tidb] sql-mode = "invalid-sql-mode" `, - err: "invalid config: `mydumper.tidb.sql_mode` must be a valid SQL_MODE: ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'invalid-sql-mode'", + err: "[Lightning:Config:ErrInvalidConfig]`mydumper.tidb.sql_mode` must be a valid SQL_MODE: ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'invalid-sql-mode'", }, { input: ` @@ -477,7 +477,7 @@ func TestInvalidCSV(t *testing.T) { schema-pattern = "" table-pattern = "shard_table_*" `, - err: "schema pattern of table route rule should not be empty", + err: "[Lightning:Config:ErrInvalidConfig]file route rule is invalid: schema pattern of table route rule should not be empty", }, { input: ` @@ -485,7 +485,7 @@ func TestInvalidCSV(t *testing.T) { schema-pattern = "schema_*" table-pattern = "" `, - err: "target schema of table route rule should not be empty", + err: "[Lightning:Config:ErrInvalidConfig]file route rule is invalid: target schema of table route rule should not be empty", }, } @@ -565,7 +565,7 @@ func TestDuplicateResolutionAlgorithm(t *testing.T) { func TestLoadConfig(t *testing.T) { cfg, err := config.LoadGlobalConfig([]string{"-tidb-port", "sss"}, nil) - require.EqualError(t, err, `invalid value "sss" for flag -tidb-port: parse error`) + require.EqualError(t, err, `[Lightning:Common:ErrInvalidArgument]invalid argument: invalid value "sss" for flag -tidb-port: parse error`) require.Nil(t, cfg) cfg, err = config.LoadGlobalConfig([]string{"-V"}, nil) @@ -578,7 +578,7 @@ func TestLoadConfig(t *testing.T) { require.Nil(t, cfg) cfg, err = config.LoadGlobalConfig([]string{"--server-mode"}, nil) - require.EqualError(t, err, "If server-mode is enabled, the status-addr must be a valid listen address") + require.EqualError(t, err, "[Lightning:Config:ErrInvalidConfig]If server-mode is enabled, the status-addr must be a valid listen address") require.Nil(t, cfg) path, _ := filepath.Abs(".") @@ -755,7 +755,7 @@ func TestAdjustWithLegacyBlackWhiteList(t *testing.T) { require.False(t, cfg.HasLegacyBlackWhiteList()) cfg.BWList.DoDBs = []string{"test"} - require.EqualError(t, cfg.Adjust(ctx), "invalid config: `mydumper.filter` and `black-white-list` cannot be simultaneously defined") + require.EqualError(t, cfg.Adjust(ctx), "[Lightning:Config:ErrInvalidConfig]`mydumper.filter` and `black-white-list` cannot be simultaneously defined") cfg.Mydumper.Filter = config.DefaultFilter require.NoError(t, cfg.Adjust(ctx)) @@ -931,7 +931,7 @@ func TestCheckAndAdjustForLocalBackend(t *testing.T) { cfg.TikvImporter.Backend = config.BackendLocal cfg.TikvImporter.SortedKVDir = "" - require.EqualError(t, cfg.CheckAndAdjustForLocalBackend(), "tikv-importer.sorted-kv-dir must not be empty!") + require.EqualError(t, cfg.CheckAndAdjustForLocalBackend(), "[Lightning:Config:ErrInvalidConfig]tikv-importer.sorted-kv-dir must not be empty!") // non exists dir is legal cfg.TikvImporter.SortedKVDir = "./not-exists" diff --git a/br/pkg/lightning/config/global.go b/br/pkg/lightning/config/global.go index d9bd80ef4139a..5bba95ae3d4d4 100644 --- a/br/pkg/lightning/config/global.go +++ b/br/pkg/lightning/config/global.go @@ -24,6 +24,7 @@ import ( "github.com/BurntSushi/toml" "github.com/carlmjohnson/flagext" "github.com/pingcap/errors" + "github.com/pingcap/tidb/br/pkg/lightning/common" "github.com/pingcap/tidb/br/pkg/lightning/log" "github.com/pingcap/tidb/br/pkg/version/build" ) @@ -120,7 +121,7 @@ func Must(cfg *GlobalConfig, err error) *GlobalConfig { case flag.ErrHelp: os.Exit(0) default: - fmt.Println("Failed to parse command flags: ", err) + fmt.Println(err) os.Exit(2) } return cfg @@ -176,7 +177,7 @@ func LoadGlobalConfig(args []string, extraFlags func(*flag.FlagSet)) (*GlobalCon } if err := fs.Parse(args); err != nil { - return nil, errors.Trace(err) + return nil, common.ErrInvalidArgument.Wrap(err).GenWithStackByArgs() } if *printVersion { fmt.Println(build.Info()) @@ -186,10 +187,10 @@ func LoadGlobalConfig(args []string, extraFlags func(*flag.FlagSet)) (*GlobalCon if len(configFilePath) > 0 { data, err := os.ReadFile(configFilePath) if err != nil { - return nil, errors.Annotatef(err, "Cannot read config file `%s`", configFilePath) + return nil, common.ErrReadConfigFile.Wrap(err).GenWithStackByArgs(configFilePath) } if err = toml.Unmarshal(data, cfg); err != nil { - return nil, errors.Annotatef(err, "Cannot parse config file `%s`", configFilePath) + return nil, common.ErrParseConfigFile.Wrap(err).GenWithStackByArgs(configFilePath) } cfg.ConfigFileContent = data } @@ -274,7 +275,7 @@ func LoadGlobalConfig(args []string, extraFlags func(*flag.FlagSet)) (*GlobalCon } if cfg.App.StatusAddr == "" && cfg.App.ServerMode { - return nil, errors.New("If server-mode is enabled, the status-addr must be a valid listen address") + return nil, common.ErrInvalidConfig.GenWithStack("If server-mode is enabled, the status-addr must be a valid listen address") } cfg.App.Config.Adjust() diff --git a/br/pkg/lightning/lightning.go b/br/pkg/lightning/lightning.go index 23318d4c32012..4ad8622c8d5fb 100644 --- a/br/pkg/lightning/lightning.go +++ b/br/pkg/lightning/lightning.go @@ -30,6 +30,7 @@ import ( "sync" "time" + "github.com/google/uuid" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/import_sstpb" @@ -49,8 +50,6 @@ import ( "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/br/pkg/utils" "github.com/pingcap/tidb/br/pkg/version/build" - - "github.com/google/uuid" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/shurcooL/httpgzip" "go.uber.org/zap" @@ -188,6 +187,7 @@ func (l *Lightning) goServe(statusAddr string, realAddrWriter io.Writer) error { // use a default glue later. // - for lightning as a library, taskCtx could be a meaningful context that get canceled outside, and glue could be a // caller implemented glue. +// deprecated: use RunOnceWithOptions instead. func (l *Lightning) RunOnce(taskCtx context.Context, taskCfg *config.Config, glue glue.Glue) error { if err := taskCfg.Adjust(taskCtx); err != nil { return err @@ -198,7 +198,7 @@ func (l *Lightning) RunOnce(taskCtx context.Context, taskCfg *config.Config, glu taskCfg.TaskID = int64(val.(int)) }) - return l.run(taskCtx, taskCfg, glue) + return l.run(taskCtx, taskCfg, &options{glue: glue}) } func (l *Lightning) RunServer() error { @@ -223,12 +223,63 @@ func (l *Lightning) RunServer() error { } } +// RunOnceWithOptions is used by binary lightning and host when using lightning as a library. +// - for binary lightning, taskCtx could be context.Background which means taskCtx wouldn't be canceled directly by its +// cancel function, but only by Lightning.Stop or HTTP DELETE using l.cancel. No need to set Options +// - for lightning as a library, taskCtx could be a meaningful context that get canceled outside, and there Options may +// be used: +// - WithGlue: set a caller implemented glue. Otherwise, lightning will use a default glue later. +// - WithDumpFileStorage: caller has opened an external storage for lightning. Otherwise, lightning will open a +// storage by config +// - WithCheckpointStorage: caller has opened an external storage for lightning and want to save checkpoint +// in it. Otherwise, lightning will save checkpoint by the Checkpoint.DSN in config +func (l *Lightning) RunOnceWithOptions(taskCtx context.Context, taskCfg *config.Config, opts ...Option) error { + o := &options{} + for _, opt := range opts { + opt(o) + } + + failpoint.Inject("setExtStorage", func(val failpoint.Value) { + path := val.(string) + b, err := storage.ParseBackend(path, nil) + if err != nil { + panic(err) + } + s, err := storage.New(context.Background(), b, &storage.ExternalStorageOptions{}) + if err != nil { + panic(err) + } + o.dumpFileStorage = s + o.checkpointStorage = s + }) + failpoint.Inject("setCheckpointName", func(val failpoint.Value) { + file := val.(string) + o.checkpointName = file + }) + + if o.dumpFileStorage != nil { + // we don't use it, set a value to pass Adjust + taskCfg.Mydumper.SourceDir = "noop://" + } + + if err := taskCfg.Adjust(taskCtx); err != nil { + return err + } + + taskCfg.TaskID = time.Now().UnixNano() + failpoint.Inject("SetTaskID", func(val failpoint.Value) { + taskCfg.TaskID = int64(val.(int)) + }) + + return l.run(taskCtx, taskCfg, o) +} + var ( taskRunNotifyKey = "taskRunNotifyKey" taskCfgRecorderKey = "taskCfgRecorderKey" ) -func (l *Lightning) run(taskCtx context.Context, taskCfg *config.Config, g glue.Glue) (err error) { +func (l *Lightning) run(taskCtx context.Context, taskCfg *config.Config, o *options) (err error) { build.LogInfo(build.Lightning) log.L().Info("cfg", zap.Stringer("cfg", taskCfg)) @@ -267,7 +318,7 @@ func (l *Lightning) run(taskCtx context.Context, taskCfg *config.Config, g glue. }) if err := taskCfg.TiDB.Security.RegisterMySQL(); err != nil { - return err + return common.ErrInvalidTLSConfig.Wrap(err) } defer func() { // deregister TLS config with name "cluster" @@ -279,21 +330,25 @@ func (l *Lightning) run(taskCtx context.Context, taskCfg *config.Config, g glue. // initiation of default glue should be after RegisterMySQL, which is ready to be called after taskCfg.Adjust // and also put it here could avoid injecting another two SkipRunTask failpoint to caller + g := o.glue if g == nil { db, err := restore.DBFromConfig(ctx, taskCfg.TiDB) if err != nil { - return err + return common.ErrDBConnect.Wrap(err) } g = glue.NewExternalTiDBGlue(db, taskCfg.TiDB.SQLMode) } - u, err := storage.ParseBackend(taskCfg.Mydumper.SourceDir, nil) - if err != nil { - return errors.Annotate(err, "parse backend failed") - } - s, err := storage.New(ctx, u, &storage.ExternalStorageOptions{}) - if err != nil { - return errors.Annotate(err, "create storage failed") + s := o.dumpFileStorage + if s == nil { + u, err := storage.ParseBackend(taskCfg.Mydumper.SourceDir, nil) + if err != nil { + return common.NormalizeError(err) + } + s, err = storage.New(ctx, u, &storage.ExternalStorageOptions{}) + if err != nil { + return common.NormalizeError(err) + } } // return expectedErr means at least meet one file @@ -304,9 +359,9 @@ func (l *Lightning) run(taskCtx context.Context, taskCfg *config.Config, g glue. }) if !errors.ErrorEqual(walkErr, expectedErr) { if walkErr == nil { - return errors.Errorf("data-source-dir '%s' doesn't exist or contains no files", taskCfg.Mydumper.SourceDir) + return common.ErrEmptySourceDir.GenWithStackByArgs(taskCfg.Mydumper.SourceDir) } - return errors.Annotatef(walkErr, "visit data-source-dir '%s' failed", taskCfg.Mydumper.SourceDir) + return common.NormalizeOrWrapErr(common.ErrStorageUnknown, walkErr) } loadTask := log.L().Begin(zap.InfoLevel, "load data source") @@ -319,7 +374,7 @@ func (l *Lightning) run(taskCtx context.Context, taskCfg *config.Config, g glue. err = checkSystemRequirement(taskCfg, mdl.GetDatabases()) if err != nil { log.L().Error("check system requirements failed", zap.Error(err)) - return errors.Trace(err) + return common.ErrSystemRequirementNotMet.Wrap(err).GenWithStackByArgs() } // check table schema conflicts err = checkSchemaConflict(taskCfg, mdl.GetDatabases()) @@ -333,7 +388,17 @@ func (l *Lightning) run(taskCtx context.Context, taskCfg *config.Config, g glue. var procedure *restore.Controller - procedure, err = restore.NewRestoreController(ctx, dbMetas, taskCfg, &l.status, s, g) + param := &restore.ControllerParam{ + DBMetas: dbMetas, + Status: &l.status, + DumpFileStorage: s, + OwnExtStorage: o.dumpFileStorage == nil, + Glue: g, + CheckpointStorage: o.checkpointStorage, + CheckpointName: o.checkpointName, + } + + procedure, err = restore.NewRestoreController(ctx, taskCfg, param) if err != nil { log.L().Error("restore failed", log.ShortError(err)) return errors.Trace(err) @@ -727,7 +792,7 @@ func checkSchemaConflict(cfg *config.Config, dbsMeta []*mydump.MDDatabaseMeta) e if db.Name == cfg.Checkpoint.Schema { for _, tb := range db.Tables { if checkpoints.IsCheckpointTable(tb.Name) { - return errors.Errorf("checkpoint table `%s`.`%s` conflict with data files. Please change the `checkpoint.schema` config or set `checkpoint.driver` to \"file\" instead", db.Name, tb.Name) + return common.ErrCheckpointSchemaConflict.GenWithStack("checkpoint table `%s`.`%s` conflict with data files. Please change the `checkpoint.schema` config or set `checkpoint.driver` to \"file\" instead", db.Name, tb.Name) } } } diff --git a/br/pkg/lightning/lightning_serial_test.go b/br/pkg/lightning/lightning_serial_test.go index bd268c3d3c39f..1a9b0c9692495 100644 --- a/br/pkg/lightning/lightning_serial_test.go +++ b/br/pkg/lightning/lightning_serial_test.go @@ -54,13 +54,14 @@ func TestRun(t *testing.T) { cfg := config.NewConfig() err := cfg.LoadFromGlobal(globalConfig) require.NoError(t, err) - err = lightning.RunOnce(context.Background(), cfg, nil) + err = lightning.RunOnceWithOptions(context.Background(), cfg) require.Error(t, err) - require.Regexp(t, "mydumper dir does not exist$", err.Error()) + require.Regexp(t, "`mydumper.data-source-dir` does not exist$", err.Error()) path, _ := filepath.Abs(".") ctx := context.Background() invalidGlue := glue.NewExternalTiDBGlue(nil, 0) + o := &options{glue: invalidGlue} err = lightning.run(ctx, &config.Config{ Mydumper: config.MydumperRuntime{ SourceDir: "file://" + filepath.ToSlash(path), @@ -71,8 +72,8 @@ func TestRun(t *testing.T) { Enable: true, Driver: "invalid", }, - }, invalidGlue) - require.EqualError(t, err, "open checkpoint db failed: Unknown checkpoint driver invalid") + }, o) + require.EqualError(t, err, "[Lightning:Checkpoint:ErrUnknownCheckpointDriver]unknown checkpoint driver 'invalid'") err = lightning.run(ctx, &config.Config{ Mydumper: config.MydumperRuntime{ @@ -84,7 +85,7 @@ func TestRun(t *testing.T) { Driver: "file", DSN: "any-file", }, - }, invalidGlue) + }, o) require.Error(t, err) } diff --git a/br/pkg/lightning/lightning_server_serial_test.go b/br/pkg/lightning/lightning_server_serial_test.go index 8863bf648cc1e..478dafdcac68a 100644 --- a/br/pkg/lightning/lightning_server_serial_test.go +++ b/br/pkg/lightning/lightning_server_serial_test.go @@ -317,7 +317,7 @@ func TestHTTPAPIOutsideServerMode(t *testing.T) { err := cfg.LoadFromGlobal(s.lightning.globalCfg) require.NoError(t, err) go func() { - errCh <- s.lightning.RunOnce(s.lightning.ctx, cfg, nil) + errCh <- s.lightning.RunOnceWithOptions(s.lightning.ctx, cfg) }() time.Sleep(600 * time.Millisecond) diff --git a/br/pkg/lightning/log/log.go b/br/pkg/lightning/log/log.go index 97cbfdd8c0457..aa61023a29cc9 100644 --- a/br/pkg/lightning/log/log.go +++ b/br/pkg/lightning/log/log.go @@ -91,7 +91,7 @@ func InitLogger(cfg *Config, tidbLoglevel string) error { } filterTiDBLog := zap.WrapCore(func(core zapcore.Core) zapcore.Core { // Filter logs from TiDB and PD. - return NewFilterCore(core, "github.com/pingcap/tidb/br/") + return NewFilterCore(core, "github.com/pingcap/tidb/br/", "main.main") }) // "-" is a special config for log to stdout. if len(cfg.File) > 0 && cfg.File != "-" { diff --git a/br/pkg/lightning/mydump/loader.go b/br/pkg/lightning/mydump/loader.go index e50f61c1dce5a..14f9071e916c7 100644 --- a/br/pkg/lightning/mydump/loader.go +++ b/br/pkg/lightning/mydump/loader.go @@ -21,12 +21,12 @@ import ( "strings" "github.com/pingcap/errors" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" - router "github.com/pingcap/tidb-tools/pkg/table-router" "github.com/pingcap/tidb/br/pkg/lightning/common" "github.com/pingcap/tidb/br/pkg/lightning/config" "github.com/pingcap/tidb/br/pkg/lightning/log" "github.com/pingcap/tidb/br/pkg/storage" + regexprrouter "github.com/pingcap/tidb/util/regexpr-router" + filter "github.com/pingcap/tidb/util/table-filter" "go.uber.org/zap" ) @@ -38,7 +38,7 @@ type MDDatabaseMeta struct { charSet string } -func (m *MDDatabaseMeta) GetSchema(ctx context.Context, store storage.ExternalStorage) (string, error) { +func (m *MDDatabaseMeta) GetSchema(ctx context.Context, store storage.ExternalStorage) string { schema, err := ExportStatement(ctx, store, m.SchemaFile, m.charSet) if err != nil { log.L().Warn("failed to extract table schema", @@ -53,7 +53,7 @@ func (m *MDDatabaseMeta) GetSchema(ctx context.Context, store storage.ExternalSt schemaStr = "CREATE DATABASE IF NOT EXISTS " + common.EscapeIdentifier(m.Name) } - return schemaStr, nil + return schemaStr } type MDTableMeta struct { @@ -91,10 +91,11 @@ func (m *MDTableMeta) GetSchema(ctx context.Context, store storage.ExternalStora Mydumper File Loader */ type MDLoader struct { - store storage.ExternalStorage - dbs []*MDDatabaseMeta - filter filter.Filter - router *router.Table + store storage.ExternalStorage + dbs []*MDDatabaseMeta + filter filter.Filter + // router *router.Table + router *regexprrouter.RouteTable fileRouter FileRouter charSet string } @@ -112,28 +113,28 @@ type mdLoaderSetup struct { func NewMyDumpLoader(ctx context.Context, cfg *config.Config) (*MDLoader, error) { u, err := storage.ParseBackend(cfg.Mydumper.SourceDir, nil) if err != nil { - return nil, errors.Trace(err) + return nil, common.NormalizeError(err) } s, err := storage.New(ctx, u, &storage.ExternalStorageOptions{}) if err != nil { - return nil, errors.Trace(err) + return nil, common.NormalizeError(err) } return NewMyDumpLoaderWithStore(ctx, cfg, s) } func NewMyDumpLoaderWithStore(ctx context.Context, cfg *config.Config, store storage.ExternalStorage) (*MDLoader, error) { - var r *router.Table + var r *regexprrouter.RouteTable var err error if len(cfg.Routes) > 0 && len(cfg.Mydumper.FileRouters) > 0 { - return nil, errors.New("table route is deprecated, can't config both [routes] and [mydumper.files]") + return nil, common.ErrInvalidConfig.GenWithStack("table route is deprecated, can't config both [routes] and [mydumper.files]") } if len(cfg.Routes) > 0 { - r, err = router.NewTableRouter(cfg.Mydumper.CaseSensitive, cfg.Routes) + r, err = regexprrouter.NewRegExprRouter(cfg.Mydumper.CaseSensitive, cfg.Routes) if err != nil { - return nil, errors.Trace(err) + return nil, common.ErrInvalidConfig.Wrap(err).GenWithStack("invalid table route rule") } } @@ -145,7 +146,7 @@ func NewMyDumpLoaderWithStore(ctx context.Context, cfg *config.Config, store sto f, err = filter.Parse(cfg.Mydumper.Filter) } if err != nil { - return nil, errors.Annotate(err, "parse filter failed") + return nil, common.ErrInvalidConfig.Wrap(err).GenWithStack("parse filter failed") } if !cfg.Mydumper.CaseSensitive { f = filter.CaseInsensitive(f) @@ -158,7 +159,7 @@ func NewMyDumpLoaderWithStore(ctx context.Context, cfg *config.Config, store sto fileRouter, err := NewFileRouter(fileRouteRules) if err != nil { - return nil, errors.Annotate(err, "parser file routing rule failed") + return nil, common.ErrInvalidConfig.Wrap(err).GenWithStack("parse file routing rule failed") } mdl := &MDLoader{ @@ -230,17 +231,17 @@ func (s *mdLoaderSetup) setup(ctx context.Context, store storage.ExternalStorage sql —— {db}.{table}.{part}.sql / {db}.{table}.sql */ if err := s.listFiles(ctx, store); err != nil { - return errors.Annotate(err, "list file failed") + return common.ErrStorageUnknown.Wrap(err).GenWithStack("list file failed") } if err := s.route(); err != nil { - return errors.Trace(err) + return common.ErrTableRoute.Wrap(err).GenWithStackByArgs() } // setup database schema if len(s.dbSchemas) != 0 { for _, fileInfo := range s.dbSchemas { if _, dbExists := s.insertDB(fileInfo); dbExists && s.loader.router == nil { - return errors.Errorf("invalid database schema file, duplicated item - %s", fileInfo.FileMeta.Path) + return common.ErrInvalidSchemaFile.GenWithStack("invalid database schema file, duplicated item - %s", fileInfo.FileMeta.Path) } } } @@ -249,7 +250,7 @@ func (s *mdLoaderSetup) setup(ctx context.Context, store storage.ExternalStorage // setup table schema for _, fileInfo := range s.tableSchemas { if _, _, tableExists := s.insertTable(fileInfo); tableExists && s.loader.router == nil { - return errors.Errorf("invalid table schema file, duplicated item - %s", fileInfo.FileMeta.Path) + return common.ErrInvalidSchemaFile.GenWithStack("invalid table schema file, duplicated item - %s", fileInfo.FileMeta.Path) } } } @@ -261,7 +262,7 @@ func (s *mdLoaderSetup) setup(ctx context.Context, store storage.ExternalStorage if !tableExists { // we are not expect the user only has view schema without table schema when user use dumpling to get view. // remove the last `-view.sql` from path as the relate table schema file path - return errors.Errorf("invalid view schema file, miss host table schema for view '%s'", fileInfo.TableName.Name) + return common.ErrInvalidSchemaFile.GenWithStack("invalid view schema file, miss host table schema for view '%s'", fileInfo.TableName.Name) } } } diff --git a/br/pkg/lightning/mydump/loader_test.go b/br/pkg/lightning/mydump/loader_test.go index d694ce1e01674..23561dd6edae2 100644 --- a/br/pkg/lightning/mydump/loader_test.go +++ b/br/pkg/lightning/mydump/loader_test.go @@ -20,11 +20,11 @@ import ( "path/filepath" "testing" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" - router "github.com/pingcap/tidb-tools/pkg/table-router" "github.com/pingcap/tidb/br/pkg/lightning/config" md "github.com/pingcap/tidb/br/pkg/lightning/mydump" "github.com/pingcap/tidb/br/pkg/storage" + filter "github.com/pingcap/tidb/util/table-filter" + router "github.com/pingcap/tidb/util/table-router" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -181,8 +181,7 @@ func TestTableInfoNotFound(t *testing.T) { loader, err := md.NewMyDumpLoader(ctx, s.cfg) require.NoError(t, err) for _, dbMeta := range loader.GetDatabases() { - dbSQL, err := dbMeta.GetSchema(ctx, store) - require.NoError(t, err) + dbSQL := dbMeta.GetSchema(ctx, store) require.Equal(t, "CREATE DATABASE IF NOT EXISTS `db`", dbSQL) for _, tblMeta := range dbMeta.Tables { sql, err := tblMeta.GetSchema(ctx, store) @@ -364,6 +363,16 @@ func TestRouter(t *testing.T) { TargetSchema: "v", TargetTable: "vv", }, + { + SchemaPattern: "~.*regexpr[1-9]+", + TablePattern: "~.*regexprtable", + TargetSchema: "downstream_db", + TargetTable: "downstream_table", + }, + { + SchemaPattern: "~.bdb.*", + TargetSchema: "db", + }, } /* @@ -387,6 +396,12 @@ func TestRouter(t *testing.T) { e0-schema-create.sql e0.f0-schema.sql e0.f0-schema-view.sql + test_regexpr1-schema-create.sql + test_regexpr1.test_regexprtable-schema.sql + test_regexpr1.test_regexprtable.1.sql + zbdb-schema-create.sql + zbdb.table-schema.sql + zbdb.table.1.sql */ s.touch(t, "a0-schema-create.sql") @@ -413,6 +428,14 @@ func TestRouter(t *testing.T) { s.touch(t, "e0.f0-schema.sql") s.touch(t, "e0.f0-schema-view.sql") + s.touch(t, "test_regexpr1-schema-create.sql") + s.touch(t, "test_regexpr1.test_regexprtable-schema.sql") + s.touch(t, "test_regexpr1.test_regexprtable.1.sql") + + s.touch(t, "zbdb-schema-create.sql") + s.touch(t, "zbdb.table-schema.sql") + s.touch(t, "zbdb.table.1.sql") + mdl, err := md.NewMyDumpLoader(context.Background(), s.cfg) require.NoError(t, err) require.Equal(t, []*md.MDDatabaseMeta{ @@ -506,6 +529,35 @@ func TestRouter(t *testing.T) { }, }, }, + + { + Name: "downstream_db", + SchemaFile: md.FileInfo{TableName: filter.Table{Schema: "downstream_db", Name: ""}, FileMeta: md.SourceFileMeta{Path: "test_regexpr1-schema-create.sql", Type: md.SourceTypeSchemaSchema}}, + Tables: []*md.MDTableMeta{ + { + DB: "downstream_db", + Name: "downstream_table", + SchemaFile: md.FileInfo{TableName: filter.Table{Schema: "downstream_db", Name: "downstream_table"}, FileMeta: md.SourceFileMeta{Path: "test_regexpr1.test_regexprtable-schema.sql", Type: md.SourceTypeTableSchema}}, + DataFiles: []md.FileInfo{{TableName: filter.Table{Schema: "downstream_db", Name: "downstream_table"}, FileMeta: md.SourceFileMeta{Path: "test_regexpr1.test_regexprtable.1.sql", Type: md.SourceTypeSQL, SortKey: "1"}}}, + IndexRatio: 0.0, + IsRowOrdered: true, + }, + }, + }, + { + Name: "db", + SchemaFile: md.FileInfo{TableName: filter.Table{Schema: "db", Name: ""}, FileMeta: md.SourceFileMeta{Path: "zbdb-schema-create.sql", Type: md.SourceTypeSchemaSchema}}, + Tables: []*md.MDTableMeta{ + { + DB: "db", + Name: "table", + SchemaFile: md.FileInfo{TableName: filter.Table{Schema: "db", Name: "table"}, FileMeta: md.SourceFileMeta{Path: "zbdb.table-schema.sql", Type: md.SourceTypeTableSchema}}, + DataFiles: []md.FileInfo{{TableName: filter.Table{Schema: "db", Name: "table"}, FileMeta: md.SourceFileMeta{Path: "zbdb.table.1.sql", Type: md.SourceTypeSQL, SortKey: "1"}}}, + IndexRatio: 0.0, + IsRowOrdered: true, + }, + }, + }, }, mdl.GetDatabases()) } diff --git a/br/pkg/lightning/mydump/main_test.go b/br/pkg/lightning/mydump/main_test.go index cfed013442c98..12be83040f259 100644 --- a/br/pkg/lightning/mydump/main_test.go +++ b/br/pkg/lightning/mydump/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), goleak.IgnoreTopFunction("github.com/klauspost/compress/zstd.(*blockDec).startDecoder"), } diff --git a/br/pkg/lightning/mydump/region.go b/br/pkg/lightning/mydump/region.go index e694f25f743b1..73456d461bb0b 100644 --- a/br/pkg/lightning/mydump/region.go +++ b/br/pkg/lightning/mydump/region.go @@ -169,6 +169,7 @@ func MakeTableRegions( break } if err != nil { + log.L().Error("make source file region error", zap.Error(err), zap.String("file_path", info.FileMeta.Path)) break } } diff --git a/br/pkg/lightning/mydump/router.go b/br/pkg/lightning/mydump/router.go index 8c16039e63fbf..519644a8b9421 100644 --- a/br/pkg/lightning/mydump/router.go +++ b/br/pkg/lightning/mydump/router.go @@ -7,7 +7,7 @@ import ( "strings" "github.com/pingcap/errors" - "github.com/pingcap/tidb-tools/pkg/filter" + "github.com/pingcap/tidb/util/filter" "github.com/pingcap/tidb/util/slice" "go.uber.org/zap" diff --git a/br/pkg/lightning/mydump/router_test.go b/br/pkg/lightning/mydump/router_test.go index 9e4a4d7cd3f28..fd239688e72db 100644 --- a/br/pkg/lightning/mydump/router_test.go +++ b/br/pkg/lightning/mydump/router_test.go @@ -4,8 +4,8 @@ import ( "strings" "testing" - "github.com/pingcap/tidb-tools/pkg/filter" "github.com/pingcap/tidb/br/pkg/lightning/config" + "github.com/pingcap/tidb/util/filter" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/br/pkg/lightning/restore/check_info.go b/br/pkg/lightning/restore/check_info.go index ffb71f916e7e2..98c2c3b720fc0 100644 --- a/br/pkg/lightning/restore/check_info.go +++ b/br/pkg/lightning/restore/check_info.go @@ -30,10 +30,6 @@ import ( "github.com/docker/go-units" "github.com/pingcap/errors" "github.com/pingcap/failpoint" - "go.uber.org/zap" - "golang.org/x/sync/errgroup" - "modernc.org/mathutil" - "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/tidb/br/pkg/lightning/backend" "github.com/pingcap/tidb/br/pkg/lightning/backend/kv" @@ -52,6 +48,9 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/types" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" + "modernc.org/mathutil" ) const ( @@ -166,7 +165,7 @@ func (rc *Controller) clusterResource(ctx context.Context, localSource int64) er } // ClusterIsAvailable check cluster is available to import data. this test can be skipped. -func (rc *Controller) ClusterIsAvailable(ctx context.Context) error { +func (rc *Controller) ClusterIsAvailable(ctx context.Context) { passed := true message := "Cluster is available" defer func() { @@ -176,10 +175,10 @@ func (rc *Controller) ClusterIsAvailable(ctx context.Context) error { DBMetas: rc.dbMetas, } if err := rc.backend.CheckRequirements(ctx, checkCtx); err != nil { + err = common.NormalizeError(err) passed = false message = fmt.Sprintf("cluster available check failed: %s", err.Error()) } - return nil } func isTiFlash(store *pdtypes.MetaStore) bool { @@ -348,7 +347,6 @@ func (rc *Controller) checkClusterRegion(ctx context.Context) error { } // StoragePermission checks whether Lightning has enough permission to storage. -// this test cannot be skipped. func (rc *Controller) StoragePermission(ctx context.Context) error { passed := true message := "Lightning has the correct storage permission" @@ -358,7 +356,7 @@ func (rc *Controller) StoragePermission(ctx context.Context) error { u, err := storage.ParseBackend(rc.cfg.Mydumper.SourceDir, nil) if err != nil { - return errors.Annotate(err, "parse backend failed") + return common.NormalizeError(err) } _, err = storage.New(ctx, u, &storage.ExternalStorageOptions{ CheckPermissions: []storage.Permission{ @@ -376,7 +374,7 @@ func (rc *Controller) StoragePermission(ctx context.Context) error { // HasLargeCSV checks whether input csvs is fit for Lightning import. // If strictFormat is false, and csv file is large. Lightning will have performance issue. // this test cannot be skipped. -func (rc *Controller) HasLargeCSV(dbMetas []*mydump.MDDatabaseMeta) error { +func (rc *Controller) HasLargeCSV(dbMetas []*mydump.MDDatabaseMeta) { passed := true message := "Source csv files size is proper" defer func() { @@ -396,7 +394,6 @@ func (rc *Controller) HasLargeCSV(dbMetas []*mydump.MDDatabaseMeta) error { } else { message = "Skip the csv size check, because config.StrictFormat is true" } - return nil } func (rc *Controller) estimateSourceData(ctx context.Context) (int64, error) { @@ -507,18 +504,18 @@ func (rc *Controller) localResource(sourceSize int64) error { } // CheckpointIsValid checks whether we can start this import with this checkpoint. -func (rc *Controller) CheckpointIsValid(ctx context.Context, tableInfo *mydump.MDTableMeta) ([]string, bool, error) { +func (rc *Controller) CheckpointIsValid(ctx context.Context, tableInfo *mydump.MDTableMeta) ([]string, bool) { msgs := make([]string, 0) uniqueName := common.UniqueTable(tableInfo.DB, tableInfo.Name) tableCheckPoint, err := rc.checkpointsDB.Get(ctx, uniqueName) if err != nil { // there is no checkpoint log.L().Debug("no checkpoint detected", zap.String("table", uniqueName)) - return nil, true, nil + return nil, true } // if checkpoint enable and not missing, we skip the check table empty progress. if tableCheckPoint.Status <= checkpoints.CheckpointStatusMissing { - return nil, false, nil + return nil, false } if tableCheckPoint.Status <= checkpoints.CheckpointStatusMaxInvalid { @@ -540,7 +537,7 @@ func (rc *Controller) CheckpointIsValid(ctx context.Context, tableInfo *mydump.M "You may also run `./tidb-lightning-ctl --checkpoint-error-destroy=all --config=...` to start from scratch,"+ "For details of this failure, read the log file from the PREVIOUS run", uniqueName, failedStep.MetricName(), action.String())) - return msgs, false, nil + return msgs, false } dbInfo, ok := rc.dbInfos[tableInfo.DB] @@ -553,7 +550,7 @@ func (rc *Controller) CheckpointIsValid(ctx context.Context, tableInfo *mydump.M "You may also run `./tidb-lightning-ctl --checkpoint-error-destroy=all --config=...` to start from scratch,"+ "For details of this failure, read the log file from the PREVIOUS run", uniqueName)) - return msgs, false, nil + return msgs, false } } } @@ -574,7 +571,7 @@ func (rc *Controller) CheckpointIsValid(ctx context.Context, tableInfo *mydump.M } if len(columns) == 0 { log.L().Debug("no valid checkpoint detected", zap.String("table", uniqueName)) - return nil, false, nil + return nil, false } info := rc.dbInfos[tableInfo.DB].Tables[tableInfo.Name] if info != nil { @@ -588,7 +585,7 @@ func (rc *Controller) CheckpointIsValid(ctx context.Context, tableInfo *mydump.M "consider remove this checkpoint, and start import again.", uniqueName)) } } - return msgs, false, nil + return msgs, false } // hasDefault represents col has default value. @@ -1098,6 +1095,7 @@ func (rc *Controller) checkTableEmpty(ctx context.Context) error { concurrency := utils.MinInt(tableCount, rc.cfg.App.RegionConcurrency) ch := make(chan string, concurrency) eg, gCtx := errgroup.WithContext(ctx) + for i := 0; i < concurrency; i++ { eg.Go(func() error { for tblName := range ch { @@ -1126,9 +1124,15 @@ func (rc *Controller) checkTableEmpty(ctx context.Context) error { return nil }) } +loop: for _, db := range rc.dbMetas { for _, tbl := range db.Tables { - ch <- common.UniqueTable(tbl.DB, tbl.Name) + select { + case ch <- common.UniqueTable(tbl.DB, tbl.Name): + case <-gCtx.Done(): + break loop + } + } } close(ch) @@ -1136,7 +1140,7 @@ func (rc *Controller) checkTableEmpty(ctx context.Context) error { if common.IsContextCanceledError(err) { return nil } - return errors.Trace(err) + return errors.Annotate(err, "check table contains data failed") } if len(tableNames) > 0 { @@ -1148,13 +1152,20 @@ func (rc *Controller) checkTableEmpty(ctx context.Context) error { return nil } -func tableContainsData(ctx context.Context, db utils.QueryExecutor, tableName string) (bool, error) { +func tableContainsData(ctx context.Context, db utils.DBExecutor, tableName string) (bool, error) { + failpoint.Inject("CheckTableEmptyFailed", func() { + failpoint.Return(false, errors.New("mock error")) + }) query := "select 1 from " + tableName + " limit 1" + exec := common.SQLWithRetry{ + DB: db, + Logger: log.L(), + } var dump int - err := db.QueryRowContext(ctx, query).Scan(&dump) + err := exec.QueryRow(ctx, "check table empty", query, &dump) switch { - case err == sql.ErrNoRows: + case errors.ErrorEqual(err, sql.ErrNoRows): return false, nil case err != nil: return false, errors.Trace(err) diff --git a/br/pkg/lightning/restore/check_info_test.go b/br/pkg/lightning/restore/check_info_test.go index 4479cbbdc3a25..cfd9a00adc53a 100644 --- a/br/pkg/lightning/restore/check_info_test.go +++ b/br/pkg/lightning/restore/check_info_test.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/tidb/br/pkg/lightning/worker" "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" @@ -475,6 +476,9 @@ func TestCheckTableEmpty(t *testing.T) { require.NoError(t, err) rc.tidbGlue = glue.NewExternalTiDBGlue(db, mysql.ModeNone) mock.MatchExpectationsInOrder(false) + // test auto retry retryable error + mock.ExpectQuery("select 1 from `test1`.`tbl1` limit 1"). + WillReturnError(mysql.NewErr(errno.ErrPDServerTimeout)) mock.ExpectQuery("select 1 from `test1`.`tbl1` limit 1"). WillReturnRows(sqlmock.NewRows([]string{""}).RowError(0, sql.ErrNoRows)) mock.ExpectQuery("select 1 from `test1`.`tbl2` limit 1"). @@ -530,7 +534,8 @@ func TestCheckTableEmpty(t *testing.T) { }, } rc.cfg.Checkpoint.Enable = true - rc.checkpointsDB = checkpoints.NewFileCheckpointsDB(filepath.Join(dir, "cp.pb")) + rc.checkpointsDB, err = checkpoints.NewFileCheckpointsDB(ctx, filepath.Join(dir, "cp.pb")) + require.NoError(t, err) err = rc.checkpointsDB.Initialize(ctx, cfg, dbInfos) require.NoError(t, err) db, mock, err = sqlmock.New() @@ -542,6 +547,18 @@ func TestCheckTableEmpty(t *testing.T) { err = rc.checkTableEmpty(ctx) require.NoError(t, err) require.NoError(t, mock.ExpectationsWereMet()) + + err = failpoint.Enable("github.com/pingcap/tidb/br/pkg/lightning/restore/CheckTableEmptyFailed", `return`) + require.NoError(t, err) + defer func() { + _ = failpoint.Disable("github.com/pingcap/tidb/br/pkg/lightning/restore/CheckTableEmptyFailed") + }() + + // restrict the concurrency to ensure there are more tables than workers + rc.cfg.App.RegionConcurrency = 1 + // test check tables not stuck but return the right error + err = rc.checkTableEmpty(ctx) + require.Regexp(t, ".*check table contains data failed: mock error.*", err.Error()) } func TestLocalResource(t *testing.T) { diff --git a/br/pkg/lightning/restore/chunk_restore_test.go b/br/pkg/lightning/restore/chunk_restore_test.go index 4b238971fdbd5..bc683e8a1c36e 100644 --- a/br/pkg/lightning/restore/chunk_restore_test.go +++ b/br/pkg/lightning/restore/chunk_restore_test.go @@ -403,7 +403,7 @@ func (s *chunkRestoreSuite) TestEncodeLoopColumnsMismatch() { defer kvEncoder.Close() _, _, err = s.cr.encodeLoop(ctx, kvsCh, s.tr, s.tr.logger, kvEncoder, deliverCompleteCh, rc) - require.Equal(s.T(), "in file db.table.2.sql:0 at offset 4: column count mismatch, expected 3, got 2", err.Error()) + require.Equal(s.T(), "[Lightning:Restore:ErrEncodeKV]encode kv error in file db.table.2.sql:0 at offset 4: column count mismatch, expected 3, got 2", err.Error()) require.Len(s.T(), kvsCh, 0) } diff --git a/br/pkg/lightning/restore/meta_manager.go b/br/pkg/lightning/restore/meta_manager.go index b0b08c905a1e5..6c009279e9e0f 100644 --- a/br/pkg/lightning/restore/meta_manager.go +++ b/br/pkg/lightning/restore/meta_manager.go @@ -156,7 +156,7 @@ func parseMetaStatus(s string) (metaStatus, error) { case "finish": return metaStatusFinished, nil default: - return metaStatusInitial, errors.Errorf("invalid meta status '%s'", s) + return metaStatusInitial, common.ErrInvalidMetaStatus.GenWithStackByArgs(s) } } @@ -200,7 +200,7 @@ func (m *dbTableMetaMgr) AllocTableRowIDs(ctx context.Context, rawRowIDMax int64 } status, err := parseMetaStatus(statusValue) if err != nil { - return errors.Annotatef(err, "invalid meta status '%s'", statusValue) + return err } // skip finished meta @@ -209,7 +209,7 @@ func (m *dbTableMetaMgr) AllocTableRowIDs(ctx context.Context, rawRowIDMax int64 } if status == metaStatusChecksuming { - return errors.New("target table is calculating checksum, please wait unit the checksum is finished and try again.") + return common.ErrAllocTableRowIDs.GenWithStack("Target table is calculating checksum. Please wait until the checksum is finished and try again.") } if metaTaskID == m.taskID { @@ -219,7 +219,7 @@ func (m *dbTableMetaMgr) AllocTableRowIDs(ctx context.Context, rawRowIDMax int64 baseTotalBytes = totalBytes if status >= metaStatusRowIDAllocated { if rowIDMax-rowIDBase != rawRowIDMax { - return errors.Errorf("verify allocator base failed. local: '%d', meta: '%d'", rawRowIDMax, rowIDMax-rowIDBase) + return common.ErrAllocTableRowIDs.GenWithStack("verify allocator base failed. local: '%d', meta: '%d'", rawRowIDMax, rowIDMax-rowIDBase) } newRowIDBase = rowIDBase newRowIDMax = rowIDMax @@ -260,7 +260,7 @@ func (m *dbTableMetaMgr) AllocTableRowIDs(ctx context.Context, rawRowIDMax int64 autoIDField = model.ExtraHandleName.L } if len(autoIDField) == 0 { - return errors.Errorf("table %s contains auto increment id or _tidb_rowid, but target field not found", m.tr.tableName) + return common.ErrAllocTableRowIDs.GenWithStack("table %s contains auto increment id or _tidb_rowid, but target field not found", m.tr.tableName) } autoIDInfos, err := tidb.FetchTableAutoIDInfos(ctx, tx, m.tr.tableName) @@ -276,7 +276,7 @@ func (m *dbTableMetaMgr) AllocTableRowIDs(ctx context.Context, rawRowIDMax int64 } } if !found { - return errors.Errorf("can't fetch previous auto id base for table %s field '%s'", m.tr.tableName, autoIDField) + return common.ErrAllocTableRowIDs.GenWithStack("can't fetch previous auto id base for table %s field '%s'", m.tr.tableName, autoIDField) } } newRowIDBase = maxRowIDMax @@ -285,6 +285,8 @@ func (m *dbTableMetaMgr) AllocTableRowIDs(ctx context.Context, rawRowIDMax int64 if needAutoID && newRowIDBase == 0 && newStatus < metaStatusRestoreStarted { newStatus = metaStatusRestoreStarted } + + // nolint:gosec query := fmt.Sprintf("update %s set row_id_base = ?, row_id_max = ?, status = ? where table_id = ? and task_id = ?", m.tableName) _, err := tx.ExecContext(ctx, query, newRowIDBase, newRowIDMax, newStatus.String(), m.tr.tableInfo.ID, m.taskID) if err != nil { @@ -408,7 +410,7 @@ func (m *dbTableMetaMgr) CheckAndUpdateLocalChecksum(ctx context.Context, checks } status, err := parseMetaStatus(statusValue) if err != nil { - return errors.Annotatef(err, "invalid meta status '%s'", statusValue) + return err } if taskHasDuplicates { @@ -437,7 +439,7 @@ func (m *dbTableMetaMgr) CheckAndUpdateLocalChecksum(ctx context.Context, checks needRemoteDupe = false break } else if status == metaStatusChecksuming { - return errors.New("another task is checksuming, there must be something wrong!") + return common.ErrTableIsChecksuming.GenWithStackByArgs(m.tableName) } totalBytes += baseTotalBytes @@ -454,6 +456,7 @@ func (m *dbTableMetaMgr) CheckAndUpdateLocalChecksum(ctx context.Context, checks return errors.Trace(rows.Err()) } + // nolint:gosec query := fmt.Sprintf("update %s set total_kvs = ?, total_bytes = ?, checksum = ?, status = ?, has_duplicates = ? where table_id = ? and task_id = ?", m.tableName) _, err = tx.ExecContext(ctx, query, checksum.SumKVS(), checksum.SumSize(), checksum.Sum(), newStatus.String(), hasLocalDupes, m.tr.tableInfo.ID, m.taskID) return errors.Annotate(err, "update local checksum failed") @@ -562,7 +565,7 @@ func parseTaskMetaStatus(s string) (taskMetaStatus, error) { case "switched": return taskMetaStatusSwitchBack, nil default: - return taskMetaStatusInitial, errors.Errorf("invalid meta status '%s'", s) + return taskMetaStatusInitial, common.ErrInvalidMetaStatus.GenWithStackByArgs(s) } } @@ -661,7 +664,7 @@ func (m *dbTaskMetaMgr) CheckTasksExclusively(ctx context.Context, action func(t } status, err := parseTaskMetaStatus(statusValue) if err != nil { - return errors.Annotatef(err, "invalid task meta status '%s'", statusValue) + return err } task.status = status tasks = append(tasks, task) @@ -674,6 +677,7 @@ func (m *dbTaskMetaMgr) CheckTasksExclusively(ctx context.Context, action func(t return errors.Trace(err) } for _, task := range newTasks { + // nolint:gosec query := fmt.Sprintf("REPLACE INTO %s (task_id, pd_cfgs, status, state, source_bytes, cluster_avail) VALUES(?, ?, ?, ?, ?, ?)", m.tableName) if _, err = tx.ExecContext(ctx, query, task.taskID, task.pdCfgs, task.status.String(), task.state, task.sourceBytes, task.clusterAvail); err != nil { return errors.Trace(err) @@ -731,7 +735,7 @@ func (m *dbTaskMetaMgr) CheckAndPausePdSchedulers(ctx context.Context) (pdutil.U } status, err := parseTaskMetaStatus(statusValue) if err != nil { - return errors.Annotatef(err, "invalid task meta status '%s'", statusValue) + return err } if status == taskMetaStatusInitial { @@ -781,6 +785,7 @@ func (m *dbTaskMetaMgr) CheckAndPausePdSchedulers(ctx context.Context) (pdutil.U return errors.Trace(err) } + // nolint:gosec query := fmt.Sprintf("update %s set pd_cfgs = ?, status = ? where task_id = ?", m.tableName) _, err = tx.ExecContext(ctx, query, string(jsonByts), taskMetaStatusScheduleSet.String(), m.taskID) @@ -856,7 +861,7 @@ func (m *dbTaskMetaMgr) CheckAndFinishRestore(ctx context.Context, finished bool } status, err := parseTaskMetaStatus(statusValue) if err != nil { - return errors.Annotatef(err, "invalid task meta status '%s'", statusValue) + return err } if taskID == m.taskID { @@ -893,6 +898,7 @@ func (m *dbTaskMetaMgr) CheckAndFinishRestore(ctx context.Context, finished bool newStatus = taskMetaStatusSwitchSkipped } + // nolint:gosec query := fmt.Sprintf("update %s set status = ?, state = ? where task_id = ?", m.tableName) if _, err = tx.ExecContext(ctx, query, newStatus.String(), newState, m.taskID); err != nil { return errors.Trace(err) diff --git a/br/pkg/lightning/restore/restore.go b/br/pkg/lightning/restore/restore.go index df888dd81bd24..b71b97d312152 100644 --- a/br/pkg/lightning/restore/restore.go +++ b/br/pkg/lightning/restore/restore.go @@ -262,6 +262,7 @@ type Controller struct { closedEngineLimit *worker.Pool store storage.ExternalStorage + ownStore bool metaMgrBuilder metaMgrBuilder errorMgr *errormanager.ErrorManager taskMgr taskMetaMgr @@ -277,39 +278,65 @@ type LightningStatus struct { TotalFileSize atomic.Int64 } +// ControllerParam contains many parameters for creating a Controller. +type ControllerParam struct { + // databases that dumper created + DBMetas []*mydump.MDDatabaseMeta + // a pointer to status to report it to caller + Status *LightningStatus + // storage interface to read the dump data + DumpFileStorage storage.ExternalStorage + // true if DumpFileStorage is created by lightning. In some cases where lightning is a library, the framework may pass an DumpFileStorage + OwnExtStorage bool + // used by lightning server mode to pause tasks + Pauser *common.Pauser + // lightning via SQL will implement its glue, to let lightning use host TiDB's environment + Glue glue.Glue + // storage interface to write file checkpoints + CheckpointStorage storage.ExternalStorage + // when CheckpointStorage is not nil, save file checkpoint to it with this name + CheckpointName string +} + func NewRestoreController( ctx context.Context, - dbMetas []*mydump.MDDatabaseMeta, cfg *config.Config, - status *LightningStatus, - s storage.ExternalStorage, - g glue.Glue, + param *ControllerParam, ) (*Controller, error) { - return NewRestoreControllerWithPauser(ctx, dbMetas, cfg, status, s, DeliverPauser, g) + param.Pauser = DeliverPauser + return NewRestoreControllerWithPauser(ctx, cfg, param) } func NewRestoreControllerWithPauser( ctx context.Context, - dbMetas []*mydump.MDDatabaseMeta, cfg *config.Config, - status *LightningStatus, - s storage.ExternalStorage, - pauser *common.Pauser, - g glue.Glue, + p *ControllerParam, ) (*Controller, error) { tls, err := cfg.ToTLS() if err != nil { return nil, err } - cpdb, err := g.OpenCheckpointsDB(ctx, cfg) - if err != nil { - return nil, errors.Annotate(err, "open checkpoint db failed") + var cpdb checkpoints.DB + // if CheckpointStorage is set, we should use given ExternalStorage to create checkpoints. + if p.CheckpointStorage != nil { + cpdb, err = checkpoints.NewFileCheckpointsDBWithExstorageFileName(ctx, p.CheckpointStorage.URI(), p.CheckpointStorage, p.CheckpointName) + if err != nil { + return nil, common.ErrOpenCheckpoint.Wrap(err).GenWithStackByArgs() + } + } else { + cpdb, err = p.Glue.OpenCheckpointsDB(ctx, cfg) + if err != nil { + if berrors.Is(err, common.ErrUnknownCheckpointDriver) { + return nil, err + } + return nil, common.ErrOpenCheckpoint.Wrap(err).GenWithStackByArgs() + } } taskCp, err := cpdb.TaskCheckpoint(ctx) if err != nil { - return nil, errors.Annotate(err, "get task checkpoint failed") + return nil, common.ErrReadCheckpoint.Wrap(err).GenWithStack("get task checkpoint failed") } if err := verifyCheckpoint(cfg, taskCp); err != nil { return nil, errors.Trace(err) @@ -320,13 +347,13 @@ func NewRestoreControllerWithPauser( } // TODO: support Lightning via SQL - db, err := g.GetDB() + db, err := p.Glue.GetDB() if err != nil { return nil, errors.Trace(err) } errorMgr := errormanager.New(db, cfg) if err := errorMgr.Init(ctx); err != nil { - return nil, errors.Annotate(err, "failed to init error manager") + return nil, common.ErrInitErrManager.Wrap(err).GenWithStackByArgs() } var backend backend.Backend @@ -338,10 +365,6 @@ func NewRestoreControllerWithPauser( return nil, errors.Annotate(err, "open importer backend failed") } case config.BackendTiDB: - db, err := g.GetDB() - if err != nil { - return nil, errors.Annotate(err, "open tidb backend failed") - } backend = tidb.NewTiDBBackend(db, cfg.TikvImporter.OnDuplicate, errorMgr) case config.BackendLocal: var rLimit local.Rlim_t @@ -361,21 +384,21 @@ func NewRestoreControllerWithPauser( log.L().Warn("TiKV version doesn't support duplicate resolution. The resolution algorithm will fall back to 'none'", zap.Error(err)) cfg.TikvImporter.DuplicateResolution = config.DupeResAlgNone } else { - return nil, errors.Annotate(err, "check TiKV version for duplicate resolution failed") + return nil, common.ErrCheckKVVersion.Wrap(err).GenWithStackByArgs() } } } - backend, err = local.NewLocalBackend(ctx, tls, cfg, g, maxOpenFiles, errorMgr) + backend, err = local.NewLocalBackend(ctx, tls, cfg, p.Glue, maxOpenFiles, errorMgr) if err != nil { - return nil, errors.Annotate(err, "build local backend failed") + return nil, common.NormalizeOrWrapErr(common.ErrUnknown, err) } err = verifyLocalFile(ctx, cpdb, cfg.TikvImporter.SortedKVDir) if err != nil { return nil, err } default: - return nil, errors.New("unknown backend: " + cfg.TikvImporter.Backend) + return nil, common.ErrUnknownBackend.GenWithStackByArgs(cfg.TikvImporter.Backend) } var metaBuilder metaMgrBuilder @@ -396,15 +419,15 @@ func NewRestoreControllerWithPauser( rc := &Controller{ cfg: cfg, - dbMetas: dbMetas, + dbMetas: p.DBMetas, tableWorkers: nil, indexWorkers: nil, regionWorkers: worker.NewPool(ctx, cfg.App.RegionConcurrency, "region"), ioWorkers: worker.NewPool(ctx, cfg.App.IOConcurrency, "io"), checksumWorks: worker.NewPool(ctx, cfg.TiDB.ChecksumTableConcurrency, "checksum"), - pauser: pauser, + pauser: p.Pauser, backend: backend, - tidbGlue: g, + tidbGlue: p.Glue, sysVars: defaultImportantVariables, tls: tls, checkTemplate: NewSimpleTemplate(), @@ -414,11 +437,12 @@ func NewRestoreControllerWithPauser( saveCpCh: make(chan saveCp), closedEngineLimit: worker.NewPool(ctx, cfg.App.TableConcurrency*2, "closed-engine"), - store: s, + store: p.DumpFileStorage, + ownStore: p.OwnExtStorage, metaMgrBuilder: metaBuilder, errorMgr: errorMgr, diskQuotaLock: newDiskQuotaLock(), - status: status, + status: p.Status, taskMgr: nil, } @@ -534,10 +558,7 @@ func (worker *restoreSchemaWorker) makeJobs( var err error // 1. restore databases, execute statements concurrency for _, dbMeta := range dbMetas { - sql, err := dbMeta.GetSchema(worker.ctx, worker.store) - if err != nil { - return err - } + sql := dbMeta.GetSchema(worker.ctx, worker.store) err = worker.addJob(sql, &schemaJob{ dbName: dbMeta.Name, tblName: "", @@ -565,7 +586,7 @@ func (worker *restoreSchemaWorker) makeJobs( // we should skip ddl job and let SchemaValid check. continue } else if tblMeta.SchemaFile.FileMeta.Path == "" { - return errors.Errorf("table `%s`.`%s` schema not found", dbMeta.Name, tblMeta.Name) + return common.ErrSchemaNotExists.GenWithStackByArgs(dbMeta.Name, tblMeta.Name) } sql, err := tblMeta.GetSchema(worker.ctx, worker.store) if err != nil { @@ -661,7 +682,7 @@ loop: err = sqlWithRetry.Exec(worker.ctx, "run create schema job", stmt) task.End(zap.ErrorLevel, err) if err != nil { - err = errors.Annotatef(err, "%s %s failed", job.stmtType.String(), common.UniqueTable(job.dbName, job.tblName)) + err = common.ErrCreateSchema.Wrap(err).GenWithStackByArgs(common.UniqueTable(job.dbName, job.tblName), job.stmtType.String()) worker.wg.Done() worker.throw(err) // don't return @@ -773,7 +794,7 @@ func (rc *Controller) initCheckpoint(ctx context.Context) error { // Load new checkpoints err := rc.checkpointsDB.Initialize(ctx, rc.cfg, rc.dbInfos) if err != nil { - return errors.Trace(err) + return common.ErrInitCheckpoint.Wrap(err).GenWithStackByArgs() } failpoint.Inject("InitializeCheckpointExit", func() { log.L().Warn("exit triggered", zap.String("failpoint", "InitializeCheckpointExit")) @@ -800,7 +821,7 @@ func verifyCheckpoint(cfg *config.Config, taskCp *checkpoints.TaskCheckpoint) er retryUsage += " and remove all restored tables and try again" if cfg.TikvImporter.Backend != taskCp.Backend { - return errors.Errorf("config 'tikv-importer.backend' value '%s' different from checkpoint value '%s', please %s", cfg.TikvImporter.Backend, taskCp.Backend, retryUsage) + return common.ErrInvalidCheckpoint.GenWithStack("config 'tikv-importer.backend' value '%s' different from checkpoint value '%s', please %s", cfg.TikvImporter.Backend, taskCp.Backend, retryUsage) } if cfg.App.CheckRequirements { @@ -811,32 +832,32 @@ func verifyCheckpoint(cfg *config.Config, taskCp *checkpoints.TaskCheckpoint) er } else { displayVer = "before v4.0.6/v3.0.19" } - return errors.Errorf("lightning version is '%s', but checkpoint was created %s, please %s", build.ReleaseVersion, displayVer, retryUsage) + return common.ErrInvalidCheckpoint.GenWithStack("lightning version is '%s', but checkpoint was created %s, please %s", build.ReleaseVersion, displayVer, retryUsage) } errorFmt := "config '%s' value '%s' different from checkpoint value '%s'. You may set 'check-requirements = false' to skip this check or " + retryUsage if cfg.Mydumper.SourceDir != taskCp.SourceDir { - return errors.Errorf(errorFmt, "mydumper.data-source-dir", cfg.Mydumper.SourceDir, taskCp.SourceDir) + return common.ErrInvalidCheckpoint.GenWithStack(errorFmt, "mydumper.data-source-dir", cfg.Mydumper.SourceDir, taskCp.SourceDir) } if cfg.TikvImporter.Backend == config.BackendLocal && cfg.TikvImporter.SortedKVDir != taskCp.SortedKVDir { - return errors.Errorf(errorFmt, "mydumper.sorted-kv-dir", cfg.TikvImporter.SortedKVDir, taskCp.SortedKVDir) + return common.ErrInvalidCheckpoint.GenWithStack(errorFmt, "mydumper.sorted-kv-dir", cfg.TikvImporter.SortedKVDir, taskCp.SortedKVDir) } if cfg.TikvImporter.Backend == config.BackendImporter && cfg.TikvImporter.Addr != taskCp.ImporterAddr { - return errors.Errorf(errorFmt, "tikv-importer.addr", cfg.TikvImporter.Backend, taskCp.Backend) + return common.ErrInvalidCheckpoint.GenWithStack(errorFmt, "tikv-importer.addr", cfg.TikvImporter.Backend, taskCp.Backend) } if cfg.TiDB.Host != taskCp.TiDBHost { - return errors.Errorf(errorFmt, "tidb.host", cfg.TiDB.Host, taskCp.TiDBHost) + return common.ErrInvalidCheckpoint.GenWithStack(errorFmt, "tidb.host", cfg.TiDB.Host, taskCp.TiDBHost) } if cfg.TiDB.Port != taskCp.TiDBPort { - return errors.Errorf(errorFmt, "tidb.port", cfg.TiDB.Port, taskCp.TiDBPort) + return common.ErrInvalidCheckpoint.GenWithStack(errorFmt, "tidb.port", cfg.TiDB.Port, taskCp.TiDBPort) } if cfg.TiDB.PdAddr != taskCp.PdAddr { - return errors.Errorf(errorFmt, "tidb.pd-addr", cfg.TiDB.PdAddr, taskCp.PdAddr) + return common.ErrInvalidCheckpoint.GenWithStack(errorFmt, "tidb.pd-addr", cfg.TiDB.PdAddr, taskCp.PdAddr) } } @@ -858,7 +879,12 @@ func verifyLocalFile(ctx context.Context, cpdb checkpoints.DB, dir string) error log.L().Error("can't find local file", zap.String("table name", tableName), zap.Int32("engine ID", engineID)) - return errors.Trace(err) + if os.IsNotExist(err) { + err = common.ErrCheckLocalFile.GenWithStackByArgs(tableName, dir) + } else { + err = common.ErrCheckLocalFile.Wrap(err).GenWithStackByArgs(tableName, dir) + } + return err } } } @@ -999,7 +1025,7 @@ func (rc *Controller) listenCheckpointUpdates() { if len(cpd) > 0 { err := rc.checkpointsDB.Update(cpd) for _, w := range ws { - w <- err + w <- common.NormalizeOrWrapErr(common.ErrUpdateCheckpoint, err) } web.BroadcastCheckpointDiff(cpd) } @@ -1281,7 +1307,7 @@ func (rc *Controller) keepPauseGCForDupeRes(ctx context.Context) (<-chan struct{ } if !paused { pdCli.Close() - return nil, errors.New("failed to pause GC for duplicate resolution after all retries") + return nil, common.ErrPauseGC.GenWithStack("failed to pause GC for duplicate resolution after all retries") } exitCh := make(chan struct{}) @@ -1445,7 +1471,7 @@ func (rc *Controller) restoreTables(ctx context.Context) (finalErr error) { tableLogTask := task.tr.logger.Begin(zap.InfoLevel, "restore table") web.BroadcastTableCheckpoint(task.tr.tableName, task.cp) needPostProcess, err := task.tr.restoreTable(ctx2, rc, task.cp) - err = errors.Annotatef(err, "restore table %s failed", task.tr.tableName) + err = common.NormalizeOrWrapErr(common.ErrRestoreTable, err, task.tr.tableName) tableLogTask.End(zap.ErrorLevel, err) web.BroadcastError(task.tr.tableName, err) metric.RecordTableCount("completed", err) @@ -1665,12 +1691,10 @@ func (rc *Controller) doCompact(ctx context.Context, level int32) error { } func (rc *Controller) switchToImportMode(ctx context.Context) { - log.L().Info("switch to import mode") rc.switchTiKVMode(ctx, sstpb.SwitchMode_Import) } func (rc *Controller) switchToNormalMode(ctx context.Context) { - log.L().Info("switch to normal mode") rc.switchTiKVMode(ctx, sstpb.SwitchMode_Normal) } @@ -1680,6 +1704,8 @@ func (rc *Controller) switchTiKVMode(ctx context.Context, mode sstpb.SwitchMode) return } + log.L().Info("switch import mode", zap.Stringer("mode", mode)) + // It is fine if we miss some stores which did not switch to Import mode, // since we're running it periodically, so we exclude disconnected stores. // But it is essential all stores be switched back to Normal mode to allow @@ -1834,7 +1860,10 @@ func (rc *Controller) cleanCheckpoints(ctx context.Context) error { err = rc.checkpointsDB.RemoveCheckpoint(ctx, "all") } task.End(zap.ErrorLevel, err) - return errors.Annotate(err, "clean checkpoints") + if err != nil { + return common.ErrCleanCheckpoint.Wrap(err).GenWithStackByArgs() + } + return nil } func (rc *Controller) isLocalBackend() bool { @@ -1857,17 +1886,17 @@ func (rc *Controller) preCheckRequirements(ctx context.Context) error { } if rc.cfg.App.CheckRequirements { - if err := rc.ClusterIsAvailable(ctx); err != nil { - return errors.Trace(err) - } + rc.ClusterIsAvailable(ctx) - if err := rc.StoragePermission(ctx); err != nil { - return errors.Trace(err) + if rc.ownStore { + if err := rc.StoragePermission(ctx); err != nil { + return errors.Trace(err) + } } } if err := rc.metaMgrBuilder.Init(ctx); err != nil { - return err + return common.ErrInitMetaManager.Wrap(err).GenWithStackByArgs() } taskExist := false @@ -1875,38 +1904,38 @@ func (rc *Controller) preCheckRequirements(ctx context.Context) error { // source is in order as row key to decide how to sort local data. source, err := rc.estimateSourceData(ctx) if err != nil { - return errors.Trace(err) + return common.ErrCheckDataSource.Wrap(err).GenWithStackByArgs() } if rc.isLocalBackend() { pdController, err := pdutil.NewPdController(ctx, rc.cfg.TiDB.PdAddr, rc.tls.TLSConfig(), rc.tls.ToPDSecurityOption()) if err != nil { - return errors.Trace(err) + return common.NormalizeOrWrapErr(common.ErrCreatePDClient, err) } // PdController will be closed when `taskMetaMgr` closes. rc.taskMgr = rc.metaMgrBuilder.TaskMetaMgr(pdController) taskExist, err = rc.taskMgr.CheckTaskExist(ctx) if err != nil { - return errors.Trace(err) + return common.ErrMetaMgrUnknown.Wrap(err).GenWithStackByArgs() } if !taskExist { if err = rc.taskMgr.InitTask(ctx, source); err != nil { - return errors.Trace(err) + return common.ErrMetaMgrUnknown.Wrap(err).GenWithStackByArgs() } if rc.cfg.App.CheckRequirements { err = rc.localResource(source) if err != nil { - return errors.Trace(err) + return common.ErrCheckLocalResource.Wrap(err).GenWithStackByArgs() } if err := rc.clusterResource(ctx, source); err != nil { if err1 := rc.taskMgr.CleanupTask(ctx); err1 != nil { log.L().Warn("cleanup task failed", zap.Error(err1)) - return err + return common.ErrMetaMgrUnknown.Wrap(err).GenWithStackByArgs() } } if err := rc.checkClusterRegion(ctx); err != nil { - return errors.Trace(err) + return common.ErrCheckClusterRegion.Wrap(err).GenWithStackByArgs() } } } @@ -1922,7 +1951,7 @@ func (rc *Controller) preCheckRequirements(ctx context.Context) error { log.L().Warn("cleanup task failed", zap.Error(err)) } } - return errors.Errorf("tidb-lightning pre-check failed: %s", rc.checkTemplate.FailedMsg()) + return common.ErrPreCheckFailed.GenWithStackByArgs(rc.checkTemplate.FailedMsg()) } return nil } @@ -1931,10 +1960,7 @@ func (rc *Controller) preCheckRequirements(ctx context.Context) error { func (rc *Controller) DataCheck(ctx context.Context) error { var err error if rc.cfg.App.CheckRequirements { - err = rc.HasLargeCSV(rc.dbMetas) - if err != nil { - return errors.Trace(err) - } + rc.HasLargeCSV(rc.dbMetas) } checkPointCriticalMsgs := make([]string, 0, len(rc.dbMetas)) schemaCriticalMsgs := make([]string, 0, len(rc.dbMetas)) @@ -1945,9 +1971,7 @@ func (rc *Controller) DataCheck(ctx context.Context) error { // so we can skip TableHasDataInCluster and SchemaIsValid check. noCheckpoint := true if rc.cfg.Checkpoint.Enable { - if msgs, noCheckpoint, err = rc.CheckpointIsValid(ctx, tableInfo); err != nil { - return errors.Trace(err) - } + msgs, noCheckpoint = rc.CheckpointIsValid(ctx, tableInfo) if len(msgs) != 0 { checkPointCriticalMsgs = append(checkPointCriticalMsgs, msgs...) } @@ -1975,10 +1999,10 @@ func (rc *Controller) DataCheck(ctx context.Context) error { } if err := rc.checkTableEmpty(ctx); err != nil { - return errors.Trace(err) + return common.ErrCheckTableEmpty.Wrap(err).GenWithStackByArgs() } if err = rc.checkCSVHeader(ctx, rc.dbMetas); err != nil { - return err + return common.ErrCheckCSVHeader.Wrap(err).GenWithStackByArgs() } return nil @@ -2370,7 +2394,7 @@ func (cr *chunkRestore) encodeLoop( reachEOF = true break outLoop default: - err = errors.Annotatef(err, "in file %s at offset %d", &cr.chunk.Key, newOffset) + err = common.ErrEncodeKV.Wrap(err).GenWithStackByArgs(&cr.chunk.Key, newOffset) return } readDur += time.Since(readDurStart) @@ -2384,7 +2408,9 @@ func (cr *chunkRestore) encodeLoop( if encodeErr != nil { rowText := tidb.EncodeRowForRecord(t.encTable, rc.cfg.TiDB.SQLMode, lastRow.Row, cr.chunk.ColumnPermutation) encodeErr = rc.errorMgr.RecordTypeError(ctx, logger, t.tableName, cr.chunk.Key.Path, newOffset, rowText, encodeErr) - err = errors.Annotatef(encodeErr, "in file %s at offset %d", &cr.chunk.Key, newOffset) + if encodeErr != nil { + err = common.ErrEncodeKV.Wrap(encodeErr).GenWithStackByArgs(&cr.chunk.Key, newOffset) + } hasIgnoredEncodeErr = true } cr.parser.RecycleRow(lastRow) diff --git a/br/pkg/lightning/restore/restore_schema_test.go b/br/pkg/lightning/restore/restore_schema_test.go index e0a9a9d8a43da..7bce917eb828c 100644 --- a/br/pkg/lightning/restore/restore_schema_test.go +++ b/br/pkg/lightning/restore/restore_schema_test.go @@ -23,7 +23,7 @@ import ( "github.com/DATA-DOG/go-sqlmock" "github.com/golang/mock/gomock" "github.com/pingcap/errors" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" + filter "github.com/pingcap/tidb/util/table-filter" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" diff --git a/br/pkg/lightning/restore/restore_test.go b/br/pkg/lightning/restore/restore_test.go index 3daa8b696dc19..a879ac43934f3 100644 --- a/br/pkg/lightning/restore/restore_test.go +++ b/br/pkg/lightning/restore/restore_test.go @@ -110,11 +110,10 @@ func TestErrorSummaries(t *testing.T) { func TestVerifyCheckpoint(t *testing.T) { dir := t.TempDir() - - cpdb := checkpoints.NewFileCheckpointsDB(filepath.Join(dir, "cp.pb")) - defer cpdb.Close() ctx := context.Background() - + cpdb, err := checkpoints.NewFileCheckpointsDB(ctx, filepath.Join(dir, "cp.pb")) + require.NoError(t, err) + defer cpdb.Close() actualReleaseVersion := build.ReleaseVersion defer func() { build.ReleaseVersion = actualReleaseVersion diff --git a/br/pkg/lightning/restore/table_restore.go b/br/pkg/lightning/restore/table_restore.go index fa50c1179f939..9c3048d9518d6 100644 --- a/br/pkg/lightning/restore/table_restore.go +++ b/br/pkg/lightning/restore/table_restore.go @@ -17,6 +17,7 @@ package restore import ( "context" "sort" + "strings" "sync" "time" @@ -200,7 +201,7 @@ func (tr *TableRestore) restoreEngines(pCtx context.Context, rc *Controller, cp indexEngineCp := cp.Engines[indexEngineID] if indexEngineCp == nil { tr.logger.Error("fail to restoreEngines because indexengine is nil") - return errors.Errorf("table %v index engine checkpoint not found", tr.tableName) + return common.ErrCheckpointNotFound.GenWithStack("table %v index engine checkpoint not found", tr.tableName) } ctx, cancel := context.WithCancel(pCtx) @@ -696,8 +697,8 @@ func (tr *TableRestore) postProcess( } // tidb backend don't need checksum & analyze - if !rc.backend.ShouldPostProcess() { - tr.logger.Debug("skip checksum & analyze, not supported by this backend") + if rc.cfg.PostRestore.Checksum == config.OpLevelOff && rc.cfg.PostRestore.Analyze == config.OpLevelOff { + tr.logger.Debug("skip checksum & analyze, either because not supported by this backend or manually disabled") err := rc.saveStatusCheckpoint(ctx, tr.tableName, checkpoints.WholeTableEngineID, nil, checkpoints.CheckpointStatusAnalyzeSkipped) return false, errors.Trace(err) } @@ -863,7 +864,7 @@ func parseColumnPermutations(tableInfo *model.TableInfo, columns []string, ignor } if len(unknownCols) > 0 { - return colPerm, errors.Errorf("unknown columns in header %s", unknownCols) + return colPerm, common.ErrUnknownColumns.GenWithStackByArgs(strings.Join(unknownCols, ","), tableInfo.Name) } for _, colInfo := range tableInfo.Columns { @@ -948,7 +949,7 @@ func (tr *TableRestore) compareChecksum(remoteChecksum *RemoteChecksum, localChe if remoteChecksum.Checksum != localChecksum.Sum() || remoteChecksum.TotalKVs != localChecksum.SumKVS() || remoteChecksum.TotalBytes != localChecksum.SumSize() { - return errors.Errorf("checksum mismatched remote vs local => (checksum: %d vs %d) (total_kvs: %d vs %d) (total_bytes:%d vs %d)", + return common.ErrChecksumMismatch.GenWithStackByArgs( remoteChecksum.Checksum, localChecksum.Sum(), remoteChecksum.TotalKVs, localChecksum.SumKVS(), remoteChecksum.TotalBytes, localChecksum.SumSize(), diff --git a/br/pkg/lightning/restore/table_restore_test.go b/br/pkg/lightning/restore/table_restore_test.go index 664203144473b..0ba6a18bf7f06 100644 --- a/br/pkg/lightning/restore/table_restore_test.go +++ b/br/pkg/lightning/restore/table_restore_test.go @@ -35,7 +35,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/metapb" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" "github.com/pingcap/tidb/br/pkg/lightning/backend" "github.com/pingcap/tidb/br/pkg/lightning/backend/kv" "github.com/pingcap/tidb/br/pkg/lightning/backend/noop" @@ -62,6 +61,7 @@ import ( "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/types" tmock "github.com/pingcap/tidb/util/mock" + filter "github.com/pingcap/tidb/util/table-filter" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" ) @@ -306,7 +306,7 @@ func (s *tableRestoreSuite) TestPopulateChunks() { s.cfg.Mydumper.MaxRegionSize = 5 err = s.tr.populateChunks(context.Background(), rc, cp) require.Error(s.T(), err) - require.Regexp(s.T(), `.*unknown columns in header \[1 2 3\]`, err.Error()) + require.Regexp(s.T(), `.*unknown columns in header \(1,2,3\)`, err.Error()) s.cfg.Mydumper.MaxRegionSize = regionSize s.cfg.Mydumper.CSV.Header = false } @@ -667,13 +667,13 @@ func (s *tableRestoreSuite) TestInitializeColumns() { []string{"_tidb_rowid", "b", "a", "c", "d"}, nil, nil, - `unknown columns in header \[d\]`, + `\[Lightning:Restore:ErrUnknownColumns\]unknown columns in header \(d\) for table table`, }, { []string{"e", "b", "c", "d"}, nil, nil, - `unknown columns in header \[e d\]`, + `\[Lightning:Restore:ErrUnknownColumns\]unknown columns in header \(e,d\) for table table`, }, } @@ -1292,8 +1292,7 @@ func (s *tableRestoreSuite) TestCheckHasLargeCSV() { template := NewSimpleTemplate() cfg := &config.Config{Mydumper: config.MydumperRuntime{StrictFormat: ca.strictFormat}} rc := &Controller{cfg: cfg, checkTemplate: template, store: mockStore} - err := rc.HasLargeCSV(ca.dbMetas) - require.NoError(s.T(), err) + rc.HasLargeCSV(ca.dbMetas) require.Equal(s.T(), ca.expectWarnCount, template.FailedCount(Warn)) require.Equal(s.T(), ca.expectResult, template.Success()) require.Regexp(s.T(), ca.expectMsg, strings.ReplaceAll(template.Output(), "\n", "")) diff --git a/br/pkg/lightning/restore/tidb.go b/br/pkg/lightning/restore/tidb.go index fe77200124afb..e530f8be604a4 100644 --- a/br/pkg/lightning/restore/tidb.go +++ b/br/pkg/lightning/restore/tidb.go @@ -185,7 +185,7 @@ loopCreate: func createIfNotExistsStmt(p *parser.Parser, createTable, dbName, tblName string) ([]string, error) { stmts, _, err := p.ParseSQL(createTable) if err != nil { - return []string{}, err + return []string{}, common.ErrInvalidSchemaStmt.Wrap(err).GenWithStackByArgs(createTable) } var res strings.Builder @@ -210,7 +210,7 @@ func createIfNotExistsStmt(p *parser.Parser, createTable, dbName, tblName string node.IfExists = true } if err := stmt.Restore(ctx); err != nil { - return []string{}, err + return []string{}, common.ErrInvalidSchemaStmt.Wrap(err).GenWithStackByArgs(createTable) } ctx.WritePlain(";") retStmts = append(retStmts, res.String()) @@ -253,7 +253,7 @@ func LoadSchemaInfo( for _, tbl := range schema.Tables { tblInfo, ok := tableMap[strings.ToLower(tbl.Name)] if !ok { - return nil, errors.Errorf("table '%s' schema not found", tbl.Name) + return nil, common.ErrSchemaNotExists.GenWithStackByArgs(tbl.DB, tbl.Name) } tableName := tblInfo.Name.String() if tblInfo.State != model.StatePublic { diff --git a/br/pkg/lightning/run_options.go b/br/pkg/lightning/run_options.go new file mode 100644 index 0000000000000..8182794df3eaa --- /dev/null +++ b/br/pkg/lightning/run_options.go @@ -0,0 +1,54 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 lightning + +import ( + "github.com/pingcap/tidb/br/pkg/lightning/glue" + "github.com/pingcap/tidb/br/pkg/storage" +) + +type options struct { + glue glue.Glue + dumpFileStorage storage.ExternalStorage + checkpointStorage storage.ExternalStorage + checkpointName string +} + +type Option func(*options) + +// WithGlue sets the glue to a lightning task. +// Typically, the glue is set when lightning is integrated with a TiDB. +func WithGlue(g glue.Glue) Option { + return func(o *options) { + o.glue = g + } +} + +// WithDumpFileStorage sets the external storage to a lightning task. +// Typically, the external storage is set when lightning is integrated with dataflow engine by DM. +func WithDumpFileStorage(s storage.ExternalStorage) Option { + return func(o *options) { + o.dumpFileStorage = s + } +} + +// WithCheckpointStorage sets the checkpoint name in external storage to a lightning task. +// Typically, the checkpoint name is set when lightning is integrated with dataflow engine by DM. +func WithCheckpointStorage(s storage.ExternalStorage, cpName string) Option { + return func(o *options) { + o.checkpointStorage = s + o.checkpointName = cpName + } +} diff --git a/br/pkg/metautil/main_test.go b/br/pkg/metautil/main_test.go index 44cb7f4a19097..facb4e32cb101 100644 --- a/br/pkg/metautil/main_test.go +++ b/br/pkg/metautil/main_test.go @@ -23,6 +23,7 @@ import ( func TestMain(m *testing.M) { opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } testbridge.SetupForCommonTest() diff --git a/br/pkg/mock/mock_cluster_test.go b/br/pkg/mock/mock_cluster_test.go index 740014f54efc7..8a81c6e1ef6ee 100644 --- a/br/pkg/mock/mock_cluster_test.go +++ b/br/pkg/mock/mock_cluster_test.go @@ -13,6 +13,7 @@ import ( func TestSmoke(t *testing.T) { defer goleak.VerifyNone( t, + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("github.com/klauspost/compress/zstd.(*blockDec).startDecoder"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start")) diff --git a/br/pkg/mock/storage/storage.go b/br/pkg/mock/storage/storage.go index 71b2b72f67b13..32e96c1dd3448 100644 --- a/br/pkg/mock/storage/storage.go +++ b/br/pkg/mock/storage/storage.go @@ -14,30 +14,30 @@ import ( storage "github.com/pingcap/tidb/br/pkg/storage" ) -// MockExternalStorage is a mock of ExternalStorage interface +// MockExternalStorage is a mock of ExternalStorage interface. type MockExternalStorage struct { ctrl *gomock.Controller recorder *MockExternalStorageMockRecorder } -// MockExternalStorageMockRecorder is the mock recorder for MockExternalStorage +// MockExternalStorageMockRecorder is the mock recorder for MockExternalStorage. type MockExternalStorageMockRecorder struct { mock *MockExternalStorage } -// NewMockExternalStorage creates a new mock instance +// NewMockExternalStorage creates a new mock instance. func NewMockExternalStorage(ctrl *gomock.Controller) *MockExternalStorage { mock := &MockExternalStorage{ctrl: ctrl} mock.recorder = &MockExternalStorageMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use +// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockExternalStorage) EXPECT() *MockExternalStorageMockRecorder { return m.recorder } -// Create mocks base method +// Create mocks base method. func (m *MockExternalStorage) Create(arg0 context.Context, arg1 string) (storage.ExternalFileWriter, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Create", arg0, arg1) @@ -46,13 +46,27 @@ func (m *MockExternalStorage) Create(arg0 context.Context, arg1 string) (storage return ret0, ret1 } -// Create indicates an expected call of Create +// Create indicates an expected call of Create. func (mr *MockExternalStorageMockRecorder) Create(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockExternalStorage)(nil).Create), arg0, arg1) } -// FileExists mocks base method +// DeleteFile mocks base method. +func (m *MockExternalStorage) DeleteFile(arg0 context.Context, arg1 string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteFile", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteFile indicates an expected call of DeleteFile. +func (mr *MockExternalStorageMockRecorder) DeleteFile(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteFile", reflect.TypeOf((*MockExternalStorage)(nil).DeleteFile), arg0, arg1) +} + +// FileExists mocks base method. func (m *MockExternalStorage) FileExists(arg0 context.Context, arg1 string) (bool, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "FileExists", arg0, arg1) @@ -61,13 +75,13 @@ func (m *MockExternalStorage) FileExists(arg0 context.Context, arg1 string) (boo return ret0, ret1 } -// FileExists indicates an expected call of FileExists +// FileExists indicates an expected call of FileExists. func (mr *MockExternalStorageMockRecorder) FileExists(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FileExists", reflect.TypeOf((*MockExternalStorage)(nil).FileExists), arg0, arg1) } -// Open mocks base method +// Open mocks base method. func (m *MockExternalStorage) Open(arg0 context.Context, arg1 string) (storage.ExternalFileReader, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Open", arg0, arg1) @@ -76,13 +90,13 @@ func (m *MockExternalStorage) Open(arg0 context.Context, arg1 string) (storage.E return ret0, ret1 } -// Open indicates an expected call of Open +// Open indicates an expected call of Open. func (mr *MockExternalStorageMockRecorder) Open(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Open", reflect.TypeOf((*MockExternalStorage)(nil).Open), arg0, arg1) } -// ReadFile mocks base method +// ReadFile mocks base method. func (m *MockExternalStorage) ReadFile(arg0 context.Context, arg1 string) ([]byte, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ReadFile", arg0, arg1) @@ -91,13 +105,27 @@ func (m *MockExternalStorage) ReadFile(arg0 context.Context, arg1 string) ([]byt return ret0, ret1 } -// ReadFile indicates an expected call of ReadFile +// ReadFile indicates an expected call of ReadFile. func (mr *MockExternalStorageMockRecorder) ReadFile(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReadFile", reflect.TypeOf((*MockExternalStorage)(nil).ReadFile), arg0, arg1) } -// URI mocks base method +// Rename mocks base method. +func (m *MockExternalStorage) Rename(arg0 context.Context, arg1, arg2 string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Rename", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// Rename indicates an expected call of Rename. +func (mr *MockExternalStorageMockRecorder) Rename(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Rename", reflect.TypeOf((*MockExternalStorage)(nil).Rename), arg0, arg1, arg2) +} + +// URI mocks base method. func (m *MockExternalStorage) URI() string { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "URI") @@ -105,13 +133,13 @@ func (m *MockExternalStorage) URI() string { return ret0 } -// URI indicates an expected call of URI +// URI indicates an expected call of URI. func (mr *MockExternalStorageMockRecorder) URI() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "URI", reflect.TypeOf((*MockExternalStorage)(nil).URI)) } -// WalkDir mocks base method +// WalkDir mocks base method. func (m *MockExternalStorage) WalkDir(arg0 context.Context, arg1 *storage.WalkOption, arg2 func(string, int64) error) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "WalkDir", arg0, arg1, arg2) @@ -119,13 +147,13 @@ func (m *MockExternalStorage) WalkDir(arg0 context.Context, arg1 *storage.WalkOp return ret0 } -// WalkDir indicates an expected call of WalkDir +// WalkDir indicates an expected call of WalkDir. func (mr *MockExternalStorageMockRecorder) WalkDir(arg0, arg1, arg2 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalkDir", reflect.TypeOf((*MockExternalStorage)(nil).WalkDir), arg0, arg1, arg2) } -// WriteFile mocks base method +// WriteFile mocks base method. func (m *MockExternalStorage) WriteFile(arg0 context.Context, arg1 string, arg2 []byte) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "WriteFile", arg0, arg1, arg2) @@ -133,22 +161,8 @@ func (m *MockExternalStorage) WriteFile(arg0 context.Context, arg1 string, arg2 return ret0 } -// WriteFile indicates an expected call of WriteFile +// WriteFile indicates an expected call of WriteFile. func (mr *MockExternalStorageMockRecorder) WriteFile(arg0, arg1, arg2 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WriteFile", reflect.TypeOf((*MockExternalStorage)(nil).WriteFile), arg0, arg1, arg2) } - -// DeleteFile mocks base method. -func (m *MockExternalStorage) DeleteFile(ctx context.Context, name string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteFile", ctx, name) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteFile indicates an expected call of DeleteFile. -func (mr *MockExternalStorageMockRecorder) DeleteFile(ctx, name interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteFile", reflect.TypeOf((*MockExternalStorage)(nil).DeleteFile), ctx, name) -} diff --git a/br/pkg/pdutil/main_test.go b/br/pkg/pdutil/main_test.go index 1c3cc2c34c21f..f87dd67ce2d47 100644 --- a/br/pkg/pdutil/main_test.go +++ b/br/pkg/pdutil/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/br/pkg/restore/client.go b/br/pkg/restore/client.go index deaa52beb7d4d..7fa273b827a1c 100644 --- a/br/pkg/restore/client.go +++ b/br/pkg/restore/client.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/tidb/br/pkg/metautil" "github.com/pingcap/tidb/br/pkg/pdutil" "github.com/pingcap/tidb/br/pkg/redact" + "github.com/pingcap/tidb/br/pkg/rtree" "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/br/pkg/summary" "github.com/pingcap/tidb/br/pkg/utils" @@ -53,8 +54,14 @@ import ( // defaultChecksumConcurrency is the default number of the concurrent // checksum tasks. const defaultChecksumConcurrency = 64 +const defaultDDLConcurrency = 16 const minBatchDdlSize = 1 +const ( + strictPlacementPolicyMode = "STRICT" + ignorePlacementPolicyMode = "IGNORE" +) + // Client sends requests to restore files. type Client struct { pdClient pd.Client @@ -78,7 +85,10 @@ type Client struct { // Before you do it, you can firstly read discussions at // https://github.com/pingcap/br/pull/377#discussion_r446594501, // this probably isn't as easy as it seems like (however, not hard, too :D) - db *DB + db *DB + + // use db pool to speed up restoration in BR binary mode. + dbPool []*DB rateLimit uint64 isOnline bool noSchema bool @@ -87,8 +97,6 @@ type Client struct { restoreStores []uint64 cipher *backuppb.CipherInfo - storage storage.ExternalStorage - backend *backuppb.StorageBackend switchModeInterval time.Duration switchCh chan struct{} @@ -99,42 +107,85 @@ type Client struct { dom *domain.Domain batchDdlSize uint + + // correspond to --tidb-placement-mode config. + // STRICT(default) means policy related SQL can be executed in tidb. + // IGNORE means policy related SQL will be ignored. + policyMode string + + // policy name -> policy info + policyMap *sync.Map + + supportPolicy bool } // NewRestoreClient returns a new RestoreClient. func NewRestoreClient( - g glue.Glue, pdClient pd.Client, - store kv.Storage, tlsConf *tls.Config, keepaliveConf keepalive.ClientParameters, isRawKv bool, -) (*Client, error) { - db, err := NewDB(g, store) +) *Client { + return &Client{ + pdClient: pdClient, + toolClient: NewSplitClient(pdClient, tlsConf, isRawKv), + tlsConf: tlsConf, + keepaliveConf: keepaliveConf, + switchCh: make(chan struct{}), + } +} + +// Init create db connection and domain for storage. +func (rc *Client) Init(g glue.Glue, store kv.Storage) error { + // setDB must happen after set PolicyMode. + // we will use policyMode to set session variables. + var err error + rc.db, rc.supportPolicy, err = NewDB(g, store, rc.policyMode) if err != nil { - return nil, errors.Trace(err) + return errors.Trace(err) } - dom, err := g.GetDomain(store) + rc.dom, err = g.GetDomain(store) if err != nil { - return nil, errors.Trace(err) + return errors.Trace(err) } - - var statsHandle *handle.Handle // tikv.Glue will return nil, tidb.Glue will return available domain - if dom != nil { - statsHandle = dom.StatsHandle() + if rc.dom != nil { + rc.statsHandler = rc.dom.StatsHandle() + } + + // Only in binary we can use multi-thread sessions to create tables. + // so use OwnStorage() to tell whether we are use binary or SQL. + if g.OwnsStorage() { + // Maybe allow user modify the DDL concurrency isn't necessary, + // because executing DDL is really I/O bound (or, algorithm bound?), + // and we cost most of time at waiting DDL jobs be enqueued. + // So these jobs won't be faster or slower when machine become faster or slower, + // hence make it a fixed value would be fine. + rc.dbPool, err = makeDBPool(defaultDDLConcurrency, func() (*DB, error) { + db, _, err := NewDB(g, store, rc.policyMode) + return db, err + }) + if err != nil { + log.Warn("create session pool failed, we will send DDLs only by created sessions", + zap.Error(err), + zap.Int("sessionCount", len(rc.dbPool)), + ) + } } + return errors.Trace(err) +} - return &Client{ - pdClient: pdClient, - toolClient: NewSplitClient(pdClient, tlsConf, isRawKv), - db: db, - tlsConf: tlsConf, - keepaliveConf: keepaliveConf, - switchCh: make(chan struct{}), - dom: dom, - statsHandler: statsHandle, - }, nil +// SetPlacementPolicyMode to policy mode. +func (rc *Client) SetPlacementPolicyMode(withPlacementPolicy string) { + switch strings.ToUpper(withPlacementPolicy) { + case strictPlacementPolicyMode: + rc.policyMode = strictPlacementPolicyMode + case ignorePlacementPolicyMode: + rc.policyMode = ignorePlacementPolicyMode + default: + rc.policyMode = strictPlacementPolicyMode + } + log.Info("set placement policy mode", zap.String("mode", rc.policyMode)) } // SetRateLimit to set rateLimit. @@ -146,15 +197,19 @@ func (rc *Client) SetCrypter(crypter *backuppb.CipherInfo) { rc.cipher = crypter } -// SetStorage set ExternalStorage for client. -func (rc *Client) SetStorage(ctx context.Context, backend *backuppb.StorageBackend, opts *storage.ExternalStorageOptions) error { - var err error - rc.storage, err = storage.New(ctx, backend, opts) - if err != nil { - return errors.Trace(err) - } - rc.backend = backend - return nil +// SetPolicyMap set policyMap. +func (rc *Client) SetPolicyMap(p *sync.Map) { + rc.policyMap = p +} + +// GetPolicyMap set policyMap. +func (rc *Client) GetPolicyMap() *sync.Map { + return rc.policyMap +} + +// GetSupportPolicy tells whether target tidb support placement policy. +func (rc *Client) GetSupportPolicy() bool { + return rc.supportPolicy } // GetPDClient returns a pd client. @@ -352,6 +407,20 @@ func (rc *Client) GetDatabase(name string) *utils.Database { return rc.databases[name] } +// GetPlacementPolicies returns policies. +func (rc *Client) GetPlacementPolicies() (*sync.Map, error) { + policies := &sync.Map{} + for _, p := range rc.backupMeta.Policies { + policyInfo := &model.PolicyInfo{} + err := json.Unmarshal(p.Info, policyInfo) + if err != nil { + return nil, errors.Trace(err) + } + policies.Store(policyInfo.Name.L, policyInfo) + } + return policies, nil +} + // GetDDLJobs returns ddl jobs. func (rc *Client) GetDDLJobs() []*model.Job { return rc.ddlJobs @@ -371,12 +440,39 @@ func (rc *Client) GetTableSchema( return table.Meta(), nil } +// CreatePolicies creates all policies in full restore. +func (rc *Client) CreatePolicies(ctx context.Context, policyMap *sync.Map) error { + var err error + policyMap.Range(func(key, value interface{}) bool { + e := rc.db.CreatePlacementPolicy(ctx, value.(*model.PolicyInfo)) + if e != nil { + err = e + return false + } + return true + }) + return err +} + // CreateDatabase creates a database. func (rc *Client) CreateDatabase(ctx context.Context, db *model.DBInfo) error { if rc.IsSkipCreateSQL() { log.Info("skip create database", zap.Stringer("database", db.Name)) return nil } + + if !rc.supportPolicy { + log.Info("set placementPolicyRef to nil when target tidb not support policy", + zap.Stringer("database", db.Name)) + db.PlacementPolicyRef = nil + } + + if db.PlacementPolicyRef != nil { + if err := rc.db.ensurePlacementPolicy(ctx, db.PlacementPolicyRef.Name, rc.policyMap); err != nil { + return errors.Trace(err) + } + } + return rc.db.CreateDatabase(ctx, db) } @@ -395,7 +491,7 @@ func (rc *Client) CreateTables( for i, t := range tables { tbMapping[t.Info.Name.String()] = i } - dataCh := rc.GoCreateTables(context.TODO(), dom, tables, newTS, nil, errCh) + dataCh := rc.GoCreateTables(context.TODO(), dom, tables, newTS, errCh) for et := range dataCh { rules := et.RewriteRule rewriteRules.Data = append(rewriteRules.Data, rules.Data...) @@ -426,7 +522,7 @@ func (rc *Client) createTables( if rc.IsSkipCreateSQL() { log.Info("skip create table and alter autoIncID") } else { - err := db.CreateTables(ctx, tables, rc.GetDDLJobsMap()) + err := db.CreateTables(ctx, tables, rc.GetDDLJobsMap(), rc.GetSupportPolicy(), rc.GetPolicyMap()) if err != nil { return nil, errors.Trace(err) } @@ -466,7 +562,7 @@ func (rc *Client) createTable( if rc.IsSkipCreateSQL() { log.Info("skip create table and alter autoIncID", zap.Stringer("table", table.Info.Name)) } else { - err := db.CreateTable(ctx, table, rc.GetDDLJobsMap()) + err := db.CreateTable(ctx, table, rc.GetDDLJobsMap(), rc.GetSupportPolicy(), rc.GetPolicyMap()) if err != nil { return CreatedTable{}, errors.Trace(err) } @@ -499,7 +595,6 @@ func (rc *Client) GoCreateTables( dom *domain.Domain, tables []*metautil.Table, newTS uint64, - dbPool []*DB, errCh chan<- error, ) <-chan CreatedTable { // Could we have a smaller size of tables? @@ -516,9 +611,9 @@ func (rc *Client) GoCreateTables( var err error - if rc.batchDdlSize > minBatchDdlSize && len(dbPool) > 0 { + if rc.batchDdlSize > minBatchDdlSize && len(rc.dbPool) > 0 { - err = rc.createTablesInWorkerPool(ctx, dom, tables, dbPool, newTS, outCh) + err = rc.createTablesInWorkerPool(ctx, dom, tables, newTS, outCh) if err == nil { defer log.Debug("all tables are created") @@ -565,8 +660,8 @@ func (rc *Client) GoCreateTables( defer close(outCh) defer log.Debug("all tables are created") var err error - if len(dbPool) > 0 { - err = rc.createTablesWithDBPool(ctx, createOneTable, tables, dbPool) + if len(rc.dbPool) > 0 { + err = rc.createTablesWithDBPool(ctx, createOneTable, tables) } else { err = rc.createTablesWithSoleDB(ctx, createOneTable, tables) } @@ -591,23 +686,23 @@ func (rc *Client) createTablesWithSoleDB(ctx context.Context, func (rc *Client) createTablesWithDBPool(ctx context.Context, createOneTable func(ctx context.Context, db *DB, t *metautil.Table) error, - tables []*metautil.Table, dbPool []*DB) error { + tables []*metautil.Table) error { eg, ectx := errgroup.WithContext(ctx) - workers := utils.NewWorkerPool(uint(len(dbPool)), "DDL workers") + workers := utils.NewWorkerPool(uint(len(rc.dbPool)), "DDL workers") for _, t := range tables { table := t workers.ApplyWithIDInErrorGroup(eg, func(id uint64) error { - db := dbPool[id%uint64(len(dbPool))] + db := rc.dbPool[id%uint64(len(rc.dbPool))] return createOneTable(ectx, db, table) }) } return eg.Wait() } -func (rc *Client) createTablesInWorkerPool(ctx context.Context, dom *domain.Domain, tables []*metautil.Table, dbPool []*DB, newTS uint64, outCh chan<- CreatedTable) error { +func (rc *Client) createTablesInWorkerPool(ctx context.Context, dom *domain.Domain, tables []*metautil.Table, newTS uint64, outCh chan<- CreatedTable) error { eg, ectx := errgroup.WithContext(ctx) rater := logutil.TraceRateOver(logutil.MetricTableCreatedCounter) - workers := utils.NewWorkerPool(uint(len(dbPool)), "Create Tables Worker") + workers := utils.NewWorkerPool(uint(len(rc.dbPool)), "Create Tables Worker") numOfTables := len(tables) for lastSent := 0; lastSent < numOfTables; lastSent += int(rc.batchDdlSize) { @@ -616,7 +711,7 @@ func (rc *Client) createTablesInWorkerPool(ctx context.Context, dom *domain.Doma tableSlice := tables[lastSent:end] workers.ApplyWithIDInErrorGroup(eg, func(id uint64) error { - db := dbPool[id%uint64(len(dbPool))] + db := rc.dbPool[id%uint64(len(rc.dbPool))] cts, err := rc.createTables(ectx, db, dom, tableSlice, newTS) // ddl job for [lastSent:i) failpoint.Inject("restore-createtables-error", func(val failpoint.Value) { if val.(bool) { @@ -713,6 +808,15 @@ func drainFilesByRange(files []*backuppb.File, supportMulti bool) ([]*backuppb.F return files[:idx], files[idx:] } +// SplitRanges implements TiKVRestorer. +func (rc *Client) SplitRanges(ctx context.Context, + ranges []rtree.Range, + rewriteRules *RewriteRules, + updateCh glue.Progress, + isRawKv bool) error { + return SplitRanges(ctx, rc, ranges, rewriteRules, updateCh, isRawKv) +} + // RestoreFiles tries to restore the files. func (rc *Client) RestoreFiles( ctx context.Context, diff --git a/br/pkg/restore/client_test.go b/br/pkg/restore/client_test.go index da2571030e36c..492d1324ee1df 100644 --- a/br/pkg/restore/client_test.go +++ b/br/pkg/restore/client_test.go @@ -32,7 +32,9 @@ var defaultKeepaliveCfg = keepalive.ClientParameters{ func TestCreateTables(t *testing.T) { m := mc - client, err := restore.NewRestoreClient(gluetidb.New(), m.PDClient, m.Storage, nil, defaultKeepaliveCfg, false) + g := gluetidb.New() + client := restore.NewRestoreClient(m.PDClient, nil, defaultKeepaliveCfg, false) + err := client.Init(g, m.Storage) require.NoError(t, err) info, err := m.Domain.GetSnapshotInfoSchema(math.MaxUint64) @@ -89,7 +91,9 @@ func TestCreateTables(t *testing.T) { func TestIsOnline(t *testing.T) { m := mc - client, err := restore.NewRestoreClient(gluetidb.New(), m.PDClient, m.Storage, nil, defaultKeepaliveCfg, false) + g := gluetidb.New() + client := restore.NewRestoreClient(m.PDClient, nil, defaultKeepaliveCfg, false) + err := client.Init(g, m.Storage) require.NoError(t, err) require.False(t, client.IsOnline()) @@ -99,7 +103,9 @@ func TestIsOnline(t *testing.T) { func TestPreCheckTableClusterIndex(t *testing.T) { m := mc - client, err := restore.NewRestoreClient(gluetidb.New(), m.PDClient, m.Storage, nil, defaultKeepaliveCfg, false) + g := gluetidb.New() + client := restore.NewRestoreClient(m.PDClient, nil, defaultKeepaliveCfg, false) + err := client.Init(g, m.Storage) require.NoError(t, err) info, err := m.Domain.GetSnapshotInfoSchema(math.MaxUint64) @@ -191,9 +197,11 @@ func TestPreCheckTableTiFlashReplicas(t *testing.T) { }, } - client, err := restore.NewRestoreClient(gluetidb.New(), fakePDClient{ + g := gluetidb.New() + client := restore.NewRestoreClient(fakePDClient{ stores: mockStores, - }, m.Storage, nil, defaultKeepaliveCfg, false) + }, nil, defaultKeepaliveCfg, false) + err := client.Init(g, m.Storage) require.NoError(t, err) tables := make([]*metautil.Table, 4) diff --git a/br/pkg/restore/db.go b/br/pkg/restore/db.go index f4ef5dc8256be..6f1d7b36323ba 100644 --- a/br/pkg/restore/db.go +++ b/br/pkg/restore/db.go @@ -6,6 +6,7 @@ import ( "context" "fmt" "sort" + "sync" "github.com/pingcap/errors" "github.com/pingcap/log" @@ -15,6 +16,7 @@ import ( "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/sessionctx/variable" "go.uber.org/zap" ) @@ -28,24 +30,50 @@ type UniqueTableName struct { Table string } +type DDLJobFilterRule func(ddlJob *model.Job) bool + +var incrementalRestoreActionBlockList = map[model.ActionType]struct{}{ + model.ActionSetTiFlashReplica: {}, + model.ActionUpdateTiFlashReplicaStatus: {}, + model.ActionLockTable: {}, + model.ActionUnlockTable: {}, +} + // NewDB returns a new DB. -func NewDB(g glue.Glue, store kv.Storage) (*DB, error) { +func NewDB(g glue.Glue, store kv.Storage, policyMode string) (*DB, bool, error) { se, err := g.CreateSession(store) if err != nil { - return nil, errors.Trace(err) + return nil, false, errors.Trace(err) } // The session may be nil in raw kv mode if se == nil { - return nil, nil + return nil, false, nil } // Set SQL mode to None for avoiding SQL compatibility problem err = se.Execute(context.Background(), "set @@sql_mode=''") if err != nil { - return nil, errors.Trace(err) + return nil, false, errors.Trace(err) + } + + supportPolicy := false + if len(policyMode) != 0 { + // Set placement mode for handle placement policy. + err = se.Execute(context.Background(), fmt.Sprintf("set @@tidb_placement_mode='%s';", policyMode)) + if err != nil { + if variable.ErrUnknownSystemVar.Equal(err) { + // not support placement policy, just ignore it + log.Warn("target tidb not support tidb_placement_mode, ignore create policies", zap.Error(err)) + } else { + return nil, false, errors.Trace(err) + } + } else { + log.Info("set tidb_placement_mode success", zap.String("mode", policyMode)) + supportPolicy = true + } } return &DB{ se: se, - }, nil + }, supportPolicy, nil } // ExecDDL executes the query of a ddl job. @@ -71,6 +99,13 @@ func (db *DB) ExecDDL(ctx context.Context, ddlJob *model.Job) error { return errors.Trace(err) } + if ddlJob.Query == "" { + log.Warn("query of ddl job is empty, ignore it", + zap.Stringer("type", ddlJob.Type), + zap.String("db", ddlJob.SchemaName)) + return nil + } + if tableInfo != nil { switchDBSQL := fmt.Sprintf("use %s;", utils.EncloseName(ddlJob.SchemaName)) err = db.se.Execute(ctx, switchDBSQL) @@ -115,6 +150,16 @@ func (db *DB) UpdateStatsMeta(ctx context.Context, tableID int64, restoreTS uint return nil } +// CreatePlacementPolicy check whether cluster support policy and create the policy. +func (db *DB) CreatePlacementPolicy(ctx context.Context, policy *model.PolicyInfo) error { + err := db.se.CreatePlacementPolicy(ctx, policy) + if err != nil { + return errors.Trace(err) + } + log.Info("create placement policy succeed", zap.Stringer("name", policy.Name)) + return nil +} + // CreateDatabase executes a CREATE DATABASE SQL. func (db *DB) CreateDatabase(ctx context.Context, schema *model.DBInfo) error { err := db.se.CreateDatabase(ctx, schema) @@ -228,11 +273,21 @@ func (db *DB) CreateTablePostRestore(ctx context.Context, table *metautil.Table, } // CreateTables execute a internal CREATE TABLES. -func (db *DB) CreateTables(ctx context.Context, tables []*metautil.Table, ddlTables map[UniqueTableName]bool) error { +func (db *DB) CreateTables(ctx context.Context, tables []*metautil.Table, + ddlTables map[UniqueTableName]bool, supportPolicy bool, policyMap *sync.Map) error { if batchSession, ok := db.se.(glue.BatchCreateTableSession); ok { m := map[string][]*model.TableInfo{} for _, table := range tables { m[table.DB.Name.L] = append(m[table.DB.Name.L], table.Info) + if !supportPolicy { + log.Info("set placementPolicyRef to nil when target tidb not support policy", + zap.Stringer("table", table.Info.Name), zap.Stringer("db", table.DB.Name)) + table.Info.ClearPlacement() + } else { + if err := db.ensureTablePlacementPolicies(ctx, table.Info, policyMap); err != nil { + return errors.Trace(err) + } + } } if err := batchSession.CreateTables(ctx, m); err != nil { return err @@ -249,7 +304,18 @@ func (db *DB) CreateTables(ctx context.Context, tables []*metautil.Table, ddlTab } // CreateTable executes a CREATE TABLE SQL. -func (db *DB) CreateTable(ctx context.Context, table *metautil.Table, ddlTables map[UniqueTableName]bool) error { +func (db *DB) CreateTable(ctx context.Context, table *metautil.Table, + ddlTables map[UniqueTableName]bool, supportPolicy bool, policyMap *sync.Map) error { + if !supportPolicy { + log.Info("set placementPolicyRef to nil when target tidb not support policy", + zap.Stringer("table", table.Info.Name), zap.Stringer("db", table.DB.Name)) + table.Info.ClearPlacement() + } else { + if err := db.ensureTablePlacementPolicies(ctx, table.Info, policyMap); err != nil { + return errors.Trace(err) + } + } + err := db.se.CreateTable(ctx, table.DB.Name, table.Info) if err != nil { log.Error("create table failed", @@ -272,6 +338,41 @@ func (db *DB) Close() { db.se.Close() } +func (db *DB) ensurePlacementPolicy(ctx context.Context, policyName model.CIStr, policies *sync.Map) error { + if policies == nil { + return nil + } + + if policy, ok := policies.LoadAndDelete(policyName.L); ok { + return db.CreatePlacementPolicy(ctx, policy.(*model.PolicyInfo)) + } + + // This means policy already created + return nil +} + +func (db *DB) ensureTablePlacementPolicies(ctx context.Context, tableInfo *model.TableInfo, policies *sync.Map) error { + if tableInfo.PlacementPolicyRef != nil { + if err := db.ensurePlacementPolicy(ctx, tableInfo.PlacementPolicyRef.Name, policies); err != nil { + return err + } + } + + if tableInfo.Partition != nil { + for _, def := range tableInfo.Partition.Definitions { + if def.PlacementPolicyRef == nil { + continue + } + + if err := db.ensurePlacementPolicy(ctx, def.PlacementPolicyRef.Name, policies); err != nil { + return err + } + } + } + + return nil +} + // FilterDDLJobs filters ddl jobs. func FilterDDLJobs(allDDLJobs []*model.Job, tables []*metautil.Table) (ddlJobs []*model.Job) { // Sort the ddl jobs by schema version in descending order. @@ -324,6 +425,31 @@ func FilterDDLJobs(allDDLJobs []*model.Job, tables []*metautil.Table) (ddlJobs [ return ddlJobs } +// FilterDDLJobByRules if one of rules returns true, the job in srcDDLJobs will be filtered. +func FilterDDLJobByRules(srcDDLJobs []*model.Job, rules ...DDLJobFilterRule) (dstDDLJobs []*model.Job) { + dstDDLJobs = make([]*model.Job, 0, len(srcDDLJobs)) + for _, ddlJob := range srcDDLJobs { + passed := true + for _, rule := range rules { + if rule(ddlJob) { + passed = false + break + } + } + + if passed { + dstDDLJobs = append(dstDDLJobs, ddlJob) + } + } + + return +} + +// DDLJobBlockListRule rule for filter ddl job with type in block list. +func DDLJobBlockListRule(ddlJob *model.Job) bool { + return checkIsInActions(ddlJob.Type, incrementalRestoreActionBlockList) +} + func getDatabases(tables []*metautil.Table) (dbs []*model.DBInfo) { dbIDs := make(map[int64]bool) for _, table := range tables { @@ -334,3 +460,8 @@ func getDatabases(tables []*metautil.Table) (dbs []*model.DBInfo) { } return } + +func checkIsInActions(action model.ActionType, actions map[model.ActionType]struct{}) bool { + _, ok := actions[action] + return ok +} diff --git a/br/pkg/restore/db_test.go b/br/pkg/restore/db_test.go index 1393ff2e66dbf..a7fd2eb82ed78 100644 --- a/br/pkg/restore/db_test.go +++ b/br/pkg/restore/db_test.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/parser/types" "github.com/pingcap/tidb/testkit" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/oracle" ) @@ -81,7 +82,7 @@ func TestRestoreAutoIncID(t *testing.T) { require.Equal(t, uint64(globalAutoID), autoIncID) // Alter AutoIncID to the next AutoIncID + 100 table.Info.AutoIncID = globalAutoID + 100 - db, err := restore.NewDB(gluetidb.New(), s.mock.Storage) + db, _, err := restore.NewDB(gluetidb.New(), s.mock.Storage, "STRICT") require.NoErrorf(t, err, "Error create DB") tk.MustExec("drop database if exists test;") // Test empty collate value @@ -96,7 +97,7 @@ func TestRestoreAutoIncID(t *testing.T) { err = db.CreateDatabase(context.Background(), table.DB) require.NoErrorf(t, err, "Error create empty charset db: %s %s", err, s.mock.DSN) uniqueMap := make(map[restore.UniqueTableName]bool) - err = db.CreateTable(context.Background(), &table, uniqueMap) + err = db.CreateTable(context.Background(), &table, uniqueMap, false, nil) require.NoErrorf(t, err, "Error create table: %s %s", err, s.mock.DSN) tk.MustExec("use test") @@ -107,7 +108,7 @@ func TestRestoreAutoIncID(t *testing.T) { // try again, failed due to table exists. table.Info.AutoIncID = globalAutoID + 200 - err = db.CreateTable(context.Background(), &table, uniqueMap) + err = db.CreateTable(context.Background(), &table, uniqueMap, false, nil) require.NoError(t, err) // Check if AutoIncID is not altered. autoIncID, err = strconv.ParseUint(tk.MustQuery("admin show `\"t\"` next_row_id").Rows()[0][3].(string), 10, 64) @@ -117,7 +118,7 @@ func TestRestoreAutoIncID(t *testing.T) { // try again, success because we use alter sql in unique map. table.Info.AutoIncID = globalAutoID + 300 uniqueMap[restore.UniqueTableName{"test", "\"t\""}] = true - err = db.CreateTable(context.Background(), &table, uniqueMap) + err = db.CreateTable(context.Background(), &table, uniqueMap, false, nil) require.NoError(t, err) // Check if AutoIncID is altered to globalAutoID + 300. autoIncID, err = strconv.ParseUint(tk.MustQuery("admin show `\"t\"` next_row_id").Rows()[0][3].(string), 10, 64) @@ -157,10 +158,10 @@ func TestCreateTablesInDb(t *testing.T) { } ddlJobMap[restore.UniqueTableName{dbSchema.Name.String(), tables[i].Info.Name.String()}] = false } - db, err := restore.NewDB(gluetidb.New(), s.mock.Storage) + db, _, err := restore.NewDB(gluetidb.New(), s.mock.Storage, "STRICT") require.NoError(t, err) - err = db.CreateTables(context.Background(), tables, ddlJobMap) + err = db.CreateTables(context.Background(), tables, ddlJobMap, false, nil) require.NoError(t, err) } @@ -293,3 +294,77 @@ func TestFilterDDLJobsV2(t *testing.T) { } require.Equal(t, 7, len(ddlJobs)) } + +func TestDB_ExecDDL(t *testing.T) { + s, clean := createRestoreSchemaSuite(t) + defer clean() + + ctx := context.Background() + ddlJobs := []*model.Job{ + { + Type: model.ActionAddIndex, + Query: "CREATE DATABASE IF NOT EXISTS test_db;", + BinlogInfo: &model.HistoryInfo{}, + }, + { + Type: model.ActionAddIndex, + Query: "", + BinlogInfo: &model.HistoryInfo{}, + }, + } + + db, _, err := restore.NewDB(gluetidb.New(), s.mock.Storage, "STRICT") + require.NoError(t, err) + + for _, ddlJob := range ddlJobs { + err = db.ExecDDL(ctx, ddlJob) + assert.NoError(t, err) + } +} + +func TestFilterDDLJobByRules(t *testing.T) { + ddlJobs := []*model.Job{ + { + Type: model.ActionSetTiFlashReplica, + }, + { + Type: model.ActionAddPrimaryKey, + }, + { + Type: model.ActionUpdateTiFlashReplicaStatus, + }, + { + Type: model.ActionCreateTable, + }, + { + Type: model.ActionLockTable, + }, + { + Type: model.ActionAddIndex, + }, + { + Type: model.ActionUnlockTable, + }, + { + Type: model.ActionCreateSchema, + }, + { + Type: model.ActionModifyColumn, + }, + } + + expectedDDLTypes := []model.ActionType{ + model.ActionAddPrimaryKey, + model.ActionCreateTable, + model.ActionAddIndex, + model.ActionCreateSchema, + model.ActionModifyColumn, + } + + ddlJobs = restore.FilterDDLJobByRules(ddlJobs, restore.DDLJobBlockListRule) + + require.Equal(t, len(expectedDDLTypes), len(ddlJobs)) + for i, ddlJob := range ddlJobs { + assert.Equal(t, expectedDDLTypes[i], ddlJob.Type) + } +} diff --git a/br/pkg/restore/import.go b/br/pkg/restore/import.go index 39068d6725502..f75489b8398f6 100644 --- a/br/pkg/restore/import.go +++ b/br/pkg/restore/import.go @@ -6,6 +6,7 @@ import ( "bytes" "context" "crypto/tls" + "strings" "sync" "sync/atomic" "time" @@ -259,6 +260,40 @@ func (importer *FileImporter) SetRawRange(startKey, endKey []byte) error { return nil } +// getKeyRangeForFiles gets the maximum range on files. +func (importer *FileImporter) getKeyRangeForFiles( + files []*backuppb.File, + rewriteRules *RewriteRules, +) ([]byte, []byte, error) { + var ( + startKey, endKey []byte + start, end []byte + err error + ) + + for _, f := range files { + if importer.isRawKvMode { + start, end = f.GetStartKey(), f.GetEndKey() + } else { + start, end, err = rewriteFileKeys(f, rewriteRules) + if err != nil { + return nil, nil, errors.Trace(err) + } + } + + if len(startKey) == 0 || bytes.Compare(start, startKey) < 0 { + startKey = start + } + if len(endKey) == 0 || bytes.Compare(endKey, end) < 0 { + endKey = end + } + } + + log.Debug("rewrite file keys", logutil.Files(files), + logutil.Key("startKey", startKey), logutil.Key("endKey", endKey)) + return startKey, endKey, nil +} + // Import tries to import a file. // All rules must contain encoded keys. func (importer *FileImporter) Import( @@ -270,32 +305,14 @@ func (importer *FileImporter) Import( ) error { start := time.Now() log.Debug("import file", logutil.Files(files)) + // Rewrite the start key and end key of file to scan regions - var startKey, endKey []byte - if importer.isRawKvMode { - startKey = files[0].StartKey - endKey = files[0].EndKey - } else { - for _, f := range files { - start, end, err := rewriteFileKeys(f, rewriteRules) - if err != nil { - return errors.Trace(err) - } - if len(startKey) == 0 || bytes.Compare(startKey, start) > 0 { - startKey = start - } - if bytes.Compare(endKey, end) < 0 { - endKey = end - } - } + startKey, endKey, err := importer.getKeyRangeForFiles(files, rewriteRules) + if err != nil { + return errors.Trace(err) } - log.Debug("rewrite file keys", - logutil.Files(files), - logutil.Key("startKey", startKey), - logutil.Key("endKey", endKey)) - - err := utils.WithRetry(ctx, func() error { + err = utils.WithRetry(ctx, func() error { tctx, cancel := context.WithTimeout(ctx, importScanRegionTime) defer cancel() // Scan regions covered by the file range @@ -311,35 +328,7 @@ func (importer *FileImporter) Import( for _, regionInfo := range regionInfos { info := regionInfo // Try to download file. - downloadMetas := make([]*import_sstpb.SSTMeta, 0, len(files)) - remainFiles := files - errDownload := utils.WithRetry(ctx, func() error { - var e error - for i, f := range remainFiles { - var downloadMeta *import_sstpb.SSTMeta - if importer.isRawKvMode { - downloadMeta, e = importer.downloadRawKVSST(ctx, info, f, cipher, apiVersion) - } else { - downloadMeta, e = importer.downloadSST(ctx, info, f, rewriteRules, cipher) - } - failpoint.Inject("restore-storage-error", func(val failpoint.Value) { - msg := val.(string) - log.Debug("failpoint restore-storage-error injected.", zap.String("msg", msg)) - e = errors.Annotate(e, msg) - }) - failpoint.Inject("restore-gRPC-error", func(_ failpoint.Value) { - log.Warn("the connection to TiKV has been cut by a neko, meow :3") - e = status.Error(codes.Unavailable, "the connection to TiKV has been cut by a neko, meow :3") - }) - if e != nil { - remainFiles = remainFiles[i:] - return errors.Trace(e) - } - downloadMetas = append(downloadMetas, downloadMeta) - } - - return nil - }, utils.NewDownloadSSTBackoffer()) + downloadMetas, errDownload := importer.download(ctx, info, files, rewriteRules, cipher, apiVersion) if errDownload != nil { for _, e := range multierr.Errors(errDownload) { switch errors.Cause(e) { // nolint:errorlint @@ -364,67 +353,10 @@ func (importer *FileImporter) Import( logutil.ShortError(errDownload)) return errors.Trace(errDownload) } - log.Debug("download file done", zap.String("file-sample", files[0].Name), zap.Stringer("take", time.Since(start)), - logutil.Key("start", files[0].StartKey), - logutil.Key("end", files[0].EndKey), - ) - ingestResp, errIngest := importer.ingestSSTs(ctx, downloadMetas, info) - ingestRetry: - for errIngest == nil { - errPb := ingestResp.GetError() - if errPb == nil { - // Ingest success - break ingestRetry - } - switch { - case errPb.NotLeader != nil: - // If error is `NotLeader`, update the region info and retry - var newInfo *RegionInfo - if newLeader := errPb.GetNotLeader().GetLeader(); newLeader != nil { - newInfo = &RegionInfo{ - Leader: newLeader, - Region: info.Region, - } - } else { - // Slow path, get region from PD - newInfo, errIngest = importer.metaClient.GetRegion( - ctx, info.Region.GetStartKey()) - if errIngest != nil { - break ingestRetry - } - // do not get region info, wait a second and continue - if newInfo == nil { - log.Warn("get region by key return nil", logutil.Region(info.Region)) - time.Sleep(time.Second) - continue - } - } - log.Debug("ingest sst returns not leader error, retry it", - logutil.Region(info.Region), - zap.Stringer("newLeader", newInfo.Leader)) - - if !checkRegionEpoch(newInfo, info) { - errIngest = errors.Trace(berrors.ErrKVEpochNotMatch) - break ingestRetry - } - ingestResp, errIngest = importer.ingestSSTs(ctx, downloadMetas, newInfo) - case errPb.EpochNotMatch != nil: - // TODO handle epoch not match error - // 1. retry download if needed - // 2. retry ingest - errIngest = errors.Trace(berrors.ErrKVEpochNotMatch) - break ingestRetry - case errPb.KeyNotInRegion != nil: - errIngest = errors.Trace(berrors.ErrKVKeyNotInRegion) - break ingestRetry - default: - // Other errors like `ServerIsBusy`, `RegionNotFound`, etc. should be retryable - errIngest = errors.Annotatef(berrors.ErrKVIngestFailed, "ingest error %s", errPb) - break ingestRetry - } - } - - if errIngest != nil { + log.Debug("download file done", + zap.String("file-sample", files[0].Name), zap.Stringer("take", time.Since(start)), + logutil.Key("start", files[0].StartKey), logutil.Key("end", files[0].EndKey)) + if errIngest := importer.ingest(ctx, info, downloadMetas); errIngest != nil { log.Error("ingest file failed", logutil.Files(files), logutil.SSTMetas(downloadMetas), @@ -433,12 +365,12 @@ func (importer *FileImporter) Import( return errors.Trace(errIngest) } } + log.Debug("ingest file done", zap.String("file-sample", files[0].Name), zap.Stringer("take", time.Since(start))) for _, f := range files { summary.CollectSuccessUnit(summary.TotalKV, 1, f.TotalKvs) summary.CollectSuccessUnit(summary.TotalBytes, 1, f.TotalBytes) } - return nil }, utils.NewImportSSTBackoffer()) return errors.Trace(err) @@ -452,6 +384,60 @@ func (importer *FileImporter) setDownloadSpeedLimit(ctx context.Context, storeID return errors.Trace(err) } +func (importer *FileImporter) download( + ctx context.Context, + regionInfo *RegionInfo, + files []*backuppb.File, + rewriteRules *RewriteRules, + cipher *backuppb.CipherInfo, + apiVersion kvrpcpb.APIVersion, +) ([]*import_sstpb.SSTMeta, error) { + var ( + downloadMetas = make([]*import_sstpb.SSTMeta, 0, len(files)) + remainFiles = files + ) + errDownload := utils.WithRetry(ctx, func() error { + var e error + for i, f := range remainFiles { + var downloadMeta *import_sstpb.SSTMeta + if importer.isRawKvMode { + downloadMeta, e = importer.downloadRawKVSST(ctx, regionInfo, f, cipher, apiVersion) + } else { + downloadMeta, e = importer.downloadSST(ctx, regionInfo, f, rewriteRules, cipher) + } + + failpoint.Inject("restore-storage-error", func(val failpoint.Value) { + msg := val.(string) + log.Debug("failpoint restore-storage-error injected.", zap.String("msg", msg)) + e = errors.Annotate(e, msg) + }) + failpoint.Inject("restore-gRPC-error", func(_ failpoint.Value) { + log.Warn("the connection to TiKV has been cut by a neko, meow :3") + e = status.Error(codes.Unavailable, "the connection to TiKV has been cut by a neko, meow :3") + }) + if isDecryptSstErr(e) { + log.Info("fail to decrypt when download sst, try again with no-crypt", logutil.File(f)) + if importer.isRawKvMode { + downloadMeta, e = importer.downloadRawKVSST(ctx, regionInfo, f, nil, apiVersion) + } else { + downloadMeta, e = importer.downloadSST(ctx, regionInfo, f, rewriteRules, nil) + } + } + + if e != nil { + remainFiles = remainFiles[i:] + return errors.Trace(e) + } + + downloadMetas = append(downloadMetas, downloadMeta) + } + + return nil + }, utils.NewDownloadSSTBackoffer()) + + return downloadMetas, errDownload +} + func (importer *FileImporter) downloadSST( ctx context.Context, regionInfo *RegionInfo, @@ -592,6 +578,67 @@ func (importer *FileImporter) downloadRawKVSST( return &sstMeta, nil } +func (importer *FileImporter) ingest( + ctx context.Context, + info *RegionInfo, + downloadMetas []*import_sstpb.SSTMeta, +) error { + for { + ingestResp, errIngest := importer.ingestSSTs(ctx, downloadMetas, info) + if errIngest != nil { + return errors.Trace(errIngest) + } + + errPb := ingestResp.GetError() + switch { + case errPb == nil: + return nil + case errPb.NotLeader != nil: + // If error is `NotLeader`, update the region info and retry + var newInfo *RegionInfo + if newLeader := errPb.GetNotLeader().GetLeader(); newLeader != nil { + newInfo = &RegionInfo{ + Leader: newLeader, + Region: info.Region, + } + } else { + for { + // Slow path, get region from PD + newInfo, errIngest = importer.metaClient.GetRegion( + ctx, info.Region.GetStartKey()) + if errIngest != nil { + return errors.Trace(errIngest) + } + if newInfo != nil { + break + } + // do not get region info, wait a second and GetRegion() again. + log.Warn("get region by key return nil", logutil.Region(info.Region)) + time.Sleep(time.Second) + } + } + + if !checkRegionEpoch(newInfo, info) { + return errors.Trace(berrors.ErrKVEpochNotMatch) + } + log.Debug("ingest sst returns not leader error, retry it", + logutil.Region(info.Region), + zap.Stringer("newLeader", newInfo.Leader)) + info = newInfo + case errPb.EpochNotMatch != nil: + // TODO handle epoch not match error + // 1. retry download if needed + // 2. retry ingest + return errors.Trace(berrors.ErrKVEpochNotMatch) + case errPb.KeyNotInRegion != nil: + return errors.Trace(berrors.ErrKVKeyNotInRegion) + default: + // Other errors like `ServerIsBusy`, `RegionNotFound`, etc. should be retryable + return errors.Annotatef(berrors.ErrKVIngestFailed, "ingest error %s", errPb) + } + } +} + func (importer *FileImporter) ingestSSTs( ctx context.Context, sstMetas []*import_sstpb.SSTMeta, @@ -629,3 +676,9 @@ func (importer *FileImporter) ingestSSTs( resp, err := importer.importClient.MultiIngest(ctx, leader.GetStoreId(), req) return resp, errors.Trace(err) } + +func isDecryptSstErr(err error) bool { + return err != nil && + strings.Contains(err.Error(), "Engine Engine") && + strings.Contains(err.Error(), "Corruption: Bad table magic number") +} diff --git a/br/pkg/restore/main_test.go b/br/pkg/restore/main_test.go index dd8a40f10d779..7c729307e6584 100644 --- a/br/pkg/restore/main_test.go +++ b/br/pkg/restore/main_test.go @@ -27,6 +27,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("github.com/klauspost/compress/zstd.(*blockDec).startDecoder"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), diff --git a/br/pkg/restore/pipeline_items.go b/br/pkg/restore/pipeline_items.go index 7d3ce107ff70b..26da3824b9a4b 100644 --- a/br/pkg/restore/pipeline_items.go +++ b/br/pkg/restore/pipeline_items.go @@ -8,8 +8,10 @@ import ( "time" "github.com/pingcap/errors" + backuppb "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/log" "github.com/pingcap/tidb/br/pkg/glue" + "github.com/pingcap/tidb/br/pkg/logutil" "github.com/pingcap/tidb/br/pkg/metautil" "github.com/pingcap/tidb/br/pkg/rtree" "github.com/pingcap/tidb/br/pkg/summary" @@ -183,8 +185,27 @@ type BatchSender interface { Close() } +// TiKVRestorer is the minimal methods required for restoring. +// It contains the primitive APIs extract from `restore.Client`, so some of arguments may seem redundant. +// Maybe TODO: make a better abstraction? +type TiKVRestorer interface { + // SplitRanges split regions implicated by the ranges and rewrite rules. + // After spliting, it also scatters the fresh regions. + SplitRanges(ctx context.Context, + ranges []rtree.Range, + rewriteRules *RewriteRules, + updateCh glue.Progress, + isRawKv bool) error + // RestoreFiles import the files to the TiKV. + RestoreFiles(ctx context.Context, + files []*backuppb.File, + rewriteRules *RewriteRules, + updateCh glue.Progress) error +} + type tikvSender struct { - client *Client + client TiKVRestorer + updateCh glue.Progress sink TableSink @@ -209,7 +230,7 @@ func (b *tikvSender) RestoreBatch(ranges DrainResult) { // NewTiKVSender make a sender that send restore requests to TiKV. func NewTiKVSender( ctx context.Context, - cli *Client, + cli TiKVRestorer, updateCh glue.Progress, splitConcurrency uint, ) (BatchSender, error) { @@ -252,9 +273,9 @@ func (b *tikvSender) splitWorker(ctx context.Context, b.wg.Done() if err := eg.Wait(); err != nil { b.sink.EmitError(err) - return } close(next) + log.Info("TiKV Sender: split worker exits.") }() start := time.Now() @@ -266,7 +287,7 @@ func (b *tikvSender) splitWorker(ctx context.Context, pool := utils.NewWorkerPool(concurrency, "split") for { select { - case <-ctx.Done(): + case <-ectx.Done(): return case result, ok := <-ranges: if !ok { @@ -289,7 +310,7 @@ func (b *tikvSender) splitWorker(ctx context.Context, // hence the checksum would fail. done := b.registerTableIsRestoring(result.TablesToSend) pool.ApplyOnErrorGroup(eg, func() error { - err := SplitRanges(ectx, b.client, result.Ranges, result.RewriteRules, b.updateCh, false) + err := b.client.SplitRanges(ectx, result.Ranges, result.RewriteRules, b.updateCh, false) if err != nil { log.Error("failed on split range", rtree.ZapRanges(result.Ranges), zap.Error(err)) return err @@ -338,17 +359,17 @@ func (b *tikvSender) waitTablesDone(ts []CreatedTable) { func (b *tikvSender) restoreWorker(ctx context.Context, ranges <-chan drainResultAndDone) { eg, ectx := errgroup.WithContext(ctx) defer func() { - log.Debug("restore worker closed") + log.Info("TiKV Sender: restore worker prepare to close.") if err := eg.Wait(); err != nil { b.sink.EmitError(err) - return } - b.wg.Done() b.sink.Close() + b.wg.Done() + log.Info("TiKV Sender: restore worker exits.") }() for { select { - case <-ctx.Done(): + case <-ectx.Done(): return case r, ok := <-ranges: if !ok { @@ -360,6 +381,7 @@ func (b *tikvSender) restoreWorker(ctx context.Context, ranges <-chan drainResul eg.Go(func() error { e := b.client.RestoreFiles(ectx, files, r.result.RewriteRules, b.updateCh) if e != nil { + log.Error("restore batch meet error", logutil.ShortError(e), logutil.Files(files)) r.done() return e } diff --git a/br/pkg/restore/split.go b/br/pkg/restore/split.go index 91af891f13fb0..9c28d0f3f9a9c 100644 --- a/br/pkg/restore/split.go +++ b/br/pkg/restore/split.go @@ -438,11 +438,18 @@ func PaginateScanRegion( } var regions []*RegionInfo - err := utils.WithRetry(ctx, func() error { + var err error + // we don't need to return multierr. since there only 3 times retry. + // in most case 3 times retry have the same error. so we just return the last error. + // actually we'd better remove all multierr in br/lightning. + // because it's not easy to check multierr equals normal error. + // see https://github.com/pingcap/tidb/issues/33419. + _ = utils.WithRetry(ctx, func() error { regions = []*RegionInfo{} scanStartKey := startKey for { - batch, err := client.ScanRegions(ctx, scanStartKey, endKey, limit) + var batch []*RegionInfo + batch, err = client.ScanRegions(ctx, scanStartKey, endKey, limit) if err != nil { return errors.Trace(err) } @@ -458,7 +465,7 @@ func PaginateScanRegion( break } } - if err := CheckRegionConsistency(startKey, endKey, regions); err != nil { + if err = CheckRegionConsistency(startKey, endKey, regions); err != nil { log.Warn("failed to scan region, retrying", logutil.ShortError(err)) return err } diff --git a/br/pkg/restore/split_client.go b/br/pkg/restore/split_client.go index c18c3969a8cdb..36f5d0164e35d 100755 --- a/br/pkg/restore/split_client.go +++ b/br/pkg/restore/split_client.go @@ -63,7 +63,7 @@ type SplitClient interface { ScatterRegions(ctx context.Context, regionInfo []*RegionInfo) error // GetOperator gets the status of operator of the specified region. GetOperator(ctx context.Context, regionID uint64) (*pdpb.GetOperatorResponse, error) - // ScanRegion gets a list of regions, starts from the region that contains key. + // ScanRegions gets a list of regions, starts from the region that contains key. // Limit limits the maximum number of regions returned. ScanRegions(ctx context.Context, key, endKey []byte, limit int) ([]*RegionInfo, error) // GetPlacementRule loads a placement rule from PD. @@ -72,7 +72,7 @@ type SplitClient interface { SetPlacementRule(ctx context.Context, rule pdtypes.Rule) error // DeletePlacementRule removes a placement rule from PD. DeletePlacementRule(ctx context.Context, groupID, ruleID string) error - // SetStoreLabel add or update specified label of stores. If labelValue + // SetStoresLabel add or update specified label of stores. If labelValue // is empty, it clears the label. SetStoresLabel(ctx context.Context, stores []uint64, labelKey, labelValue string) error } diff --git a/br/pkg/restore/split_test.go b/br/pkg/restore/split_test.go index 5a4a8bbdad97b..e07946a5b25af 100644 --- a/br/pkg/restore/split_test.go +++ b/br/pkg/restore/split_test.go @@ -10,9 +10,14 @@ import ( "time" "github.com/pingcap/errors" + backuppb "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/kvproto/pkg/import_sstpb" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" + "github.com/pingcap/log" + berrors "github.com/pingcap/tidb/br/pkg/errors" + "github.com/pingcap/tidb/br/pkg/glue" + "github.com/pingcap/tidb/br/pkg/logutil" "github.com/pingcap/tidb/br/pkg/restore" "github.com/pingcap/tidb/br/pkg/rtree" "github.com/pingcap/tidb/br/pkg/utils" @@ -34,6 +39,7 @@ type TestClient struct { supportBatchScatter bool scattered map[uint64]bool + InjectErr bool } func NewTestClient( @@ -210,6 +216,10 @@ func (c *TestClient) GetOperator(ctx context.Context, regionID uint64) (*pdpb.Ge } func (c *TestClient) ScanRegions(ctx context.Context, key, endKey []byte, limit int) ([]*restore.RegionInfo, error) { + if c.InjectErr { + return nil, errors.New("mock scan error") + } + infos := c.regionsInfo.ScanRange(key, endKey, limit) regions := make([]*restore.RegionInfo, 0, len(infos)) for _, info := range infos { @@ -560,3 +570,131 @@ func TestRegionConsistency(t *testing.T) { require.Regexp(t, ca.err, err.Error()) } } + +type fakeRestorer struct { + mu sync.Mutex + + errorInSplit bool + splitRanges []rtree.Range + restoredFiles []*backuppb.File +} + +func (f *fakeRestorer) SplitRanges(ctx context.Context, ranges []rtree.Range, rewriteRules *restore.RewriteRules, updateCh glue.Progress, isRawKv bool) error { + f.mu.Lock() + defer f.mu.Unlock() + + if ctx.Err() != nil { + return ctx.Err() + } + f.splitRanges = append(f.splitRanges, ranges...) + if f.errorInSplit { + err := errors.Annotatef(berrors.ErrRestoreSplitFailed, + "the key space takes many efforts and finally get together, how dare you split them again... :<") + log.Error("error happens :3", logutil.ShortError(err)) + return err + } + return nil +} + +func (f *fakeRestorer) RestoreFiles(ctx context.Context, files []*backuppb.File, rewriteRules *restore.RewriteRules, updateCh glue.Progress) error { + f.mu.Lock() + defer f.mu.Unlock() + + if ctx.Err() != nil { + return ctx.Err() + } + f.restoredFiles = append(f.restoredFiles, files...) + err := errors.Annotatef(berrors.ErrRestoreWriteAndIngest, "the files to restore are taken by a hijacker, meow :3") + log.Error("error happens :3", logutil.ShortError(err)) + return err +} + +func fakeRanges(keys ...string) (r restore.DrainResult) { + for i := range keys { + if i+1 == len(keys) { + return + } + r.Ranges = append(r.Ranges, rtree.Range{ + StartKey: []byte(keys[i]), + EndKey: []byte(keys[i+1]), + Files: []*backuppb.File{{Name: "fake.sst"}}, + }) + } + return +} + +type errorInTimeSink struct { + ctx context.Context + errCh chan error + t *testing.T +} + +func (e errorInTimeSink) EmitTables(tables ...restore.CreatedTable) {} + +func (e errorInTimeSink) EmitError(err error) { + e.errCh <- err +} + +func (e errorInTimeSink) Close() {} + +func (e errorInTimeSink) Wait() { + select { + case <-e.ctx.Done(): + e.t.Logf("The context is canceled but no error happen") + e.t.FailNow() + case <-e.errCh: + } +} + +func assertErrorEmitInTime(ctx context.Context, t *testing.T) errorInTimeSink { + errCh := make(chan error, 1) + return errorInTimeSink{ + ctx: ctx, + errCh: errCh, + t: t, + } +} + +func TestRestoreFailed(t *testing.T) { + ranges := []restore.DrainResult{ + fakeRanges("aax", "abx", "abz"), + fakeRanges("abz", "bbz", "bcy"), + fakeRanges("bcy", "cad", "xxy"), + } + r := &fakeRestorer{} + sender, err := restore.NewTiKVSender(context.TODO(), r, nil, 1) + require.NoError(t, err) + dctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + sink := assertErrorEmitInTime(dctx, t) + sender.PutSink(sink) + for _, r := range ranges { + sender.RestoreBatch(r) + } + sink.Wait() + sink.Close() + sender.Close() + require.GreaterOrEqual(t, len(r.restoredFiles), 1) +} + +func TestSplitFailed(t *testing.T) { + ranges := []restore.DrainResult{ + fakeRanges("aax", "abx", "abz"), + fakeRanges("abz", "bbz", "bcy"), + fakeRanges("bcy", "cad", "xxy"), + } + r := &fakeRestorer{errorInSplit: true} + sender, err := restore.NewTiKVSender(context.TODO(), r, nil, 1) + require.NoError(t, err) + dctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + sink := assertErrorEmitInTime(dctx, t) + sender.PutSink(sink) + for _, r := range ranges { + sender.RestoreBatch(r) + } + sink.Wait() + sender.Close() + require.GreaterOrEqual(t, len(r.splitRanges), 2) + require.Len(t, r.restoredFiles, 0) +} diff --git a/br/pkg/restore/systable_restore.go b/br/pkg/restore/systable_restore.go index f6235d195a850..b0f588fa2286c 100644 --- a/br/pkg/restore/systable_restore.go +++ b/br/pkg/restore/systable_restore.go @@ -8,12 +8,12 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/log" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" berrors "github.com/pingcap/tidb/br/pkg/errors" "github.com/pingcap/tidb/br/pkg/logutil" "github.com/pingcap/tidb/br/pkg/utils" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" + filter "github.com/pingcap/tidb/util/table-filter" "go.uber.org/multierr" "go.uber.org/zap" ) diff --git a/br/pkg/restore/util.go b/br/pkg/restore/util.go index a323e6006e79c..35edb7ec52b50 100644 --- a/br/pkg/restore/util.go +++ b/br/pkg/restore/util.go @@ -137,8 +137,8 @@ func GetSSTMetaFromFile( } } -// MakeDBPool makes a session pool with specficated size by sessionFactory. -func MakeDBPool(size uint, dbFactory func() (*DB, error)) ([]*DB, error) { +// makeDBPool makes a session pool with specficated size by sessionFactory. +func makeDBPool(size uint, dbFactory func() (*DB, error)) ([]*DB, error) { dbPool := make([]*DB, 0, size) for i := uint(0); i < size; i++ { db, e := dbFactory() diff --git a/br/pkg/restore/util_test.go b/br/pkg/restore/util_test.go index 16348d5212f9a..cde804ba89b08 100644 --- a/br/pkg/restore/util_test.go +++ b/br/pkg/restore/util_test.go @@ -10,6 +10,7 @@ import ( backuppb "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/kvproto/pkg/import_sstpb" "github.com/pingcap/kvproto/pkg/metapb" + berrors "github.com/pingcap/tidb/br/pkg/errors" "github.com/pingcap/tidb/br/pkg/restore" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/util/codec" @@ -228,6 +229,7 @@ func TestPaginateScanRegion(t *testing.T) { var batch []*restore.RegionInfo _, err := restore.PaginateScanRegion(ctx, NewTestClient(stores, regionMap, 0), []byte{}, []byte{}, 3) require.Error(t, err) + require.True(t, berrors.ErrPDBatchScanRegion.Equal(err)) require.Regexp(t, ".*scan region return empty result.*", err.Error()) regionMap, regions = makeRegions(1) @@ -268,12 +270,20 @@ func TestPaginateScanRegion(t *testing.T) { _, err = restore.PaginateScanRegion(ctx, NewTestClient(stores, regionMap, 0), []byte{2}, []byte{1}, 3) require.Error(t, err) + require.True(t, berrors.ErrRestoreInvalidRange.Equal(err)) require.Regexp(t, ".*startKey >= endKey.*", err.Error()) + tc := NewTestClient(stores, regionMap, 0) + tc.InjectErr = true + _, err = restore.PaginateScanRegion(ctx, tc, regions[1].Region.EndKey, regions[5].Region.EndKey, 3) + require.Error(t, err) + require.Regexp(t, ".*mock scan error.*", err.Error()) + // make the regionMap losing some region, this will cause scan region check fails delete(regionMap, uint64(3)) _, err = restore.PaginateScanRegion(ctx, NewTestClient(stores, regionMap, 0), regions[1].Region.EndKey, regions[5].Region.EndKey, 3) require.Error(t, err) + require.True(t, berrors.ErrPDBatchScanRegion.Equal(err)) require.Regexp(t, ".*region endKey not equal to next region startKey.*", err.Error()) } diff --git a/br/pkg/rtree/main_test.go b/br/pkg/rtree/main_test.go index 8d4ae4216a894..f1dcccc623422 100644 --- a/br/pkg/rtree/main_test.go +++ b/br/pkg/rtree/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/br/pkg/storage/azblob.go b/br/pkg/storage/azblob.go index 36969a0a62a53..10b06776772a5 100644 --- a/br/pkg/storage/azblob.go +++ b/br/pkg/storage/azblob.go @@ -262,10 +262,11 @@ func (s *AzureBlobStorage) withPrefix(name string) string { func (s *AzureBlobStorage) WriteFile(ctx context.Context, name string, data []byte) error { client := s.containerClient.NewBlockBlobClient(s.withPrefix(name)) - _, err := client.UploadBufferToBlockBlob(ctx, data, azblob.HighLevelUploadToBlockBlobOption{AccessTier: &s.accessTier}) + resp, err := client.UploadBufferToBlockBlob(ctx, data, azblob.HighLevelUploadToBlockBlobOption{AccessTier: &s.accessTier}) if err != nil { return errors.Annotatef(err, "Failed to write azure blob file, file info: bucket(container)='%s', key='%s'", s.options.Bucket, s.withPrefix(name)) } + defer resp.Body.Close() return nil } @@ -380,6 +381,18 @@ func (s *AzureBlobStorage) Create(ctx context.Context, name string) (ExternalFil return uploaderWriter, nil } +func (s *AzureBlobStorage) Rename(ctx context.Context, oldFileName, newFileName string) error { + data, err := s.ReadFile(ctx, oldFileName) + if err != nil { + return errors.Trace(err) + } + err = s.WriteFile(ctx, newFileName, data) + if err != nil { + return errors.Trace(err) + } + return s.DeleteFile(ctx, oldFileName) +} + type azblobObjectReader struct { blobClient azblob.BlockBlobClient diff --git a/br/pkg/storage/gcs.go b/br/pkg/storage/gcs.go index d7cd4131d20ef..9a705a1f855cf 100644 --- a/br/pkg/storage/gcs.go +++ b/br/pkg/storage/gcs.go @@ -224,6 +224,19 @@ func (s *gcsStorage) Create(ctx context.Context, name string) (ExternalFileWrite return newFlushStorageWriter(wc, &emptyFlusher{}, wc), nil } +// Rename file name from oldFileName to newFileName. +func (s *gcsStorage) Rename(ctx context.Context, oldFileName, newFileName string) error { + data, err := s.ReadFile(ctx, oldFileName) + if err != nil { + return errors.Trace(err) + } + err = s.WriteFile(ctx, newFileName, data) + if err != nil { + return errors.Trace(err) + } + return s.DeleteFile(ctx, oldFileName) +} + func newGCSStorage(ctx context.Context, gcs *backuppb.GCS, opts *ExternalStorageOptions) (*gcsStorage, error) { var clientOps []option.ClientOption if opts.NoCredentials { diff --git a/br/pkg/storage/hdfs.go b/br/pkg/storage/hdfs.go index d2b3d996047ce..3dc8e7a8d6491 100644 --- a/br/pkg/storage/hdfs.go +++ b/br/pkg/storage/hdfs.go @@ -125,3 +125,8 @@ func (s *HDFSStorage) URI() string { func (s *HDFSStorage) Create(ctx context.Context, path string) (ExternalFileWriter, error) { return nil, errors.Annotatef(berrors.ErrUnsupportedOperation, "currently HDFS backend only support rawkv backup") } + +// Rename a file name from oldFileName to newFileName. +func (s *HDFSStorage) Rename(ctx context.Context, oldFileName, newFileName string) error { + return errors.Annotatef(berrors.ErrUnsupportedOperation, "currently HDFS backend only support rawkv backup") +} diff --git a/br/pkg/storage/local.go b/br/pkg/storage/local.go index 65da8efd1d53f..6ba9b50070779 100644 --- a/br/pkg/storage/local.go +++ b/br/pkg/storage/local.go @@ -32,9 +32,16 @@ func (l *LocalStorage) DeleteFile(ctx context.Context, name string) error { // WriteFile writes data to a file to storage. func (l *LocalStorage) WriteFile(ctx context.Context, name string, data []byte) error { - path := filepath.Join(l.base, name) - return os.WriteFile(path, data, localFilePerm) - // the backup meta file _is_ intended to be world-readable. + // because `os.WriteFile` is not atomic, directly write into it may reset the file + // to an empty file if write is not finished. + tmpPath := filepath.Join(l.base, name) + ".tmp" + if err := os.WriteFile(tmpPath, data, localFilePerm); err != nil { + return errors.Trace(err) + } + if err := os.Rename(tmpPath, filepath.Join(l.base, name)); err != nil { + return errors.Trace(err) + } + return nil } // ReadFile reads the file from the storage and returns the contents. @@ -106,6 +113,11 @@ func (l *LocalStorage) Create(ctx context.Context, name string) (ExternalFileWri return newFlushStorageWriter(buf, buf, file), nil } +// Rename implements ExternalStorage interface. +func (l *LocalStorage) Rename(ctx context.Context, oldFileName, newFileName string) error { + return errors.Trace(os.Rename(filepath.Join(l.base, oldFileName), filepath.Join(l.base, newFileName))) +} + func pathExists(_path string) (bool, error) { _, err := os.Stat(_path) if err != nil { diff --git a/br/pkg/storage/noop.go b/br/pkg/storage/noop.go index ead3c9ed706af..41788a1f37cd4 100644 --- a/br/pkg/storage/noop.go +++ b/br/pkg/storage/noop.go @@ -47,6 +47,11 @@ func (*noopStorage) Create(ctx context.Context, name string) (ExternalFileWriter return &noopWriter{}, nil } +// Rename implements ExternalStorage interface. +func (*noopStorage) Rename(ctx context.Context, oldFileName, newFileName string) error { + return nil +} + func newNoopStorage() *noopStorage { return &noopStorage{} } diff --git a/br/pkg/storage/s3.go b/br/pkg/storage/s3.go index 98b5ffa08b860..fb07d93de36ad 100644 --- a/br/pkg/storage/s3.go +++ b/br/pkg/storage/s3.go @@ -461,14 +461,6 @@ func (rs *S3Storage) WalkDir(ctx context.Context, opt *WalkOption, fn func(strin return errors.Trace(err) } for _, r := range res.Contents { - // when walk on specify directory, the result include storage.Prefix, - // which can not be reuse in other API(Open/Read) directly. - // so we use TrimPrefix to filter Prefix for next Open/Read. - path := strings.TrimPrefix(*r.Key, rs.options.Prefix) - if err = fn(path, *r.Size); err != nil { - return errors.Trace(err) - } - // https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html#AmazonS3-ListObjects-response-NextMarker - // // `res.NextMarker` is populated only if we specify req.Delimiter. @@ -479,6 +471,22 @@ func (rs *S3Storage) WalkDir(ctx context.Context, opt *WalkOption, fn func(strin // you can use the value of the last Key in the response as the marker // in the subsequent request to get the next set of object keys." req.Marker = r.Key + + // when walk on specify directory, the result include storage.Prefix, + // which can not be reuse in other API(Open/Read) directly. + // so we use TrimPrefix to filter Prefix for next Open/Read. + path := strings.TrimPrefix(*r.Key, rs.options.Prefix) + itemSize := *r.Size + + // filter out s3's empty directory items + if itemSize <= 0 && strings.HasSuffix(path, "/") { + log.Info("this path is an empty directory and cannot be opened in S3. Skip it", zap.String("path", path)) + continue + } + if err = fn(path, itemSize); err != nil { + return errors.Trace(err) + } + } if !aws.BoolValue(res.IsTruncated) { break @@ -533,12 +541,21 @@ func (rs *S3Storage) open( Key: aws.String(rs.options.Prefix + path), } - // always set rangeOffset to fetch file size info - // s3 endOffset is inclusive + // If we just open part of the object, we set `Range` in the request. + // If we meant to open the whole object, not just a part of it, + // we do not pass the range in the request, + // so that even if the object is empty, we can still get the response without errors. + // Then this behavior is similar to openning an empty file in local file system. + isFullRangeRequest := false var rangeOffset *string - if endOffset > startOffset { + switch { + case endOffset > startOffset: + // s3 endOffset is inclusive rangeOffset = aws.String(fmt.Sprintf("bytes=%d-%d", startOffset, endOffset-1)) - } else { + case startOffset == 0: + // openning the whole object, no need to fill the `Range` field in the request + isFullRangeRequest = true + default: rangeOffset = aws.String(fmt.Sprintf("bytes=%d-", startOffset)) } input.Range = rangeOffset @@ -547,9 +564,26 @@ func (rs *S3Storage) open( return nil, RangeInfo{}, errors.Trace(err) } - r, err := ParseRangeInfo(result.ContentRange) - if err != nil { - return nil, RangeInfo{}, errors.Trace(err) + var r RangeInfo + // Those requests without a `Range` will have no `ContentRange` in the response, + // In this case, we'll parse the `ContentLength` field instead. + if isFullRangeRequest { + // We must ensure the `ContentLengh` has data even if for empty objects, + // otherwise we have no places to get the object size + if result.ContentLength == nil { + return nil, RangeInfo{}, errors.Annotatef(berrors.ErrStorageUnknown, "open file '%s' failed. The S3 object has no content length", path) + } + objectSize := *(result.ContentLength) + r = RangeInfo{ + Start: 0, + End: objectSize - 1, + Size: objectSize, + } + } else { + r, err = ParseRangeInfo(result.ContentRange) + if err != nil { + return nil, RangeInfo{}, errors.Trace(err) + } } if startOffset != r.Start || (endOffset != 0 && endOffset != r.End+1) { @@ -657,6 +691,9 @@ func (r *s3ObjectReader) Seek(offset int64, whence int) (int64, error) { default: return 0, errors.Annotatef(berrors.ErrStorageUnknown, "Seek: invalid whence '%d'", whence) } + if realOffset < 0 { + return 0, errors.Annotatef(berrors.ErrStorageUnknown, "Seek in '%s': invalid offset to seek '%d'.", r.name, realOffset) + } if realOffset == r.pos { return realOffset, nil @@ -740,6 +777,22 @@ func (rs *S3Storage) Create(ctx context.Context, name string) (ExternalFileWrite return uploaderWriter, nil } +// Rename implements ExternalStorage interface. +func (rs *S3Storage) Rename(ctx context.Context, oldFileName, newFileName string) error { + content, err := rs.ReadFile(ctx, oldFileName) + if err != nil { + return errors.Trace(err) + } + err = rs.WriteFile(ctx, newFileName, content) + if err != nil { + return errors.Trace(err) + } + if err = rs.DeleteFile(ctx, oldFileName); err != nil { + return errors.Trace(err) + } + return nil +} + // retryerWithLog wrappes the client.DefaultRetryer, and logging when retry triggered. type retryerWithLog struct { client.DefaultRetryer diff --git a/br/pkg/storage/s3_test.go b/br/pkg/storage/s3_test.go index fa4c858659ff7..4a8a39df67e50 100644 --- a/br/pkg/storage/s3_test.go +++ b/br/pkg/storage/s3_test.go @@ -620,10 +620,10 @@ func TestOpenAsBufio(t *testing.T) { s.s3.EXPECT(). GetObjectWithContext(ctx, gomock.Any()). DoAndReturn(func(_ context.Context, input *s3.GetObjectInput, opt ...request.Option) (*s3.GetObjectOutput, error) { - require.Equal(t, "bytes=0-", aws.StringValue(input.Range)) + require.Equal(t, (*string)(nil), input.Range) return &s3.GetObjectOutput{ - Body: io.NopCloser(bytes.NewReader([]byte("plain text\ncontent"))), - ContentRange: aws.String("bytes 0-17/18"), + Body: io.NopCloser(bytes.NewReader([]byte("plain text\ncontent"))), + ContentLength: aws.Int64(18), }, nil }) @@ -669,8 +669,8 @@ func TestOpenReadSlowly(t *testing.T) { s.s3.EXPECT(). GetObjectWithContext(ctx, gomock.Any()). Return(&s3.GetObjectOutput{ - Body: &alphabetReader{character: 'A'}, - ContentRange: aws.String("bytes 0-25/26"), + Body: &alphabetReader{character: 'A'}, + ContentLength: aws.Int64(26), }, nil) reader, err := s.storage.Open(ctx, "alphabets") @@ -725,6 +725,10 @@ func TestOpenSeek(t *testing.T) { require.Equal(t, 100, n) require.Equal(t, someRandomBytes[998000:998100], slice) + // jumping to a negative position would cause error. + _, err = reader.Seek(-8000, io.SeekStart) + require.Error(t, err) + // jumping backward should be fine, but would perform a new GetObject request. offset, err = reader.Seek(-8000, io.SeekCurrent) require.NoError(t, err) @@ -769,11 +773,24 @@ func (s *s3Suite) expectedCalls(ctx context.Context, t *testing.T, data []byte, thisCall := s.s3.EXPECT(). GetObjectWithContext(ctx, gomock.Any()). DoAndReturn(func(_ context.Context, input *s3.GetObjectInput, opt ...request.Option) (*s3.GetObjectOutput, error) { - require.Equal(t, fmt.Sprintf("bytes=%d-", thisOffset), aws.StringValue(input.Range)) - return &s3.GetObjectOutput{ - Body: newReader(data, thisOffset), - ContentRange: aws.String(fmt.Sprintf("bytes %d-%d/%d", thisOffset, len(data)-1, len(data))), - }, nil + if thisOffset > 0 { + require.Equal(t, fmt.Sprintf("bytes=%d-", thisOffset), aws.StringValue(input.Range)) + } else { + require.Equal(t, (*string)(nil), input.Range) + } + var response *s3.GetObjectOutput + if thisOffset > 0 { + response = &s3.GetObjectOutput{ + Body: newReader(data, thisOffset), + ContentRange: aws.String(fmt.Sprintf("bytes %d-%d/%d", thisOffset, len(data)-1, len(data))), + } + } else { + response = &s3.GetObjectOutput{ + Body: newReader(data, thisOffset), + ContentLength: aws.Int64(int64(len(data))), + } + } + return response, nil }) if lastCall != nil { thisCall = thisCall.After(lastCall) diff --git a/br/pkg/storage/storage.go b/br/pkg/storage/storage.go index a49361477cf4a..a32d1ed962fde 100644 --- a/br/pkg/storage/storage.go +++ b/br/pkg/storage/storage.go @@ -71,7 +71,7 @@ type Writer interface { // ExternalStorage represents a kind of file system storage. type ExternalStorage interface { - // WriteFile writes a complete file to storage, similar to os.WriteFile + // WriteFile writes a complete file to storage, similar to os.WriteFile, but WriteFile should be atomic WriteFile(ctx context.Context, name string, data []byte) error // ReadFile reads a complete file from storage, similar to os.ReadFile ReadFile(ctx context.Context, name string) ([]byte, error) @@ -94,6 +94,8 @@ type ExternalStorage interface { // Create opens a file writer by path. path is relative path to storage base path Create(ctx context.Context, path string) (ExternalFileWriter, error) + // Rename file name from oldFileName to newFileName + Rename(ctx context.Context, oldFileName, newFileName string) error } // ExternalFileReader represents the streaming external file reader. diff --git a/br/pkg/summary/main_test.go b/br/pkg/summary/main_test.go index 77dfc58c09d57..bcf86e1381363 100644 --- a/br/pkg/summary/main_test.go +++ b/br/pkg/summary/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/br/pkg/task/backup.go b/br/pkg/task/backup.go index 87461f53bab74..a94d943577c44 100644 --- a/br/pkg/task/backup.go +++ b/br/pkg/task/backup.go @@ -50,6 +50,13 @@ const ( maxBackupConcurrency = 256 ) +const ( + FullBackupCmd = "Full Backup" + DBBackupCmd = "Database Backup" + TableBackupCmd = "Table Backup" + RawBackupCmd = "Raw Backup" +) + // CompressionConfig is the configuration for sst file compression. type CompressionConfig struct { CompressionType backuppb.CompressionType `json:"compression-type" toml:"compression-type"` @@ -217,6 +224,10 @@ func (cfg *BackupConfig) adjustBackupConfig() { } } +func isFullBackup(cmdName string) bool { + return cmdName == FullBackupCmd +} + // RunBackup starts a backup task inside the current goroutine. func RunBackup(c context.Context, g glue.Glue, cmdName string, cfg *BackupConfig) error { cfg.adjustBackupConfig() @@ -250,6 +261,16 @@ func RunBackup(c context.Context, g glue.Glue, cmdName string, cfg *BackupConfig statsHandle = mgr.GetDomain().StatsHandle() } + se, err := g.CreateSession(mgr.GetStorage()) + if err != nil { + return errors.Trace(err) + } + newCollationEnable, err := se.GetGlobalVariable(tidbNewCollationEnabled) + if err != nil { + return errors.Trace(err) + } + log.Info("get newCollationEnable for check during restore", zap.String("newCollationEnable", newCollationEnable)) + client, err := backup.NewBackupClient(ctx, mgr) if err != nil { return errors.Trace(err) @@ -312,6 +333,7 @@ func RunBackup(c context.Context, g glue.Glue, cmdName string, cfg *BackupConfig StartVersion: cfg.LastBackupTS, EndVersion: backupTS, RateLimit: cfg.RateLimit, + StorageBackend: client.GetStorageBackend(), Concurrency: defaultBackupConcurrency, CompressionType: cfg.CompressionType, CompressionLevel: cfg.CompressionLevel, @@ -323,7 +345,7 @@ func RunBackup(c context.Context, g glue.Glue, cmdName string, cfg *BackupConfig return errors.Trace(err) } - ranges, schemas, err := backup.BuildBackupRangeAndSchema(mgr.GetStorage(), cfg.TableFilter, backupTS) + ranges, schemas, policies, err := backup.BuildBackupRangeAndSchema(mgr.GetStorage(), cfg.TableFilter, backupTS, isFullBackup(cmdName)) if err != nil { return errors.Trace(err) } @@ -339,8 +361,16 @@ func RunBackup(c context.Context, g glue.Glue, cmdName string, cfg *BackupConfig m.ClusterId = req.ClusterId m.ClusterVersion = clusterVersion m.BrVersion = brVersion + m.NewCollationsEnabled = newCollationEnable }) + log.Info("get placement policies", zap.Int("count", len(policies))) + if len(policies) != 0 { + metawriter.Update(func(m *backuppb.BackupMeta) { + m.Policies = policies + }) + } + // nothing to backup if ranges == nil { pdAddress := strings.Join(cfg.PD, ",") diff --git a/br/pkg/task/backup_raw.go b/br/pkg/task/backup_raw.go index 3a4f29720c532..3f352b7e6320c 100644 --- a/br/pkg/task/backup_raw.go +++ b/br/pkg/task/backup_raw.go @@ -201,10 +201,13 @@ func RunBackupRaw(c context.Context, g glue.Glue, cmdName string, cfg *RawKvConf req := backuppb.BackupRequest{ ClusterId: client.GetClusterID(), + StartKey: backupRange.StartKey, + EndKey: backupRange.EndKey, StartVersion: 0, EndVersion: 0, RateLimit: cfg.RateLimit, Concurrency: cfg.Concurrency, + StorageBackend: client.GetStorageBackend(), IsRawKv: true, Cf: cfg.CF, CompressionType: cfg.CompressionType, @@ -213,7 +216,7 @@ func RunBackupRaw(c context.Context, g glue.Glue, cmdName string, cfg *RawKvConf } metaWriter := metautil.NewMetaWriter(client.GetStorage(), metautil.MetaFileSize, false, &cfg.CipherInfo) metaWriter.StartWriteMetasAsync(ctx, metautil.AppendDataFile) - err = client.BackupRange(ctx, backupRange.StartKey, backupRange.EndKey, req, metaWriter, progressCallBack) + err = client.BackupRange(ctx, req, metaWriter, progressCallBack) if err != nil { return errors.Trace(err) } diff --git a/br/pkg/task/common.go b/br/pkg/task/common.go index 6d2b63571d5da..969c4fbf00dce 100644 --- a/br/pkg/task/common.go +++ b/br/pkg/task/common.go @@ -20,7 +20,6 @@ import ( backuppb "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/kvproto/pkg/encryptionpb" "github.com/pingcap/log" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" "github.com/pingcap/tidb/br/pkg/conn" berrors "github.com/pingcap/tidb/br/pkg/errors" "github.com/pingcap/tidb/br/pkg/glue" @@ -28,6 +27,7 @@ import ( "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/br/pkg/utils" "github.com/pingcap/tidb/sessionctx/variable" + filter "github.com/pingcap/tidb/util/table-filter" "github.com/spf13/cobra" "github.com/spf13/pflag" pd "github.com/tikv/pd/client" @@ -85,6 +85,8 @@ const ( crypterAES128KeyLen = 16 crypterAES192KeyLen = 24 crypterAES256KeyLen = 32 + + tidbNewCollationEnabled = "new_collation_enabled" ) // TLSConfig is the common configuration for TLS connection. diff --git a/br/pkg/task/restore.go b/br/pkg/task/restore.go index 209bf4265e23e..f88440dca6447 100644 --- a/br/pkg/task/restore.go +++ b/br/pkg/task/restore.go @@ -4,6 +4,7 @@ package task import ( "context" + "strings" "time" "github.com/opentracing/opentracing-go" @@ -17,11 +18,11 @@ import ( "github.com/pingcap/tidb/br/pkg/metautil" "github.com/pingcap/tidb/br/pkg/pdutil" "github.com/pingcap/tidb/br/pkg/restore" - "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/br/pkg/summary" "github.com/pingcap/tidb/br/pkg/utils" "github.com/pingcap/tidb/br/pkg/version" "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/kv" "github.com/spf13/pflag" "go.uber.org/multierr" "go.uber.org/zap" @@ -39,17 +40,26 @@ const ( FlagPDConcurrency = "pd-concurrency" // FlagBatchFlushInterval controls after how long the restore batch would be auto sended. FlagBatchFlushInterval = "batch-flush-interval" - // flagDdlBatchSize controls batch ddl size to create a batch of tables + // FlagDdlBatchSize controls batch ddl size to create a batch of tables FlagDdlBatchSize = "ddl-batch-size" + // FlagWithPlacementPolicy corresponds to tidb config with-tidb-placement-mode + // current only support STRICT or IGNORE, the default is STRICT according to tidb. + FlagWithPlacementPolicy = "with-tidb-placement-mode" defaultRestoreConcurrency = 128 maxRestoreBatchSizeLimit = 10240 defaultPDConcurrency = 1 defaultBatchFlushInterval = 16 * time.Second - defaultDDLConcurrency = 16 defaultFlagDdlBatchSize = 128 ) +const ( + FullRestoreCmd = "Full Restore" + DBRestoreCmd = "DataBase Restore" + TableRestoreCmd = "Table Restore" + RawRestoreCmd = "Raw Restore" +) + // RestoreCommonConfig is the common configuration for all BR restore tasks. type RestoreCommonConfig struct { Online bool `json:"online" toml:"online"` @@ -122,6 +132,8 @@ type RestoreConfig struct { BatchFlushInterval time.Duration `json:"batch-flush-interval" toml:"batch-flush-interval"` // DdlBatchSize use to define the size of batch ddl to create tables DdlBatchSize uint `json:"ddl-batch-size" toml:"ddl-batch-size"` + + WithPlacementPolicy string `json:"with-tidb-placement-mode" toml:"with-tidb-placement-mode"` } // DefineRestoreFlags defines common flags for the restore tidb command. @@ -129,6 +141,7 @@ func DefineRestoreFlags(flags *pflag.FlagSet) { flags.Bool(flagNoSchema, false, "skip creating schemas and tables, reuse existing empty ones") // Do not expose this flag _ = flags.MarkHidden(flagNoSchema) + flags.String(FlagWithPlacementPolicy, "STRICT", "correspond to tidb global/session variable with-tidb-placement-mode") DefineRestoreCommonFlags(flags) } @@ -165,11 +178,15 @@ func (cfg *RestoreConfig) ParseFromFlags(flags *pflag.FlagSet) error { if err != nil { return errors.Annotatef(err, "failed to get flag %s", FlagDdlBatchSize) } + cfg.WithPlacementPolicy, err = flags.GetString(FlagWithPlacementPolicy) + if err != nil { + return errors.Annotatef(err, "failed to get flag %s", FlagWithPlacementPolicy) + } return nil } // adjustRestoreConfig is use for BR(binary) and BR in TiDB. -// When new config was add and not included in parser. +// When new config was added and not included in parser. // we should set proper value in this function. // so that both binary and TiDB will use same default value. func (cfg *RestoreConfig) adjustRestoreConfig() { @@ -194,17 +211,6 @@ func (cfg *RestoreConfig) adjustRestoreConfig() { } func configureRestoreClient(ctx context.Context, client *restore.Client, cfg *RestoreConfig) error { - u, err := storage.ParseBackend(cfg.Storage, &cfg.BackendOptions) - if err != nil { - return errors.Trace(err) - } - opts := storage.ExternalStorageOptions{ - NoCredentials: cfg.NoCreds, - SendCredentials: cfg.SendCreds, - } - if err = client.SetStorage(ctx, u, &opts); err != nil { - return errors.Trace(err) - } client.SetRateLimit(cfg.RateLimit) client.SetCrypter(&cfg.CipherInfo) client.SetConcurrency(uint(cfg.Concurrency)) @@ -216,7 +222,9 @@ func configureRestoreClient(ctx context.Context, client *restore.Client, cfg *Re } client.SetSwitchModeInterval(cfg.SwitchModeInterval) client.SetBatchDdlSize(cfg.DdlBatchSize) - err = client.LoadRestoreStores(ctx) + client.SetPlacementPolicyMode(cfg.WithPlacementPolicy) + + err := client.LoadRestoreStores(ctx) if err != nil { return errors.Trace(err) } @@ -259,6 +267,46 @@ func CheckRestoreDBAndTable(client *restore.Client, cfg *RestoreConfig) error { return nil } +func CheckNewCollationEnable( + backupNewCollationEnable string, + g glue.Glue, + storage kv.Storage, + CheckRequirements bool, +) error { + if backupNewCollationEnable == "" { + if CheckRequirements { + return errors.Annotatef(berrors.ErrUnknown, + "NewCollactionEnable not found in backupmeta. "+ + "if you ensure the NewCollactionEnable config of backup cluster is as same as restore cluster, "+ + "use --check-requirements=false to skip") + } else { + log.Warn("no NewCollactionEnable in backup") + return nil + } + } + + se, err := g.CreateSession(storage) + if err != nil { + return errors.Trace(err) + } + + newCollationEnable, err := se.GetGlobalVariable(tidbNewCollationEnabled) + if err != nil { + return errors.Trace(err) + } + + if !strings.EqualFold(backupNewCollationEnable, newCollationEnable) { + return errors.Annotatef(berrors.ErrUnknown, + "newCollationEnable not match, upstream:%v, downstream: %v", + backupNewCollationEnable, newCollationEnable) + } + return nil +} + +func isFullRestore(cmdName string) bool { + return cmdName == FullRestoreCmd +} + // RunRestore starts a restore task inside the current goroutine. func RunRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConfig) error { cfg.adjustRestoreConfig() @@ -283,17 +331,18 @@ func RunRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf defer mgr.Close() keepaliveCfg.PermitWithoutStream = true - client, err := restore.NewRestoreClient(g, mgr.GetPDClient(), mgr.GetStorage(), mgr.GetTLSConfig(), keepaliveCfg, false) + client := restore.NewRestoreClient(mgr.GetPDClient(), mgr.GetTLSConfig(), keepaliveCfg, false) + err = configureRestoreClient(ctx, client, cfg) if err != nil { return errors.Trace(err) } + // Init DB connection sessions + err = client.Init(g, mgr.GetStorage()) defer client.Close() - err = configureRestoreClient(ctx, client, cfg) if err != nil { return errors.Trace(err) } - u, s, backupMeta, err := ReadBackupMeta(ctx, metautil.MetaFile, &cfg.Config) if err != nil { return errors.Trace(err) @@ -304,6 +353,10 @@ func RunRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf return errors.Trace(versionErr) } } + if err = CheckNewCollationEnable(backupMeta.GetNewCollationsEnabled(), g, mgr.GetStorage(), cfg.CheckRequirements); err != nil { + return errors.Trace(err) + } + reader := metautil.NewMetaReader(backupMeta, s, &cfg.CipherInfo) if err = client.InitBackupMeta(c, backupMeta, u, s, reader); err != nil { return errors.Trace(err) @@ -348,6 +401,7 @@ func RunRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf newTS = restoreTS } ddlJobs := restore.FilterDDLJobs(client.GetDDLJobs(), tables) + ddlJobs = restore.FilterDDLJobByRules(ddlJobs, restore.DDLJobBlockListRule) err = client.PreCheckTableTiFlashReplica(ctx, tables) if err != nil { @@ -363,6 +417,23 @@ func RunRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf restoreDBConfig := enableTiDBConfig() defer restoreDBConfig() + if client.GetSupportPolicy() { + // create policy if backupMeta has policies. + policies, err := client.GetPlacementPolicies() + if err != nil { + return errors.Trace(err) + } + if isFullRestore(cmdName) { + // we should restore all policies during full restoration. + err = client.CreatePolicies(ctx, policies) + if err != nil { + return errors.Trace(err) + } + } else { + client.SetPolicyMap(policies) + } + } + // execute DDL first err = client.ExecDDLs(ctx, ddlJobs) if err != nil { @@ -386,26 +457,7 @@ func RunRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf // We make bigger errCh so we won't block on multi-part failed. errCh := make(chan error, 32) - // Maybe allow user modify the DDL concurrency isn't necessary, - // because executing DDL is really I/O bound (or, algorithm bound?), - // and we cost most of time at waiting DDL jobs be enqueued. - // So these jobs won't be faster or slower when machine become faster or slower, - // hence make it a fixed value would be fine. - var dbPool []*restore.DB - if g.OwnsStorage() { - // Only in binary we can use multi-thread sessions to create tables. - // so use OwnStorage() to tell whether we are use binary or SQL. - dbPool, err = restore.MakeDBPool(defaultDDLConcurrency, func() (*restore.DB, error) { - return restore.NewDB(g, mgr.GetStorage()) - }) - } - if err != nil { - log.Warn("create session pool failed, we will send DDLs only by created sessions", - zap.Error(err), - zap.Int("sessionCount", len(dbPool)), - ) - } - tableStream := client.GoCreateTables(ctx, mgr.GetDomain(), tables, newTS, dbPool, errCh) + tableStream := client.GoCreateTables(ctx, mgr.GetDomain(), tables, newTS, errCh) if len(files) == 0 { log.Info("no files, empty databases and tables are restored") summary.SetSuccessStatus(true) @@ -523,6 +575,8 @@ func dropToBlackhole( return outCh } +// filterRestoreFiles filters tables that can't be processed after applying cfg.TableFilter.MatchTable. +// if the db has no table that can be processed, the db will be filtered too. func filterRestoreFiles( client *restore.Client, cfg *RestoreConfig, diff --git a/br/pkg/task/restore_raw.go b/br/pkg/task/restore_raw.go index 25409e8c28e31..621b41c4f25a6 100644 --- a/br/pkg/task/restore_raw.go +++ b/br/pkg/task/restore_raw.go @@ -75,11 +75,7 @@ func RunRestoreRaw(c context.Context, g glue.Glue, cmdName string, cfg *RestoreR // sometimes we have pooled the connections. // sending heartbeats in idle times is useful. keepaliveCfg.PermitWithoutStream = true - client, err := restore.NewRestoreClient(g, mgr.GetPDClient(), mgr.GetStorage(), mgr.GetTLSConfig(), keepaliveCfg, true) - if err != nil { - return errors.Trace(err) - } - defer client.Close() + client := restore.NewRestoreClient(mgr.GetPDClient(), mgr.GetTLSConfig(), keepaliveCfg, true) client.SetRateLimit(cfg.RateLimit) client.SetCrypter(&cfg.CipherInfo) client.SetConcurrency(uint(cfg.Concurrency)) @@ -87,6 +83,11 @@ func RunRestoreRaw(c context.Context, g glue.Glue, cmdName string, cfg *RestoreR client.EnableOnline() } client.SetSwitchModeInterval(cfg.SwitchModeInterval) + err = client.Init(g, mgr.GetStorage()) + defer client.Close() + if err != nil { + return errors.Trace(err) + } u, s, backupMeta, err := ReadBackupMeta(ctx, metautil.MetaFile, &cfg.Config) if err != nil { diff --git a/br/pkg/trace/main_test.go b/br/pkg/trace/main_test.go index adbee42408e38..bf7e3161113fb 100644 --- a/br/pkg/trace/main_test.go +++ b/br/pkg/trace/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/br/pkg/utils/backoff.go b/br/pkg/utils/backoff.go index 5a21ad8f26a98..c69f32dc4827c 100644 --- a/br/pkg/utils/backoff.go +++ b/br/pkg/utils/backoff.go @@ -17,9 +17,10 @@ import ( ) const ( + // importSSTRetryTimes specifies the retry time. Its longest time is about 90s-100s. importSSTRetryTimes = 16 - importSSTWaitInterval = 10 * time.Millisecond - importSSTMaxWaitInterval = 1 * time.Second + importSSTWaitInterval = 40 * time.Millisecond + importSSTMaxWaitInterval = 10 * time.Second downloadSSTRetryTimes = 8 downloadSSTWaitInterval = 1 * time.Second diff --git a/br/pkg/utils/dyn_pprof_other.go b/br/pkg/utils/dyn_pprof_other.go index 292208db47091..ed094f4a7d08b 100644 --- a/br/pkg/utils/dyn_pprof_other.go +++ b/br/pkg/utils/dyn_pprof_other.go @@ -5,7 +5,7 @@ package utils -import tidbutils "github.com/pingcap/tidb-tools/pkg/utils" +import tidbutils "github.com/pingcap/tidb/util" // StartDynamicPProfListener starts the listener that will enable pprof when received `startPProfSignal` func StartDynamicPProfListener(tls *tidbutils.TLS) { diff --git a/br/pkg/utils/dyn_pprof_unix.go b/br/pkg/utils/dyn_pprof_unix.go index 47a14eab1127e..36084c5853f20 100644 --- a/br/pkg/utils/dyn_pprof_unix.go +++ b/br/pkg/utils/dyn_pprof_unix.go @@ -11,7 +11,7 @@ import ( "syscall" "github.com/pingcap/log" - tidbutils "github.com/pingcap/tidb-tools/pkg/utils" + tidbutils "github.com/pingcap/tidb/util" "go.uber.org/zap" ) diff --git a/br/pkg/utils/main_test.go b/br/pkg/utils/main_test.go index 09976b09ac199..990afd5522d4b 100644 --- a/br/pkg/utils/main_test.go +++ b/br/pkg/utils/main_test.go @@ -23,6 +23,7 @@ import ( func TestMain(m *testing.M) { opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } testbridge.SetupForCommonTest() diff --git a/br/pkg/utils/pprof.go b/br/pkg/utils/pprof.go index 6b2a5ee9796ee..9df50ce74c00c 100644 --- a/br/pkg/utils/pprof.go +++ b/br/pkg/utils/pprof.go @@ -4,21 +4,20 @@ package utils import ( "fmt" - "net" - "os" - "sync" - + "net" //nolint:goimports // #nosec // register HTTP handler for /debug/pprof "net/http" // For pprof _ "net/http/pprof" // #nosec G108 + "os" + "sync" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/log" - tidbutils "github.com/pingcap/tidb-tools/pkg/utils" berrors "github.com/pingcap/tidb/br/pkg/errors" + tidbutils "github.com/pingcap/tidb/util" "go.uber.org/zap" ) diff --git a/br/pkg/version/build/info.go b/br/pkg/version/build/info.go index 01957a7297b83..fae69c6d8a6ae 100644 --- a/br/pkg/version/build/info.go +++ b/br/pkg/version/build/info.go @@ -27,7 +27,7 @@ func getReleaseVersion() string { if mysql.TiDBReleaseVersion != "None" { return mysql.TiDBReleaseVersion } - return "v5.0.0-master" + return "v6.0.0-master" } // AppName is a name of a built binary. diff --git a/br/pkg/version/version.go b/br/pkg/version/version.go index 91c1578574837..17d8bc6728296 100644 --- a/br/pkg/version/version.go +++ b/br/pkg/version/version.go @@ -102,6 +102,7 @@ func CheckClusterVersion(ctx context.Context, client pd.Client, checker VerCheck if err := checkTiFlashVersion(s); err != nil { return errors.Trace(err) } + continue } tikvVersionString := removeVAndHash(s.Version) @@ -119,7 +120,7 @@ func CheckClusterVersion(ctx context.Context, client pd.Client, checker VerCheck // CheckVersionForBackup checks the version for backup and func CheckVersionForBackup(backupVersion *semver.Version) VerChecker { return func(store *metapb.Store, ver *semver.Version) error { - if backupVersion.Major > ver.Major { + if backupVersion.Major > ver.Major && backupVersion.Major-ver.Major > 1 { return errors.Annotatef(berrors.ErrVersionMismatch, "backup with cluster version %s cannot be restored at cluster of version %s: major version mismatches", backupVersion, ver) @@ -140,7 +141,8 @@ func CheckVersionForBR(s *metapb.Store, tikvVersion *semver.Version) error { s.Address, tikvVersion, build.ReleaseVersion) } - if tikvVersion.Major != BRVersion.Major { + // BR 6.x works with TiKV 5.x and not guarantee works with 4.x + if BRVersion.Major < tikvVersion.Major || BRVersion.Major-tikvVersion.Major > 1 { return errors.Annotatef(berrors.ErrVersionMismatch, "TiKV node %s version %s and BR %s major version mismatch, please use the same version of BR", s.Address, tikvVersion, build.ReleaseVersion) } diff --git a/br/pkg/version/version_test.go b/br/pkg/version/version_test.go index f2369c964029c..84ffd74849aaa 100644 --- a/br/pkg/version/version_test.go +++ b/br/pkg/version/version_test.go @@ -148,11 +148,20 @@ func TestCheckClusterVersion(t *testing.T) { } { - // Restore across major version isn't allowed. + // Restore across one major version allowed. mock.getAllStores = func() []*metapb.Store { return []*metapb.Store{{Version: "v4.0.0-rc.1"}} } err := CheckClusterVersion(context.Background(), &mock, CheckVersionForBackup(semver.New("5.0.0-rc"))) + require.NoError(t, err) + } + + { + // Restore across two major versions isn't allowed. + mock.getAllStores = func() []*metapb.Store { + return []*metapb.Store{{Version: "v4.0.0-rc.1"}} + } + err := CheckClusterVersion(context.Background(), &mock, CheckVersionForBackup(semver.New("6.0.0"))) require.Error(t, err) } @@ -165,6 +174,25 @@ func TestCheckClusterVersion(t *testing.T) { err := CheckClusterVersion(context.Background(), &mock, CheckVersionForBR) require.NoError(t, err) } + + { + build.ReleaseVersion = "v6.0.0" + mock.getAllStores = func() []*metapb.Store { + return []*metapb.Store{{Version: "v5.4.0"}} + } + err := CheckClusterVersion(context.Background(), &mock, CheckVersionForBR) + require.NoError(t, err) + } + + { + build.ReleaseVersion = "v6.0.0" + mock.getAllStores = func() []*metapb.Store { + return []*metapb.Store{{Version: "v4.4.0"}} + } + err := CheckClusterVersion(context.Background(), &mock, CheckVersionForBR) + require.Error(t, err) + } + } func TestCompareVersion(t *testing.T) { diff --git a/br/tests/README.md b/br/tests/README.md index ce2cfa63ebab5..53685c967ad24 100644 --- a/br/tests/README.md +++ b/br/tests/README.md @@ -67,7 +67,8 @@ If you have docker installed, you can skip step 1 and step 2 by running ## Running -Run `make br_integration_test` to execute the integration tests. This command will +Link `bin` directory by `cd br && ln -s ../bin bin` and run `make br_integration_test` to execute the integration tests. +This command will 1. Build `br` 2. Check that all 9 required executables and `br` executable exist diff --git a/br/tests/br_check_new_collocation_enable/config/new_collation_enable_false.toml b/br/tests/br_check_new_collocation_enable/config/new_collation_enable_false.toml new file mode 100644 index 0000000000000..dd82812d27156 --- /dev/null +++ b/br/tests/br_check_new_collocation_enable/config/new_collation_enable_false.toml @@ -0,0 +1,16 @@ +# config of tidb + +# Schema lease duration +# There are lot of ddl in the tests, setting this +# to 360s to test whether BR is gracefully shutdown. +lease = "360s" + +new_collations_enabled_on_first_bootstrap = false + +[security] +ssl-ca = "/tmp/backup_restore_test/certs/ca.pem" +ssl-cert = "/tmp/backup_restore_test/certs/tidb.pem" +ssl-key = "/tmp/backup_restore_test/certs/tidb.key" +cluster-ssl-ca = "/tmp/backup_restore_test/certs/ca.pem" +cluster-ssl-cert = "/tmp/backup_restore_test/certs/tidb.pem" +cluster-ssl-key = "/tmp/backup_restore_test/certs/tidb.key" diff --git a/br/tests/br_check_new_collocation_enable/config/new_collation_enable_true.toml b/br/tests/br_check_new_collocation_enable/config/new_collation_enable_true.toml new file mode 100644 index 0000000000000..d9cb1df6178f0 --- /dev/null +++ b/br/tests/br_check_new_collocation_enable/config/new_collation_enable_true.toml @@ -0,0 +1,16 @@ +# config of tidb + +# Schema lease duration +# There are lot of ddl in the tests, setting this +# to 360s to test whether BR is gracefully shutdown. +lease = "360s" + +new_collations_enabled_on_first_bootstrap = true + +[security] +ssl-ca = "/tmp/backup_restore_test/certs/ca.pem" +ssl-cert = "/tmp/backup_restore_test/certs/tidb.pem" +ssl-key = "/tmp/backup_restore_test/certs/tidb.key" +cluster-ssl-ca = "/tmp/backup_restore_test/certs/ca.pem" +cluster-ssl-cert = "/tmp/backup_restore_test/certs/tidb.pem" +cluster-ssl-key = "/tmp/backup_restore_test/certs/tidb.key" diff --git a/br/tests/br_check_new_collocation_enable/run.sh b/br/tests/br_check_new_collocation_enable/run.sh new file mode 100755 index 0000000000000..d74262148fb5c --- /dev/null +++ b/br/tests/br_check_new_collocation_enable/run.sh @@ -0,0 +1,102 @@ +#!/bin/sh +# +# Copyright 2019 PingCAP, Inc. +# +# 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. + +set -eu +DB="$TEST_NAME" + +cur=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +source $cur/../_utils/run_services + +PROGRESS_FILE="$TEST_DIR/progress_unit_file" +rm -rf $PROGRESS_FILE + +run_sql "CREATE DATABASE $DB;" + +run_sql "CREATE TABLE $DB.usertable1 ( \ + YCSB_KEY varchar(64) NOT NULL, \ + FIELD0 varchar(1) DEFAULT NULL, \ + PRIMARY KEY (YCSB_KEY) \ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;" + +run_sql "INSERT INTO $DB.usertable1 VALUES (\"a\", \"b\");" +run_sql "INSERT INTO $DB.usertable1 VALUES (\"aa\", \"b\");" + +run_sql "CREATE TABLE $DB.usertable2 ( \ + YCSB_KEY varchar(64) NOT NULL, \ + FIELD0 varchar(1) DEFAULT NULL, \ + PRIMARY KEY (YCSB_KEY) \ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;" + +run_sql "INSERT INTO $DB.usertable2 VALUES (\"c\", \"d\");" + +# backup db +echo "backup start ... with brv4.0.8 without NewCollactionEnable" +bin/brv4.0.8 backup db --db "$DB" -s "local://$TEST_DIR/$DB" \ + --ca "$TEST_DIR/certs/ca.pem" \ + --cert "$TEST_DIR/certs/br.pem" \ + --key "$TEST_DIR/certs/br.key" \ + --pd $PD_ADDR \ + --check-requirements=false + +# restore db from v4.0.8 version without `newCollationEnable` +echo "restore start ... without NewCollactionEnable in backupmeta" +restore_fail=0 +error_str="NewCollactionEnable not found in backupmeta" +test_log="new_collotion_enable_test.log" +unset BR_LOG_TO_TERM +run_br restore db --db $DB -s "local://$TEST_DIR/$DB" --pd $PD_ADDR --log-file $test_log || restore_fail=1 +if [ $restore_fail -ne 1 ]; then + echo "TEST: [$TEST_NAME] test restore failed!" + exit 1 +fi + +if ! grep -i "$error_str" $test_log; then + echo "${error_str} not found in log" + echo "TEST: [$TEST_NAME] test restore failed!" + exit 1 +fi + +rm -rf "$test_log" + +# backup with NewCollationEable = false +echo "Restart cluster with new_collation_enable=false" +start_services --tidb-cfg $cur/config/new_collation_enable_false.toml + +echo "backup start ... witch NewCollactionEnable=false in TiDB" +run_br --pd $PD_ADDR backup db --db "$DB" -s "local://$cur/${DB}_2" + +echo "Restart cluster with new_collation_enable=true" +start_services --tidb-cfg $cur/config/new_collation_enable_true.toml + +echo "restore start ... with NewCollactionEnable=True in TiDB" +restore_fail=0 +test_log2="new_collotion_enable_test2.log" +error_str="newCollationEnable not match" +unset BR_LOG_TO_TERM +run_br restore db --db $DB -s "local://$cur/${DB}_2" --pd $PD_ADDR --log-file $test_log2 || restore_fail=1 +if [ $restore_fail -ne 1 ]; then + echo "TEST: [$TEST_NAME] test restore failed!" + exit 1 +fi + +if ! grep -i "$error_str" $test_log2; then + echo "${error_str} not found in log" + echo "TEST: [$TEST_NAME] test restore failed!" + exit 1 +fi + +rm -rf "$test_log2" +rm -rf "$cur/${DB}_2" diff --git a/br/tests/br_crypter2/run.sh b/br/tests/br_crypter2/run.sh new file mode 100755 index 0000000000000..91de74376ebce --- /dev/null +++ b/br/tests/br_crypter2/run.sh @@ -0,0 +1,79 @@ +#!/bin/sh +# +# Copyright 2022 PingCAP, Inc. +# +# 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. + +set -eu +DB="$TEST_NAME" +TABLE="usertable" +DB_COUNT=3 + +function create_db_with_table(){ + for i in $(seq $DB_COUNT); do + run_sql "CREATE DATABASE $DB${i};" + go-ycsb load mysql -P tests/$TEST_NAME/workload -p mysql.host=$TIDB_IP -p mysql.port=$TIDB_PORT -p mysql.user=root -p mysql.db=$DB${i} + done +} + +function drop_db(){ + for i in $(seq $DB_COUNT); do + run_sql "DROP DATABASE $DB${i};" + done +} + +function check_db_row(){ + for i in $(seq $DB_COUNT); do + row_count_new[${i}]=$(run_sql "SELECT COUNT(*) FROM $DB${i}.$TABLE;" | awk '/COUNT/{print $2}') + done + + fail=false + for i in $(seq $DB_COUNT); do + if [ "${row_count_ori[i]}" != "${row_count_new[i]}" ];then + fail=true + echo "TEST: [$TEST_NAME] fail on database $DB${i}" + fi + echo "database $DB${i} [original] row count: ${row_count_ori[i]}, [after br] row count: ${row_count_new[i]}" + done + + if $fail; then + echo "TEST: [$TEST_NAME] failed!" + exit 1 + fi +} + +# Create dbs with table +create_db_with_table + +# Get the original row count from dbs +for i in $(seq $DB_COUNT); do + row_count_ori[${i}]=$(run_sql "SELECT COUNT(*) FROM $DB${i}.$TABLE;" | awk '/COUNT/{print $2}') +done + +# Test backup/restore with crypt for br +CRYPTER_METHOD=aes128-ctr +CRYPTER_KEY="0123456789abcdef0123456789abcdef" + +export GO_FAILPOINTS="github.com/pingcap/tidb/br/pkg/backup/noop-backup=100*return(1)" +run_br --pd $PD_ADDR backup full -s "local://$TEST_DIR/$DB/${CRYPTER_METHOD}_file" \ + --use-backupmeta-v2=true --check-requirements=false --crypter.method $CRYPTER_METHOD --crypter.key $CRYPTER_KEY + +drop_db + +run_br --pd $PD_ADDR restore full -s "local://$TEST_DIR/$DB/${CRYPTER_METHOD}_file" \ + --check-requirements=false --crypter.method $CRYPTER_METHOD --crypter.key $CRYPTER_KEY + +check_db_row + +# Drop dbs finally +drop_db diff --git a/br/tests/br_crypter2/workload b/br/tests/br_crypter2/workload new file mode 100644 index 0000000000000..448ca3c1a477f --- /dev/null +++ b/br/tests/br_crypter2/workload @@ -0,0 +1,12 @@ +recordcount=1000 +operationcount=0 +workload=core + +readallfields=true + +readproportion=0 +updateproportion=0 +scanproportion=0 +insertproportion=0 + +requestdistribution=uniform \ No newline at end of file diff --git a/br/tests/br_key_locked/codec.go b/br/tests/br_key_locked/codec.go index d53b92cb68613..b1755f6aa1576 100644 --- a/br/tests/br_key_locked/codec.go +++ b/br/tests/br_key_locked/codec.go @@ -31,13 +31,13 @@ type codecPDClient struct { // GetRegion encodes the key before send requests to pd-server and decodes the // returned StartKey && EndKey from pd-server. -func (c *codecPDClient) GetRegion(ctx context.Context, key []byte) (*pd.Region, error) { +func (c *codecPDClient) GetRegion(ctx context.Context, key []byte, opts ...pd.GetRegionOption) (*pd.Region, error) { encodedKey := codec.EncodeBytes(nil, key) region, err := c.Client.GetRegion(ctx, encodedKey) return processRegionResult(region, err) } -func (c *codecPDClient) GetPrevRegion(ctx context.Context, key []byte) (*pd.Region, error) { +func (c *codecPDClient) GetPrevRegion(ctx context.Context, key []byte, opts ...pd.GetRegionOption) (*pd.Region, error) { encodedKey := codec.EncodeBytes(nil, key) region, err := c.Client.GetPrevRegion(ctx, encodedKey) return processRegionResult(region, err) @@ -45,7 +45,7 @@ func (c *codecPDClient) GetPrevRegion(ctx context.Context, key []byte) (*pd.Regi // GetRegionByID encodes the key before send requests to pd-server and decodes the // returned StartKey && EndKey from pd-server. -func (c *codecPDClient) GetRegionByID(ctx context.Context, regionID uint64) (*pd.Region, error) { +func (c *codecPDClient) GetRegionByID(ctx context.Context, regionID uint64, opts ...pd.GetRegionOption) (*pd.Region, error) { region, err := c.Client.GetRegionByID(ctx, regionID) return processRegionResult(region, err) } diff --git a/br/tests/br_s3/run.sh b/br/tests/br_s3/run.sh index d0c20996db7ef..9cd383de4f026 100755 --- a/br/tests/br_s3/run.sh +++ b/br/tests/br_s3/run.sh @@ -101,6 +101,12 @@ for p in $(seq 2); do exit 1 fi + target_log="get newCollationEnable for check during restore" + if ! grep -i "$target_log" $BACKUP_LOG; then + echo "${target_log} not found in log" + exit 1 + fi + for i in $(seq $DB_COUNT); do run_sql "DROP DATABASE $DB${i};" done diff --git a/br/tests/br_split_region_fail/run.sh b/br/tests/br_split_region_fail/run.sh index be26823cd6810..13b511313ebfa 100644 --- a/br/tests/br_split_region_fail/run.sh +++ b/br/tests/br_split_region_fail/run.sh @@ -52,7 +52,7 @@ BR_LOG_TO_TERM=1 grep "a error occurs on split region" $LOG && \ grep "split region meet not leader error" $LOG && \ -grep "Full restore success" $LOG && \ +grep "Full Restore success" $LOG && \ grep "find new leader" $LOG if [ $? -ne 0 ]; then diff --git a/br/tests/br_tidb_placement_policy/run.sh b/br/tests/br_tidb_placement_policy/run.sh new file mode 100644 index 0000000000000..dbc81d6f60a9d --- /dev/null +++ b/br/tests/br_tidb_placement_policy/run.sh @@ -0,0 +1,193 @@ +#!/bin/sh +# +# Copyright 2022 PingCAP, Inc. +# +# 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. + +set -eu +DB="$TEST_NAME" +TABLES_COUNT=30 + +PROGRESS_FILE="$TEST_DIR/progress_file" +BACKUPMETAV1_LOG="$TEST_DIR/backup.log" +BACKUPMETAV2_LOG="$TEST_DIR/backupv2.log" +RESTORE_LOG="$TEST_DIR/restore.log" +rm -rf $PROGRESS_FILE + +run_sql "create schema $DB;" +run_sql "create placement policy fivereplicas followers=4;" +run_sql "create placement policy tworeplicas followers=1;" + +# generate 30 tables with 1 row content with policy fivereplicas;. +i=1 +while [ $i -le $TABLES_COUNT ]; do + run_sql "create table $DB.sbtest$i(id int primary key, k int not null, c char(120) not null, pad char(60) not null) placement policy=fivereplicas partition by range(id) (partition p0 values less than (10) placement policy tworeplicas, partition p1 values less than MAXVALUE)" + run_sql "insert into $DB.sbtest$i values ($i, $i, '$i', '$i');" + i=$(($i+1)) +done + +# backup db +echo "full backup meta v2 start..." +unset BR_LOG_TO_TERM +rm -f $BACKUPMETAV2_LOG +run_br backup full --log-file $BACKUPMETAV2_LOG -s "local://$TEST_DIR/${DB}v2" --pd $PD_ADDR --use-backupmeta-v2 + +echo "full backup meta v1 start..." +rm -f $BACKUPMETAV1_LOG +run_br backup full --log-file $BACKUPMETAV1_LOG -s "local://$TEST_DIR/$DB" --pd $PD_ADDR + +# clear data and policy fore restore. +run_sql "DROP DATABASE $DB;" +run_sql "DROP PLACEMENT POLICY fivereplicas;" +run_sql "DROP PLACEMENT POLICY tworeplicas;" + +# restore with tidb-placement-policy +echo "restore with tidb-placement start..." +run_br restore db --db $DB -s "local://$TEST_DIR/${DB}v2" --pd $PD_ADDR + +policy_count=$(run_sql "use $DB; show placement;" | grep "POLICY fivereplicas" | wc -l) +if [ "$policy_count" -ne "1" ];then + echo "TEST: [$TEST_NAME] failed! due to policy restore failed" + exit 1 +fi + +policy_count=$(run_sql "use $DB; show placement;" | grep "POLICY tworeplicas" | wc -l) +if [ "$policy_count" -ne "1" ];then + echo "TEST: [$TEST_NAME] failed! due to policy restore failed" + exit 1 +fi + +# clear data and policy for restore. +run_sql "DROP DATABASE $DB;" +run_sql "DROP PLACEMENT POLICY fivereplicas;" +run_sql "DROP PLACEMENT POLICY tworeplicas;" + +# restore without tidb-placement-policy +echo "restore without tidb-placement start..." +run_br restore db --db $DB -s "local://$TEST_DIR/$DB" --pd $PD_ADDR --with-tidb-placement-mode "ignore" + +policy_count=$(run_sql "use $DB; show placement;" | grep "POLICY" | wc -l) +if [ "$policy_count" -ne "0" ];then + echo "TEST: [$TEST_NAME] failed! due to policy should be ignore" + exit 1 +fi + +# clear data and policy for next case. +run_sql "DROP DATABASE $DB;" + +echo "test backup db can ignore placement policy" +run_sql "create schema $DB;" +run_sql "create placement policy fivereplicas followers=4;" +run_sql "create placement policy tworeplicas followers=1;" + +# generate one table with one row content with policy fivereplicas;. +run_sql "create table $DB.sbtest(id int primary key, k int not null, c char(120) not null, pad char(60) not null) placement policy=fivereplicas partition by range(id) (partition p0 values less than (10) placement policy tworeplicas, partition p1 values less than MAXVALUE);" +run_sql "insert into $DB.sbtest values ($i, $i, '$i', '$i');" + +run_br backup db --db $DB -s "local://$TEST_DIR/${DB}_db" --pd $PD_ADDR + +# clear data and policy for restore. +run_sql "DROP DATABASE $DB;" +run_sql "DROP PLACEMENT POLICY fivereplicas;" +run_sql "DROP PLACEMENT POLICY tworeplicas;" + +# restore should success and no policy have been restored. +run_br restore db --db $DB -s "local://$TEST_DIR/${DB}_db" --pd $PD_ADDR + +policy_count=$(run_sql "use $DB; show placement;" | grep "POLICY" | wc -l) +if [ "$policy_count" -ne "0" ];then + echo "TEST: [$TEST_NAME] failed! due to policy should be ignore" + exit 1 +fi + +# clear data for next case. +run_sql "DROP DATABASE $DB;" + +echo "test only restore related placement policy..." +run_sql "create schema $DB;" +# we have three policies +run_sql "create placement policy fivereplicas followers=4;" +run_sql "create placement policy tworeplicas followers=1;" +run_sql "create placement policy foureplicas followers=3;" + +# generate one table with one row content with policy fivereplicas;. +run_sql "create table $DB.sbtest(id int primary key, k int not null, c char(120) not null, pad char(60) not null) placement policy=fivereplicas partition by range(id) (partition p0 values less than (10) placement policy tworeplicas, partition p1 values less than MAXVALUE);" +run_sql "insert into $DB.sbtest values ($i, $i, '$i', '$i');" + +# backup table and policies +run_br backup full -s "local://$TEST_DIR/${DB}_related" --pd $PD_ADDR + +# clear data and policies for restore. +run_sql "DROP DATABASE $DB;" +run_sql "DROP PLACEMENT POLICY fivereplicas;" +run_sql "DROP PLACEMENT POLICY tworeplicas;" +run_sql "DROP PLACEMENT POLICY foureplicas;" + +# restore table +run_br restore table --db $DB --table sbtest -s "local://$TEST_DIR/${DB}_related" --pd $PD_ADDR + +# verify only one policy has been restored +policy_count=$(run_sql "use $DB; show placement;" | grep "POLICY" | wc -l) +if [ "$policy_count" -ne "2" ];then + echo "TEST: [$TEST_NAME] failed! due to policy should be ignore" + exit 1 +fi + +# which have fivereplicas... +policy_count=$(run_sql "use $DB; show placement;" | grep "POLICY" | grep "fivereplicas" | wc -l) +if [ "$policy_count" -ne "1" ];then + echo "TEST: [$TEST_NAME] failed! due to policy restore failed" + exit 1 +fi + +# which have tworeplicas... +policy_count=$(run_sql "use $DB; show placement;" | grep "POLICY" | grep "tworeplicas" | wc -l) +if [ "$policy_count" -ne "1" ];then + echo "TEST: [$TEST_NAME] failed! due to policy restore failed" + exit 1 +fi + +# clear data and policies for next case. +run_sql "DROP DATABASE $DB;" +run_sql "DROP PLACEMENT POLICY fivereplicas;" +run_sql "DROP PLACEMENT POLICY tworeplicas;" + +echo "test restore all placement policies..." +run_sql "create schema $DB;" +# we have three policies +run_sql "create placement policy fivereplicas followers=4;" +run_sql "create placement policy tworeplicas followers=1;" +run_sql "create placement policy foureplicas followers=3;" + +# generate one table with one row content with policy fivereplicas;. +run_sql "create table $DB.sbtest(id int primary key, k int not null, c char(120) not null, pad char(60) not null) placement policy=fivereplicas partition by range(id) (partition p0 values less than (10) placement policy tworeplicas, partition p1 values less than MAXVALUE);" +run_sql "insert into $DB.sbtest values ($i, $i, '$i', '$i');" + +# backup table and policies +run_br backup full -s "local://$TEST_DIR/${DB}_all" --pd $PD_ADDR + +# clear data and policies for restore. +run_sql "DROP DATABASE $DB;" +run_sql "DROP PLACEMENT POLICY fivereplicas;" +run_sql "DROP PLACEMENT POLICY tworeplicas;" +run_sql "DROP PLACEMENT POLICY foureplicas;" + +# restore table +run_br restore full -f "$DB.sbtest" -s "local://$TEST_DIR/${DB}_all" --pd $PD_ADDR + +# verify all policies have been restored even we only restore one table during tableFilter. +policy_count=$(run_sql "use $DB; show placement;" | grep "POLICY" | wc -l) +if [ "$policy_count" -ne "3" ];then + echo "TEST: [$TEST_NAME] failed! due to policy should be ignore" + exit 1 +fi diff --git a/br/tests/lightning_checksum_mismatch/run.sh b/br/tests/lightning_checksum_mismatch/run.sh index d13451d51ec5b..184585cf77116 100755 --- a/br/tests/lightning_checksum_mismatch/run.sh +++ b/br/tests/lightning_checksum_mismatch/run.sh @@ -2,4 +2,4 @@ set -eux -run_lightning 2>&1 | grep -q "Error: checksum mismatched remote vs local" +run_lightning 2>&1 | grep -q "checksum mismatched remote vs local" diff --git a/br/tests/lightning_error_summary/run.sh b/br/tests/lightning_error_summary/run.sh index dcb06d6bf8c2f..e32ea302d8698 100755 --- a/br/tests/lightning_error_summary/run.sh +++ b/br/tests/lightning_error_summary/run.sh @@ -46,9 +46,9 @@ check_contains 'sum(k): 32' # Verify the log contains the expected messages at the last few lines tail -20 "$TEST_DIR/lightning-error-summary.log" > "$TEST_DIR/lightning-error-summary.tail" grep -Fq '["tables failed to be imported"] [count=2]' "$TEST_DIR/lightning-error-summary.tail" -grep -Fq '[-] [table=`error_summary`.`a`] [status=checksum] [error="checksum mismatched' "$TEST_DIR/lightning-error-summary.tail" -grep -Fq '[-] [table=`error_summary`.`c`] [status=checksum] [error="checksum mismatched' "$TEST_DIR/lightning-error-summary.tail" -! grep -Fq '[-] [table=`error_summary`.`b`] [status=checksum] [error="checksum mismatched' "$TEST_DIR/lightning-error-summary.tail" +grep -Fq '[-] [table=`error_summary`.`a`] [status=checksum] [error="[Lighting:Restore:ErrChecksumMismatch]checksum mismatched' "$TEST_DIR/lightning-error-summary.tail" +grep -Fq '[-] [table=`error_summary`.`c`] [status=checksum] [error="[Lighting:Restore:ErrChecksumMismatch]checksum mismatched' "$TEST_DIR/lightning-error-summary.tail" +! grep -Fq '[-] [table=`error_summary`.`b`] [status=checksum] [error="[Lighting:Restore:ErrChecksumMismatch]checksum mismatched' "$TEST_DIR/lightning-error-summary.tail" # Now check the error log when the checkpoint is not cleaned. diff --git a/br/tests/lightning_fail_fast/run.sh b/br/tests/lightning_fail_fast/run.sh index 8894bd0c5c8f4..a1723b3e2cffd 100755 --- a/br/tests/lightning_fail_fast/run.sh +++ b/br/tests/lightning_fail_fast/run.sh @@ -16,7 +16,7 @@ set -eux -export GO_FAILPOINTS='github.com/pingcap/tidb/br/pkg/lightning/restore/SlowDownWriteRows=sleep(50);github.com/pingcap/tidb/br/pkg/lightning/restore/SetMinDeliverBytes=return(1)' +export GO_FAILPOINTS='github.com/pingcap/tidb/br/pkg/lightning/restore/SlowDownWriteRows=sleep(100);github.com/pingcap/tidb/br/pkg/lightning/restore/SetMinDeliverBytes=return(1)' for CFG in chunk engine; do rm -f "$TEST_DIR/lightning-tidb.log" diff --git a/br/tests/lightning_restore/config.toml b/br/tests/lightning_restore/config.toml index 93fb4f55ae45a..fba59357bc7fd 100644 --- a/br/tests/lightning_restore/config.toml +++ b/br/tests/lightning_restore/config.toml @@ -3,3 +3,7 @@ table-concurrency = 4 [tikv-importer] backend = 'local' + +[checkpoint] +enable = true +keep-after-success = "origin" diff --git a/br/tests/lightning_restore/run.sh b/br/tests/lightning_restore/run.sh index 41542acd45f8b..a168bca4a513e 100755 --- a/br/tests/lightning_restore/run.sh +++ b/br/tests/lightning_restore/run.sh @@ -41,3 +41,28 @@ for i in $(seq "$TABLE_COUNT"); do run_sql "SELECT sum(i) FROM restore_tsr.tbl$i;" check_contains 'sum(i): 1' done + +# Reset and test setting external storage from outside +DBPATH2="$TEST_DIR/restore.ext_storage" +mkdir -p $DBPATH2 +echo 'CREATE DATABASE restore_tsr;' > "$DBPATH2/restore_tsr-schema-create.sql" +for i in $(seq "$TABLE_COUNT"); do + echo "CREATE TABLE tbl$i(i TINYINT);" > "$DBPATH2/restore_tsr.tbl$i-schema.sql" + echo "INSERT INTO tbl$i VALUES (1);" > "$DBPATH2/restore_tsr.tbl$i.sql" +done + +export GO_FAILPOINTS="github.com/pingcap/tidb/br/pkg/lightning/setExtStorage=return(\"$DBPATH2\")" +export GO_FAILPOINTS="$GO_FAILPOINTS;github.com/pingcap/tidb/br/pkg/lightning/setCheckpointName=return(\"test_checkpoint.pb\")" + +run_sql 'DROP DATABASE IF EXISTS restore_tsr' +run_lightning +echo "Import finished" + +# Verify all data are imported +for i in $(seq "$TABLE_COUNT"); do + run_sql "SELECT sum(i) FROM restore_tsr.tbl$i;" + check_contains 'sum(i): 1' +done + +# Verify checkpoint file is also created in external storage +[ -f "$DBPATH2/test_checkpoint.pb" ] diff --git a/br/tests/lightning_s3/config_manual_files.toml b/br/tests/lightning_s3/config_manual_files.toml new file mode 100644 index 0000000000000..2d5d2aa128983 --- /dev/null +++ b/br/tests/lightning_s3/config_manual_files.toml @@ -0,0 +1,20 @@ +[mydumper] +default-file-rules = true + +[[mydumper.files]] +pattern = "data-sql/" +schema = "s3_test" +table = "tbl" +type = "sql" + +[[mydumper.files]] +pattern = "data-csv/" +schema = "s3_test" +table = "tbl" +type = "csv" + +[[mydumper.files]] +pattern = "data-parquet/" +schema = "s3_test" +table = "tbl" +type = "parquet" diff --git a/br/tests/lightning_s3/config_s3_checkpoint.toml b/br/tests/lightning_s3/config_s3_checkpoint.toml new file mode 100644 index 0000000000000..f8402f2b7e424 --- /dev/null +++ b/br/tests/lightning_s3/config_s3_checkpoint.toml @@ -0,0 +1,12 @@ +[lightning] +index-concurrency = 1 +table-concurrency = 1 + +[checkpoint] +enable = true +driver = "file" +dsn = "s3://test-bucket/prix/cp_error_destroy.pb/?endpoint=http%3A//127.0.0.1%3A9900&access_key=s3accesskey&secret_access_key=s3secretkey&force_path_style=true" +keep-after-success = "origin" + +[mydumper] +read-block-size = 1 diff --git a/br/tests/lightning_s3/run.sh b/br/tests/lightning_s3/run.sh index 5b2973784fd7e..1d4b80bff3d53 100755 --- a/br/tests/lightning_s3/run.sh +++ b/br/tests/lightning_s3/run.sh @@ -22,6 +22,11 @@ check_cluster_version 4 0 0 'local backend' || exit 0 set -euE +if [[ -z "${TEST_DIR}" ]]; then + echo "TEST_DIR is not set" >&2 + exit 1 +fi + # Populate the mydumper source DBPATH="$TEST_DIR/s3.mydump" @@ -30,12 +35,12 @@ export MINIO_ACCESS_KEY=s3accesskey export MINIO_SECRET_KEY=s3secretkey export MINIO_BROWSER=off export S3_ENDPOINT=127.0.0.1:9900 -rm -rf "$TEST_DIR/$DB" +rm -rf "${TEST_DIR:?}/${DB:?}" mkdir -p "$TEST_DIR/$DB" bin/minio server --address $S3_ENDPOINT "$DBPATH" & i=0 while ! curl -o /dev/null -v -s "http://$S3_ENDPOINT/"; do - i=$(($i+1)) + i=$((i+1)) if [ $i -gt 30 ]; then echo 'Failed to start minio' exit 1 @@ -45,7 +50,7 @@ done BUCKET=test-bucket DATA_PATH=$DBPATH/$BUCKET -mkdir -p $DATA_PATH +mkdir -p "$DATA_PATH" echo 'CREATE DATABASE s3_test;' > "$DATA_PATH/$DB-schema-create.sql" echo "CREATE TABLE t(i INT, s varchar(32));" > "$DATA_PATH/$DB.$TABLE-schema.sql" echo 'INSERT INTO tbl (i, s) VALUES (1, "1"),(2, "test2"), (3, "qqqtest");' > "$DATA_PATH/$DB.$TABLE.sql" @@ -57,27 +62,165 @@ i,s 104,"" _EOF_ -# Fill in the database -# Start importing the tables. -run_sql "DROP DATABASE IF EXISTS $DB;" -run_sql "DROP TABLE IF EXISTS $DB.$TABLE;" +function cleanup_db_and_table() { + if ! run_sql "DROP DATABASE IF EXISTS $DB;"; then + echo "run SQL for drop database error" >&2 + return 1 + fi + if ! run_sql "DROP TABLE IF EXISTS $DB.$TABLE;"; then + echo "run SQL for drop table error" >&2 + return 1 + fi +} # test not exist path -rm -f $TEST_DIR/lightning.log -SOURCE_DIR="s3://$BUCKET/not-exist-path?endpoint=http%3A//127.0.0.1%3A9900&access_key=$MINIO_ACCESS_KEY&secret_access_key=$MINIO_SECRET_KEY&force_path_style=true" -! run_lightning -d $SOURCE_DIR --backend local 2> /dev/null -grep -Eq "data-source-dir .* doesn't exist or contains no files" $TEST_DIR/lightning.log +function test_import_non_existing_path() { + rm -f "$TEST_DIR/lightning.log" + local SOURCE_DIR="s3://$BUCKET/not-exist-path?endpoint=http%3A//127.0.0.1%3A9900&access_key=$MINIO_ACCESS_KEY&secret_access_key=$MINIO_SECRET_KEY&force_path_style=true" + if run_lightning -d "$SOURCE_DIR" --backend local 2> /dev/null ; then + echo "this importing should fail" >&2 + return 2 + fi + if ! grep -Eq "data-source-dir .* doesn't exist or contains no files" "$TEST_DIR/lightning.log" ; then + echo "the message is not found in the log" >&2 + return 2 + fi + return 0 +} # test empty dir -rm -f $TEST_DIR/lightning.log -emptyPath=empty-bucket/empty-path -mkdir -p $DBPATH/$emptyPath -SOURCE_DIR="s3://$emptyPath/not-exist-path?endpoint=http%3A//127.0.0.1%3A9900&access_key=$MINIO_ACCESS_KEY&secret_access_key=$MINIO_SECRET_KEY&force_path_style=true" -! run_lightning -d $SOURCE_DIR --backend local 2> /dev/null -grep -Eq "data-source-dir .* doesn't exist or contains no files" $TEST_DIR/lightning.log - -SOURCE_DIR="s3://$BUCKET/?endpoint=http%3A//127.0.0.1%3A9900&access_key=$MINIO_ACCESS_KEY&secret_access_key=$MINIO_SECRET_KEY&force_path_style=true" -run_lightning -d $SOURCE_DIR --backend local 2> /dev/null -run_sql "SELECT count(*), sum(i) FROM \`$DB\`.$TABLE" -check_contains "count(*): 7" -check_contains "sum(i): 413" +function test_import_empty_dir() { + rm -f "$TEST_DIR/lightning.log" + local emptyPath=empty-bucket/empty-path + mkdir -p "$DBPATH/$emptyPath" + local SOURCE_DIR="s3://$emptyPath/not-exist-path?endpoint=http%3A//127.0.0.1%3A9900&access_key=$MINIO_ACCESS_KEY&secret_access_key=$MINIO_SECRET_KEY&force_path_style=true" + if run_lightning -d "$SOURCE_DIR" --backend local 2> /dev/null; then + echo "this importing should fail" >&2 + return 2 + fi + if ! grep -Eq "data-source-dir .* doesn't exist or contains no files" "$TEST_DIR/lightning.log"; then + echo "the message is not found in the log" >&2 + return 2 + fi + return 0 +} + +function test_normal_import() { + rm -f "$TEST_DIR/lightning.log" + if ! cleanup_db_and_table; then + echo "cleanup DB and table before running the test failed" >&2 + return 1 + fi + local SOURCE_DIR="s3://$BUCKET/?endpoint=http%3A//127.0.0.1%3A9900&access_key=$MINIO_ACCESS_KEY&secret_access_key=$MINIO_SECRET_KEY&force_path_style=true" + if ! run_lightning -d "$SOURCE_DIR" --backend local 2> /dev/null; then + echo "run lightning failed" >&2 + return 2 + fi + if ! run_sql "SELECT count(*), sum(i) FROM \`$DB\`.$TABLE"; then + echo "run SQL on target DB failed" >&2 + return 2 + fi + if ! check_contains "count(*): 7"; then + echo "the record count is not right" >&2 + return 2 + fi + if ! check_contains "sum(i): 413"; then + echo "the sum of record is not right" >&2 + return 2 + fi + return 0 +} + +function test_import_with_checkpoint() { + rm -f "$TEST_DIR/lightning.log" + if ! cleanup_db_and_table; then + echo "cleanup DB and table before running the test failed" >&2 + return 1 + fi + local SOURCE_DIR="s3://$BUCKET/?endpoint=http%3A//127.0.0.1%3A9900&access_key=$MINIO_ACCESS_KEY&secret_access_key=$MINIO_SECRET_KEY&force_path_style=true" + if ! run_lightning -d "$SOURCE_DIR" --backend local --config "tests/$TEST_NAME/config_s3_checkpoint.toml" 2> /dev/null; then + echo "run lightning failed" >&2 + return 2 + fi + if ! run_sql "SELECT count(*), sum(i) FROM \`$DB\`.$TABLE"; then + echo "run SQL on target DB failed" >&2 + return 2 + fi + if ! check_contains "count(*): 7"; then + echo "the record count is not right" >&2 + return 2 + fi + if ! check_contains "sum(i): 413"; then + echo "the sum of record is not right" >&2 + return 2 + fi +} + +# test manually organized dir with some empty sub-dirs +function test_import_using_manual_path_config() { + rm -f "$TEST_DIR/lightning.log" + if ! cleanup_db_and_table; then + echo "cleanup DB and table before running the test failed" >&2 + return 1 + fi + local bucket_02="test-bucket-02" + local sub_path_02="to-be-imported" + local base_path_02="${DBPATH}/${bucket_02}/${sub_path_02}" + rm -rf "${base_path_02}" + mkdir -p "${base_path_02}" + touch "${base_path_02}/$DB-schema-create.sql" # empty schema file + cp "$DATA_PATH/$DB.$TABLE-schema.sql" "${base_path_02}/" + local sql_data_path_02="${base_path_02}/data-sql" + local csv_data_path_02="${base_path_02}/data-csv" + local parquet_data_path_02="${base_path_02}/data-parquet" + mkdir -p "${sql_data_path_02}/empty-dir" # try to add an empty path into it + cp "$DATA_PATH/$DB.$TABLE.sql" "${sql_data_path_02}/" + touch "${sql_data_path_02}/dummy.sql" # empty file + mkdir -p "${csv_data_path_02}/empty-dir" # try to add an empty path into it + cp "$DATA_PATH/$DB.$TABLE.0.csv" "${csv_data_path_02}/" + touch "${csv_data_path_02}/dummy.csv" # empty file + mkdir -p "${parquet_data_path_02}/empty-dir" # try to add an empty path into it + # no touch empty file for parquet files + + local SOURCE_DIR="s3://${bucket_02}/${sub_path_02}?endpoint=http%3A//127.0.0.1%3A9900&access_key=$MINIO_ACCESS_KEY&secret_access_key=$MINIO_SECRET_KEY&force_path_style=true" + if ! run_lightning -d "${SOURCE_DIR}" --backend local --config "tests/$TEST_NAME/config_manual_files.toml" 2> /dev/null; then + echo "run lightning failed" >&2 + return 2 + fi + if ! run_sql "SELECT count(*), sum(i) FROM \`$DB\`.$TABLE"; then + echo "run SQL on target DB failed" >&2 + return 2 + fi + if ! check_contains "count(*): 7"; then + echo "the record count is not right" >&2 + return 2 + fi + if ! check_contains "sum(i): 413"; then + echo "the sum of record is not right" >&2 + return 2 + fi + return 0 +} + +final_ret_code=0 +if ! test_import_non_existing_path; then + final_ret_code=2 +fi + +if ! test_import_empty_dir; then + final_ret_code=2 +fi + +if ! test_normal_import; then + final_ret_code=2 +fi + +if ! test_import_with_checkpoint; then + final_ret_code=2 +fi + +if ! test_import_using_manual_path_config; then + final_ret_code=2 +fi + +exit "${final_ret_code}" diff --git a/br/web/package-lock.json b/br/web/package-lock.json index f3ee7ce9f50c3..720dd03b03aba 100644 --- a/br/web/package-lock.json +++ b/br/web/package-lock.json @@ -1699,9 +1699,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/neo-async": { @@ -3998,9 +3998,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "neo-async": { diff --git a/cmd/ddltest/index_test.go b/cmd/ddltest/index_test.go index 4bbbadd292b88..705e3a13dec03 100644 --- a/cmd/ddltest/index_test.go +++ b/cmd/ddltest/index_test.go @@ -22,7 +22,6 @@ import ( "testing" "time" - "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/store/gcworker" "github.com/pingcap/tidb/table" "github.com/stretchr/testify/require" @@ -39,12 +38,12 @@ func getIndex(t table.Table, name string) table.Index { return nil } -func (s *ddlSuite) checkDropIndex(t *testing.T, indexInfo *model.IndexInfo) { +func (s *ddlSuite) checkDropIndex(t *testing.T, tableName string) { gcWorker, err := gcworker.NewMockGCWorker(s.store) require.NoError(t, err) err = gcWorker.DeleteRanges(goctx.Background(), uint64(math.MaxInt32)) require.NoError(t, err) - s.mustExec(fmt.Sprintf("admin check table %s", indexInfo.Table.String())) + s.mustExec(fmt.Sprintf("admin check table %s", tableName)) } // TestIndex operations on table test_index (c int, c1 bigint, c2 double, c3 varchar(256), primary key(c)). @@ -84,39 +83,35 @@ func TestIndex(t *testing.T) { } insertID := int64(*dataNum) - var oldIndex table.Index for _, col := range tbl { - t.Run(col.Query, func(t *testing.T) { - done := s.runDDL(col.Query) + done := s.runDDL(col.Query) - ticker := time.NewTicker(time.Duration(*lease) * time.Second / 2) - defer ticker.Stop() - LOOP: - for { - select { - case err := <-done: - require.NoError(t, err) - break LOOP - case <-ticker.C: - // add count new data - // delete count old data randomly - // update count old data randomly - count := 10 - s.execIndexOperations(t, workerNum, count, &insertID) - } + ticker := time.NewTicker(time.Duration(*lease) * time.Second / 2) + defer ticker.Stop() + LOOP: + for { + select { + case err := <-done: + require.NoError(t, err) + break LOOP + case <-ticker.C: + // add count new data + // delete count old data randomly + // update count old data randomly + count := 10 + s.execIndexOperations(t, workerNum, count, &insertID) } + } - tbl := s.getTable(t, "test_index") - index := getIndex(tbl, col.IndexName) - if col.Add { - require.NotNil(t, index) - oldIndex = index - s.mustExec("admin check table test_index") - } else { - require.Nil(t, index) - s.checkDropIndex(t, oldIndex.Meta()) - } - }) + tbl := s.getTable(t, "test_index") + index := getIndex(tbl, col.IndexName) + if col.Add { + require.NotNil(t, index) + s.mustExec("admin check table test_index") + } else { + require.Nil(t, index) + s.checkDropIndex(t, "test_index") + } } } diff --git a/cmd/ddltest/main_test.go b/cmd/ddltest/main_test.go index e4c2a6834450a..9a23dc93c9a52 100644 --- a/cmd/ddltest/main_test.go +++ b/cmd/ddltest/main_test.go @@ -33,6 +33,7 @@ func TestMain(m *testing.M) { os.Exit(1) } opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), goleak.IgnoreTopFunction("internal/poll.runtime_pollWait"), diff --git a/cmd/explaintest/main.go b/cmd/explaintest/main.go index aa644842c3795..71c5ef17ab755 100644 --- a/cmd/explaintest/main.go +++ b/cmd/explaintest/main.go @@ -763,7 +763,7 @@ func main() { log.Info("Explain test passed") } -var queryStmtTable = []string{"explain", "select", "show", "execute", "describe", "desc", "admin", "with"} +var queryStmtTable = []string{"explain", "select", "show", "execute", "describe", "desc", "admin", "with", "trace"} func trimSQL(sql string) string { // Trim space. diff --git a/cmd/explaintest/r/agg_predicate_pushdown.result b/cmd/explaintest/r/agg_predicate_pushdown.result new file mode 100644 index 0000000000000..9caca7aa5bb22 --- /dev/null +++ b/cmd/explaintest/r/agg_predicate_pushdown.result @@ -0,0 +1,54 @@ +drop database if exists agg_predicate_pushdown; +create database agg_predicate_pushdown; +create table t(a int, b int, c int); +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1) and (a > 2) and 1 and (b > 2) and (avg(c) > 3); +id estRows task access object operator info +Projection 711.11 root test.t.a, test.t.b, Column#5 +└─Selection 711.11 root gt(Column#5, 3) + └─HashAgg 888.89 root group by:Column#16, Column#17, Column#18, funcs:avg(Column#13)->Column#5, funcs:firstrow(Column#14)->test.t.a, funcs:firstrow(Column#15)->test.t.b + └─Projection 1111.11 root cast(test.t.c, decimal(15,4) BINARY)->Column#13, test.t.a, test.t.b, test.t.a, test.t.b, test.t.c + └─TableReader 1111.11 root data:Selection + └─Selection 1111.11 cop[tikv] gt(test.t.a, 1), gt(test.t.a, 2), gt(test.t.b, 2) + └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1 or b > 2) and (a > 2 or b < 1) and 1 and (b > 2) and (avg(c) > 3); +id estRows task access object operator info +Projection 657.65 root test.t.a, test.t.b, Column#5 +└─Selection 657.65 root gt(Column#5, 3) + └─HashAgg 822.06 root group by:Column#16, Column#17, Column#18, funcs:avg(Column#13)->Column#5, funcs:firstrow(Column#14)->test.t.a, funcs:firstrow(Column#15)->test.t.b + └─Projection 1027.57 root cast(test.t.c, decimal(15,4) BINARY)->Column#13, test.t.a, test.t.b, test.t.a, test.t.b, test.t.c + └─TableReader 1027.57 root data:Selection + └─Selection 1027.57 cop[tikv] gt(test.t.b, 2), or(gt(test.t.a, 1), gt(test.t.b, 2)), or(gt(test.t.a, 2), lt(test.t.b, 1)) + └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1 and b > 2) or (a > 2 and b < 1) or (b > 2 and avg(c) > 3); +id estRows task access object operator info +Projection 3027.54 root test.t.a, test.t.b, Column#5 +└─Selection 3027.54 root or(and(gt(test.t.a, 1), gt(test.t.b, 2)), or(and(gt(test.t.a, 2), lt(test.t.b, 1)), and(gt(test.t.b, 2), gt(Column#5, 3)))) + └─HashAgg 3784.43 root group by:Column#16, Column#17, Column#18, funcs:avg(Column#13)->Column#5, funcs:firstrow(Column#14)->test.t.a, funcs:firstrow(Column#15)->test.t.b + └─Projection 4730.53 root cast(test.t.c, decimal(15,4) BINARY)->Column#13, test.t.a, test.t.b, test.t.a, test.t.b, test.t.c + └─TableReader 4730.53 root data:Selection + └─Selection 4730.53 cop[tikv] or(and(gt(test.t.a, 1), gt(test.t.b, 2)), or(and(gt(test.t.a, 2), lt(test.t.b, 1)), gt(test.t.b, 2))) + └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1 or avg(c) > 1) and (a < 3); +id estRows task access object operator info +Projection 2126.93 root test.t.a, test.t.b, Column#5 +└─Selection 2126.93 root or(gt(test.t.a, 1), gt(Column#5, 1)) + └─HashAgg 2658.67 root group by:Column#16, Column#17, Column#18, funcs:avg(Column#13)->Column#5, funcs:firstrow(Column#14)->test.t.a, funcs:firstrow(Column#15)->test.t.b + └─Projection 3323.33 root cast(test.t.c, decimal(15,4) BINARY)->Column#13, test.t.a, test.t.b, test.t.a, test.t.b, test.t.c + └─TableReader 3323.33 root data:Selection + └─Selection 3323.33 cop[tikv] lt(test.t.a, 3) + └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1 and avg(c) > 1) or (a < 3); +id estRows task access object operator info +Projection 6393.60 root test.t.a, test.t.b, Column#5 +└─Selection 6393.60 root or(and(gt(test.t.a, 1), gt(Column#5, 1)), lt(test.t.a, 3)) + └─HashAgg 7992.00 root group by:Column#16, Column#17, Column#18, funcs:avg(Column#13)->Column#5, funcs:firstrow(Column#14)->test.t.a, funcs:firstrow(Column#15)->test.t.b + └─Projection 9990.00 root cast(test.t.c, decimal(15,4) BINARY)->Column#13, test.t.a, test.t.b, test.t.a, test.t.b, test.t.c + └─TableReader 9990.00 root data:Selection + └─Selection 9990.00 cop[tikv] or(gt(test.t.a, 1), lt(test.t.a, 3)) + └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo +use test; diff --git a/cmd/explaintest/r/cte.result b/cmd/explaintest/r/cte.result index 077e62cf33cd4..6c1da3d121e77 100644 --- a/cmd/explaintest/r/cte.result +++ b/cmd/explaintest/r/cte.result @@ -387,17 +387,18 @@ insert into tpk values(1), (2), (3); // Expect a Sort operator on CTE. explain with cte1 as (select c1 from t1) select /*+ MERGE_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; id estRows task access object operator info -MergeJoin_26 10000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1 -├─Sort_24(Build) 8000.00 root test.t1.c1 -│ └─Selection_22 8000.00 root not(isnull(test.t1.c1)) -│ └─CTEFullScan_23 10000.00 root CTE:dt2 data:CTE_0 -└─Sort_20(Probe) 9990.00 root test.t1.c1 - └─TableReader_19 9990.00 root data:Selection_18 - └─Selection_18 9990.00 cop[tikv] not(isnull(test.t1.c1)) - └─TableFullScan_17 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo -CTE_0 10000.00 root Non-Recursive CTE -└─TableReader_12(Seed Part) 10000.00 root data:TableFullScan_11 - └─TableFullScan_11 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +MergeJoin_28 8000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1 +├─Sort_26(Build) 6400.00 root test.t1.c1 +│ └─Selection_24 6400.00 root not(isnull(test.t1.c1)) +│ └─CTEFullScan_25 8000.00 root CTE:dt2 data:CTE_0 +└─Sort_22(Probe) 9990.00 root test.t1.c1 + └─TableReader_21 9990.00 root data:Selection_20 + └─Selection_20 9990.00 cop[tikv] not(isnull(test.t1.c1)) + └─TableFullScan_19 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_11(Seed Part) 8000.00 root not(isnull(test.t1.c1)) + └─TableReader_14 10000.00 root data:TableFullScan_13 + └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo with cte1 as (select c1 from t1) select /*+ MERGE_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; c1 c1 1 1 @@ -411,15 +412,16 @@ c1 c1 // Sort should not exist, because tpk.c1 is pk. Not the best plan for now(#25674). explain with cte1 as (select c1 from tpk) select /*+ MERGE_JOIN(dt1, dt2) */ * from tpk dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; id estRows task access object operator info -MergeJoin_24 10000.00 root inner join, left key:test.tpk.c1, right key:test.tpk.c1 -├─Sort_22(Build) 8000.00 root test.tpk.c1 -│ └─Selection_20 8000.00 root not(isnull(test.tpk.c1)) -│ └─CTEFullScan_21 10000.00 root CTE:dt2 data:CTE_0 -└─TableReader_18(Probe) 10000.00 root data:TableFullScan_17 - └─TableFullScan_17 10000.00 cop[tikv] table:dt1 keep order:true, stats:pseudo -CTE_0 10000.00 root Non-Recursive CTE -└─TableReader_12(Seed Part) 10000.00 root data:TableFullScan_11 - └─TableFullScan_11 10000.00 cop[tikv] table:tpk keep order:false, stats:pseudo +MergeJoin_26 8000.00 root inner join, left key:test.tpk.c1, right key:test.tpk.c1 +├─Sort_24(Build) 6400.00 root test.tpk.c1 +│ └─Selection_22 6400.00 root not(isnull(test.tpk.c1)) +│ └─CTEFullScan_23 8000.00 root CTE:dt2 data:CTE_0 +└─TableReader_20(Probe) 10000.00 root data:TableFullScan_19 + └─TableFullScan_19 10000.00 cop[tikv] table:dt1 keep order:true, stats:pseudo +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_11(Seed Part) 8000.00 root not(isnull(test.tpk.c1)) + └─TableReader_14 10000.00 root data:TableFullScan_13 + └─TableFullScan_13 10000.00 cop[tikv] table:tpk keep order:false, stats:pseudo with cte1 as (select c1 from tpk) select /*+ MERGE_JOIN(dt1, dt2) */ * from tpk dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; c1 c1 1 1 @@ -428,18 +430,19 @@ c1 c1 // Sort should not exist, because we have order by in CTE definition. Not the best plan for now(#25674). explain with cte1 as (select c1 from t1 order by c1) select /*+ MERGE_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; id estRows task access object operator info -MergeJoin_30 10000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1 -├─Sort_28(Build) 8000.00 root test.t1.c1 -│ └─Selection_26 8000.00 root not(isnull(test.t1.c1)) -│ └─CTEFullScan_27 10000.00 root CTE:dt2 data:CTE_0 -└─Sort_24(Probe) 9990.00 root test.t1.c1 - └─TableReader_23 9990.00 root data:Selection_22 - └─Selection_22 9990.00 cop[tikv] not(isnull(test.t1.c1)) - └─TableFullScan_21 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo -CTE_0 10000.00 root Non-Recursive CTE -└─Sort_11(Seed Part) 10000.00 root test.t1.c1 - └─TableReader_15 10000.00 root data:TableFullScan_14 - └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +MergeJoin_32 8000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1 +├─Sort_30(Build) 6400.00 root test.t1.c1 +│ └─Selection_28 6400.00 root not(isnull(test.t1.c1)) +│ └─CTEFullScan_29 8000.00 root CTE:dt2 data:CTE_0 +└─Sort_26(Probe) 9990.00 root test.t1.c1 + └─TableReader_25 9990.00 root data:Selection_24 + └─Selection_24 9990.00 cop[tikv] not(isnull(test.t1.c1)) + └─TableFullScan_23 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_12(Seed Part) 8000.00 root not(isnull(test.t1.c1)) + └─Sort_13 10000.00 root test.t1.c1 + └─TableReader_17 10000.00 root data:TableFullScan_16 + └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo with cte1 as (select c1 from t1 order by c1) select /*+ MERGE_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; c1 c1 1 1 @@ -500,18 +503,19 @@ c1 c1 // Expect Sort operator in CTE definition. explain with cte1 as (select c1 from t1 order by c1) select /*+ MERGE_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; id estRows task access object operator info -MergeJoin_30 10000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1 -├─Sort_28(Build) 8000.00 root test.t1.c1 -│ └─Selection_26 8000.00 root not(isnull(test.t1.c1)) -│ └─CTEFullScan_27 10000.00 root CTE:dt2 data:CTE_0 -└─Sort_24(Probe) 9990.00 root test.t1.c1 - └─TableReader_23 9990.00 root data:Selection_22 - └─Selection_22 9990.00 cop[tikv] not(isnull(test.t1.c1)) - └─TableFullScan_21 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo -CTE_0 10000.00 root Non-Recursive CTE -└─Sort_11(Seed Part) 10000.00 root test.t1.c1 - └─TableReader_15 10000.00 root data:TableFullScan_14 - └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +MergeJoin_32 8000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1 +├─Sort_30(Build) 6400.00 root test.t1.c1 +│ └─Selection_28 6400.00 root not(isnull(test.t1.c1)) +│ └─CTEFullScan_29 8000.00 root CTE:dt2 data:CTE_0 +└─Sort_26(Probe) 9990.00 root test.t1.c1 + └─TableReader_25 9990.00 root data:Selection_24 + └─Selection_24 9990.00 cop[tikv] not(isnull(test.t1.c1)) + └─TableFullScan_23 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_12(Seed Part) 8000.00 root not(isnull(test.t1.c1)) + └─Sort_13 10000.00 root test.t1.c1 + └─TableReader_17 10000.00 root data:TableFullScan_16 + └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo with cte1 as (select c1 from t1 order by c1) select /*+ MERGE_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; c1 c1 1 1 @@ -525,17 +529,18 @@ c1 c1 // Sort should not exist, because tpk is ordered. Not the best plan for now(#25674). explain with cte1 as (select c1 from tpk order by c1) select /*+ MERGE_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; id estRows task access object operator info -MergeJoin_32 10000.00 root inner join, left key:test.t1.c1, right key:test.tpk.c1 -├─Sort_30(Build) 8000.00 root test.tpk.c1 -│ └─Selection_28 8000.00 root not(isnull(test.tpk.c1)) -│ └─CTEFullScan_29 10000.00 root CTE:dt2 data:CTE_0 -└─Sort_26(Probe) 9990.00 root test.t1.c1 - └─TableReader_25 9990.00 root data:Selection_24 - └─Selection_24 9990.00 cop[tikv] not(isnull(test.t1.c1)) - └─TableFullScan_23 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo -CTE_0 10000.00 root Non-Recursive CTE -└─TableReader_18(Seed Part) 10000.00 root data:TableFullScan_17 - └─TableFullScan_17 10000.00 cop[tikv] table:tpk keep order:true, stats:pseudo +MergeJoin_34 8000.00 root inner join, left key:test.t1.c1, right key:test.tpk.c1 +├─Sort_32(Build) 6400.00 root test.tpk.c1 +│ └─Selection_30 6400.00 root not(isnull(test.tpk.c1)) +│ └─CTEFullScan_31 8000.00 root CTE:dt2 data:CTE_0 +└─Sort_28(Probe) 9990.00 root test.t1.c1 + └─TableReader_27 9990.00 root data:Selection_26 + └─Selection_26 9990.00 cop[tikv] not(isnull(test.t1.c1)) + └─TableFullScan_25 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_12(Seed Part) 8000.00 root not(isnull(test.tpk.c1)) + └─TableReader_20 10000.00 root data:TableFullScan_19 + └─TableFullScan_19 10000.00 cop[tikv] table:tpk keep order:true, stats:pseudo with cte1 as (select c1 from tpk order by c1) select /*+ MERGE_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = dt1.c1 order by 1, 2; c1 c1 1 1 @@ -545,15 +550,16 @@ c1 c1 // HashJoin. No need to sort explain with cte1 as (select c1 from t1) select /*+ HASH_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = 1 order by 1, 2; id estRows task access object operator info -Sort_13 80000000.00 root test.t1.c1, test.t1.c1 -└─HashJoin_16 80000000.00 root CARTESIAN inner join - ├─Selection_20(Build) 8000.00 root eq(test.t1.c1, 1) - │ └─CTEFullScan_21 10000.00 root CTE:dt2 data:CTE_0 - └─TableReader_19(Probe) 10000.00 root data:TableFullScan_18 - └─TableFullScan_18 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo -CTE_0 10000.00 root Non-Recursive CTE -└─TableReader_12(Seed Part) 10000.00 root data:TableFullScan_11 - └─TableFullScan_11 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +Sort_15 64000000.00 root test.t1.c1, test.t1.c1 +└─HashJoin_18 64000000.00 root CARTESIAN inner join + ├─Selection_22(Build) 6400.00 root eq(test.t1.c1, 1) + │ └─CTEFullScan_23 8000.00 root CTE:dt2 data:CTE_0 + └─TableReader_21(Probe) 10000.00 root data:TableFullScan_20 + └─TableFullScan_20 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_11(Seed Part) 8000.00 root eq(test.t1.c1, 1) + └─TableReader_14 10000.00 root data:TableFullScan_13 + └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo with cte1 as (select c1 from t1) select /*+ HASH_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = 1 order by 1, 2; c1 c1 1 1 @@ -566,15 +572,16 @@ c1 c1 2 1 explain with cte1 as (select c1 from tpk) select /*+ HASH_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = 1 order by 1, 2; id estRows task access object operator info -Sort_13 80000000.00 root test.t1.c1, test.tpk.c1 -└─HashJoin_16 80000000.00 root CARTESIAN inner join - ├─Selection_20(Build) 8000.00 root eq(test.tpk.c1, 1) - │ └─CTEFullScan_21 10000.00 root CTE:dt2 data:CTE_0 - └─TableReader_19(Probe) 10000.00 root data:TableFullScan_18 - └─TableFullScan_18 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo -CTE_0 10000.00 root Non-Recursive CTE -└─TableReader_12(Seed Part) 10000.00 root data:TableFullScan_11 - └─TableFullScan_11 10000.00 cop[tikv] table:tpk keep order:false, stats:pseudo +Sort_15 64000000.00 root test.t1.c1, test.tpk.c1 +└─HashJoin_18 64000000.00 root CARTESIAN inner join + ├─Selection_22(Build) 6400.00 root eq(test.tpk.c1, 1) + │ └─CTEFullScan_23 8000.00 root CTE:dt2 data:CTE_0 + └─TableReader_21(Probe) 10000.00 root data:TableFullScan_20 + └─TableFullScan_20 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_11(Seed Part) 8000.00 root eq(test.tpk.c1, 1) + └─TableReader_14 10000.00 root data:TableFullScan_13 + └─TableFullScan_13 10000.00 cop[tikv] table:tpk keep order:false, stats:pseudo with cte1 as (select c1 from tpk) select /*+ HASH_JOIN(dt1, dt2) */ * from t1 dt1 inner join cte1 dt2 on dt2.c1 = 1 order by 1, 2; c1 c1 1 1 @@ -589,19 +596,20 @@ create table tpk1(c1 int primary key); insert into tpk1 values(1), (2), (3); explain with cte1 as (select c1 from tpk) select /*+ merge_join(dt1, dt2) */ * from tpk1 dt1 inner join cte1 dt2 inner join cte1 dt3 on dt1.c1 = dt2.c1 and dt2.c1 = dt3.c1; id estRows task access object operator info -Projection_18 12500.00 root test.tpk1.c1, test.tpk.c1, test.tpk.c1 -└─HashJoin_20 12500.00 root inner join, equal:[eq(test.tpk.c1, test.tpk.c1)] - ├─Selection_21(Build) 8000.00 root not(isnull(test.tpk.c1)) - │ └─CTEFullScan_22 10000.00 root CTE:dt3 data:CTE_0 - └─MergeJoin_23(Probe) 10000.00 root inner join, left key:test.tpk1.c1, right key:test.tpk.c1 - ├─Sort_29(Build) 8000.00 root test.tpk.c1 - │ └─Selection_27 8000.00 root not(isnull(test.tpk.c1)) - │ └─CTEFullScan_28 10000.00 root CTE:dt2 data:CTE_0 - └─TableReader_25(Probe) 10000.00 root data:TableFullScan_24 - └─TableFullScan_24 10000.00 cop[tikv] table:dt1 keep order:true, stats:pseudo -CTE_0 10000.00 root Non-Recursive CTE -└─TableReader_14(Seed Part) 10000.00 root data:TableFullScan_13 - └─TableFullScan_13 10000.00 cop[tikv] table:tpk keep order:false, stats:pseudo +Projection_20 10000.00 root test.tpk1.c1, test.tpk.c1, test.tpk.c1 +└─HashJoin_22 10000.00 root inner join, equal:[eq(test.tpk.c1, test.tpk.c1)] + ├─Selection_23(Build) 6400.00 root not(isnull(test.tpk.c1)) + │ └─CTEFullScan_24 8000.00 root CTE:dt3 data:CTE_0 + └─MergeJoin_25(Probe) 8000.00 root inner join, left key:test.tpk1.c1, right key:test.tpk.c1 + ├─Sort_31(Build) 6400.00 root test.tpk.c1 + │ └─Selection_29 6400.00 root not(isnull(test.tpk.c1)) + │ └─CTEFullScan_30 8000.00 root CTE:dt2 data:CTE_0 + └─TableReader_27(Probe) 10000.00 root data:TableFullScan_26 + └─TableFullScan_26 10000.00 cop[tikv] table:dt1 keep order:true, stats:pseudo +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_13(Seed Part) 8000.00 root or(not(isnull(test.tpk.c1)), not(isnull(test.tpk.c1))) + └─TableReader_16 10000.00 root data:TableFullScan_15 + └─TableFullScan_15 10000.00 cop[tikv] table:tpk keep order:false, stats:pseudo with cte1 as (select c1 from tpk) select /*+ merge_join(dt1, dt2) */ * from tpk1 dt1 inner join cte1 dt2 inner join cte1 dt3 on dt1.c1 = dt2.c1 and dt2.c1 = dt3.c1; c1 c1 c1 1 1 1 @@ -617,18 +625,18 @@ insert into t2 values(1, 1); insert into t2 values(3, 2); explain select * from t1 where c1 > all(with cte1 as (select c1 from t2 where t2.c2 = t1.c2) select c1 from cte1); id estRows task access object operator info -Projection_17 10000.00 root test.t1.c1, test.t1.c2 -└─Apply_19 10000.00 root CARTESIAN inner join, other cond:or(and(gt(test.t1.c1, Column#8), if(ne(Column#9, 0), NULL, 1)), or(eq(Column#10, 0), if(isnull(test.t1.c1), NULL, 0))) - ├─TableReader_21(Build) 10000.00 root data:TableFullScan_20 - │ └─TableFullScan_20 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo - └─HashAgg_22(Probe) 1.00 root funcs:max(Column#13)->Column#8, funcs:sum(Column#14)->Column#9, funcs:count(1)->Column#10 - └─Projection_26 10.00 root test.t2.c1, cast(isnull(test.t2.c1), decimal(20,0) BINARY)->Column#14 - └─CTEFullScan_24 10.00 root CTE:cte1 data:CTE_0 +Projection_18 10000.00 root test.t1.c1, test.t1.c2 +└─Apply_20 10000.00 root CARTESIAN inner join, other cond:or(and(gt(test.t1.c1, Column#8), if(ne(Column#9, 0), NULL, 1)), or(eq(Column#10, 0), if(isnull(test.t1.c1), NULL, 0))) + ├─TableReader_22(Build) 10000.00 root data:TableFullScan_21 + │ └─TableFullScan_21 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo + └─HashAgg_23(Probe) 1.00 root funcs:max(Column#13)->Column#8, funcs:sum(Column#14)->Column#9, funcs:count(1)->Column#10 + └─Projection_27 10.00 root test.t2.c1, cast(isnull(test.t2.c1), decimal(20,0) BINARY)->Column#14 + └─CTEFullScan_25 10.00 root CTE:cte1 data:CTE_0 CTE_0 10.00 root Non-Recursive CTE -└─Projection_12(Seed Part) 10.00 root test.t2.c1 - └─TableReader_15 10.00 root data:Selection_14 - └─Selection_14 10.00 cop[tikv] eq(test.t2.c2, test.t1.c2) - └─TableFullScan_13 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +└─Projection_13(Seed Part) 10.00 root test.t2.c1 + └─TableReader_16 10.00 root data:Selection_15 + └─Selection_15 10.00 cop[tikv] eq(test.t2.c2, test.t1.c2) + └─TableFullScan_14 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo select * from t1 where c1 > all(with cte1 as (select c1 from t2 where t2.c2 = t1.c2) select c1 from cte1); c1 c2 2 1 @@ -636,15 +644,15 @@ c1 c2 insert into t1 values(2, 3); explain select * from t1 where exists(with cte1 as (select c1 from t2 where t2.c2 = t1.c2) select c1 from cte1); id estRows task access object operator info -Apply_16 10000.00 root CARTESIAN semi join -├─TableReader_18(Build) 10000.00 root data:TableFullScan_17 -│ └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo -└─CTEFullScan_19(Probe) 10.00 root CTE:cte1 data:CTE_0 +Apply_17 10000.00 root CARTESIAN semi join +├─TableReader_19(Build) 10000.00 root data:TableFullScan_18 +│ └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +└─CTEFullScan_20(Probe) 10.00 root CTE:cte1 data:CTE_0 CTE_0 10.00 root Non-Recursive CTE -└─Projection_10(Seed Part) 10.00 root test.t2.c1 - └─TableReader_13 10.00 root data:Selection_12 - └─Selection_12 10.00 cop[tikv] eq(test.t2.c2, test.t1.c2) - └─TableFullScan_11 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +└─Projection_11(Seed Part) 10.00 root test.t2.c1 + └─TableReader_14 10.00 root data:Selection_13 + └─Selection_13 10.00 cop[tikv] eq(test.t2.c2, test.t1.c2) + └─TableFullScan_12 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo select * from t1 where exists(with cte1 as (select c1 from t2 where t2.c2 = t1.c2) select c1 from cte1); c1 c2 2 1 diff --git a/cmd/explaintest/r/explain_cte.result b/cmd/explaintest/r/explain_cte.result index 59fbda4dc20e9..241cf76bf001f 100644 --- a/cmd/explaintest/r/explain_cte.result +++ b/cmd/explaintest/r/explain_cte.result @@ -67,17 +67,18 @@ CTE_0 2.00 root Recursive CTE └─CTETable_17 1.00 root Scan on CTE_0 explain with cte(a) as (with recursive cte1(a) as (select 1 union select a + 1 from cte1 where a < 10) select * from cte1) select * from cte t1, cte t2; id estRows task access object operator info -HashJoin_24 4.00 root CARTESIAN inner join -├─CTEFullScan_27(Build) 2.00 root CTE:t2 data:CTE_0 -└─CTEFullScan_26(Probe) 2.00 root CTE:t1 data:CTE_0 -CTE_0 2.00 root Non-Recursive CTE -└─CTEFullScan_21(Seed Part) 2.00 root CTE:cte1 data:CTE_1 +HashJoin_26 2.56 root CARTESIAN inner join +├─CTEFullScan_29(Build) 1.60 root CTE:t2 data:CTE_0 +└─CTEFullScan_28(Probe) 1.60 root CTE:t1 data:CTE_0 +CTE_0 1.60 root Non-Recursive CTE +└─Selection_21(Seed Part) 1.60 root 1 + └─CTEFullScan_23 2.00 root CTE:cte1 data:CTE_1 CTE_1 2.00 root Recursive CTE -├─Projection_15(Seed Part) 1.00 root 1->Column#2 -│ └─TableDual_16 1.00 root rows:1 -└─Projection_17(Recursive Part) 0.80 root cast(plus(Column#3, 1), bigint(1) BINARY)->Column#5 - └─Selection_18 0.80 root lt(Column#3, 10) - └─CTETable_19 1.00 root Scan on CTE_1 +├─Projection_16(Seed Part) 1.00 root 1->Column#2 +│ └─TableDual_17 1.00 root rows:1 +└─Projection_18(Recursive Part) 0.80 root cast(plus(Column#3, 1), bigint(1) BINARY)->Column#5 + └─Selection_19 0.80 root lt(Column#3, 10) + └─CTETable_20 1.00 root Scan on CTE_1 explain with recursive cte1(a) as (select 1 union select a+1 from cte1 where a < 10), cte2(a) as (select c2 from t1 union select a+1 from cte2 where a < 10) select * from cte1, cte2; id estRows task access object operator info HashJoin_37 16002.00 root CARTESIAN inner join @@ -97,14 +98,15 @@ CTE_1 8001.00 root Recursive CTE └─CTETable_33 10000.00 root Scan on CTE_1 explain with q(a,b) as (select * from t1) select /*+ merge(q) no_merge(q1) */ * from q, q q1 where q.a=1 and q1.a=2; id estRows task access object operator info -HashJoin_17 64000000.00 root CARTESIAN inner join -├─Selection_21(Build) 8000.00 root eq(test.t1.c1, 2) -│ └─CTEFullScan_22 10000.00 root CTE:q1 data:CTE_0 -└─Selection_19(Probe) 8000.00 root eq(test.t1.c1, 1) - └─CTEFullScan_20 10000.00 root CTE:q data:CTE_0 -CTE_0 10000.00 root Non-Recursive CTE -└─TableReader_12(Seed Part) 10000.00 root data:TableFullScan_11 - └─TableFullScan_11 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +HashJoin_19 40960000.00 root CARTESIAN inner join +├─Selection_23(Build) 6400.00 root eq(test.t1.c1, 2) +│ └─CTEFullScan_24 8000.00 root CTE:q1 data:CTE_0 +└─Selection_21(Probe) 6400.00 root eq(test.t1.c1, 1) + └─CTEFullScan_22 8000.00 root CTE:q data:CTE_0 +CTE_0 8000.00 root Non-Recursive CTE +└─Selection_11(Seed Part) 8000.00 root or(eq(test.t1.c1, 1), eq(test.t1.c1, 2)) + └─TableReader_14 10000.00 root data:TableFullScan_13 + └─TableFullScan_13 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain with recursive cte(a,b) as (select 1, concat('a', 1) union select a+1, concat(b, 1) from cte where a < 5) select * from cte; id estRows task access object operator info CTEFullScan_17 2.00 root CTE:cte data:CTE_0 @@ -202,3 +204,243 @@ id estRows task access object operator info CTEFullScan_18 0.00 root CTE:cte1 data:CTE_0 CTE_0 0.00 root Non-Recursive CTE └─TableDual_16(Seed Part) 0.00 root rows:0 +CREATE TABLE `customer` ( +`c_customer_sk` int(11) NOT NULL, +`c_customer_id` char(16) NOT NULL, +`c_current_cdemo_sk` int(11) DEFAULT NULL, +`c_current_hdemo_sk` int(11) DEFAULT NULL, +`c_current_addr_sk` int(11) DEFAULT NULL, +`c_first_shipto_date_sk` int(11) DEFAULT NULL, +`c_first_sales_date_sk` int(11) DEFAULT NULL, +`c_salutation` char(10) DEFAULT NULL, +`c_first_name` char(20) DEFAULT NULL, +`c_last_name` char(30) DEFAULT NULL, +`c_preferred_cust_flag` char(1) DEFAULT NULL, +`c_birth_day` int(11) DEFAULT NULL, +`c_birth_month` int(11) DEFAULT NULL, +`c_birth_year` int(11) DEFAULT NULL, +`c_birth_country` varchar(20) DEFAULT NULL, +`c_login` char(13) DEFAULT NULL, +`c_email_address` char(50) DEFAULT NULL, +`c_last_review_date_sk` int(11) DEFAULT NULL, +PRIMARY KEY (`c_customer_sk`) /*T![clustered_index] NONCLUSTERED */ +); +CREATE TABLE `store_sales` ( +`ss_sold_date_sk` int(11) DEFAULT NULL, +`ss_sold_time_sk` int(11) DEFAULT NULL, +`ss_item_sk` int(11) NOT NULL, +`ss_customer_sk` int(11) DEFAULT NULL, +`ss_cdemo_sk` int(11) DEFAULT NULL, +`ss_hdemo_sk` int(11) DEFAULT NULL, +`ss_addr_sk` int(11) DEFAULT NULL, +`ss_store_sk` int(11) DEFAULT NULL, +`ss_promo_sk` int(11) DEFAULT NULL, +`ss_ticket_number` int(11) NOT NULL, +`ss_quantity` int(11) DEFAULT NULL, +`ss_wholesale_cost` decimal(7,2) DEFAULT NULL, +`ss_list_price` decimal(7,2) DEFAULT NULL, +`ss_sales_price` decimal(7,2) DEFAULT NULL, +`ss_ext_discount_amt` decimal(7,2) DEFAULT NULL, +`ss_ext_sales_price` decimal(7,2) DEFAULT NULL, +`ss_ext_wholesale_cost` decimal(7,2) DEFAULT NULL, +`ss_ext_list_price` decimal(7,2) DEFAULT NULL, +`ss_ext_tax` decimal(7,2) DEFAULT NULL, +`ss_coupon_amt` decimal(7,2) DEFAULT NULL, +`ss_net_paid` decimal(7,2) DEFAULT NULL, +`ss_net_paid_inc_tax` decimal(7,2) DEFAULT NULL, +`ss_net_profit` decimal(7,2) DEFAULT NULL, +PRIMARY KEY (`ss_item_sk`,`ss_ticket_number`) /*T![clustered_index] NONCLUSTERED */ +); +CREATE TABLE `date_dim` ( +`d_date_sk` int(11) NOT NULL, +`d_date_id` char(16) NOT NULL, +`d_date` date DEFAULT NULL, +`d_month_seq` int(11) DEFAULT NULL, +`d_week_seq` int(11) DEFAULT NULL, +`d_quarter_seq` int(11) DEFAULT NULL, +`d_year` int(11) DEFAULT NULL, +`d_dow` int(11) DEFAULT NULL, +`d_moy` int(11) DEFAULT NULL, +`d_dom` int(11) DEFAULT NULL, +`d_qoy` int(11) DEFAULT NULL, +`d_fy_year` int(11) DEFAULT NULL, +`d_fy_quarter_seq` int(11) DEFAULT NULL, +`d_fy_week_seq` int(11) DEFAULT NULL, +`d_day_name` char(9) DEFAULT NULL, +`d_quarter_name` char(6) DEFAULT NULL, +`d_holiday` char(1) DEFAULT NULL, +`d_weekend` char(1) DEFAULT NULL, +`d_following_holiday` char(1) DEFAULT NULL, +`d_first_dom` int(11) DEFAULT NULL, +`d_last_dom` int(11) DEFAULT NULL, +`d_same_day_ly` int(11) DEFAULT NULL, +`d_same_day_lq` int(11) DEFAULT NULL, +`d_current_day` char(1) DEFAULT NULL, +`d_current_week` char(1) DEFAULT NULL, +`d_current_month` char(1) DEFAULT NULL, +`d_current_quarter` char(1) DEFAULT NULL, +`d_current_year` char(1) DEFAULT NULL, +PRIMARY KEY (`d_date_sk`) /*T![clustered_index] NONCLUSTERED */ +); +CREATE TABLE `web_sales` ( +`ws_sold_date_sk` int(11) DEFAULT NULL, +`ws_sold_time_sk` int(11) DEFAULT NULL, +`ws_ship_date_sk` int(11) DEFAULT NULL, +`ws_item_sk` int(11) NOT NULL, +`ws_bill_customer_sk` int(11) DEFAULT NULL, +`ws_bill_cdemo_sk` int(11) DEFAULT NULL, +`ws_bill_hdemo_sk` int(11) DEFAULT NULL, +`ws_bill_addr_sk` int(11) DEFAULT NULL, +`ws_ship_customer_sk` int(11) DEFAULT NULL, +`ws_ship_cdemo_sk` int(11) DEFAULT NULL, +`ws_ship_hdemo_sk` int(11) DEFAULT NULL, +`ws_ship_addr_sk` int(11) DEFAULT NULL, +`ws_web_page_sk` int(11) DEFAULT NULL, +`ws_web_site_sk` int(11) DEFAULT NULL, +`ws_ship_mode_sk` int(11) DEFAULT NULL, +`ws_warehouse_sk` int(11) DEFAULT NULL, +`ws_promo_sk` int(11) DEFAULT NULL, +`ws_order_number` int(11) NOT NULL, +`ws_quantity` int(11) DEFAULT NULL, +`ws_wholesale_cost` decimal(7,2) DEFAULT NULL, +`ws_list_price` decimal(7,2) DEFAULT NULL, +`ws_sales_price` decimal(7,2) DEFAULT NULL, +`ws_ext_discount_amt` decimal(7,2) DEFAULT NULL, +`ws_ext_sales_price` decimal(7,2) DEFAULT NULL, +`ws_ext_wholesale_cost` decimal(7,2) DEFAULT NULL, +`ws_ext_list_price` decimal(7,2) DEFAULT NULL, +`ws_ext_tax` decimal(7,2) DEFAULT NULL, +`ws_coupon_amt` decimal(7,2) DEFAULT NULL, +`ws_ext_ship_cost` decimal(7,2) DEFAULT NULL, +`ws_net_paid` decimal(7,2) DEFAULT NULL, +`ws_net_paid_inc_tax` decimal(7,2) DEFAULT NULL, +`ws_net_paid_inc_ship` decimal(7,2) DEFAULT NULL, +`ws_net_paid_inc_ship_tax` decimal(7,2) DEFAULT NULL, +`ws_net_profit` decimal(7,2) DEFAULT NULL, +PRIMARY KEY (`ws_item_sk`,`ws_order_number`) /*T![clustered_index] NONCLUSTERED */ +); +desc format='brief' with year_total as ( +select c_customer_id customer_id +,c_first_name customer_first_name +,c_last_name customer_last_name +,c_preferred_cust_flag customer_preferred_cust_flag +,c_birth_country customer_birth_country +,c_login customer_login +,c_email_address customer_email_address +,d_year dyear +,sum(ss_ext_list_price-ss_ext_discount_amt) year_total +,'s' sale_type +from customer +,store_sales +,date_dim +where c_customer_sk = ss_customer_sk +and ss_sold_date_sk = d_date_sk +group by c_customer_id +,c_first_name +,c_last_name +,c_preferred_cust_flag +,c_birth_country +,c_login +,c_email_address +,d_year +union all +select c_customer_id customer_id +,c_first_name customer_first_name +,c_last_name customer_last_name +,c_preferred_cust_flag customer_preferred_cust_flag +,c_birth_country customer_birth_country +,c_login customer_login +,c_email_address customer_email_address +,d_year dyear +,sum(ws_ext_list_price-ws_ext_discount_amt) year_total +,'w' sale_type +from customer +,web_sales +,date_dim +where c_customer_sk = ws_bill_customer_sk +and ws_sold_date_sk = d_date_sk +group by c_customer_id +,c_first_name +,c_last_name +,c_preferred_cust_flag +,c_birth_country +,c_login +,c_email_address +,d_year +) +select +t_s_secyear.customer_id +,t_s_secyear.customer_first_name +,t_s_secyear.customer_last_name +,t_s_secyear.customer_email_address +from year_total t_s_firstyear +,year_total t_s_secyear +,year_total t_w_firstyear +,year_total t_w_secyear +where t_s_secyear.customer_id = t_s_firstyear.customer_id +and t_s_firstyear.customer_id = t_w_secyear.customer_id +and t_s_firstyear.customer_id = t_w_firstyear.customer_id +and t_s_firstyear.sale_type = 's' +and t_w_firstyear.sale_type = 'w' +and t_s_secyear.sale_type = 's' +and t_w_secyear.sale_type = 'w' +and t_s_firstyear.dyear = 2001 +and t_s_secyear.dyear = 2001+1 +and t_w_firstyear.dyear = 2001 +and t_w_secyear.dyear = 2001+1 +and t_s_firstyear.year_total > 0 +and t_w_firstyear.year_total > 0 +and case when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / t_w_firstyear.year_total else 0.0 end +> case when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / t_s_firstyear.year_total else 0.0 end +order by t_s_secyear.customer_id +,t_s_secyear.customer_first_name +,t_s_secyear.customer_last_name +,t_s_secyear.customer_email_address +limit 100; +id estRows task access object operator info +TopN 40.00 root Column#180, Column#181, Column#182, Column#186, offset:0, count:100 +└─HashJoin 40.00 root inner join, equal:[eq(Column#170, Column#200)], other cond:gt(case(gt(Column#198, 0), div(Column#208, Column#198), 0.0), case(gt(Column#178, 0), div(Column#188, Column#178), 0.0)) + ├─Selection(Build) 40.00 root eq(Column#207, 2002), eq(Column#209, "w"), not(isnull(Column#200)) + │ └─CTEFullScan 50.00 root CTE:t_w_secyear data:CTE_0 + └─HashJoin(Probe) 40.00 root inner join, equal:[eq(Column#170, Column#190)] + ├─Selection(Build) 40.00 root eq(Column#197, 2001), eq(Column#199, "w"), gt(Column#198, 0), not(isnull(Column#190)) + │ └─CTEFullScan 50.00 root CTE:t_w_firstyear data:CTE_0 + └─HashJoin(Probe) 40.00 root inner join, equal:[eq(Column#170, Column#180)] + ├─Selection(Build) 40.00 root eq(Column#187, 2002), eq(Column#189, "s"), not(isnull(Column#180)) + │ └─CTEFullScan 50.00 root CTE:t_s_secyear data:CTE_0 + └─Selection(Probe) 40.00 root eq(Column#177, 2001), eq(Column#179, "s"), gt(Column#178, 0), not(isnull(Column#170)) + └─CTEFullScan 50.00 root CTE:t_s_firstyear data:CTE_0 +CTE_0 50.00 root Non-Recursive CTE +└─Union(Seed Part) 50.00 root + ├─Projection 25.00 root test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.date_dim.d_year, Column#73, s->Column#169 + │ └─Selection 25.00 root or(or(and(1, and(eq(test.date_dim.d_year, 2001), gt(Column#73, 0))), and(1, eq(test.date_dim.d_year, 2002))), 0) + │ └─HashAgg 31.25 root group by:Column#233, Column#234, Column#235, Column#236, Column#237, Column#238, Column#239, Column#240, funcs:sum(Column#224)->Column#73, funcs:firstrow(Column#225)->test.customer.c_customer_id, funcs:firstrow(Column#226)->test.customer.c_first_name, funcs:firstrow(Column#227)->test.customer.c_last_name, funcs:firstrow(Column#228)->test.customer.c_preferred_cust_flag, funcs:firstrow(Column#229)->test.customer.c_birth_country, funcs:firstrow(Column#230)->test.customer.c_login, funcs:firstrow(Column#231)->test.customer.c_email_address, funcs:firstrow(Column#232)->test.date_dim.d_year + │ └─Projection 31.25 root minus(test.store_sales.ss_ext_list_price, test.store_sales.ss_ext_discount_amt)->Column#224, test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.date_dim.d_year, test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.date_dim.d_year + │ └─Projection 31.25 root test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.store_sales.ss_ext_discount_amt, test.store_sales.ss_ext_list_price, test.date_dim.d_year + │ └─IndexJoin 31.25 root inner join, inner:IndexLookUp, outer key:test.store_sales.ss_customer_sk, inner key:test.customer.c_customer_sk, equal cond:eq(test.store_sales.ss_customer_sk, test.customer.c_customer_sk) + │ ├─HashJoin(Build) 25.00 root inner join, equal:[eq(test.date_dim.d_date_sk, test.store_sales.ss_sold_date_sk)] + │ │ ├─TableReader(Build) 20.00 root data:Selection + │ │ │ └─Selection 20.00 cop[tikv] or(and(1, eq(test.date_dim.d_year, 2001)), or(and(1, eq(test.date_dim.d_year, 2002)), 0)) + │ │ │ └─TableFullScan 10000.00 cop[tikv] table:date_dim keep order:false, stats:pseudo + │ │ └─TableReader(Probe) 9980.01 root data:Selection + │ │ └─Selection 9980.01 cop[tikv] not(isnull(test.store_sales.ss_customer_sk)), not(isnull(test.store_sales.ss_sold_date_sk)) + │ │ └─TableFullScan 10000.00 cop[tikv] table:store_sales keep order:false, stats:pseudo + │ └─IndexLookUp(Probe) 1.00 root + │ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:customer, index:PRIMARY(c_customer_sk) range: decided by [eq(test.customer.c_customer_sk, test.store_sales.ss_customer_sk)], keep order:false, stats:pseudo + │ └─TableRowIDScan(Probe) 1.00 cop[tikv] table:customer keep order:false, stats:pseudo + └─Projection 25.00 root test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.date_dim.d_year, Column#158, w->Column#169 + └─Selection 25.00 root or(0, or(and(1, and(eq(test.date_dim.d_year, 2001), gt(Column#158, 0))), and(1, eq(test.date_dim.d_year, 2002)))) + └─HashAgg 31.25 root group by:Column#250, Column#251, Column#252, Column#253, Column#254, Column#255, Column#256, Column#257, funcs:sum(Column#241)->Column#158, funcs:firstrow(Column#242)->test.customer.c_customer_id, funcs:firstrow(Column#243)->test.customer.c_first_name, funcs:firstrow(Column#244)->test.customer.c_last_name, funcs:firstrow(Column#245)->test.customer.c_preferred_cust_flag, funcs:firstrow(Column#246)->test.customer.c_birth_country, funcs:firstrow(Column#247)->test.customer.c_login, funcs:firstrow(Column#248)->test.customer.c_email_address, funcs:firstrow(Column#249)->test.date_dim.d_year + └─Projection 31.25 root minus(test.web_sales.ws_ext_list_price, test.web_sales.ws_ext_discount_amt)->Column#241, test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.date_dim.d_year, test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.date_dim.d_year + └─Projection 31.25 root test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.web_sales.ws_ext_discount_amt, test.web_sales.ws_ext_list_price, test.date_dim.d_year + └─IndexJoin 31.25 root inner join, inner:IndexLookUp, outer key:test.web_sales.ws_bill_customer_sk, inner key:test.customer.c_customer_sk, equal cond:eq(test.web_sales.ws_bill_customer_sk, test.customer.c_customer_sk) + ├─HashJoin(Build) 25.00 root inner join, equal:[eq(test.date_dim.d_date_sk, test.web_sales.ws_sold_date_sk)] + │ ├─TableReader(Build) 20.00 root data:Selection + │ │ └─Selection 20.00 cop[tikv] or(0, or(and(1, eq(test.date_dim.d_year, 2001)), and(1, eq(test.date_dim.d_year, 2002)))) + │ │ └─TableFullScan 10000.00 cop[tikv] table:date_dim keep order:false, stats:pseudo + │ └─TableReader(Probe) 9980.01 root data:Selection + │ └─Selection 9980.01 cop[tikv] not(isnull(test.web_sales.ws_bill_customer_sk)), not(isnull(test.web_sales.ws_sold_date_sk)) + │ └─TableFullScan 10000.00 cop[tikv] table:web_sales keep order:false, stats:pseudo + └─IndexLookUp(Probe) 1.00 root + ├─IndexRangeScan(Build) 1.00 cop[tikv] table:customer, index:PRIMARY(c_customer_sk) range: decided by [eq(test.customer.c_customer_sk, test.web_sales.ws_bill_customer_sk)], keep order:false, stats:pseudo + └─TableRowIDScan(Probe) 1.00 cop[tikv] table:customer keep order:false, stats:pseudo diff --git a/cmd/explaintest/r/explain_easy.result b/cmd/explaintest/r/explain_easy.result index e3d082d5c7542..766b8760a2faf 100644 --- a/cmd/explaintest/r/explain_easy.result +++ b/cmd/explaintest/r/explain_easy.result @@ -433,10 +433,10 @@ IndexReader 10.00 root index:IndexRangeScan └─IndexRangeScan 10.00 cop[tikv] table:t, index:idx(a, b) range:[1,1], keep order:false, stats:pseudo explain format = 'brief' select * from t where a = 1 and a = 2; id estRows task access object operator info -TableDual 8000.00 root rows:0 +TableDual 0.00 root rows:0 explain format = 'brief' select * from t where b = 1 and b = 2; id estRows task access object operator info -TableDual 8000.00 root rows:0 +TableDual 0.00 root rows:0 explain format = 'brief' select * from t t1 join t t2 where t1.b = t2.b and t2.b is null; id estRows task access object operator info Projection 0.00 root test.t.a, test.t.b, test.t.a, test.t.b @@ -458,7 +458,7 @@ drop table if exists t; create table t(a bigint primary key); explain format = 'brief' select * from t where a = 1 and a = 2; id estRows task access object operator info -TableDual 8000.00 root rows:0 +TableDual 0.00 root rows:0 explain format = 'brief' select null or a > 1 from t; id estRows task access object operator info Projection 10000.00 root or(, gt(test.t.a, 1))->Column#2 @@ -506,17 +506,17 @@ PRIMARY KEY (`id`) explain format = 'brief' SELECT COUNT(1) FROM (SELECT COALESCE(b.region_name, '不详') region_name, SUM(a.registration_num) registration_num FROM (SELECT stat_date, show_date, region_id, 0 registration_num FROM test01 WHERE period = 1 AND stat_date >= 20191202 AND stat_date <= 20191202 UNION ALL SELECT stat_date, show_date, region_id, registration_num registration_num FROM test01 WHERE period = 1 AND stat_date >= 20191202 AND stat_date <= 20191202) a LEFT JOIN test02 b ON a.region_id = b.id WHERE registration_num > 0 AND a.stat_date >= '20191202' AND a.stat_date <= '20191202' GROUP BY a.stat_date , a.show_date , COALESCE(b.region_name, '不详') ) JLS; id estRows task access object operator info StreamAgg 1.00 root funcs:count(1)->Column#22 -└─HashAgg 8000.00 root group by:Column#32, Column#33, Column#34, funcs:count(1)->Column#31 - └─Projection 10000.01 root Column#14, Column#15, coalesce(test.test02.region_name, 不详)->Column#34 - └─HashJoin 10000.01 root left outer join, equal:[eq(Column#16, test.test02.id)] - ├─TableReader(Build) 10000.00 root data:TableFullScan - │ └─TableFullScan 10000.00 cop[tikv] table:b keep order:false, stats:pseudo - └─Union(Probe) 8000.01 root - ├─TableDual 8000.00 root rows:0 - └─Projection 0.01 root test.test01.stat_date, test.test01.show_date, test.test01.region_id - └─TableReader 0.01 root data:Selection - └─Selection 0.01 cop[tikv] eq(test.test01.period, 1), ge(test.test01.stat_date, 20191202), gt(cast(test.test01.registration_num, bigint(20) BINARY), 0), le(test.test01.stat_date, 20191202) - └─TableFullScan 10000.00 cop[tikv] table:test01 keep order:false, stats:pseudo +└─HashAgg 1.00 root group by:Column#32, Column#33, Column#34, funcs:count(1)->Column#31 + └─Projection 0.01 root Column#14, Column#15, coalesce(test.test02.region_name, 不详)->Column#34 + └─IndexJoin 0.01 root left outer join, inner:TableReader, outer key:Column#16, inner key:test.test02.id, equal cond:eq(Column#16, test.test02.id) + ├─Union(Build) 0.01 root + │ ├─TableDual 0.00 root rows:0 + │ └─Projection 0.01 root test.test01.stat_date, test.test01.show_date, test.test01.region_id + │ └─TableReader 0.01 root data:Selection + │ └─Selection 0.01 cop[tikv] eq(test.test01.period, 1), ge(test.test01.stat_date, 20191202), gt(cast(test.test01.registration_num, bigint(20) BINARY), 0), le(test.test01.stat_date, 20191202) + │ └─TableFullScan 10000.00 cop[tikv] table:test01 keep order:false, stats:pseudo + └─TableReader(Probe) 1.00 root data:TableRangeScan + └─TableRangeScan 1.00 cop[tikv] table:b range: decided by [Column#16], keep order:false, stats:pseudo drop table if exists t; create table t(a int, nb int not null, nc int not null); explain format = 'brief' select ifnull(a, 0) from t; diff --git a/cmd/explaintest/r/explain_generate_column_substitute.result b/cmd/explaintest/r/explain_generate_column_substitute.result index 5d598e82ebe74..37976d6005dca 100644 --- a/cmd/explaintest/r/explain_generate_column_substitute.result +++ b/cmd/explaintest/r/explain_generate_column_substitute.result @@ -447,14 +447,14 @@ StreamAgg 4.80 root group by:upper(test.t.b), funcs:max(upper(test.t.b))->Colum └─IndexFullScan 6.00 cop[tikv] table:t, index:expression_index_2(upper(`b`)) keep order:true desc format = 'brief' select count(upper(b)) from t use index() group by upper(b); id estRows task access object operator info -HashAgg 6.00 root group by:Column#11, funcs:count(Column#10)->Column#7 -└─Projection 6.00 root upper(test.t.b)->Column#10, upper(test.t.b)->Column#11 +HashAgg 6.00 root group by:Column#9, funcs:count(Column#8)->Column#7 +└─Projection 6.00 root upper(test.t.b)->Column#8, upper(test.t.b)->Column#9 └─TableReader 6.00 root data:TableFullScan └─TableFullScan 6.00 cop[tikv] table:t keep order:false desc format = 'brief' select max(upper(b)) from t use index() group by upper(b); id estRows task access object operator info -HashAgg 6.00 root group by:Column#11, funcs:max(Column#10)->Column#7 -└─Projection 6.00 root upper(test.t.b)->Column#10, upper(test.t.b)->Column#11 +HashAgg 6.00 root group by:Column#9, funcs:max(Column#8)->Column#7 +└─Projection 6.00 root upper(test.t.b)->Column#8, upper(test.t.b)->Column#9 └─TableReader 6.00 root data:TableFullScan └─TableFullScan 6.00 cop[tikv] table:t keep order:false drop table if exists t; @@ -617,3 +617,20 @@ select (select t2.c_str from t2 where t2.c_int = 3 order by t2.c_str) x from t1; x unruffled chaplygin drop table t1,t2; +drop table if exists t1, t2; +create table t1 (c_int int, c_decimal decimal(12, 6), primary key (c_int) nonclustered,key((c_int + 1))) ; +create table t2 like t1; +explain format = 'brief' select /*+ agg_to_cop() */ * from t1 where c_decimal in (select c_decimal from t2 where t2.c_int + 1 = 8 + 1); +id estRows task access object operator info +HashJoin 9.99 root inner join, equal:[eq(test.t2.c_decimal, test.t1.c_decimal)] +├─HashAgg(Build) 7.99 root group by:test.t2.c_decimal, funcs:firstrow(test.t2.c_decimal)->test.t2.c_decimal +│ └─IndexLookUp 7.99 root +│ ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t2, index:expression_index(`c_int` + 1) range:[9,9], keep order:false, stats:pseudo +│ └─HashAgg(Probe) 7.99 cop[tikv] group by:test.t2.c_decimal, +│ └─Selection 9.99 cop[tikv] not(isnull(test.t2.c_decimal)) +│ └─TableRowIDScan 10.00 cop[tikv] table:t2 keep order:false, stats:pseudo +└─TableReader(Probe) 9990.00 root data:Selection + └─Selection 9990.00 cop[tikv] not(isnull(test.t1.c_decimal)) + └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +drop table t1; +drop table t2; diff --git a/cmd/explaintest/r/generated_columns.result b/cmd/explaintest/r/generated_columns.result index fa5d4f79b5906..a937079129e11 100644 --- a/cmd/explaintest/r/generated_columns.result +++ b/cmd/explaintest/r/generated_columns.result @@ -1,4 +1,3 @@ -set @@tidb_partition_prune_mode='dynamic'; DROP TABLE IF EXISTS person; CREATE TABLE person ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, @@ -90,6 +89,8 @@ Projection 5.00 root test.sgc1.j1, test.sgc1.j2, test.sgc1.a, test.sgc1.b, test └─TableReader(Probe) 5.00 root data:Selection └─Selection 5.00 cop[tikv] not(isnull(test.sgc1.a)) └─TableFullScan 5.00 cop[tikv] table:sgc1 keep order:false +set @old_prune_mode = @@tidb_partition_prune_mode; +set @@tidb_partition_prune_mode='static'; DROP TABLE IF EXISTS sgc3; CREATE TABLE sgc3 ( j JSON, @@ -136,6 +137,31 @@ PartitionUnion 23263.33 root └─TableReader 3323.33 root data:Selection └─Selection 3323.33 cop[tikv] lt(test.sgc3.a, 7) └─TableFullScan 10000.00 cop[tikv] table:sgc3, partition:max keep order:false, stats:pseudo +set @@tidb_partition_prune_mode='dynamic'; +DROP TABLE sgc3; +CREATE TABLE sgc3 ( +j JSON, +a INT AS (JSON_EXTRACT(j, "$.a")) STORED +) +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (1), +PARTITION p1 VALUES LESS THAN (2), +PARTITION p2 VALUES LESS THAN (3), +PARTITION p3 VALUES LESS THAN (4), +PARTITION p4 VALUES LESS THAN (5), +PARTITION p5 VALUES LESS THAN (6), +PARTITION max VALUES LESS THAN MAXVALUE); +EXPLAIN format = 'brief' SELECT * FROM sgc3 WHERE a <= 1; +id estRows task access object operator info +TableReader 3323.33 root partition:p0,p1 data:Selection +└─Selection 3323.33 cop[tikv] le(test.sgc3.a, 1) + └─TableFullScan 10000.00 cop[tikv] table:sgc3 keep order:false, stats:pseudo +EXPLAIN format = 'brief' SELECT * FROM sgc3 WHERE a < 7; +id estRows task access object operator info +TableReader 3323.33 root partition:all data:Selection +└─Selection 3323.33 cop[tikv] lt(test.sgc3.a, 7) + └─TableFullScan 10000.00 cop[tikv] table:sgc3 keep order:false, stats:pseudo +set @@tidb_partition_prune_mode = @old_prune_mode; DROP TABLE IF EXISTS t1; CREATE TABLE t1(a INT, b INT AS (a+1) VIRTUAL, c INT AS (b+1) VIRTUAL, d INT AS (c+1) VIRTUAL, KEY(b), INDEX IDX(c, d)); INSERT INTO t1 (a) VALUES (0); diff --git a/cmd/explaintest/r/imdbload.result b/cmd/explaintest/r/imdbload.result new file mode 100644 index 0000000000000..c3ee5badab7e6 --- /dev/null +++ b/cmd/explaintest/r/imdbload.result @@ -0,0 +1,370 @@ +CREATE DATABASE IF NOT EXISTS `imdbload`; +USE `imdbload`; +CREATE TABLE `kind_type` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`kind` varchar(15) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `kind_type_kind` (`kind`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=11; +CREATE TABLE `keyword` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`keyword` text NOT NULL, +`phonetic_code` varchar(5) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `keyword_idx_keyword` (`keyword`(5)), +KEY `keyword_idx_pcode` (`phonetic_code`), +KEY `itest` (`phonetic_code`,`keyword`(20)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=236629; +CREATE TABLE `company_type` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`kind` varchar(32) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `company_type_kind` (`kind`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6; +CREATE TABLE `comp_cast_type` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`kind` varchar(32) NOT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `comp_cast_type_kind` (`kind`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6; +CREATE TABLE `complete_cast` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`movie_id` int(11) DEFAULT NULL, +`subject_id` int(11) NOT NULL, +`status_id` int(11) NOT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `complete_cast_idx_mid` (`movie_id`), +KEY `complete_cast_idx_sid` (`subject_id`), +KEY `itest` (`movie_id`,`subject_id`,`status_id`), +KEY `itest2` (`subject_id`,`status_id`,`movie_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=135088; +CREATE TABLE `info_type` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`info` varchar(32) NOT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `info_type_info` (`info`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=115; +CREATE TABLE `link_type` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`link` varchar(32) NOT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `link_type_link` (`link`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=20; +CREATE TABLE `company_name` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`name` text NOT NULL, +`country_code` varchar(255) DEFAULT NULL, +`imdb_id` int(11) DEFAULT NULL, +`name_pcode_nf` varchar(5) DEFAULT NULL, +`name_pcode_sf` varchar(5) DEFAULT NULL, +`md5sum` varchar(32) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `company_name_idx_name` (`name`(6)), +KEY `company_name_idx_ccode` (`country_code`(5)), +KEY `company_name_idx_imdb_id` (`imdb_id`), +KEY `company_name_idx_pcodenf` (`name_pcode_nf`), +KEY `company_name_idx_pcodesf` (`name_pcode_sf`), +KEY `company_name_idx_md5` (`md5sum`(5)), +KEY `itest` (`country_code`,`name_pcode_nf`,`name_pcode_sf`), +KEY `itest2` (`name_pcode_sf`,`country_code`,`name`(20)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=362133; +CREATE TABLE `role_type` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`role` varchar(32) NOT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `role_type_role` (`role`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=14; +CREATE TABLE `movie_link` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`movie_id` int(11) NOT NULL, +`linked_movie_id` int(11) NOT NULL, +`link_type_id` int(11) NOT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `movie_link_idx_mid` (`movie_id`), +KEY `movie_link_idx_lmid` (`linked_movie_id`), +KEY `movie_link_idx_ltypeid` (`link_type_id`), +KEY `itest` (`link_type_id`,`linked_movie_id`,`movie_id`), +KEY `itest2` (`movie_id`,`link_type_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=2585152; +CREATE TABLE `aka_title` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`movie_id` int(11) NOT NULL, +`title` text NOT NULL, +`imdb_index` varchar(12) DEFAULT NULL, +`kind_id` int(11) NOT NULL, +`production_year` int(11) DEFAULT NULL, +`phonetic_code` varchar(5) DEFAULT NULL, +`episode_of_id` int(11) DEFAULT NULL, +`season_nr` int(11) DEFAULT NULL, +`episode_nr` int(11) DEFAULT NULL, +`note` text DEFAULT NULL, +`md5sum` varchar(32) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `aka_title_idx_movieid` (`movie_id`), +KEY `aka_title_idx_title` (`title`(10)), +KEY `aka_title_idx_kindid` (`kind_id`), +KEY `aka_title_idx_year` (`production_year`), +KEY `aka_title_idx_pcode` (`phonetic_code`), +KEY `aka_title_idx_epof` (`episode_of_id`), +KEY `aka_title_idx_md5` (`md5sum`(5)), +KEY `itest` (`phonetic_code`,`production_year`,`kind_id`,`note`(20)), +KEY `itest2` (`episode_of_id`,`season_nr`,`episode_nr`,`production_year`), +KEY `itest3` (`episode_of_id`,`note`(20),`production_year`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=562493; +CREATE TABLE `aka_name` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`person_id` int(11) NOT NULL, +`name` text NOT NULL, +`imdb_index` varchar(12) DEFAULT NULL, +`name_pcode_cf` varchar(5) DEFAULT NULL, +`name_pcode_nf` varchar(5) DEFAULT NULL, +`surname_pcode` varchar(5) DEFAULT NULL, +`md5sum` varchar(32) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `aka_name_idx_person` (`person_id`), +KEY `aka_name_idx_name` (`name`(6)), +KEY `aka_name_idx_pcodecf` (`name_pcode_cf`), +KEY `aka_name_idx_pcodenf` (`name_pcode_nf`), +KEY `aka_name_idx_pcode` (`surname_pcode`), +KEY `aka_name_idx_md5` (`md5sum`(5)), +KEY `itest` (`name_pcode_cf`,`name_pcode_nf`,`surname_pcode`), +KEY `itest2` (`surname_pcode`,`name_pcode_cf`,`name_pcode_nf`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1312275; +CREATE TABLE `movie_keyword` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`movie_id` int(11) NOT NULL, +`keyword_id` int(11) NOT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `movie_keyword_idx_mid` (`movie_id`), +KEY `movie_keyword_idx_keywordid` (`keyword_id`), +KEY `itest` (`movie_id`,`keyword_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=7480089; +CREATE TABLE `movie_companies` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`movie_id` int(11) NOT NULL, +`company_id` int(11) NOT NULL, +`company_type_id` int(11) NOT NULL, +`note` text DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `movie_companies_idx_mid` (`movie_id`), +KEY `movie_companies_idx_cid` (`company_id`), +KEY `movie_companies_idx_ctypeid` (`company_type_id`), +KEY `itest` (`movie_id`,`company_type_id`,`company_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4958298; +CREATE TABLE `char_name` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`name` text NOT NULL, +`imdb_index` varchar(12) DEFAULT NULL, +`imdb_id` int(11) DEFAULT NULL, +`name_pcode_nf` varchar(5) DEFAULT NULL, +`surname_pcode` varchar(5) DEFAULT NULL, +`md5sum` varchar(32) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `char_name_idx_name` (`name`(6)), +KEY `char_name_idx_imdb_id` (`imdb_id`), +KEY `char_name_idx_pcodenf` (`name_pcode_nf`), +KEY `char_name_idx_pcode` (`surname_pcode`), +KEY `char_name_idx_md5` (`md5sum`(5)), +KEY `itest` (`name_pcode_nf`,`surname_pcode`,`imdb_id`), +KEY `itest2` (`imdb_index`,`surname_pcode`,`name_pcode_nf`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4314866; +CREATE TABLE `title` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`title` text NOT NULL, +`imdb_index` varchar(12) DEFAULT NULL, +`kind_id` int(11) NOT NULL, +`production_year` int(11) DEFAULT NULL, +`imdb_id` int(11) DEFAULT NULL, +`phonetic_code` varchar(5) DEFAULT NULL, +`episode_of_id` int(11) DEFAULT NULL, +`season_nr` int(11) DEFAULT NULL, +`episode_nr` int(11) DEFAULT NULL, +`series_years` varchar(49) DEFAULT NULL, +`md5sum` varchar(32) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `title_idx_title` (`title`(10)), +KEY `title_idx_kindid` (`kind_id`), +KEY `title_idx_year` (`production_year`), +KEY `title_idx_imdb_id` (`imdb_id`), +KEY `title_idx_pcode` (`phonetic_code`), +KEY `title_idx_epof` (`episode_of_id`), +KEY `title_idx_season_nr` (`season_nr`), +KEY `title_idx_episode_nr` (`episode_nr`), +KEY `title_idx_md5` (`md5sum`(5)), +KEY `itest` (`episode_of_id`,`season_nr`,`episode_nr`,`imdb_index`,`phonetic_code`), +KEY `itest2` (`kind_id`,`production_year`,`imdb_id`,`title`(20)), +KEY `itest3` (`phonetic_code`,`production_year`,`kind_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4736511; +CREATE TABLE `name` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`name` text NOT NULL, +`imdb_index` varchar(12) DEFAULT NULL, +`imdb_id` int(11) DEFAULT NULL, +`gender` varchar(1) DEFAULT NULL, +`name_pcode_cf` varchar(5) DEFAULT NULL, +`name_pcode_nf` varchar(5) DEFAULT NULL, +`surname_pcode` varchar(5) DEFAULT NULL, +`md5sum` varchar(32) DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `name_idx_name` (`name`(6)), +KEY `name_idx_imdb_id` (`imdb_id`), +KEY `name_idx_gender` (`gender`), +KEY `name_idx_pcodecf` (`name_pcode_cf`), +KEY `name_idx_pcodenf` (`name_pcode_nf`), +KEY `name_idx_pcode` (`surname_pcode`), +KEY `name_idx_md5` (`md5sum`(5)), +KEY `itest` (`name_pcode_cf`,`name_pcode_nf`,`surname_pcode`,`imdb_index`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6379742; +CREATE TABLE `person_info` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`person_id` int(11) NOT NULL, +`info_type_id` int(11) NOT NULL, +`info` text NOT NULL, +`note` text DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `person_info_idx_pid` (`person_id`), +KEY `person_info_idx_itypeid` (`info_type_id`), +KEY `itest` (`person_id`,`info_type_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4130209; +CREATE TABLE `movie_info` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`movie_id` int(11) NOT NULL, +`info_type_id` int(11) NOT NULL, +`info` text NOT NULL, +`note` text DEFAULT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `movie_info_idx_mid` (`movie_id`), +KEY `movie_info_idx_infotypeid` (`info_type_id`), +KEY `movie_info_idx_info` (`info`(10)), +KEY `itest` (`movie_id`,`info_type_id`,`info`(20)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=29774986; +CREATE TABLE `cast_info` ( +`id` int(11) NOT NULL AUTO_INCREMENT, +`person_id` int(11) NOT NULL, +`movie_id` int(11) NOT NULL, +`person_role_id` int(11) DEFAULT NULL, +`note` text DEFAULT NULL, +`nr_order` int(11) DEFAULT NULL, +`role_id` int(11) NOT NULL, +PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, +KEY `cast_info_idx_pid` (`person_id`), +KEY `cast_info_idx_mid` (`movie_id`), +KEY `cast_info_idx_cid` (`person_role_id`), +KEY `cast_info_idx_rid` (`role_id`), +KEY `itest` (`person_id`,`movie_id`,`person_role_id`), +KEY `itest2` (`nr_order`,`person_role_id`,`note`(20)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=63475837; +load stats 's/imdbload_stats/kind_type.json'; +load stats 's/imdbload_stats/keyword.json'; +load stats 's/imdbload_stats/company_type.json'; +load stats 's/imdbload_stats/comp_cast_type.json'; +load stats 's/imdbload_stats/complete_cast.json'; +load stats 's/imdbload_stats/info_type.json'; +load stats 's/imdbload_stats/link_type.json'; +load stats 's/imdbload_stats/company_name.json'; +load stats 's/imdbload_stats/role_type.json'; +load stats 's/imdbload_stats/movie_link.json'; +load stats 's/imdbload_stats/aka_title.json'; +load stats 's/imdbload_stats/aka_name.json'; +load stats 's/imdbload_stats/movie_keyword.json'; +load stats 's/imdbload_stats/movie_companies.json'; +load stats 's/imdbload_stats/char_name.json'; +load stats 's/imdbload_stats/title.json'; +load stats 's/imdbload_stats/name.json'; +load stats 's/imdbload_stats/person_info.json'; +load stats 's/imdbload_stats/movie_info.json'; +load stats 's/imdbload_stats/cast_info.json'; +explain select * from char_name where ((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436')); +id estRows task access object operator info +IndexLookUp_10 1005030.94 root +├─IndexRangeScan_8(Build) 1005030.94 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:["I" -inf,"I" "E436"), ["L" -inf,"L" "E436"), keep order:false +└─TableRowIDScan_9(Probe) 1005030.94 cop[tikv] table:char_name keep order:false +explain select * from char_name use index (itest2) where ((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436')); +id estRows task access object operator info +IndexLookUp_7 1005030.94 root +├─IndexRangeScan_5(Build) 1005030.94 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:["I" -inf,"I" "E436"), ["L" -inf,"L" "E436"), keep order:false +└─TableRowIDScan_6(Probe) 1005030.94 cop[tikv] table:char_name keep order:false +trace plan target = 'estimation' select * from char_name where ((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436')); +CE_trace +[{"table_name":"char_name","type":"Column Stats-Point","expr":"((imdb_index = 'I'))","row_count":0},{"table_name":"char_name","type":"Column Stats-Point","expr":"((imdb_index = 'L'))","row_count":0},{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436'))","row_count":0},{"table_name":"char_name","type":"Index Stats-Range","expr":"((surname_pcode < 'E436'))","row_count":1005030},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`or`(`and`(`eq`(imdbload.char_name.imdb_index, 'I'), `lt`(imdbload.char_name.surname_pcode, 'E436')), `and`(`eq`(imdbload.char_name.imdb_index, 'L'), `lt`(imdbload.char_name.surname_pcode, 'E436')))","row_count":804024}] + +explain select * from char_name where ((imdb_index = 'V') and (surname_pcode < 'L3416')); +id estRows task access object operator info +IndexLookUp_10 0.00 root +├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:["V" -inf,"V" "L3416"), keep order:false +└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:char_name keep order:false +explain select * from char_name where imdb_index > 'V'; +id estRows task access object operator info +IndexLookUp_10 0.00 root +├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("V",+inf], keep order:false +└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:char_name keep order:false +trace plan target = 'estimation' select * from char_name where imdb_index > 'V'; +CE_trace +[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'V' and true))","row_count":0},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'V' and true))","row_count":0},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.char_name.imdb_index, 'V')","row_count":0}] + +explain select * from movie_companies where company_type_id > 2; +id estRows task access object operator info +IndexLookUp_10 0.00 root +├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:movie_companies, index:movie_companies_idx_ctypeid(company_type_id) range:(2,+inf], keep order:false +└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:movie_companies keep order:false +trace plan target = 'estimation' select * from movie_companies where company_type_id > 2; +CE_trace +[{"table_name":"movie_companies","type":"Column Stats-Range","expr":"((company_type_id > 2 and true))","row_count":0},{"table_name":"movie_companies","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4958296},{"table_name":"movie_companies","type":"Index Stats-Range","expr":"((company_type_id > 2 and true))","row_count":0},{"table_name":"movie_companies","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.movie_companies.company_type_id, 2)","row_count":0}] + +explain select * from char_name where imdb_index > 'I' and imdb_index < 'II'; +id estRows task access object operator info +IndexLookUp_10 0.00 root +├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("I","II"), keep order:false +└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:char_name keep order:false +trace plan target = 'estimation' select * from char_name where imdb_index > 'I' and imdb_index < 'II'; +CE_trace +[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'I' and imdb_index < 'II'))","row_count":0},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'I' and imdb_index < 'II'))","row_count":0},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`and`(`gt`(imdbload.char_name.imdb_index, 'I'), `lt`(imdbload.char_name.imdb_index, 'II'))","row_count":0}] + +explain select * from char_name where imdb_index > 'I'; +id estRows task access object operator info +IndexLookUp_10 0.00 root +├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("I",+inf], keep order:false +└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:char_name keep order:false +trace plan target = 'estimation' select * from char_name where imdb_index > 'I'; +CE_trace +[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'I' and true))","row_count":0},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'I' and true))","row_count":0},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.char_name.imdb_index, 'I')","row_count":0}] + +explain select * from cast_info where nr_order < -2068070866; +id estRows task access object operator info +IndexLookUp_10 83406.52 root +├─IndexRangeScan_8(Build) 83406.52 cop[tikv] table:cast_info, index:itest2(nr_order, person_role_id, note) range:[-inf,-2068070866), keep order:false +└─TableRowIDScan_9(Probe) 83406.52 cop[tikv] table:cast_info keep order:false +explain select * from aka_title where kind_id = 5; +id estRows task access object operator info +IndexLookUp_10 34260.33 root +├─IndexRangeScan_8(Build) 34260.33 cop[tikv] table:aka_title, index:aka_title_idx_kindid(kind_id) range:[5,5], keep order:false +└─TableRowIDScan_9(Probe) 34260.33 cop[tikv] table:aka_title keep order:false +explain select * from aka_title where kind_id > 7; +id estRows task access object operator info +IndexLookUp_10 0.00 root +├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:aka_title, index:aka_title_idx_kindid(kind_id) range:(7,+inf], keep order:false +└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:aka_title keep order:false +trace plan target = 'estimation' select * from aka_title where kind_id > 7; +CE_trace +[{"table_name":"aka_title","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":528337},{"table_name":"aka_title","type":"Column Stats-Range","expr":"((kind_id > 7 and true))","row_count":0},{"table_name":"aka_title","type":"Index Stats-Range","expr":"((kind_id > 7 and true))","row_count":0},{"table_name":"aka_title","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.aka_title.kind_id, 7)","row_count":0}] + +explain select * from keyword where ((phonetic_code = 'R1652') and (keyword > 'ecg-monitor' and keyword < 'killers')); +id estRows task access object operator info +IndexLookUp_11 901.00 root +├─IndexRangeScan_8(Build) 901.00 cop[tikv] table:keyword, index:itest(phonetic_code, keyword) range:("R1652" "ecg-monitor","R1652" "killers"), keep order:false +└─Selection_10(Probe) 901.00 cop[tikv] gt(imdbload.keyword.keyword, "ecg-monitor"), lt(imdbload.keyword.keyword, "killers") + └─TableRowIDScan_9 901.00 cop[tikv] table:keyword keep order:false +trace plan target = 'estimation' select * from keyword where ((phonetic_code = 'R1652') and (keyword > 'ecg-monitor' and keyword < 'killers')); +CE_trace +[{"table_name":"keyword","type":"Column Stats-Point","expr":"((phonetic_code = 'R1652'))","row_count":23480},{"table_name":"keyword","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":236627},{"table_name":"keyword","type":"Column Stats-Range","expr":"((keyword > 'ecg-monitor' and keyword < 'killers'))","row_count":44075},{"table_name":"keyword","type":"Index Stats-Point","expr":"((phonetic_code = 'R1652'))","row_count":23480},{"table_name":"keyword","type":"Index Stats-Range","expr":"((keyword > 'ecg-monitor' and keyword < 'killers'))","row_count":44036},{"table_name":"keyword","type":"Index Stats-Range","expr":"((keyword >= 'ecg-m' and keyword <= 'kille'))","row_count":44036},{"table_name":"keyword","type":"Index Stats-Range","expr":"((phonetic_code = 'R1652') and (keyword > 'ecg-monitor' and keyword < 'killers'))","row_count":901},{"table_name":"keyword","type":"Table Stats-Expression-CNF","expr":"`and`(`eq`(imdbload.keyword.phonetic_code, 'R1652'), `and`(`gt`(imdbload.keyword.keyword, 'ecg-monitor'), `lt`(imdbload.keyword.keyword, 'killers')))","row_count":901}] + +explain select * from cast_info where (nr_order is null) and (person_role_id = 2) and (note >= '(key set pa: Florida'); +id estRows task access object operator info +IndexLookUp_11 144633.00 root +├─IndexRangeScan_8(Build) 144633.00 cop[tikv] table:cast_info, index:itest2(nr_order, person_role_id, note) range:[NULL 2 "(key set pa: Florida",NULL 2 +inf], keep order:false +└─Selection_10(Probe) 144633.00 cop[tikv] ge(imdbload.cast_info.note, "(key set pa: Florida") + └─TableRowIDScan_9 144633.00 cop[tikv] table:cast_info keep order:false +trace plan target = 'estimation' select * from cast_info where (nr_order is null) and (person_role_id = 2) and (note >= '(key set pa: Florida'); +CE_trace +[{"table_name":"cast_info","type":"Column Stats-Point","expr":"((nr_order is null))","row_count":45995275},{"table_name":"cast_info","type":"Column Stats-Point","expr":"((person_role_id = 2))","row_count":2089611},{"table_name":"cast_info","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":63475835},{"table_name":"cast_info","type":"Column Stats-Range","expr":"((note >= '(key set pa: Florida' and true))","row_count":14934328},{"table_name":"cast_info","type":"Index Stats-Point","expr":"((person_role_id = 2))","row_count":2089611},{"table_name":"cast_info","type":"Index Stats-Range","expr":"((nr_order is null) and (person_role_id = 2) and (note >= '(key set pa: Florida' and true))","row_count":144633},{"table_name":"cast_info","type":"Table Stats-Expression-CNF","expr":"`and`(`isnull`(imdbload.cast_info.nr_order), `and`(`eq`(imdbload.cast_info.person_role_id, 2), `ge`(imdbload.cast_info.note, '(key set pa: Florida')))","row_count":144633},{"table_name":"cast_info","type":"Table Stats-Expression-CNF","expr":"`eq`(imdbload.cast_info.person_role_id, 2)","row_count":2089611}] + diff --git a/cmd/explaintest/r/index_join.result b/cmd/explaintest/r/index_join.result index e4518acaa2ef4..771c95ad5e8b1 100644 --- a/cmd/explaintest/r/index_join.result +++ b/cmd/explaintest/r/index_join.result @@ -1,3 +1,4 @@ +use test; drop table if exists t1, t2; create table t1(a bigint, b bigint, index idx(a)); create table t2(a bigint, b bigint, index idx(a)); diff --git a/cmd/explaintest/r/index_merge.result b/cmd/explaintest/r/index_merge.result index 66f7bf237969b..5c7fece7d5161 100644 --- a/cmd/explaintest/r/index_merge.result +++ b/cmd/explaintest/r/index_merge.result @@ -653,11 +653,11 @@ c1 c2 c3 c4 c5 explain select /*+ use_index_merge(t1) */ * from t1 where (c1 < 10 or c2 < 10) and greatest(c1, c2, c4) = 1 order by 1; id estRows task access object operator info Sort_5 4433.77 root test.t1.c1 -└─IndexMerge_12 4433.77 root - ├─IndexRangeScan_8(Build) 3323.33 cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo - ├─IndexRangeScan_9(Build) 3323.33 cop[tikv] table:t1, index:c2(c2) range:[-inf,10), keep order:false, stats:pseudo - └─Selection_11(Probe) 4433.77 cop[tikv] eq(greatest(test.t1.c1, test.t1.c2, test.t1.c4), 1) - └─TableRowIDScan_10 5542.21 cop[tikv] table:t1 keep order:false, stats:pseudo +└─Selection_12 4433.77 root eq(greatest(test.t1.c1, test.t1.c2, test.t1.c4), 1) + └─IndexMerge_11 5542.21 root + ├─IndexRangeScan_8(Build) 3323.33 cop[tikv] table:t1, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo + ├─IndexRangeScan_9(Build) 3323.33 cop[tikv] table:t1, index:c2(c2) range:[-inf,10), keep order:false, stats:pseudo + └─TableRowIDScan_10(Probe) 5542.21 cop[tikv] table:t1 keep order:false, stats:pseudo select /*+ use_index_merge(t1) */ * from t1 where (c1 < 10 or c2 < 10) and greatest(c1, c2, c4) = 1 order by 1; c1 c2 c3 c4 c5 1 1 1 1 1 diff --git a/cmd/explaintest/r/select.result b/cmd/explaintest/r/select.result index 63bdb29e7d39b..9fe5dbc5c9a0f 100644 --- a/cmd/explaintest/r/select.result +++ b/cmd/explaintest/r/select.result @@ -354,6 +354,7 @@ Projection_3 1.00 root sysdate()->Column#1, sleep(1)->Column#2, sysdate()->Colu └─TableDual_4 1.00 root rows:1 drop table if exists th; set @@session.tidb_enable_table_partition = '1'; +set @@session.tidb_partition_prune_mode = 'static'; create table th (a int, b int) partition by hash(a) partitions 3; insert into th values (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8); insert into th values (-1,-1),(-2,-2),(-3,-3),(-4,-4),(-5,-5),(-6,-6),(-7,-7),(-8,-8); @@ -378,6 +379,21 @@ PartitionUnion_8 20000.00 root │ └─TableFullScan_9 10000.00 cop[tikv] table:th, partition:p1 keep order:false, stats:pseudo └─TableReader_12 10000.00 root data:TableFullScan_11 └─TableFullScan_11 10000.00 cop[tikv] table:th, partition:p2 keep order:false, stats:pseudo +set @@session.tidb_partition_prune_mode = 'dynamic'; +desc select * from th where a=-2; +id estRows task access object operator info +TableReader_7 10.00 root partition:p2 data:Selection_6 +└─Selection_6 10.00 cop[tikv] eq(test.th.a, -2) + └─TableFullScan_5 10000.00 cop[tikv] table:th keep order:false, stats:pseudo +desc select * from th; +id estRows task access object operator info +TableReader_5 10000.00 root partition:all data:TableFullScan_4 +└─TableFullScan_4 10000.00 cop[tikv] table:th keep order:false, stats:pseudo +desc select * from th partition (p2,p1); +id estRows task access object operator info +TableReader_5 10000.00 root partition:p1,p2 data:TableFullScan_4 +└─TableFullScan_4 10000.00 cop[tikv] table:th keep order:false, stats:pseudo +set @@session.tidb_partition_prune_mode = DEFAULT; drop table if exists t; create table t(a int, b int); explain format = 'brief' select a != any (select a from t t2) from t t1; diff --git a/cmd/explaintest/r/tpch.result b/cmd/explaintest/r/tpch.result index c4343259a81ff..855021af61533 100644 --- a/cmd/explaintest/r/tpch.result +++ b/cmd/explaintest/r/tpch.result @@ -392,7 +392,7 @@ id estRows task access object operator info StreamAgg 1.00 root funcs:sum(Column#20)->Column#18 └─TableReader 1.00 root data:StreamAgg └─StreamAgg 1.00 cop[tikv] funcs:sum(mul(tpch.lineitem.l_extendedprice, tpch.lineitem.l_discount))->Column#20 - └─Selection 3713857.91 cop[tikv] ge(tpch.lineitem.l_discount, 0.05), ge(tpch.lineitem.l_shipdate, 1994-01-01 00:00:00.000000), le(tpch.lineitem.l_discount, 0.07), lt(tpch.lineitem.l_quantity, 24), lt(tpch.lineitem.l_shipdate, 1995-01-01 00:00:00.000000) + └─Selection 3713858.13 cop[tikv] ge(tpch.lineitem.l_discount, 0.05), ge(tpch.lineitem.l_shipdate, 1994-01-01 00:00:00.000000), le(tpch.lineitem.l_discount, 0.07), lt(tpch.lineitem.l_quantity, 24), lt(tpch.lineitem.l_shipdate, 1995-01-01 00:00:00.000000) └─TableFullScan 300005811.00 cop[tikv] table:lineitem keep order:false /* Q7 Volume Shipping Query @@ -1100,8 +1100,8 @@ StreamAgg 1.00 root funcs:sum(Column#28)->Column#27 ├─TableReader(Build) 24323.12 root data:Selection │ └─Selection 24323.12 cop[tikv] ge(tpch.part.p_size, 1), or(and(eq(tpch.part.p_brand, "Brand#52"), and(in(tpch.part.p_container, "SM CASE", "SM BOX", "SM PACK", "SM PKG"), le(tpch.part.p_size, 5))), or(and(eq(tpch.part.p_brand, "Brand#11"), and(in(tpch.part.p_container, "MED BAG", "MED BOX", "MED PKG", "MED PACK"), le(tpch.part.p_size, 10))), and(eq(tpch.part.p_brand, "Brand#51"), and(in(tpch.part.p_container, "LG CASE", "LG BOX", "LG PACK", "LG PKG"), le(tpch.part.p_size, 15))))) │ └─TableFullScan 10000000.00 cop[tikv] table:part keep order:false - └─TableReader(Probe) 6286493.79 root data:Selection - └─Selection 6286493.79 cop[tikv] eq(tpch.lineitem.l_shipinstruct, "DELIVER IN PERSON"), in(tpch.lineitem.l_shipmode, "AIR", "AIR REG"), or(and(ge(tpch.lineitem.l_quantity, 4), le(tpch.lineitem.l_quantity, 14)), or(and(ge(tpch.lineitem.l_quantity, 18), le(tpch.lineitem.l_quantity, 28)), and(ge(tpch.lineitem.l_quantity, 29), le(tpch.lineitem.l_quantity, 39)))) + └─TableReader(Probe) 6286493.57 root data:Selection + └─Selection 6286493.57 cop[tikv] eq(tpch.lineitem.l_shipinstruct, "DELIVER IN PERSON"), in(tpch.lineitem.l_shipmode, "AIR", "AIR REG"), or(and(ge(tpch.lineitem.l_quantity, 4), le(tpch.lineitem.l_quantity, 14)), or(and(ge(tpch.lineitem.l_quantity, 18), le(tpch.lineitem.l_quantity, 28)), and(ge(tpch.lineitem.l_quantity, 29), le(tpch.lineitem.l_quantity, 39)))) └─TableFullScan 300005811.00 cop[tikv] table:lineitem keep order:false /* Q20 Potential Part Promotion Query diff --git a/cmd/explaintest/s.zip b/cmd/explaintest/s.zip index c3f94fe26af69..d673528b1cb30 100644 Binary files a/cmd/explaintest/s.zip and b/cmd/explaintest/s.zip differ diff --git a/cmd/explaintest/t/agg_predicate_pushdown.test b/cmd/explaintest/t/agg_predicate_pushdown.test new file mode 100644 index 0000000000000..0779fe9744030 --- /dev/null +++ b/cmd/explaintest/t/agg_predicate_pushdown.test @@ -0,0 +1,21 @@ +drop database if exists agg_predicate_pushdown; +create database agg_predicate_pushdown; + +create table t(a int, b int, c int); + +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1) and (a > 2) and 1 and (b > 2) and (avg(c) > 3); + +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1 or b > 2) and (a > 2 or b < 1) and 1 and (b > 2) and (avg(c) > 3); + +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1 and b > 2) or (a > 2 and b < 1) or (b > 2 and avg(c) > 3); + +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1 or avg(c) > 1) and (a < 3); + +desc format='brief' select a, b, avg(c) from t group by a, b, c having +(a > 1 and avg(c) > 1) or (a < 3); + +use test; diff --git a/cmd/explaintest/t/explain_cte.test b/cmd/explaintest/t/explain_cte.test index c657ad5c68898..c7adb659d9cea 100644 --- a/cmd/explaintest/t/explain_cte.test +++ b/cmd/explaintest/t/explain_cte.test @@ -42,3 +42,198 @@ explain with recursive cte1(c1) as (select c1 from t1 union select c1 + 1 c1 fro explain with recursive cte1(c1) as (select c1 from t1 union select c1 from t2 limit 1) select * from cte1; explain with recursive cte1(c1) as (select c1 from t1 union select c1 from t2 limit 100 offset 100) select * from cte1; explain with recursive cte1(c1) as (select c1 from t1 union select c1 from t2 limit 0 offset 0) select * from cte1; + +# TPC-DS Q11 +CREATE TABLE `customer` ( + `c_customer_sk` int(11) NOT NULL, + `c_customer_id` char(16) NOT NULL, + `c_current_cdemo_sk` int(11) DEFAULT NULL, + `c_current_hdemo_sk` int(11) DEFAULT NULL, + `c_current_addr_sk` int(11) DEFAULT NULL, + `c_first_shipto_date_sk` int(11) DEFAULT NULL, + `c_first_sales_date_sk` int(11) DEFAULT NULL, + `c_salutation` char(10) DEFAULT NULL, + `c_first_name` char(20) DEFAULT NULL, + `c_last_name` char(30) DEFAULT NULL, + `c_preferred_cust_flag` char(1) DEFAULT NULL, + `c_birth_day` int(11) DEFAULT NULL, + `c_birth_month` int(11) DEFAULT NULL, + `c_birth_year` int(11) DEFAULT NULL, + `c_birth_country` varchar(20) DEFAULT NULL, + `c_login` char(13) DEFAULT NULL, + `c_email_address` char(50) DEFAULT NULL, + `c_last_review_date_sk` int(11) DEFAULT NULL, + PRIMARY KEY (`c_customer_sk`) /*T![clustered_index] NONCLUSTERED */ +); +CREATE TABLE `store_sales` ( + `ss_sold_date_sk` int(11) DEFAULT NULL, + `ss_sold_time_sk` int(11) DEFAULT NULL, + `ss_item_sk` int(11) NOT NULL, + `ss_customer_sk` int(11) DEFAULT NULL, + `ss_cdemo_sk` int(11) DEFAULT NULL, + `ss_hdemo_sk` int(11) DEFAULT NULL, + `ss_addr_sk` int(11) DEFAULT NULL, + `ss_store_sk` int(11) DEFAULT NULL, + `ss_promo_sk` int(11) DEFAULT NULL, + `ss_ticket_number` int(11) NOT NULL, + `ss_quantity` int(11) DEFAULT NULL, + `ss_wholesale_cost` decimal(7,2) DEFAULT NULL, + `ss_list_price` decimal(7,2) DEFAULT NULL, + `ss_sales_price` decimal(7,2) DEFAULT NULL, + `ss_ext_discount_amt` decimal(7,2) DEFAULT NULL, + `ss_ext_sales_price` decimal(7,2) DEFAULT NULL, + `ss_ext_wholesale_cost` decimal(7,2) DEFAULT NULL, + `ss_ext_list_price` decimal(7,2) DEFAULT NULL, + `ss_ext_tax` decimal(7,2) DEFAULT NULL, + `ss_coupon_amt` decimal(7,2) DEFAULT NULL, + `ss_net_paid` decimal(7,2) DEFAULT NULL, + `ss_net_paid_inc_tax` decimal(7,2) DEFAULT NULL, + `ss_net_profit` decimal(7,2) DEFAULT NULL, + PRIMARY KEY (`ss_item_sk`,`ss_ticket_number`) /*T![clustered_index] NONCLUSTERED */ +); +CREATE TABLE `date_dim` ( + `d_date_sk` int(11) NOT NULL, + `d_date_id` char(16) NOT NULL, + `d_date` date DEFAULT NULL, + `d_month_seq` int(11) DEFAULT NULL, + `d_week_seq` int(11) DEFAULT NULL, + `d_quarter_seq` int(11) DEFAULT NULL, + `d_year` int(11) DEFAULT NULL, + `d_dow` int(11) DEFAULT NULL, + `d_moy` int(11) DEFAULT NULL, + `d_dom` int(11) DEFAULT NULL, + `d_qoy` int(11) DEFAULT NULL, + `d_fy_year` int(11) DEFAULT NULL, + `d_fy_quarter_seq` int(11) DEFAULT NULL, + `d_fy_week_seq` int(11) DEFAULT NULL, + `d_day_name` char(9) DEFAULT NULL, + `d_quarter_name` char(6) DEFAULT NULL, + `d_holiday` char(1) DEFAULT NULL, + `d_weekend` char(1) DEFAULT NULL, + `d_following_holiday` char(1) DEFAULT NULL, + `d_first_dom` int(11) DEFAULT NULL, + `d_last_dom` int(11) DEFAULT NULL, + `d_same_day_ly` int(11) DEFAULT NULL, + `d_same_day_lq` int(11) DEFAULT NULL, + `d_current_day` char(1) DEFAULT NULL, + `d_current_week` char(1) DEFAULT NULL, + `d_current_month` char(1) DEFAULT NULL, + `d_current_quarter` char(1) DEFAULT NULL, + `d_current_year` char(1) DEFAULT NULL, + PRIMARY KEY (`d_date_sk`) /*T![clustered_index] NONCLUSTERED */ +); +CREATE TABLE `web_sales` ( + `ws_sold_date_sk` int(11) DEFAULT NULL, + `ws_sold_time_sk` int(11) DEFAULT NULL, + `ws_ship_date_sk` int(11) DEFAULT NULL, + `ws_item_sk` int(11) NOT NULL, + `ws_bill_customer_sk` int(11) DEFAULT NULL, + `ws_bill_cdemo_sk` int(11) DEFAULT NULL, + `ws_bill_hdemo_sk` int(11) DEFAULT NULL, + `ws_bill_addr_sk` int(11) DEFAULT NULL, + `ws_ship_customer_sk` int(11) DEFAULT NULL, + `ws_ship_cdemo_sk` int(11) DEFAULT NULL, + `ws_ship_hdemo_sk` int(11) DEFAULT NULL, + `ws_ship_addr_sk` int(11) DEFAULT NULL, + `ws_web_page_sk` int(11) DEFAULT NULL, + `ws_web_site_sk` int(11) DEFAULT NULL, + `ws_ship_mode_sk` int(11) DEFAULT NULL, + `ws_warehouse_sk` int(11) DEFAULT NULL, + `ws_promo_sk` int(11) DEFAULT NULL, + `ws_order_number` int(11) NOT NULL, + `ws_quantity` int(11) DEFAULT NULL, + `ws_wholesale_cost` decimal(7,2) DEFAULT NULL, + `ws_list_price` decimal(7,2) DEFAULT NULL, + `ws_sales_price` decimal(7,2) DEFAULT NULL, + `ws_ext_discount_amt` decimal(7,2) DEFAULT NULL, + `ws_ext_sales_price` decimal(7,2) DEFAULT NULL, + `ws_ext_wholesale_cost` decimal(7,2) DEFAULT NULL, + `ws_ext_list_price` decimal(7,2) DEFAULT NULL, + `ws_ext_tax` decimal(7,2) DEFAULT NULL, + `ws_coupon_amt` decimal(7,2) DEFAULT NULL, + `ws_ext_ship_cost` decimal(7,2) DEFAULT NULL, + `ws_net_paid` decimal(7,2) DEFAULT NULL, + `ws_net_paid_inc_tax` decimal(7,2) DEFAULT NULL, + `ws_net_paid_inc_ship` decimal(7,2) DEFAULT NULL, + `ws_net_paid_inc_ship_tax` decimal(7,2) DEFAULT NULL, + `ws_net_profit` decimal(7,2) DEFAULT NULL, + PRIMARY KEY (`ws_item_sk`,`ws_order_number`) /*T![clustered_index] NONCLUSTERED */ +); +desc format='brief' with year_total as ( + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum(ss_ext_list_price-ss_ext_discount_amt) year_total + ,'s' sale_type + from customer + ,store_sales + ,date_dim + where c_customer_sk = ss_customer_sk + and ss_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + union all + select c_customer_id customer_id + ,c_first_name customer_first_name + ,c_last_name customer_last_name + ,c_preferred_cust_flag customer_preferred_cust_flag + ,c_birth_country customer_birth_country + ,c_login customer_login + ,c_email_address customer_email_address + ,d_year dyear + ,sum(ws_ext_list_price-ws_ext_discount_amt) year_total + ,'w' sale_type + from customer + ,web_sales + ,date_dim + where c_customer_sk = ws_bill_customer_sk + and ws_sold_date_sk = d_date_sk + group by c_customer_id + ,c_first_name + ,c_last_name + ,c_preferred_cust_flag + ,c_birth_country + ,c_login + ,c_email_address + ,d_year + ) + select + t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_email_address + from year_total t_s_firstyear + ,year_total t_s_secyear + ,year_total t_w_firstyear + ,year_total t_w_secyear + where t_s_secyear.customer_id = t_s_firstyear.customer_id + and t_s_firstyear.customer_id = t_w_secyear.customer_id + and t_s_firstyear.customer_id = t_w_firstyear.customer_id + and t_s_firstyear.sale_type = 's' + and t_w_firstyear.sale_type = 'w' + and t_s_secyear.sale_type = 's' + and t_w_secyear.sale_type = 'w' + and t_s_firstyear.dyear = 2001 + and t_s_secyear.dyear = 2001+1 + and t_w_firstyear.dyear = 2001 + and t_w_secyear.dyear = 2001+1 + and t_s_firstyear.year_total > 0 + and t_w_firstyear.year_total > 0 + and case when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / t_w_firstyear.year_total else 0.0 end + > case when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / t_s_firstyear.year_total else 0.0 end + order by t_s_secyear.customer_id + ,t_s_secyear.customer_first_name + ,t_s_secyear.customer_last_name + ,t_s_secyear.customer_email_address +limit 100; diff --git a/cmd/explaintest/t/explain_generate_column_substitute.test b/cmd/explaintest/t/explain_generate_column_substitute.test index 4738d13cb9da1..1acde78a709e7 100644 --- a/cmd/explaintest/t/explain_generate_column_substitute.test +++ b/cmd/explaintest/t/explain_generate_column_substitute.test @@ -293,3 +293,12 @@ select (select t2.c_str from t2 where t2.c_int + 1 = 4 order by t2.c_str) x from select (select t2.c_str from t2 where t2.c_int = 3 order by t2.c_str) x from t1; drop table t1,t2; + +-- for issue 33237 +drop table if exists t1, t2; +create table t1 (c_int int, c_decimal decimal(12, 6), primary key (c_int) nonclustered,key((c_int + 1))) ; +create table t2 like t1; +explain format = 'brief' select /*+ agg_to_cop() */ * from t1 where c_decimal in (select c_decimal from t2 where t2.c_int + 1 = 8 + 1); +drop table t1; +drop table t2; + diff --git a/cmd/explaintest/t/generated_columns.test b/cmd/explaintest/t/generated_columns.test index 82dfcf4d1d8c8..c007f8ff42e66 100644 --- a/cmd/explaintest/t/generated_columns.test +++ b/cmd/explaintest/t/generated_columns.test @@ -2,7 +2,6 @@ -- Most of the cases are ported from other tests to make sure generated columns behaves the same. -- Stored generated columns as indices -set @@tidb_partition_prune_mode='dynamic'; DROP TABLE IF EXISTS person; CREATE TABLE person ( @@ -74,6 +73,8 @@ EXPLAIN format = 'brief' SELECT * from sgc1 join sgc2 on sgc1.a=sgc2.a; -- Stored generated columns as partition columns +set @old_prune_mode = @@tidb_partition_prune_mode; +set @@tidb_partition_prune_mode='static'; DROP TABLE IF EXISTS sgc3; CREATE TABLE sgc3 ( j JSON, @@ -91,6 +92,26 @@ PARTITION max VALUES LESS THAN MAXVALUE); EXPLAIN format = 'brief' SELECT * FROM sgc3 WHERE a <= 1; EXPLAIN format = 'brief' SELECT * FROM sgc3 WHERE a < 7; +set @@tidb_partition_prune_mode='dynamic'; +DROP TABLE sgc3; +CREATE TABLE sgc3 ( +j JSON, +a INT AS (JSON_EXTRACT(j, "$.a")) STORED +) +PARTITION BY RANGE (a) ( +PARTITION p0 VALUES LESS THAN (1), +PARTITION p1 VALUES LESS THAN (2), +PARTITION p2 VALUES LESS THAN (3), +PARTITION p3 VALUES LESS THAN (4), +PARTITION p4 VALUES LESS THAN (5), +PARTITION p5 VALUES LESS THAN (6), +PARTITION max VALUES LESS THAN MAXVALUE); + +EXPLAIN format = 'brief' SELECT * FROM sgc3 WHERE a <= 1; +EXPLAIN format = 'brief' SELECT * FROM sgc3 WHERE a < 7; + +set @@tidb_partition_prune_mode = @old_prune_mode; + -- Virtual generated columns as indices DROP TABLE IF EXISTS t1; diff --git a/cmd/explaintest/t/imdbload.test b/cmd/explaintest/t/imdbload.test new file mode 100644 index 0000000000000..df73903e0bb93 --- /dev/null +++ b/cmd/explaintest/t/imdbload.test @@ -0,0 +1,323 @@ +CREATE DATABASE IF NOT EXISTS `imdbload`; +USE `imdbload`; +-- The table schema is converted from imdb dataset using IMDbPY +CREATE TABLE `kind_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `kind` varchar(15) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `kind_type_kind` (`kind`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=11; +CREATE TABLE `keyword` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `keyword` text NOT NULL, + `phonetic_code` varchar(5) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `keyword_idx_keyword` (`keyword`(5)), + KEY `keyword_idx_pcode` (`phonetic_code`), + KEY `itest` (`phonetic_code`,`keyword`(20)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=236629; +CREATE TABLE `company_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `kind` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `company_type_kind` (`kind`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6; +CREATE TABLE `comp_cast_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `kind` varchar(32) NOT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `comp_cast_type_kind` (`kind`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6; +CREATE TABLE `complete_cast` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `movie_id` int(11) DEFAULT NULL, + `subject_id` int(11) NOT NULL, + `status_id` int(11) NOT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `complete_cast_idx_mid` (`movie_id`), + KEY `complete_cast_idx_sid` (`subject_id`), + KEY `itest` (`movie_id`,`subject_id`,`status_id`), + KEY `itest2` (`subject_id`,`status_id`,`movie_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=135088; +CREATE TABLE `info_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `info` varchar(32) NOT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `info_type_info` (`info`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=115; +CREATE TABLE `link_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `link` varchar(32) NOT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `link_type_link` (`link`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=20; +CREATE TABLE `company_name` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` text NOT NULL, + `country_code` varchar(255) DEFAULT NULL, + `imdb_id` int(11) DEFAULT NULL, + `name_pcode_nf` varchar(5) DEFAULT NULL, + `name_pcode_sf` varchar(5) DEFAULT NULL, + `md5sum` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `company_name_idx_name` (`name`(6)), + KEY `company_name_idx_ccode` (`country_code`(5)), + KEY `company_name_idx_imdb_id` (`imdb_id`), + KEY `company_name_idx_pcodenf` (`name_pcode_nf`), + KEY `company_name_idx_pcodesf` (`name_pcode_sf`), + KEY `company_name_idx_md5` (`md5sum`(5)), + KEY `itest` (`country_code`,`name_pcode_nf`,`name_pcode_sf`), + KEY `itest2` (`name_pcode_sf`,`country_code`,`name`(20)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=362133; +CREATE TABLE `role_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `role` varchar(32) NOT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `role_type_role` (`role`(5)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=14; +CREATE TABLE `movie_link` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `movie_id` int(11) NOT NULL, + `linked_movie_id` int(11) NOT NULL, + `link_type_id` int(11) NOT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `movie_link_idx_mid` (`movie_id`), + KEY `movie_link_idx_lmid` (`linked_movie_id`), + KEY `movie_link_idx_ltypeid` (`link_type_id`), + KEY `itest` (`link_type_id`,`linked_movie_id`,`movie_id`), + KEY `itest2` (`movie_id`,`link_type_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=2585152; +CREATE TABLE `aka_title` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `movie_id` int(11) NOT NULL, + `title` text NOT NULL, + `imdb_index` varchar(12) DEFAULT NULL, + `kind_id` int(11) NOT NULL, + `production_year` int(11) DEFAULT NULL, + `phonetic_code` varchar(5) DEFAULT NULL, + `episode_of_id` int(11) DEFAULT NULL, + `season_nr` int(11) DEFAULT NULL, + `episode_nr` int(11) DEFAULT NULL, + `note` text DEFAULT NULL, + `md5sum` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `aka_title_idx_movieid` (`movie_id`), + KEY `aka_title_idx_title` (`title`(10)), + KEY `aka_title_idx_kindid` (`kind_id`), + KEY `aka_title_idx_year` (`production_year`), + KEY `aka_title_idx_pcode` (`phonetic_code`), + KEY `aka_title_idx_epof` (`episode_of_id`), + KEY `aka_title_idx_md5` (`md5sum`(5)), + KEY `itest` (`phonetic_code`,`production_year`,`kind_id`,`note`(20)), + KEY `itest2` (`episode_of_id`,`season_nr`,`episode_nr`,`production_year`), + KEY `itest3` (`episode_of_id`,`note`(20),`production_year`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=562493; +CREATE TABLE `aka_name` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `person_id` int(11) NOT NULL, + `name` text NOT NULL, + `imdb_index` varchar(12) DEFAULT NULL, + `name_pcode_cf` varchar(5) DEFAULT NULL, + `name_pcode_nf` varchar(5) DEFAULT NULL, + `surname_pcode` varchar(5) DEFAULT NULL, + `md5sum` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `aka_name_idx_person` (`person_id`), + KEY `aka_name_idx_name` (`name`(6)), + KEY `aka_name_idx_pcodecf` (`name_pcode_cf`), + KEY `aka_name_idx_pcodenf` (`name_pcode_nf`), + KEY `aka_name_idx_pcode` (`surname_pcode`), + KEY `aka_name_idx_md5` (`md5sum`(5)), + KEY `itest` (`name_pcode_cf`,`name_pcode_nf`,`surname_pcode`), + KEY `itest2` (`surname_pcode`,`name_pcode_cf`,`name_pcode_nf`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1312275; +CREATE TABLE `movie_keyword` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `movie_id` int(11) NOT NULL, + `keyword_id` int(11) NOT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `movie_keyword_idx_mid` (`movie_id`), + KEY `movie_keyword_idx_keywordid` (`keyword_id`), + KEY `itest` (`movie_id`,`keyword_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=7480089; +CREATE TABLE `movie_companies` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `movie_id` int(11) NOT NULL, + `company_id` int(11) NOT NULL, + `company_type_id` int(11) NOT NULL, + `note` text DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `movie_companies_idx_mid` (`movie_id`), + KEY `movie_companies_idx_cid` (`company_id`), + KEY `movie_companies_idx_ctypeid` (`company_type_id`), + KEY `itest` (`movie_id`,`company_type_id`,`company_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4958298; +CREATE TABLE `char_name` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` text NOT NULL, + `imdb_index` varchar(12) DEFAULT NULL, + `imdb_id` int(11) DEFAULT NULL, + `name_pcode_nf` varchar(5) DEFAULT NULL, + `surname_pcode` varchar(5) DEFAULT NULL, + `md5sum` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `char_name_idx_name` (`name`(6)), + KEY `char_name_idx_imdb_id` (`imdb_id`), + KEY `char_name_idx_pcodenf` (`name_pcode_nf`), + KEY `char_name_idx_pcode` (`surname_pcode`), + KEY `char_name_idx_md5` (`md5sum`(5)), + KEY `itest` (`name_pcode_nf`,`surname_pcode`,`imdb_id`), + KEY `itest2` (`imdb_index`,`surname_pcode`,`name_pcode_nf`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4314866; +CREATE TABLE `title` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` text NOT NULL, + `imdb_index` varchar(12) DEFAULT NULL, + `kind_id` int(11) NOT NULL, + `production_year` int(11) DEFAULT NULL, + `imdb_id` int(11) DEFAULT NULL, + `phonetic_code` varchar(5) DEFAULT NULL, + `episode_of_id` int(11) DEFAULT NULL, + `season_nr` int(11) DEFAULT NULL, + `episode_nr` int(11) DEFAULT NULL, + `series_years` varchar(49) DEFAULT NULL, + `md5sum` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `title_idx_title` (`title`(10)), + KEY `title_idx_kindid` (`kind_id`), + KEY `title_idx_year` (`production_year`), + KEY `title_idx_imdb_id` (`imdb_id`), + KEY `title_idx_pcode` (`phonetic_code`), + KEY `title_idx_epof` (`episode_of_id`), + KEY `title_idx_season_nr` (`season_nr`), + KEY `title_idx_episode_nr` (`episode_nr`), + KEY `title_idx_md5` (`md5sum`(5)), + KEY `itest` (`episode_of_id`,`season_nr`,`episode_nr`,`imdb_index`,`phonetic_code`), + KEY `itest2` (`kind_id`,`production_year`,`imdb_id`,`title`(20)), + KEY `itest3` (`phonetic_code`,`production_year`,`kind_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4736511; +CREATE TABLE `name` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` text NOT NULL, + `imdb_index` varchar(12) DEFAULT NULL, + `imdb_id` int(11) DEFAULT NULL, + `gender` varchar(1) DEFAULT NULL, + `name_pcode_cf` varchar(5) DEFAULT NULL, + `name_pcode_nf` varchar(5) DEFAULT NULL, + `surname_pcode` varchar(5) DEFAULT NULL, + `md5sum` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `name_idx_name` (`name`(6)), + KEY `name_idx_imdb_id` (`imdb_id`), + KEY `name_idx_gender` (`gender`), + KEY `name_idx_pcodecf` (`name_pcode_cf`), + KEY `name_idx_pcodenf` (`name_pcode_nf`), + KEY `name_idx_pcode` (`surname_pcode`), + KEY `name_idx_md5` (`md5sum`(5)), + KEY `itest` (`name_pcode_cf`,`name_pcode_nf`,`surname_pcode`,`imdb_index`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6379742; +CREATE TABLE `person_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `person_id` int(11) NOT NULL, + `info_type_id` int(11) NOT NULL, + `info` text NOT NULL, + `note` text DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `person_info_idx_pid` (`person_id`), + KEY `person_info_idx_itypeid` (`info_type_id`), + KEY `itest` (`person_id`,`info_type_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4130209; +CREATE TABLE `movie_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `movie_id` int(11) NOT NULL, + `info_type_id` int(11) NOT NULL, + `info` text NOT NULL, + `note` text DEFAULT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `movie_info_idx_mid` (`movie_id`), + KEY `movie_info_idx_infotypeid` (`info_type_id`), + KEY `movie_info_idx_info` (`info`(10)), + KEY `itest` (`movie_id`,`info_type_id`,`info`(20)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=29774986; +CREATE TABLE `cast_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `person_id` int(11) NOT NULL, + `movie_id` int(11) NOT NULL, + `person_role_id` int(11) DEFAULT NULL, + `note` text DEFAULT NULL, + `nr_order` int(11) DEFAULT NULL, + `role_id` int(11) NOT NULL, + PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, + KEY `cast_info_idx_pid` (`person_id`), + KEY `cast_info_idx_mid` (`movie_id`), + KEY `cast_info_idx_cid` (`person_role_id`), + KEY `cast_info_idx_rid` (`role_id`), + KEY `itest` (`person_id`,`movie_id`,`person_role_id`), + KEY `itest2` (`nr_order`,`person_role_id`,`note`(20)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=63475837; + +load stats 's/imdbload_stats/kind_type.json'; +load stats 's/imdbload_stats/keyword.json'; +load stats 's/imdbload_stats/company_type.json'; +load stats 's/imdbload_stats/comp_cast_type.json'; +load stats 's/imdbload_stats/complete_cast.json'; +load stats 's/imdbload_stats/info_type.json'; +load stats 's/imdbload_stats/link_type.json'; +load stats 's/imdbload_stats/company_name.json'; +load stats 's/imdbload_stats/role_type.json'; +load stats 's/imdbload_stats/movie_link.json'; +load stats 's/imdbload_stats/aka_title.json'; +load stats 's/imdbload_stats/aka_name.json'; +load stats 's/imdbload_stats/movie_keyword.json'; +load stats 's/imdbload_stats/movie_companies.json'; +load stats 's/imdbload_stats/char_name.json'; +load stats 's/imdbload_stats/title.json'; +load stats 's/imdbload_stats/name.json'; +load stats 's/imdbload_stats/person_info.json'; +load stats 's/imdbload_stats/movie_info.json'; +load stats 's/imdbload_stats/cast_info.json'; + +-- The statistics and actual row count are from the latest imdb dataset that is distributed as old text files. + +-- Actual row count: 1 +-- Index lookup on itest2 index is the best plan, runs <50ms for the first time. Table scan + Selection runs >800ms. (using 8 core tikv * 5, copr cache disabled) +explain select * from char_name where ((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436')); +explain select * from char_name use index (itest2) where ((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436')); +trace plan target = 'estimation' select * from char_name where ((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436')); + +-- Actual row count: 0 +explain select * from char_name where ((imdb_index = 'V') and (surname_pcode < 'L3416')); + +-- Actual row count: 0 +explain select * from char_name where imdb_index > 'V'; +trace plan target = 'estimation' select * from char_name where imdb_index > 'V'; + +-- Actual row count: 0 +explain select * from movie_companies where company_type_id > 2; +trace plan target = 'estimation' select * from movie_companies where company_type_id > 2; + +-- Actual row count: 0 +explain select * from char_name where imdb_index > 'I' and imdb_index < 'II'; +trace plan target = 'estimation' select * from char_name where imdb_index > 'I' and imdb_index < 'II'; + +-- Actual row count: 13 +explain select * from char_name where imdb_index > 'I'; +trace plan target = 'estimation' select * from char_name where imdb_index > 'I'; + +-- Actual row count: 0 +explain select * from cast_info where nr_order < -2068070866; + +-- Actual row count: 0 +explain select * from aka_title where kind_id = 5; + +-- Actual row count: 2 +explain select * from aka_title where kind_id > 7; +trace plan target = 'estimation' select * from aka_title where kind_id > 7; + +-- Actual row count: 0 +explain select * from keyword where ((phonetic_code = 'R1652') and (keyword > 'ecg-monitor' and keyword < 'killers')); +trace plan target = 'estimation' select * from keyword where ((phonetic_code = 'R1652') and (keyword > 'ecg-monitor' and keyword < 'killers')); + +-- Actual row count: 37928 +explain select * from cast_info where (nr_order is null) and (person_role_id = 2) and (note >= '(key set pa: Florida'); +trace plan target = 'estimation' select * from cast_info where (nr_order is null) and (person_role_id = 2) and (note >= '(key set pa: Florida'); diff --git a/cmd/explaintest/t/index_join.test b/cmd/explaintest/t/index_join.test index c0636a876dc4e..f766b1e899e29 100644 --- a/cmd/explaintest/t/index_join.test +++ b/cmd/explaintest/t/index_join.test @@ -1,3 +1,4 @@ +use test; drop table if exists t1, t2; create table t1(a bigint, b bigint, index idx(a)); create table t2(a bigint, b bigint, index idx(a)); diff --git a/cmd/explaintest/t/select.test b/cmd/explaintest/t/select.test index 62d1a49ce629b..5efbbd77a0364 100644 --- a/cmd/explaintest/t/select.test +++ b/cmd/explaintest/t/select.test @@ -181,12 +181,18 @@ desc select sysdate(), sleep(1), sysdate(); # test select partition table drop table if exists th; set @@session.tidb_enable_table_partition = '1'; +set @@session.tidb_partition_prune_mode = 'static'; create table th (a int, b int) partition by hash(a) partitions 3; insert into th values (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8); insert into th values (-1,-1),(-2,-2),(-3,-3),(-4,-4),(-5,-5),(-6,-6),(-7,-7),(-8,-8); desc select * from th where a=-2; desc select * from th; desc select * from th partition (p2,p1); +set @@session.tidb_partition_prune_mode = 'dynamic'; +desc select * from th where a=-2; +desc select * from th; +desc select * from th partition (p2,p1); +set @@session.tidb_partition_prune_mode = DEFAULT; # test != any(subq) and = all(subq) drop table if exists t; diff --git a/config/config.go b/config/config.go index b75a69128e3c2..4ffd599416aa7 100644 --- a/config/config.go +++ b/config/config.go @@ -109,33 +109,31 @@ type Config struct { MemQuotaQuery int64 `toml:"mem-quota-query" json:"mem-quota-query"` // TempStorageQuota describe the temporary storage Quota during query exector when OOMUseTmpStorage is enabled // If the quota exceed the capacity of the TempStoragePath, the tidb-server would exit with fatal error - TempStorageQuota int64 `toml:"tmp-storage-quota" json:"tmp-storage-quota"` // Bytes - // Deprecated - EnableStreaming bool `toml:"-" json:"-"` - EnableBatchDML bool `toml:"enable-batch-dml" json:"enable-batch-dml"` - TxnLocalLatches tikvcfg.TxnLocalLatches `toml:"-" json:"-"` - // Set sys variable lower-case-table-names, ref: https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html. - // TODO: We actually only support mode 2, which keeps the original case, but the comparison is case-insensitive. - LowerCaseTableNames int `toml:"lower-case-table-names" json:"lower-case-table-names"` - ServerVersion string `toml:"server-version" json:"server-version"` - Log Log `toml:"log" json:"log"` - Security Security `toml:"security" json:"security"` - Status Status `toml:"status" json:"status"` - Performance Performance `toml:"performance" json:"performance"` - PreparedPlanCache PreparedPlanCache `toml:"prepared-plan-cache" json:"prepared-plan-cache"` - OpenTracing OpenTracing `toml:"opentracing" json:"opentracing"` - ProxyProtocol ProxyProtocol `toml:"proxy-protocol" json:"proxy-protocol"` - PDClient tikvcfg.PDClient `toml:"pd-client" json:"pd-client"` - TiKVClient tikvcfg.TiKVClient `toml:"tikv-client" json:"tikv-client"` - Binlog Binlog `toml:"binlog" json:"binlog"` - CompatibleKillQuery bool `toml:"compatible-kill-query" json:"compatible-kill-query"` - Plugin Plugin `toml:"plugin" json:"plugin"` - PessimisticTxn PessimisticTxn `toml:"pessimistic-txn" json:"pessimistic-txn"` - CheckMb4ValueInUTF8 AtomicBool `toml:"check-mb4-value-in-utf8" json:"check-mb4-value-in-utf8"` - MaxIndexLength int `toml:"max-index-length" json:"max-index-length"` - IndexLimit int `toml:"index-limit" json:"index-limit"` - TableColumnCountLimit uint32 `toml:"table-column-count-limit" json:"table-column-count-limit"` - GracefulWaitBeforeShutdown int `toml:"graceful-wait-before-shutdown" json:"graceful-wait-before-shutdown"` + TempStorageQuota int64 `toml:"tmp-storage-quota" json:"tmp-storage-quota"` // Bytes + EnableBatchDML bool `toml:"enable-batch-dml" json:"enable-batch-dml"` + TxnLocalLatches tikvcfg.TxnLocalLatches `toml:"-" json:"-"` + ServerVersion string `toml:"server-version" json:"server-version"` + VersionComment string `toml:"version-comment" json:"version-comment"` + TiDBEdition string `toml:"tidb-edition" json:"tidb-edition"` + TiDBReleaseVersion string `toml:"tidb-release-version" json:"tidb-release-version"` + Log Log `toml:"log" json:"log"` + Security Security `toml:"security" json:"security"` + Status Status `toml:"status" json:"status"` + Performance Performance `toml:"performance" json:"performance"` + PreparedPlanCache PreparedPlanCache `toml:"prepared-plan-cache" json:"prepared-plan-cache"` + OpenTracing OpenTracing `toml:"opentracing" json:"opentracing"` + ProxyProtocol ProxyProtocol `toml:"proxy-protocol" json:"proxy-protocol"` + PDClient tikvcfg.PDClient `toml:"pd-client" json:"pd-client"` + TiKVClient tikvcfg.TiKVClient `toml:"tikv-client" json:"tikv-client"` + Binlog Binlog `toml:"binlog" json:"binlog"` + CompatibleKillQuery bool `toml:"compatible-kill-query" json:"compatible-kill-query"` + Plugin Plugin `toml:"plugin" json:"plugin"` + PessimisticTxn PessimisticTxn `toml:"pessimistic-txn" json:"pessimistic-txn"` + CheckMb4ValueInUTF8 AtomicBool `toml:"check-mb4-value-in-utf8" json:"check-mb4-value-in-utf8"` + MaxIndexLength int `toml:"max-index-length" json:"max-index-length"` + IndexLimit int `toml:"index-limit" json:"index-limit"` + TableColumnCountLimit uint32 `toml:"table-column-count-limit" json:"table-column-count-limit"` + GracefulWaitBeforeShutdown int `toml:"graceful-wait-before-shutdown" json:"graceful-wait-before-shutdown"` // AlterPrimaryKey is used to control alter primary key feature. AlterPrimaryKey bool `toml:"alter-primary-key" json:"alter-primary-key"` // TreatOldVersionUTF8AsUTF8MB4 is use to treat old version table/column UTF8 charset as UTF8MB4. This is for compatibility. @@ -630,7 +628,6 @@ var defaultConf = Config{ TempStoragePath: tempStorageDirName, OOMAction: OOMActionCancel, MemQuotaQuery: 1 << 30, - EnableStreaming: false, EnableBatchDML: false, CheckMb4ValueInUTF8: *NewAtomicBool(true), MaxIndexLength: 3072, @@ -645,9 +642,11 @@ var defaultConf = Config{ RepairTableList: []string{}, MaxServerConnections: 0, TxnLocalLatches: defTiKVCfg.TxnLocalLatches, - LowerCaseTableNames: 2, GracefulWaitBeforeShutdown: 0, ServerVersion: "", + TiDBEdition: "", + VersionComment: "", + TiDBReleaseVersion: "", Log: Log{ Level: "info", Format: "text", @@ -779,21 +778,29 @@ func StoreGlobalConfig(config *Config) { } var deprecatedConfig = map[string]struct{}{ - "pessimistic-txn.ttl": {}, - "pessimistic-txn.enable": {}, - "log.file.log-rotate": {}, - "log.log-slow-query": {}, - "txn-local-latches": {}, - "txn-local-latches.enabled": {}, - "txn-local-latches.capacity": {}, - "performance.max-memory": {}, - "max-txn-time-use": {}, - "experimental.allow-auto-random": {}, - "enable-redact-log": {}, // use variable tidb_redact_log instead - "tikv-client.copr-cache.enable": {}, - "alter-primary-key": {}, // use NONCLUSTERED keyword instead - "enable-streaming": {}, - "performance.mem-profile-interval": {}, + "pessimistic-txn.ttl": {}, + "pessimistic-txn.enable": {}, + "log.file.log-rotate": {}, + "log.log-slow-query": {}, + "txn-local-latches": {}, + "txn-local-latches.enabled": {}, + "txn-local-latches.capacity": {}, + "performance.max-memory": {}, + "max-txn-time-use": {}, + "experimental.allow-auto-random": {}, + "enable-redact-log": {}, // use variable tidb_redact_log instead + "tikv-client.copr-cache.enable": {}, + "alter-primary-key": {}, // use NONCLUSTERED keyword instead + "enable-streaming": {}, + "performance.mem-profile-interval": {}, + "lower-case-table-names": {}, + "stmt-summary": {}, + "stmt-summary.enable": {}, + "stmt-summary.enable-internal-query": {}, + "stmt-summary.max-stmt-count": {}, + "stmt-summary.max-sql-length": {}, + "stmt-summary.refresh-interval": {}, + "stmt-summary.history-size": {}, } func isAllDeprecatedConfigItems(items []string) bool { @@ -932,11 +939,6 @@ func (c *Config) Valid() error { return fmt.Errorf("table-column-limit should be [%d, %d]", DefIndexLimit, DefMaxOfTableColumnCountLimit) } - // lower_case_table_names is allowed to be 0, 1, 2 - if c.LowerCaseTableNames < 0 || c.LowerCaseTableNames > 2 { - return fmt.Errorf("lower-case-table-names should be 0 or 1 or 2") - } - // txn-local-latches if err := c.TxnLocalLatches.Valid(); err != nil { return err diff --git a/config/config.toml.example b/config/config.toml.example index 4128254492606..99cefd528b837 100644 --- a/config/config.toml.example +++ b/config/config.toml.example @@ -54,9 +54,6 @@ oom-action = "cancel" # Enable batch commit for the DMLs. enable-batch-dml = false -# Set system variable 'lower_case_table_names' -lower-case-table-names = 2 - # Make "kill query" behavior compatible with MySQL. It's not recommend to # turn on this option when TiDB server is behind a proxy. compatible-kill-query = false diff --git a/config/config_test.go b/config/config_test.go index 913dbe088f0be..bc90a2763bfad 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -327,7 +327,14 @@ grpc-max-send-msg-size = 40960 [log.file] log-rotate = true [performance] -mem-profile-interval="1m"`) +mem-profile-interval="1m" +[stmt-summary] +enable=false +enable-internal-query=true +max-stmt-count=1000 +max-sql-length=1024 +refresh-interval=100 +history-size=100`) require.NoError(t, err) err = conf.Load(configFile) tmp := err.(*ErrConfigValidationFailed) diff --git a/config/config_util.go b/config/config_util.go index f8ae5221c2617..c192a54fd7dbc 100644 --- a/config/config_util.go +++ b/config/config_util.go @@ -53,7 +53,6 @@ var ( "Log.QueryLogMaxLen": {}, "Log.ExpensiveThreshold": {}, "CheckMb4ValueInUTF8": {}, - "EnableStreaming": {}, "TxnLocalLatches.Capacity": {}, "CompatibleKillQuery": {}, "TreatOldVersionUTF8AsUTF8MB4": {}, diff --git a/config/main_test.go b/config/main_test.go index 847d12a0a12ce..f057995fb6137 100644 --- a/config/main_test.go +++ b/config/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/ddl/attributes_sql_test.go b/ddl/attributes_sql_test.go index a6595a3ccd9e7..0241fefe2cbdb 100644 --- a/ddl/attributes_sql_test.go +++ b/ddl/attributes_sql_test.go @@ -19,8 +19,10 @@ import ( "fmt" "math" "testing" + "time" "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/domain/infosync" "github.com/pingcap/tidb/store/gcworker" "github.com/pingcap/tidb/testkit" @@ -28,9 +30,35 @@ import ( "github.com/stretchr/testify/require" ) +// MockGC is used to make GC work in the test environment. +func MockGC(tk *testkit.TestKit) (string, string, string, func()) { + originGC := util.IsEmulatorGCEnable() + resetGC := func() { + if originGC { + util.EmulatorGCEnable() + } else { + util.EmulatorGCDisable() + } + } + + // disable emulator GC. + // Otherwise emulator GC will delete table record as soon as possible after execute drop table ddl. + util.EmulatorGCDisable() + gcTimeFormat := "20060102-15:04:05 -0700 MST" + timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) + timeAfterDrop := time.Now().Add(48 * 60 * 60 * time.Second).Format(gcTimeFormat) + safePointSQL := `INSERT HIGH_PRIORITY INTO mysql.tidb VALUES ('tikv_gc_safe_point', '%[1]s', '') + ON DUPLICATE KEY + UPDATE variable_value = '%[1]s'` + // clear GC variables first. + tk.MustExec("delete from mysql.tidb where variable_name in ( 'tikv_gc_safe_point','tikv_gc_enable' )") + return timeBeforeDrop, timeAfterDrop, safePointSQL, resetGC +} + func TestAlterTableAttributes(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec(`create table alter_t (c int);`) @@ -179,7 +207,7 @@ PARTITION BY RANGE (c) ( PARTITION p1 VALUES LESS THAN (11) );`) - timeBeforeDrop, _, safePointSQL, resetGC := testkit.MockGC(tk) + timeBeforeDrop, _, safePointSQL, resetGC := MockGC(tk) defer resetGC() // Set GC safe point @@ -222,7 +250,7 @@ PARTITION BY RANGE (c) ( PARTITION p1 VALUES LESS THAN (11) );`) - timeBeforeDrop, _, safePointSQL, resetGC := testkit.MockGC(tk) + timeBeforeDrop, _, safePointSQL, resetGC := MockGC(tk) defer resetGC() // Set GC safe point @@ -285,7 +313,7 @@ PARTITION BY RANGE (c) ( failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed") }() - timeBeforeDrop, _, safePointSQL, resetGC := testkit.MockGC(tk) + timeBeforeDrop, _, safePointSQL, resetGC := MockGC(tk) defer resetGC() // Set GC safe point @@ -339,7 +367,7 @@ PARTITION BY RANGE (c) ( failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed") }() - timeBeforeDrop, _, safePointSQL, resetGC := testkit.MockGC(tk) + timeBeforeDrop, _, safePointSQL, resetGC := MockGC(tk) defer resetGC() // Set GC safe point diff --git a/ddl/backfilling.go b/ddl/backfilling.go index 62cd7a88c8201..3b48ab30f4e5f 100644 --- a/ddl/backfilling.go +++ b/ddl/backfilling.go @@ -38,9 +38,11 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" decoder "github.com/pingcap/tidb/util/rowDecoder" "github.com/pingcap/tidb/util/timeutil" + "github.com/pingcap/tidb/util/topsql" "github.com/tikv/client-go/v2/tikv" "go.uber.org/zap" ) @@ -292,7 +294,7 @@ func (w *backfillWorker) handleBackfillTask(d *ddlCtx, task *reorgBackfillTask, func (w *backfillWorker) run(d *ddlCtx, bf backfiller, job *model.Job) { logutil.BgLogger().Info("[ddl] backfill worker start", zap.Int("workerID", w.id)) defer func() { - w.resultCh <- &backfillResult{err: errReorgPanic} + w.resultCh <- &backfillResult{err: dbterror.ErrReorgPanic} }() defer util.Recover(metrics.LabelDDL, "backfillWorker.run", nil, false) for { @@ -311,6 +313,11 @@ func (w *backfillWorker) run(d *ddlCtx, bf backfiller, job *model.Job) { } }) + failpoint.Inject("mockHighLoadForAddIndex", func() { + sqlPrefixes := []string{"alter"} + topsql.MockHighCPULoad(job.Query, sqlPrefixes, 5) + }) + // Dynamic change batch size. w.batchCnt = int(variable.GetDDLReorgBatchSize()) result := w.handleBackfillTask(d, task, bf) @@ -343,7 +350,7 @@ func splitTableRanges(t table.PhysicalTable, store kv.Storage, startKey, endKey } if len(ranges) == 0 { errMsg := fmt.Sprintf("cannot find region in range [%s, %s]", startKey.String(), endKey.String()) - return nil, errors.Trace(errInvalidSplitRegionRanges.GenWithStackByArgs(errMsg)) + return nil, errors.Trace(dbterror.ErrInvalidSplitRegionRanges.GenWithStackByArgs(errMsg)) } return ranges, nil } diff --git a/ddl/cancel_ddl_test.go b/ddl/cancel_ddl_test.go new file mode 100644 index 0000000000000..695d1dea30b34 --- /dev/null +++ b/ddl/cancel_ddl_test.go @@ -0,0 +1,911 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl + +import ( + "context" + "sync" + "testing" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/parser/charset" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/parser/terror" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/mock" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" +) + +type testDDLSerialSuiteToVerify struct { + suite.Suite +} + +func TestDDLSerialSuite(t *testing.T) { + suite.Run(t, new(testDDLSerialSuiteToVerify)) +} + +func (s *testDDLSerialSuiteToVerify) SetupSuite() { + SetWaitTimeWhenErrorOccurred(time.Microsecond) +} + +func checkCancelState(txn kv.Transaction, job *model.Job, test *testCancelJob) error { + var checkErr error + addIndexFirstReorg := (test.act == model.ActionAddIndex || test.act == model.ActionAddPrimaryKey) && + job.SchemaState == model.StateWriteReorganization && job.SnapshotVer == 0 + // If the action is adding index and the state is writing reorganization, it wants to test the case of cancelling the job when backfilling indexes. + // When the job satisfies this case of addIndexFirstReorg, the worker hasn't started to backfill indexes. + if test.cancelState == job.SchemaState && !addIndexFirstReorg && !job.IsRollingback() { + errs, err := admin.CancelJobs(txn, test.jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return checkErr + } + // It only tests cancel one DDL job. + if !terror.ErrorEqual(errs[0], test.cancelRetErrs[0]) { + checkErr = errors.Trace(errs[0]) + return checkErr + } + } + return checkErr +} + +type testCancelJob struct { + jobIDs []int64 + cancelRetErrs []error // cancelRetErrs is the first return value of CancelJobs. + act model.ActionType // act is the job action. + cancelState model.SchemaState +} + +func buildCancelJobTests(firstID int64) []testCancelJob { + noErrs := []error{nil} + tests := []testCancelJob{ + {act: model.ActionAddIndex, jobIDs: []int64{firstID + 1}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, + {act: model.ActionAddIndex, jobIDs: []int64{firstID + 2}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, + {act: model.ActionAddIndex, jobIDs: []int64{firstID + 3}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, + {act: model.ActionAddIndex, jobIDs: []int64{firstID + 4}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 4)}, cancelState: model.StatePublic}, + + // Test cancel drop index job , see TestCancelDropIndex. + {act: model.ActionAddColumn, jobIDs: []int64{firstID + 5}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, + {act: model.ActionAddColumn, jobIDs: []int64{firstID + 6}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, + {act: model.ActionAddColumn, jobIDs: []int64{firstID + 7}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, + {act: model.ActionAddColumn, jobIDs: []int64{firstID + 8}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 8)}, cancelState: model.StatePublic}, + + // Test create table, watch out, table id will alloc a globalID. + {act: model.ActionCreateTable, jobIDs: []int64{firstID + 10}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + // Test create database, watch out, database id will alloc a globalID. + {act: model.ActionCreateSchema, jobIDs: []int64{firstID + 12}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + + {act: model.ActionDropColumn, jobIDs: []int64{firstID + 13}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 13)}, cancelState: model.StateDeleteOnly}, + {act: model.ActionDropColumn, jobIDs: []int64{firstID + 14}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 14)}, cancelState: model.StateWriteOnly}, + {act: model.ActionDropColumn, jobIDs: []int64{firstID + 15}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 15)}, cancelState: model.StateWriteReorganization}, + {act: model.ActionRebaseAutoID, jobIDs: []int64{firstID + 16}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionShardRowID, jobIDs: []int64{firstID + 17}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + + {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 18}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 19}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, + + {act: model.ActionAddForeignKey, jobIDs: []int64{firstID + 20}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionAddForeignKey, jobIDs: []int64{firstID + 21}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 21)}, cancelState: model.StatePublic}, + {act: model.ActionDropForeignKey, jobIDs: []int64{firstID + 22}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionDropForeignKey, jobIDs: []int64{firstID + 23}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 23)}, cancelState: model.StatePublic}, + + {act: model.ActionRenameTable, jobIDs: []int64{firstID + 24}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionRenameTable, jobIDs: []int64{firstID + 25}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 25)}, cancelState: model.StatePublic}, + + {act: model.ActionModifyTableCharsetAndCollate, jobIDs: []int64{firstID + 26}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionModifyTableCharsetAndCollate, jobIDs: []int64{firstID + 27}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 27)}, cancelState: model.StatePublic}, + {act: model.ActionTruncateTablePartition, jobIDs: []int64{firstID + 28}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionTruncateTablePartition, jobIDs: []int64{firstID + 29}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 29)}, cancelState: model.StatePublic}, + {act: model.ActionModifySchemaCharsetAndCollate, jobIDs: []int64{firstID + 31}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionModifySchemaCharsetAndCollate, jobIDs: []int64{firstID + 32}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 32)}, cancelState: model.StatePublic}, + + {act: model.ActionAddPrimaryKey, jobIDs: []int64{firstID + 33}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, + {act: model.ActionAddPrimaryKey, jobIDs: []int64{firstID + 34}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, + {act: model.ActionAddPrimaryKey, jobIDs: []int64{firstID + 35}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, + {act: model.ActionAddPrimaryKey, jobIDs: []int64{firstID + 36}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 36)}, cancelState: model.StatePublic}, + {act: model.ActionDropPrimaryKey, jobIDs: []int64{firstID + 37}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, + {act: model.ActionDropPrimaryKey, jobIDs: []int64{firstID + 38}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 38)}, cancelState: model.StateDeleteOnly}, + + {act: model.ActionAddColumns, jobIDs: []int64{firstID + 39}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, + {act: model.ActionAddColumns, jobIDs: []int64{firstID + 40}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, + {act: model.ActionAddColumns, jobIDs: []int64{firstID + 41}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, + {act: model.ActionAddColumns, jobIDs: []int64{firstID + 42}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 42)}, cancelState: model.StatePublic}, + + {act: model.ActionDropColumns, jobIDs: []int64{firstID + 43}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 43)}, cancelState: model.StateDeleteOnly}, + {act: model.ActionDropColumns, jobIDs: []int64{firstID + 44}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 44)}, cancelState: model.StateWriteOnly}, + {act: model.ActionDropColumns, jobIDs: []int64{firstID + 45}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 45)}, cancelState: model.StateWriteReorganization}, + + {act: model.ActionAlterIndexVisibility, jobIDs: []int64{firstID + 47}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionAlterIndexVisibility, jobIDs: []int64{firstID + 48}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 48)}, cancelState: model.StatePublic}, + + {act: model.ActionExchangeTablePartition, jobIDs: []int64{firstID + 54}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionExchangeTablePartition, jobIDs: []int64{firstID + 55}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 55)}, cancelState: model.StatePublic}, + + {act: model.ActionAddTablePartition, jobIDs: []int64{firstID + 60}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionAddTablePartition, jobIDs: []int64{firstID + 61}, cancelRetErrs: noErrs, cancelState: model.StateReplicaOnly}, + {act: model.ActionAddTablePartition, jobIDs: []int64{firstID + 62}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob}, cancelState: model.StatePublic}, + + // modify column has two different types, normal-type and reorg-type. The latter has 5 states and it can be cancelled except the public state. + {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 65}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 66}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, + {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 67}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, + {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 68}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, + {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 69}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob}, cancelState: model.StatePublic}, + + // for drop indexes + {act: model.ActionDropIndexes, jobIDs: []int64{firstID + 72}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 72)}, cancelState: model.StateWriteOnly}, + {act: model.ActionDropIndexes, jobIDs: []int64{firstID + 73}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 73)}, cancelState: model.StateDeleteOnly}, + {act: model.ActionDropIndexes, jobIDs: []int64{firstID + 74}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 74)}, cancelState: model.StateWriteReorganization}, + + // for alter db placement + {act: model.ActionModifySchemaDefaultPlacement, jobIDs: []int64{firstID + 75}, cancelRetErrs: noErrs, cancelState: model.StateNone}, + {act: model.ActionModifySchemaDefaultPlacement, jobIDs: []int64{firstID + 76}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 76)}, cancelState: model.StatePublic}, + } + + return tests +} + +func (s *testDDLSerialSuiteToVerify) checkDropIdx(t *testing.T, d *ddl, schemaID int64, tableID int64, idxName string, success bool) { + checkIdxExist(t, d, schemaID, tableID, idxName, !success) +} + +func (s *testDDLSerialSuiteToVerify) checkAddIdx(t *testing.T, d *ddl, schemaID int64, tableID int64, idxName string, success bool) { + checkIdxExist(t, d, schemaID, tableID, idxName, success) +} + +func checkIdxExist(t *testing.T, d *ddl, schemaID int64, tableID int64, idxName string, expectedExist bool) { + changedTable := testGetTable(t, d, schemaID, tableID) + var found bool + for _, idxInfo := range changedTable.Meta().Indices { + if idxInfo.Name.O == idxName { + found = true + break + } + } + require.Equal(t, found, expectedExist) +} + +func (s *testDDLSerialSuiteToVerify) checkAddColumns(d *ddl, schemaID int64, tableID int64, colNames []string, success bool) { + changedTable := testGetTable(s.T(), d, schemaID, tableID) + found := !checkColumnsNotFound(changedTable, colNames) + require.Equal(s.T(), found, success) +} + +func (s *testDDLSerialSuiteToVerify) checkCancelDropColumns(d *ddl, schemaID int64, tableID int64, colNames []string, success bool) { + changedTable := testGetTable(s.T(), d, schemaID, tableID) + notFound := checkColumnsNotFound(changedTable, colNames) + require.Equal(s.T(), notFound, success) +} + +func checkColumnsNotFound(t table.Table, colNames []string) bool { + notFound := true + for _, colName := range colNames { + for _, colInfo := range t.Meta().Columns { + if colInfo.Name.O == colName { + notFound = false + } + } + } + return notFound +} + +func checkIdxVisibility(changedTable table.Table, idxName string, expected bool) bool { + for _, idxInfo := range changedTable.Meta().Indices { + if idxInfo.Name.O == idxName && idxInfo.Invisible == expected { + return true + } + } + return false +} + +func (s *testDDLSerialSuiteToVerify) TestCancelJob() { + store := createMockStore(s.T()) + defer func() { + require.NoError(s.T(), store.Close()) + }() + d, err := testNewDDLAndStart( + context.Background(), + WithStore(store), + WithLease(testLease), + ) + require.NoError(s.T(), err) + defer func() { + require.NoError(s.T(), d.Stop()) + }() + dbInfo, err := testSchemaInfo(d, "test_cancel_job") + require.NoError(s.T(), err) + testCreateSchema(s.T(), testNewContext(d), d, dbInfo) + // create a partition table. + partitionTblInfo := testTableInfoWithPartition(s.T(), d, "t_partition", 5) + // Skip using sessPool. Make sure adding primary key can be successful. + partitionTblInfo.Columns[0].Flag |= mysql.NotNullFlag + // create table t (c1 int, c2 int, c3 int, c4 int, c5 int); + tblInfo, err := testTableInfo(d, "t", 5) + require.NoError(s.T(), err) + ctx := testNewContext(d) + err = ctx.NewTxn(context.Background()) + require.NoError(s.T(), err) + err = ctx.GetSessionVars().SetSystemVar("tidb_enable_exchange_partition", "1") + require.NoError(s.T(), err) + defer func() { + err := ctx.GetSessionVars().SetSystemVar("tidb_enable_exchange_partition", "0") + require.NoError(s.T(), err) + }() + testCreateTable(s.T(), ctx, d, dbInfo, partitionTblInfo) + tableAutoID := int64(100) + shardRowIDBits := uint64(5) + tblInfo.AutoIncID = tableAutoID + tblInfo.ShardRowIDBits = shardRowIDBits + job := testCreateTable(s.T(), ctx, d, dbInfo, tblInfo) + // insert t values (1, 2, 3, 4, 5); + originTable := testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + row := types.MakeDatums(1, 2, 3, 4, 5) + _, err = originTable.AddRecord(ctx, row) + require.NoError(s.T(), err) + txn, err := ctx.Txn(true) + require.NoError(s.T(), err) + err = txn.Commit(context.Background()) + require.NoError(s.T(), err) + + tc := &TestDDLCallback{} + // set up hook + firstJobID := job.ID + tests := buildCancelJobTests(firstJobID) + var checkErr error + var mu sync.Mutex + var test *testCancelJob + updateTest := func(t *testCancelJob) { + mu.Lock() + test = t + mu.Unlock() + } + hookCancelFunc := func(job *model.Job) { + if job.State == model.JobStateSynced || job.State == model.JobStateCancelled || job.State == model.JobStateCancelling { + return + } + // This hook only valid for the related test job. + // This is use to avoid parallel test fail. + mu.Lock() + if len(test.jobIDs) > 0 && test.jobIDs[0] != job.ID { + mu.Unlock() + return + } + mu.Unlock() + if checkErr != nil { + return + } + + hookCtx := mock.NewContext() + hookCtx.Store = store + err1 := hookCtx.NewTxn(context.Background()) + if err1 != nil { + checkErr = errors.Trace(err1) + return + } + txn, err1 = hookCtx.Txn(true) + if err1 != nil { + checkErr = errors.Trace(err1) + return + } + mu.Lock() + checkErr = checkCancelState(txn, job, test) + mu.Unlock() + if checkErr != nil { + return + } + err1 = txn.Commit(context.Background()) + if err1 != nil { + checkErr = errors.Trace(err1) + return + } + } + tc.onJobUpdated = hookCancelFunc + tc.onJobRunBefore = hookCancelFunc + d.SetHook(tc) + + // for adding index + updateTest(&tests[0]) + idxOrigName := "idx" + validArgs := []interface{}{false, model.NewCIStr(idxOrigName), + []*ast.IndexPartSpecification{{ + Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, + Length: -1, + }}, nil} + + // When the job satisfies this test case, the option will be rollback, so the job's schema state is none. + cancelState := model.StateNone + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddIndex, validArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) + updateTest(&tests[1]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddIndex, validArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) + updateTest(&tests[2]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddIndex, validArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) + updateTest(&tests[3]) + testCreateIndex(s.T(), ctx, d, dbInfo, tblInfo, false, "idx", "c2") + require.NoError(s.T(), checkErr) + txn, err = ctx.Txn(true) + require.NoError(s.T(), err) + require.Nil(s.T(), txn.Commit(context.Background())) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, true) + + // for add column + updateTest(&tests[4]) + addingColName := "colA" + newColumnDef := &ast.ColumnDef{ + Name: &ast.ColumnName{Name: model.NewCIStr(addingColName)}, + Tp: &types.FieldType{Tp: mysql.TypeLonglong}, + Options: []*ast.ColumnOption{}, + } + chs, coll := charset.GetDefaultCharsetAndCollate() + col, _, err := buildColumnAndConstraint(ctx, 2, newColumnDef, nil, chs, coll) + require.NoError(s.T(), err) + + addColumnArgs := []interface{}{col, &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, 0} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumn, addColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, []string{addingColName}, false) + + updateTest(&tests[5]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumn, addColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, []string{addingColName}, false) + + updateTest(&tests[6]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumn, addColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, []string{addingColName}, false) + + updateTest(&tests[7]) + testAddColumn(s.T(), ctx, d, dbInfo, tblInfo, addColumnArgs) + require.NoError(s.T(), checkErr) + s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, []string{addingColName}, true) + + // for create table + tblInfo1, err := testTableInfo(d, "t1", 2) + require.NoError(s.T(), err) + updateTest(&tests[8]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo1.ID, model.ActionCreateTable, []interface{}{tblInfo1}, &cancelState) + require.NoError(s.T(), checkErr) + testCheckTableState(s.T(), d, dbInfo, tblInfo1, model.StateNone) + + // for create database + dbInfo1, err := testSchemaInfo(d, "test_cancel_job1") + require.NoError(s.T(), err) + updateTest(&tests[9]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo1.ID, 0, model.ActionCreateSchema, []interface{}{dbInfo1}, &cancelState) + require.NoError(s.T(), checkErr) + testCheckSchemaState(s.T(), d, dbInfo1, model.StateNone) + + // for drop column. + updateTest(&tests[10]) + dropColName := "c3" + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, false) + testDropColumn(s.T(), ctx, d, dbInfo, tblInfo, dropColName, false) + require.NoError(s.T(), checkErr) + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, true) + + updateTest(&tests[11]) + dropColName = "c4" + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, false) + testDropColumn(s.T(), ctx, d, dbInfo, tblInfo, dropColName, false) + require.NoError(s.T(), checkErr) + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, true) + + updateTest(&tests[12]) + dropColName = "c5" + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, false) + testDropColumn(s.T(), ctx, d, dbInfo, tblInfo, dropColName, false) + require.NoError(s.T(), checkErr) + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, true) + + // cancel rebase auto id + updateTest(&tests[13]) + rebaseIDArgs := []interface{}{int64(200)} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionRebaseAutoID, rebaseIDArgs, &cancelState) + require.NoError(s.T(), checkErr) + changedTable := testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), changedTable.Meta().AutoIncID, tableAutoID) + + // cancel shard bits + updateTest(&tests[14]) + shardRowIDArgs := []interface{}{uint64(7)} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionShardRowID, shardRowIDArgs, &cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), changedTable.Meta().ShardRowIDBits, shardRowIDBits) + + // modify none-state column + col.DefaultValue = "1" + updateTest(&tests[15]) + modifyColumnArgs := []interface{}{col, col.Name, &ast.ColumnPosition{}, byte(0), uint64(0)} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, modifyColumnArgs, &test.cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + changedCol := model.FindColumnInfo(changedTable.Meta().Columns, col.Name.L) + require.Nil(s.T(), changedCol.DefaultValue) + + // modify delete-only-state column, + col.FieldType.Tp = mysql.TypeTiny + col.FieldType.Flen-- + updateTest(&tests[16]) + modifyColumnArgs = []interface{}{col, col.Name, &ast.ColumnPosition{}, byte(0), uint64(0)} + cancelState = model.StateNone + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, modifyColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + changedCol = model.FindColumnInfo(changedTable.Meta().Columns, col.Name.L) + require.Equal(s.T(), changedCol.FieldType.Tp, mysql.TypeLonglong) + require.Equal(s.T(), changedCol.FieldType.Flen, col.FieldType.Flen+1) + col.FieldType.Flen++ + + // Test add foreign key failed cause by canceled. + updateTest(&tests[17]) + addForeignKeyArgs := []interface{}{model.FKInfo{Name: model.NewCIStr("fk1")}} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, addForeignKeyArgs, &test.cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), len(changedTable.Meta().ForeignKeys), 0) + + // Test add foreign key successful. + updateTest(&tests[18]) + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, addForeignKeyArgs) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), len(changedTable.Meta().ForeignKeys), 1) + require.Equal(s.T(), changedTable.Meta().ForeignKeys[0].Name, addForeignKeyArgs[0].(model.FKInfo).Name) + + // Test drop foreign key failed cause by canceled. + updateTest(&tests[19]) + dropForeignKeyArgs := []interface{}{addForeignKeyArgs[0].(model.FKInfo).Name} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, dropForeignKeyArgs, &test.cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), len(changedTable.Meta().ForeignKeys), 1) + require.Equal(s.T(), changedTable.Meta().ForeignKeys[0].Name, dropForeignKeyArgs[0].(model.CIStr)) + + // Test drop foreign key successful. + updateTest(&tests[20]) + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, dropForeignKeyArgs) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), len(changedTable.Meta().ForeignKeys), 0) + + // test rename table failed caused by canceled. + test = &tests[21] + renameTableArgs := []interface{}{dbInfo.ID, model.NewCIStr("t2"), dbInfo.Name} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, renameTableArgs, &test.cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), changedTable.Meta().Name.L, "t") + + // test rename table successful. + test = &tests[22] + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, renameTableArgs) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), changedTable.Meta().Name.L, "t2") + + // test modify table charset failed caused by canceled. + test = &tests[23] + modifyTableCharsetArgs := []interface{}{"utf8mb4", "utf8mb4_bin"} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, modifyTableCharsetArgs, &test.cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), changedTable.Meta().Charset, "utf8") + require.Equal(s.T(), changedTable.Meta().Collate, "utf8_bin") + + // test modify table charset successfully. + test = &tests[24] + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, modifyTableCharsetArgs) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.Equal(s.T(), changedTable.Meta().Charset, "utf8mb4") + require.Equal(s.T(), changedTable.Meta().Collate, "utf8mb4_bin") + + // test truncate table partition failed caused by canceled. + test = &tests[25] + truncateTblPartitionArgs := []interface{}{[]int64{partitionTblInfo.Partition.Definitions[0].ID}} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, partitionTblInfo.ID, test.act, truncateTblPartitionArgs, &test.cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, partitionTblInfo.ID) + require.True(s.T(), changedTable.Meta().Partition.Definitions[0].ID == partitionTblInfo.Partition.Definitions[0].ID) + + // test truncate table partition charset successfully. + test = &tests[26] + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, partitionTblInfo.ID, test.act, truncateTblPartitionArgs) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, partitionTblInfo.ID) + require.False(s.T(), changedTable.Meta().Partition.Definitions[0].ID == partitionTblInfo.Partition.Definitions[0].ID) + + // test modify schema charset failed caused by canceled. + test = &tests[27] + charsetAndCollate := []interface{}{"utf8mb4", "utf8mb4_bin"} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, charsetAndCollate, &test.cancelState) + require.NoError(s.T(), checkErr) + dbInfo, err = testGetSchemaInfoWithError(d, dbInfo.ID) + require.NoError(s.T(), err) + require.Equal(s.T(), dbInfo.Charset, "") + require.Equal(s.T(), dbInfo.Collate, "") + + // test modify table charset successfully. + test = &tests[28] + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, charsetAndCollate) + require.NoError(s.T(), checkErr) + dbInfo, err = testGetSchemaInfoWithError(d, dbInfo.ID) + require.NoError(s.T(), err) + require.Equal(s.T(), dbInfo.Charset, "utf8mb4") + require.Equal(s.T(), dbInfo.Collate, "utf8mb4_bin") + + // for adding primary key + tblInfo = changedTable.Meta() + updateTest(&tests[29]) + idxOrigName = "primary" + validArgs = []interface{}{false, model.NewCIStr(idxOrigName), + []*ast.IndexPartSpecification{{ + Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, + Length: -1, + }}, nil} + cancelState = model.StateNone + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddPrimaryKey, validArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) + updateTest(&tests[30]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddPrimaryKey, validArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) + updateTest(&tests[31]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddPrimaryKey, validArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) + updateTest(&tests[32]) + testCreatePrimaryKey(s.T(), ctx, d, dbInfo, tblInfo, "c1") + require.NoError(s.T(), checkErr) + txn, err = ctx.Txn(true) + require.NoError(s.T(), err) + require.Nil(s.T(), txn.Commit(context.Background())) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, true) + + // for dropping primary key + updateTest(&tests[33]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionDropPrimaryKey, validArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkDropIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) + updateTest(&tests[34]) + testDropIndex(s.T(), ctx, d, dbInfo, tblInfo, idxOrigName) + require.NoError(s.T(), checkErr) + s.checkDropIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, true) + + // for add columns + updateTest(&tests[35]) + addingColNames := []string{"colA", "colB", "colC", "colD", "colE", "colF"} + cols := make([]*table.Column, len(addingColNames)) + for i, addingColName := range addingColNames { + newColumnDef := &ast.ColumnDef{ + Name: &ast.ColumnName{Name: model.NewCIStr(addingColName)}, + Tp: &types.FieldType{Tp: mysql.TypeLonglong}, + Options: []*ast.ColumnOption{}, + } + col, _, err := buildColumnAndConstraint(ctx, 0, newColumnDef, nil, mysql.DefaultCharset, "") + require.NoError(s.T(), err) + cols[i] = col + } + offsets := make([]int, len(cols)) + positions := make([]*ast.ColumnPosition, len(cols)) + for i := range positions { + positions[i] = &ast.ColumnPosition{Tp: ast.ColumnPositionNone} + } + ifNotExists := make([]bool, len(cols)) + + addColumnArgs = []interface{}{cols, positions, offsets, ifNotExists} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumns, addColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, addingColNames, false) + + updateTest(&tests[36]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumns, addColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, addingColNames, false) + + updateTest(&tests[37]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumns, addColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, addingColNames, false) + + updateTest(&tests[38]) + testAddColumns(s.T(), ctx, d, dbInfo, tblInfo, addColumnArgs) + require.NoError(s.T(), checkErr) + s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, addingColNames, true) + + // for drop columns + updateTest(&tests[39]) + dropColNames := []string{"colA", "colB"} + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, false) + testDropColumns(s.T(), ctx, d, dbInfo, tblInfo, dropColNames, false) + require.NoError(s.T(), checkErr) + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, true) + + updateTest(&tests[40]) + dropColNames = []string{"colC", "colD"} + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, false) + testDropColumns(s.T(), ctx, d, dbInfo, tblInfo, dropColNames, false) + require.NoError(s.T(), checkErr) + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, true) + + updateTest(&tests[41]) + dropColNames = []string{"colE", "colF"} + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, false) + testDropColumns(s.T(), ctx, d, dbInfo, tblInfo, dropColNames, false) + require.NoError(s.T(), checkErr) + s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, true) + + // test alter index visibility failed caused by canceled. + indexName := "idx_c3" + testCreateIndex(s.T(), ctx, d, dbInfo, tblInfo, false, indexName, "c3") + require.NoError(s.T(), checkErr) + txn, err = ctx.Txn(true) + require.NoError(s.T(), err) + require.Nil(s.T(), txn.Commit(context.Background())) + s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, indexName, true) + + updateTest(&tests[42]) + alterIndexVisibility := []interface{}{model.NewCIStr(indexName), true} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, alterIndexVisibility, &test.cancelState) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.True(s.T(), checkIdxVisibility(changedTable, indexName, false)) + + // cancel alter index visibility successfully + updateTest(&tests[43]) + alterIndexVisibility = []interface{}{model.NewCIStr(indexName), true} + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, alterIndexVisibility) + require.NoError(s.T(), checkErr) + changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) + require.True(s.T(), checkIdxVisibility(changedTable, indexName, true)) + + // test exchange partition failed caused by canceled + pt := testTableInfoWithPartition(s.T(), d, "pt", 5) + nt, err := testTableInfo(d, "nt", 5) + require.NoError(s.T(), err) + testCreateTable(s.T(), ctx, d, dbInfo, pt) + testCreateTable(s.T(), ctx, d, dbInfo, nt) + + updateTest(&tests[44]) + defID := pt.Partition.Definitions[0].ID + exchangeTablePartition := []interface{}{defID, dbInfo.ID, pt.ID, "p0", true} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, nt.ID, test.act, exchangeTablePartition, &test.cancelState) + require.NoError(s.T(), checkErr) + changedNtTable := testGetTable(s.T(), d, dbInfo.ID, nt.ID) + changedPtTable := testGetTable(s.T(), d, dbInfo.ID, pt.ID) + require.True(s.T(), changedNtTable.Meta().ID == nt.ID) + require.True(s.T(), changedPtTable.Meta().Partition.Definitions[0].ID == pt.Partition.Definitions[0].ID) + + // cancel exchange partition successfully + updateTest(&tests[45]) + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, nt.ID, test.act, exchangeTablePartition) + require.NoError(s.T(), checkErr) + changedNtTable = testGetTable(s.T(), d, dbInfo.ID, pt.Partition.Definitions[0].ID) + changedPtTable = testGetTable(s.T(), d, dbInfo.ID, pt.ID) + require.False(s.T(), changedNtTable.Meta().ID == nt.ID) + require.True(s.T(), changedPtTable.Meta().Partition.Definitions[0].ID == nt.ID) + + // Cancel add table partition. + baseTableInfo := testTableInfoWithPartitionLessThan(s.T(), d, "empty_table", 5, "1000") + testCreateTable(s.T(), ctx, d, dbInfo, baseTableInfo) + + cancelState = model.StateNone + updateTest(&tests[46]) + addedPartInfo := testAddedNewTablePartitionInfo(s.T(), d, baseTableInfo, "p1", "maxvalue") + addPartitionArgs := []interface{}{addedPartInfo} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, addPartitionArgs, &cancelState) + require.NoError(s.T(), checkErr) + baseTable := testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) + require.Equal(s.T(), len(baseTable.Meta().Partition.Definitions), 1) + + updateTest(&tests[47]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, addPartitionArgs, &cancelState) + require.NoError(s.T(), checkErr) + baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) + require.Equal(s.T(), len(baseTable.Meta().Partition.Definitions), 1) + + updateTest(&tests[48]) + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, addPartitionArgs) + require.NoError(s.T(), checkErr) + baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) + require.Equal(s.T(), len(baseTable.Meta().Partition.Definitions), 2) + require.Equal(s.T(), baseTable.Meta().Partition.Definitions[1].ID, addedPartInfo.Definitions[0].ID) + require.Equal(s.T(), baseTable.Meta().Partition.Definitions[1].LessThan[0], addedPartInfo.Definitions[0].LessThan[0]) + + // Cancel modify column which should reorg the data. + require.Nil(s.T(), failpoint.Enable("github.com/pingcap/tidb/ddl/skipMockContextDoExec", `return(true)`)) + baseTableInfo = testTableInfoWith2IndexOnFirstColumn(s.T(), d, "modify-table", 2) + // This will cost 2 global id, one for table id, the other for the job id. + testCreateTable(s.T(), ctx, d, dbInfo, baseTableInfo) + + cancelState = model.StateNone + newCol := baseTableInfo.Columns[0].Clone() + // change type from long to tinyint. + newCol.FieldType = *types.NewFieldType(mysql.TypeTiny) + // change from null to not null + newCol.FieldType.Flag |= mysql.NotNullFlag + newCol.FieldType.Flen = 2 + + originColName := baseTableInfo.Columns[0].Name + pos := &ast.ColumnPosition{Tp: ast.ColumnPositionNone} + + updateTest(&tests[49]) + modifyColumnArgs = []interface{}{&newCol, originColName, pos, mysql.TypeNull, 0} + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeLong) + require.Equal(s.T(), mysql.HasNotNullFlag(baseTable.Meta().Columns[0].FieldType.Flag), false) + + updateTest(&tests[50]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeLong) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Flag&mysql.NotNullFlag, uint(0)) + + updateTest(&tests[51]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeLong) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Flag&mysql.NotNullFlag, uint(0)) + + updateTest(&tests[52]) + doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs, &cancelState) + require.NoError(s.T(), checkErr) + baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeLong) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Flag&mysql.NotNullFlag, uint(0)) + + updateTest(&tests[53]) + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs) + require.NoError(s.T(), checkErr) + baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeTiny) + require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Flag&mysql.NotNullFlag, uint(1)) + require.Nil(s.T(), failpoint.Disable("github.com/pingcap/tidb/ddl/skipMockContextDoExec")) + + // for drop indexes + updateTest(&tests[54]) + ifExists := make([]bool, 2) + idxNames := []model.CIStr{model.NewCIStr("i1"), model.NewCIStr("i2")} + dropIndexesArgs := []interface{}{idxNames, ifExists} + tableInfo := createTestTableForDropIndexes(s.T(), ctx, d, dbInfo, "test-drop-indexes", 6) + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tableInfo.ID, test.act, dropIndexesArgs) + s.checkDropIndexes(d, dbInfo.ID, tableInfo.ID, idxNames, true) + + updateTest(&tests[55]) + idxNames = []model.CIStr{model.NewCIStr("i3"), model.NewCIStr("i4")} + dropIndexesArgs = []interface{}{idxNames, ifExists} + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tableInfo.ID, test.act, dropIndexesArgs) + s.checkDropIndexes(d, dbInfo.ID, tableInfo.ID, idxNames, true) + + updateTest(&tests[56]) + idxNames = []model.CIStr{model.NewCIStr("i5"), model.NewCIStr("i6")} + dropIndexesArgs = []interface{}{idxNames, ifExists} + doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tableInfo.ID, test.act, dropIndexesArgs) + s.checkDropIndexes(d, dbInfo.ID, tableInfo.ID, idxNames, true) +} + +func (s *testDDLSerialSuiteToVerify) checkDropIndexes(d *ddl, schemaID int64, tableID int64, idxNames []model.CIStr, success bool) { + for _, idxName := range idxNames { + checkIdxExist(s.T(), d, schemaID, tableID, idxName.O, !success) + } +} + +func doDDLJobErrWithSchemaState(ctx sessionctx.Context, ddl *ddl, t *testing.T, schemaID, tableID int64, tp model.ActionType, + args []interface{}, state *model.SchemaState) *model.Job { + job := &model.Job{ + SchemaID: schemaID, + TableID: tableID, + Type: tp, + Args: args, + BinlogInfo: &model.HistoryInfo{}, + } + // TODO: check error detail + ctx.SetValue(sessionctx.QueryString, "skip") + require.Error(t, ddl.DoDDLJob(ctx, job)) + testCheckJobCancelled(t, ddl.store, job, state) + + return job +} + +func doDDLJobSuccess(ctx sessionctx.Context, ddl DDL, t *testing.T, schemaID, tableID int64, tp model.ActionType, + args []interface{}) { + job := &model.Job{ + SchemaID: schemaID, + TableID: tableID, + Type: tp, + Args: args, + BinlogInfo: &model.HistoryInfo{}, + } + ctx.SetValue(sessionctx.QueryString, "skip") + err := ddl.DoDDLJob(ctx, job) + require.NoError(t, err) +} + +func testDropColumns(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, colNames []string, isError bool) *model.Job { + job := buildDropColumnsJob(dbInfo, tblInfo, colNames) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) + if isError { + require.Error(t, err) + return nil + } + require.NoError(t, err) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) + return job +} + +func buildDropColumnsJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, colNames []string) *model.Job { + columnNames := make([]model.CIStr, len(colNames)) + ifExists := make([]bool, len(colNames)) + for i, colName := range colNames { + columnNames[i] = model.NewCIStr(colName) + } + job := &model.Job{ + SchemaID: dbInfo.ID, + TableID: tblInfo.ID, + Type: model.ActionDropColumns, + BinlogInfo: &model.HistoryInfo{}, + Args: []interface{}{columnNames, ifExists}, + } + return job +} + +func buildDropColumnJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, colName string) *model.Job { + return &model.Job{ + SchemaID: dbInfo.ID, + TableID: tblInfo.ID, + Type: model.ActionDropColumn, + BinlogInfo: &model.HistoryInfo{}, + MultiSchemaInfo: &model.MultiSchemaInfo{}, + Args: []interface{}{model.NewCIStr(colName)}, + } +} + +func testDropColumn(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, colName string, isError bool) *model.Job { + job := buildDropColumnJob(dbInfo, tblInfo, colName) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) + if isError { + require.Error(t, err) + return nil + } + require.NoError(t, err) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) + return job +} diff --git a/ddl/column.go b/ddl/column.go index 00b60962c459c..882543c34863f 100644 --- a/ddl/column.go +++ b/ddl/column.go @@ -43,7 +43,7 @@ import ( "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" decoder "github.com/pingcap/tidb/util/rowDecoder" "github.com/pingcap/tidb/util/sqlexec" @@ -117,7 +117,7 @@ func createColumnInfo(tblInfo *model.TableInfo, colInfo *model.ColumnInfo, pos * func checkAddColumn(t *meta.Meta, job *model.Job) (*model.TableInfo, *model.ColumnInfo, *model.ColumnInfo, *ast.ColumnPosition, int, error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, nil, nil, nil, 0, errors.Trace(err) } @@ -220,7 +220,7 @@ func onAddColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) asyncNotifyEvent(d, &ddlutil.Event{Tp: model.ActionAddColumn, TableInfo: tblInfo, ColumnInfos: []*model.ColumnInfo{columnInfo}}) default: - err = ErrInvalidDDLState.GenWithStackByArgs("column", columnInfo.State) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("column", columnInfo.State) } return ver, errors.Trace(err) @@ -228,7 +228,7 @@ func onAddColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) func checkAddColumns(t *meta.Meta, job *model.Job) (*model.TableInfo, []*model.ColumnInfo, []*model.ColumnInfo, []*ast.ColumnPosition, []int, []bool, error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, nil, nil, nil, nil, nil, errors.Trace(err) } @@ -383,7 +383,7 @@ func onAddColumns(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) asyncNotifyEvent(d, &ddlutil.Event{Tp: model.ActionAddColumns, TableInfo: tblInfo, ColumnInfos: columnInfos}) default: - err = ErrInvalidDDLState.GenWithStackByArgs("column", columnInfos[0].State) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("column", columnInfos[0].State) } return ver, errors.Trace(err) @@ -460,14 +460,14 @@ func onDropColumns(t *meta.Meta, job *model.Job) (ver int64, _ error) { job.Args = append(job.Args, getPartitionIDs(tblInfo)) } default: - err = errInvalidDDLJob.GenWithStackByArgs("table", tblInfo.State) + err = dbterror.ErrInvalidDDLJob.GenWithStackByArgs("table", tblInfo.State) } return ver, errors.Trace(err) } func checkDropColumns(t *meta.Meta, job *model.Job) (*model.TableInfo, []*model.ColumnInfo, int, []*model.IndexInfo, error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, nil, 0, nil, errors.Trace(err) } @@ -495,7 +495,7 @@ func checkDropColumns(t *meta.Meta, job *model.Job) (*model.TableInfo, []*model. continue } job.State = model.JobStateCancelled - return nil, nil, 0, nil, ErrCantDropFieldOrKey.GenWithStack("column %s doesn't exist", colName) + return nil, nil, 0, nil, dbterror.ErrCantDropFieldOrKey.GenWithStack("column %s doesn't exist", colName) } if err = isDroppableColumn(job.MultiSchemaInfo != nil, tblInfo, colName); err != nil { job.State = model.JobStateCancelled @@ -602,14 +602,14 @@ func onDropColumn(t *meta.Meta, job *model.Job) (ver int64, _ error) { job.Args = append(job.Args, getPartitionIDs(tblInfo)) } default: - err = errInvalidDDLJob.GenWithStackByArgs("table", tblInfo.State) + err = dbterror.ErrInvalidDDLJob.GenWithStackByArgs("table", tblInfo.State) } return ver, errors.Trace(err) } func checkDropColumn(t *meta.Meta, job *model.Job) (*model.TableInfo, *model.ColumnInfo, []*model.IndexInfo, error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, nil, nil, errors.Trace(err) } @@ -626,7 +626,7 @@ func checkDropColumn(t *meta.Meta, job *model.Job) (*model.TableInfo, *model.Col colInfo := model.FindColumnInfo(tblInfo.Columns, colName.L) if colInfo == nil || colInfo.Hidden { job.State = model.JobStateCancelled - return nil, nil, nil, ErrCantDropFieldOrKey.GenWithStack("column %s doesn't exist", colName) + return nil, nil, nil, dbterror.ErrCantDropFieldOrKey.GenWithStack("column %s doesn't exist", colName) } if err = isDroppableColumn(job.MultiSchemaInfo != nil, tblInfo, colName); err != nil { job.State = model.JobStateCancelled @@ -712,13 +712,9 @@ func needChangeColumnData(oldCol, newCol *model.ColumnInfo) bool { return true } -// Column type conversion between varchar to char need reorganization because -// 1. varchar -> char: char type is stored with the padding removed. All the indexes need to be rewritten. -// 2. char -> varchar: the index value encoding of secondary index on clustered primary key tables is different. -// These secondary indexes need to be rewritten. +// TODO: it is used for plugins. so change plugin's using and remove it. func convertBetweenCharAndVarchar(oldCol, newCol byte) bool { - return (types.IsTypeVarchar(oldCol) && newCol == mysql.TypeString) || - (oldCol == mysql.TypeString && types.IsTypeVarchar(newCol) && collate.NewCollationEnabled()) + return types.ConvertBetweenCharAndVarchar(oldCol, newCol) } func isElemsChangedToModifyColumn(oldElems, newElems []string) bool { @@ -757,7 +753,7 @@ func getModifyColumnInfo(t *meta.Meta, job *model.Job) (*model.DBInfo, *model.Ta return nil, nil, nil, jobParam, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return nil, nil, nil, jobParam, errors.Trace(err) } @@ -857,7 +853,7 @@ func (w *worker) onModifyColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver in if mysql.HasPriKeyFlag(oldCol.Flag) { job.State = model.JobStateCancelled msg := "this column has primary key flag" - return ver, errUnsupportedModifyColumn.GenWithStackByArgs(msg) + return ver, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg) } jobParam.changingCol = jobParam.newCol.Clone() @@ -945,7 +941,7 @@ func (w *worker) doModifyColumnTypeWithData( // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, targetCol, oldCol.Tp != changingCol.Tp) if err != nil { - if ErrWarnDataTruncated.Equal(err) || errInvalidUseOfNull.Equal(err) { + if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { job.State = model.JobStateRollingback } return ver, err @@ -984,7 +980,7 @@ func (w *worker) doModifyColumnTypeWithData( // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, targetCol, oldCol.Tp != changingCol.Tp) if err != nil { - if ErrWarnDataTruncated.Equal(err) || errInvalidUseOfNull.Equal(err) { + if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { job.State = model.JobStateRollingback } return ver, err @@ -1028,7 +1024,7 @@ func (w *worker) doModifyColumnTypeWithData( err = w.runReorgJob(t, reorgInfo, tbl.Meta(), d.lease, func() (addIndexErr error) { defer util.Recover(metrics.LabelDDL, "onModifyColumn", func() { - addIndexErr = errCancelledDDLJob.GenWithStack("modify table `%v` column `%v` panic", tblInfo.Name, oldCol.Name) + addIndexErr = dbterror.ErrCancelledDDLJob.GenWithStack("modify table `%v` column `%v` panic", tblInfo.Name, oldCol.Name) }, false) // Use old column name to generate less confusing error messages. changingColCpy := changingCol.Clone() @@ -1036,7 +1032,7 @@ func (w *worker) doModifyColumnTypeWithData( return w.updateColumnAndIndexes(tbl, oldCol, changingColCpy, changingIdxs, reorgInfo) }) if err != nil { - if errWaitReorgTimeout.Equal(err) { + if dbterror.ErrWaitReorgTimeout.Equal(err) { // If timeout, we should return, check for the owner and re-wait job done. return ver, nil } @@ -1100,7 +1096,7 @@ func (w *worker) doModifyColumnTypeWithData( job.Args = []interface{}{oldIdxIDs, getPartitionIDs(tblInfo)} asyncNotifyEvent(d, &ddlutil.Event{Tp: model.ActionModifyColumn, TableInfo: tblInfo, ColumnInfos: []*model.ColumnInfo{changingCol}}) default: - err = ErrInvalidDDLState.GenWithStackByArgs("column", changingCol.State) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("column", changingCol.State) } return ver, errors.Trace(err) @@ -1134,7 +1130,7 @@ func (w *worker) updateColumnAndIndexes(t table.Table, oldCol, col *model.Column time.Sleep(30 * time.Millisecond) if w.reorgCtx.isReorgCanceled() { // Job is cancelled. So it can't be done. - failpoint.Return(errCancelledDDLJob) + failpoint.Return(dbterror.ErrCancelledDDLJob) } } } @@ -1295,7 +1291,7 @@ func (w *updateColumnWorker) getRowRecord(handle kv.Handle, recordKey []byte, ra sysTZ := w.sessCtx.GetSessionVars().StmtCtx.TimeZone _, err := w.rowDecoder.DecodeTheExistedColumnMap(w.sessCtx, handle, rawRow, sysTZ, w.rowMap) if err != nil { - return errors.Trace(errCantDecodeRecord.GenWithStackByArgs("column", err)) + return errors.Trace(dbterror.ErrCantDecodeRecord.GenWithStackByArgs("column", err)) } if _, ok := w.rowMap[w.newColInfo.ID]; ok { @@ -1333,7 +1329,7 @@ func (w *updateColumnWorker) getRowRecord(handle kv.Handle, recordKey []byte, ra failpoint.Inject("MockReorgTimeoutInOneRegion", func(val failpoint.Value) { if val.(bool) { if handle.IntValue() == 3000 && atomic.CompareAndSwapInt32(&TestCheckReorgTimeout, 0, 1) { - failpoint.Return(errors.Trace(errWaitReorgTimeout)) + failpoint.Return(errors.Trace(dbterror.ErrWaitReorgTimeout)) } } }) @@ -1396,6 +1392,7 @@ func (w *updateColumnWorker) BackfillDataInTxn(handleRange reorgBackfillTask) (t taskCtx.addedCount = 0 taskCtx.scanCount = 0 txn.SetOption(kv.Priority, w.priority) + w.ddlWorker.setResourceGroupTaggerForTopSQL(txn) rowRecords, nextKey, taskDone, err := w.fetchRowColVals(txn, handleRange) if err != nil { @@ -1447,7 +1444,7 @@ func (w *worker) doModifyColumn( newCol, oldCol *model.ColumnInfo, pos *ast.ColumnPosition) (ver int64, _ error) { if oldCol.ID != newCol.ID { job.State = model.JobStateRollingback - return ver, errKeyColumnDoesNotExits.GenWithStack("column %s id %d does not exist, this column may have been updated by other DDL ran in parallel", oldCol.Name, newCol.ID) + return ver, dbterror.ErrKeyColumnDoesNotExits.GenWithStack("column %s id %d does not exist, this column may have been updated by other DDL ran in parallel", oldCol.Name, newCol.ID) } // Column from null to not null. if !mysql.HasNotNullFlag(oldCol.Flag) && mysql.HasNotNullFlag(newCol.Flag) { @@ -1462,7 +1459,7 @@ func (w *worker) doModifyColumn( // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, newCol, oldCol.Tp != newCol.Tp) if err != nil { - if ErrWarnDataTruncated.Equal(err) || errInvalidUseOfNull.Equal(err) { + if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { job.State = model.JobStateRollingback } return ver, err @@ -1607,7 +1604,7 @@ func checkNewAutoRandomBits(idAccessors meta.AutoIDAccessors, oldCol *model.Colu if usedBits > newLayout.IncrementalBits { overflowCnt := usedBits - newLayout.IncrementalBits errMsg := fmt.Sprintf(autoid.AutoRandomOverflowErrMsg, newAutoRandBits-overflowCnt, newAutoRandBits, oldCol.Name.O) - return ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) } return nil } @@ -1624,7 +1621,7 @@ func applyNewAutoRandomBits(d *ddlCtx, m *meta.Meta, dbInfo *model.DBInfo, autoRandAlloc := autoid.NewAllocatorsFromTblInfo(d.store, dbInfo.ID, tblInfo).Get(autoid.AutoRandomType) if autoRandAlloc == nil { errMsg := fmt.Sprintf(autoid.AutoRandomAllocatorNotFound, dbInfo.Name.O, tblInfo.Name.O) - return ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) } idAcc := m.GetAutoIDAccessors(dbInfo.ID, tblInfo.ID).RowID() nextAutoIncID, err := idAcc.Get() @@ -1676,15 +1673,15 @@ func checkForNullValue(ctx context.Context, sctx sessionctx.Context, isDataTrunc rowCount := len(rows) if rowCount != 0 { if isDataTruncated { - return ErrWarnDataTruncated.GenWithStackByArgs(newCol.Name.L, rowCount) + return dbterror.ErrWarnDataTruncated.GenWithStackByArgs(newCol.Name.L, rowCount) } - return errInvalidUseOfNull + return dbterror.ErrInvalidUseOfNull } return nil } func updateColumnDefaultValue(t *meta.Meta, job *model.Job, newCol *model.ColumnInfo, oldColName *model.CIStr) (ver int64, _ error) { - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } @@ -1724,12 +1721,12 @@ func isColumnCanDropWithIndex(isMultiSchemaChange bool, colName string, indices if indexInfo.Primary || len(indexInfo.Columns) > 1 { for _, col := range indexInfo.Columns { if col.Name.L == colName { - return errCantDropColWithIndex.GenWithStack("can't drop column %s with composite index covered or Primary Key covered now", colName) + return dbterror.ErrCantDropColWithIndex.GenWithStack("can't drop column %s with composite index covered or Primary Key covered now", colName) } } } if len(indexInfo.Columns) == 1 && indexInfo.Columns[0].Name.L == colName && !isMultiSchemaChange { - return errCantDropColWithIndex.GenWithStack("can't drop column %s with tidb_enable_change_multi_schema is disable", colName) + return dbterror.ErrCantDropColWithIndex.GenWithStack("can't drop column %s with tidb_enable_change_multi_schema is disable", colName) } } return nil @@ -1763,7 +1760,7 @@ func allocateColumnID(tblInfo *model.TableInfo) int64 { func checkAddColumnTooManyColumns(colNum int) error { if uint32(colNum) > atomic.LoadUint32(&config.GetGlobalConfig().TableColumnCountLimit) { - return errTooManyFields + return dbterror.ErrTooManyFields } return nil } diff --git a/ddl/column_change_test.go b/ddl/column_change_test.go index 5357c0ec1c239..dbd10cedd605d 100644 --- a/ddl/column_change_test.go +++ b/ddl/column_change_test.go @@ -12,308 +12,179 @@ // See the License for the specific language governing permissions and // limitations under the License. -package ddl +package ddl_test import ( "context" "fmt" - "sync" "sync/atomic" "testing" "time" "github.com/pingcap/errors" + "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" - "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" - "github.com/pingcap/tidb/util/testutil" "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" ) -type testColumnChangeSuiteToVerify struct { - suite.Suite - store kv.Storage - dbInfo *model.DBInfo -} - -func TestColumnChangeSuite(t *testing.T) { - suite.Run(t, new(testColumnChangeSuiteToVerify)) -} - -func (s *testColumnChangeSuiteToVerify) SetupSuite() { - SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) - s.store = createMockStore(s.T()) - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - err := d.Stop() - require.NoError(s.T(), err) - }() - s.dbInfo, err = testSchemaInfo(d, "test_index_change") - require.NoError(s.T(), err) - testCreateSchema(s.T(), testNewContext(d), d, s.dbInfo) -} - -func (s *testColumnChangeSuiteToVerify) TearDownSuite() { - s.store.Close() -} +func TestColumnAdd(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (c1 int, c2 int);") + tk.MustExec("insert t values (1, 2);") -func (s *testColumnChangeSuiteToVerify) TestColumnChange() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - err := d.Stop() - require.NoError(s.T(), err) - }() - // create table t (c1 int, c2 int); - tblInfo, err := testTableInfo(d, "t", 2) - require.NoError(s.T(), err) - ctx := testNewContext(d) - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - // insert t values (1, 2); - originTable := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - row := types.MakeDatums(1, 2) - h, err := originTable.AddRecord(ctx, row) - require.NoError(s.T(), err) - txn, err := ctx.Txn(true) - require.NoError(s.T(), err) - err = txn.Commit(context.Background()) - require.NoError(s.T(), err) + d := dom.DDL() + tc := &ddl.TestDDLCallback{Do: dom} - var mu sync.Mutex - tc := &TestDDLCallback{} + ct := testNewContext(store) // set up hook - prevState := model.StateNone var ( deleteOnlyTable table.Table writeOnlyTable table.Table publicTable table.Table + dropCol *table.Column ) - var checkErr error - tc.onJobUpdated = func(job *model.Job) { - if job.SchemaState == prevState { - return - } - hookCtx := mock.NewContext() - hookCtx.Store = s.store - prevState = job.SchemaState - err := hookCtx.NewTxn(context.Background()) - if err != nil { - checkErr = errors.Trace(err) - } + first := true + var jobID int64 + tc.OnJobUpdatedExported = func(job *model.Job) { + jobID = job.ID + require.NoError(t, dom.Reload()) + tbl, exist := dom.InfoSchema().TableByID(job.TableID) + require.True(t, exist) switch job.SchemaState { case model.StateDeleteOnly: - deleteOnlyTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } + deleteOnlyTable = tbl case model.StateWriteOnly: - writeOnlyTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - err = s.checkAddWriteOnly(hookCtx, d, deleteOnlyTable, writeOnlyTable, h) - if err != nil { - checkErr = errors.Trace(err) - } + writeOnlyTable = tbl + require.NoError(t, checkAddWriteOnly(ct, deleteOnlyTable, writeOnlyTable, kv.IntHandle(1))) case model.StatePublic: - mu.Lock() - publicTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - err = s.checkAddPublic(hookCtx, d, writeOnlyTable, publicTable) - if err != nil { - checkErr = errors.Trace(err) + if first { + first = false + } else { + return } - mu.Unlock() + publicTable = tbl + require.NoError(t, checkAddPublic(ct, writeOnlyTable, publicTable)) } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) + } + d.SetHook(tc) + tk.MustExec("alter table t add column c3 int default 3") + tb := publicTable + v := getSchemaVer(t, tk.Session()) + checkHistoryJobArgs(t, tk.Session(), jobID, &historyJobArgs{ver: v, tbl: tb.Meta()}) + + // Drop column. + first = true + tc.OnJobUpdatedExported = func(job *model.Job) { + jobID = job.ID + require.NoError(t, dom.Reload()) + tbl, exist := dom.InfoSchema().TableByID(job.TableID) + require.True(t, exist) + switch job.SchemaState { + case model.StateNone: + if first { + dropCol = tbl.VisibleCols()[2] + first = false + } + default: + for _, col := range tbl.Cols() { + require.NotEqualf(t, col.ID, dropCol.ID, "column is not dropped") + } } - err = txn.Commit(context.Background()) - if err != nil { - checkErr = errors.Trace(err) + } + d.SetHook(tc) + tk.MustExec("alter table t drop column c3") + v = getSchemaVer(t, tk.Session()) + // Don't check column, so it's ok to use tb. + checkHistoryJobArgs(t, tk.Session(), jobID, &historyJobArgs{ver: v, tbl: tb.Meta()}) + + // Add column not default. + first = true + tc.OnJobUpdatedExported = func(job *model.Job) { + jobID = job.ID + tbl, exist := dom.InfoSchema().TableByID(job.TableID) + require.True(t, exist) + switch job.SchemaState { + case model.StateWriteOnly: + writeOnlyTable = tbl + case model.StatePublic: + if first { + first = false + } else { + return + } + sess := testNewContext(store) + err := sess.NewTxn(context.Background()) + require.NoError(t, err) + _, err = writeOnlyTable.AddRecord(sess, types.MakeDatums(10, 10)) + require.NoError(t, err) } } d.SetHook(tc) - defaultValue := int64(3) - job := testCreateColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c3", &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, defaultValue) - require.NoError(s.T(), checkErr) - testCheckJobDone(s.T(), d, job, true) - mu.Lock() - tb := publicTable - mu.Unlock() - s.testColumnDrop(ctx, d, tb) - s.testAddColumnNoDefault(ctx, d, tblInfo) + tk.MustExec("alter table t add column c3 int") + testCheckJobDone(t, store, jobID, true) } -func (s *testColumnChangeSuiteToVerify) TestModifyAutoRandColumnWithMetaKeyChanged() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - err := d.Stop() - require.NoError(s.T(), err) - }() +func TestModifyAutoRandColumnWithMetaKeyChanged(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (a bigint primary key clustered AUTO_RANDOM(5));") - ids, err := d.genGlobalIDs(1) - tableID := ids[0] - require.NoError(s.T(), err) - colInfo := &model.ColumnInfo{ - Name: model.NewCIStr("a"), - Offset: 0, - State: model.StatePublic, - FieldType: *types.NewFieldType(mysql.TypeLonglong), - } - tblInfo := &model.TableInfo{ - ID: tableID, - Name: model.NewCIStr("auto_random_table_name"), - Columns: []*model.ColumnInfo{colInfo}, - AutoRandomBits: 5, - } - colInfo.ID = allocateColumnID(tblInfo) - ctx := testNewContext(d) - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) + d := dom.DDL() + tc := &ddl.TestDDLCallback{Do: dom} - tc := &TestDDLCallback{} var errCount int32 = 3 var genAutoRandErr error - tc.onJobRunBefore = func(job *model.Job) { + var dbID int64 + var tID int64 + var jobID int64 + tc.OnJobRunBeforeExported = func(job *model.Job) { + jobID = job.ID + dbID = job.SchemaID + tID = job.TableID if atomic.LoadInt32(&errCount) > 0 && job.Type == model.ActionModifyColumn { atomic.AddInt32(&errCount, -1) - genAutoRandErr = kv.RunInNewTxn(context.Background(), s.store, false, func(ctx context.Context, txn kv.Transaction) error { + genAutoRandErr = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { t := meta.NewMeta(txn) - _, err1 := t.GetAutoIDAccessors(s.dbInfo.ID, tableID).RandomID().Inc(1) + _, err1 := t.GetAutoIDAccessors(dbID, tID).RandomID().Inc(1) return err1 }) } } d.SetHook(tc) + + tk.MustExec("alter table t modify column a bigint AUTO_RANDOM(10)") + require.True(t, errCount == 0) + require.Nil(t, genAutoRandErr) const newAutoRandomBits uint64 = 10 - job := &model.Job{ - SchemaID: s.dbInfo.ID, - TableID: tblInfo.ID, - SchemaName: s.dbInfo.Name.L, - Type: model.ActionModifyColumn, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{colInfo, colInfo.Name, ast.ColumnPosition{}, 0, newAutoRandomBits}, - } - err = d.doDDLJob(ctx, job) - require.NoError(s.T(), err) - require.True(s.T(), errCount == 0) - require.Nil(s.T(), genAutoRandErr) - testCheckJobDone(s.T(), d, job, true) + testCheckJobDone(t, store, jobID, true) var newTbInfo *model.TableInfo - err = kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { + err := kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { t := meta.NewMeta(txn) var err error - newTbInfo, err = t.GetTable(s.dbInfo.ID, tableID) + newTbInfo, err = t.GetTable(dbID, tID) if err != nil { return errors.Trace(err) } return nil }) - require.NoError(s.T(), err) - require.Equal(s.T(), newTbInfo.AutoRandomBits, newAutoRandomBits) -} - -func (s *testColumnChangeSuiteToVerify) testAddColumnNoDefault(ctx sessionctx.Context, d *ddl, tblInfo *model.TableInfo) { - tc := &TestDDLCallback{} - // set up hook - prevState := model.StateNone - var checkErr error - var writeOnlyTable table.Table - tc.onJobUpdated = func(job *model.Job) { - if job.SchemaState == prevState { - return - } - hookCtx := mock.NewContext() - hookCtx.Store = s.store - prevState = job.SchemaState - err := hookCtx.NewTxn(context.Background()) - if err != nil { - checkErr = errors.Trace(err) - } - switch job.SchemaState { - case model.StateWriteOnly: - writeOnlyTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - case model.StatePublic: - _, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - _, err = writeOnlyTable.AddRecord(hookCtx, types.MakeDatums(10, 10)) - if err != nil { - checkErr = errors.Trace(err) - } - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - } - err = txn.Commit(context.TODO()) - if err != nil { - checkErr = errors.Trace(err) - } - } - d.SetHook(tc) - job := testCreateColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c3", &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, nil) - require.NoError(s.T(), checkErr) - testCheckJobDone(s.T(), d, job, true) -} - -func (s *testColumnChangeSuiteToVerify) testColumnDrop(ctx sessionctx.Context, d *ddl, tbl table.Table) { - dropCol := tbl.Cols()[2] - tc := &TestDDLCallback{} - // set up hook - prevState := model.StateNone - var checkErr error - tc.onJobUpdated = func(job *model.Job) { - if job.SchemaState == prevState { - return - } - prevState = job.SchemaState - currentTbl, err := getCurrentTable(d, s.dbInfo.ID, tbl.Meta().ID) - if err != nil { - checkErr = errors.Trace(err) - } - for _, col := range currentTbl.Cols() { - if col.ID == dropCol.ID { - checkErr = errors.Errorf("column is not dropped") - } - } - } - d.SetHook(tc) - require.NoError(s.T(), checkErr) - testDropColumn(s.T(), ctx, d, s.dbInfo, tbl.Meta(), dropCol.Name.L, false) + require.NoError(t, err) + require.Equal(t, newTbInfo.AutoRandomBits, newAutoRandomBits) } func seek(t table.PhysicalTable, ctx sessionctx.Context, h kv.Handle) (kv.Handle, bool, error) { @@ -338,7 +209,7 @@ func seek(t table.PhysicalTable, ctx sessionctx.Context, h kv.Handle) (kv.Handle return handle, true, nil } -func (s *testColumnChangeSuiteToVerify) checkAddWriteOnly(ctx sessionctx.Context, d *ddl, deleteOnlyTable, writeOnlyTable table.Table, h kv.Handle) error { +func checkAddWriteOnly(ctx sessionctx.Context, deleteOnlyTable, writeOnlyTable table.Table, h kv.Handle) error { // WriteOnlyTable: insert t values (2, 3) err := ctx.NewTxn(context.Background()) if err != nil { @@ -352,8 +223,10 @@ func (s *testColumnChangeSuiteToVerify) checkAddWriteOnly(ctx sessionctx.Context if err != nil { return errors.Trace(err) } - err = checkResult(ctx, writeOnlyTable, writeOnlyTable.WritableCols(), - testutil.RowsWithSep(" ", "1 2 ", "2 3 3")) + err = checkResult(ctx, writeOnlyTable, writeOnlyTable.WritableCols(), [][]string{ + {"1", "2", ""}, + {"2", "3", "3"}, + }) if err != nil { return errors.Trace(err) } @@ -368,7 +241,10 @@ func (s *testColumnChangeSuiteToVerify) checkAddWriteOnly(ctx sessionctx.Context return errors.Errorf("expect %v, got %v", expect, got) } // DeleteOnlyTable: select * from t - err = checkResult(ctx, deleteOnlyTable, deleteOnlyTable.WritableCols(), testutil.RowsWithSep(" ", "1 2", "2 3")) + err = checkResult(ctx, deleteOnlyTable, deleteOnlyTable.WritableCols(), [][]string{ + {"1", "2"}, + {"2", "3"}, + }) if err != nil { return errors.Trace(err) } @@ -386,7 +262,10 @@ func (s *testColumnChangeSuiteToVerify) checkAddWriteOnly(ctx sessionctx.Context return errors.Trace(err) } // After we update the first row, its default value is also set. - err = checkResult(ctx, writeOnlyTable, writeOnlyTable.WritableCols(), testutil.RowsWithSep(" ", "2 2 3", "2 3 3")) + err = checkResult(ctx, writeOnlyTable, writeOnlyTable.WritableCols(), [][]string{ + {"2", "2", "3"}, + {"2", "3", "3"}, + }) if err != nil { return errors.Trace(err) } @@ -400,7 +279,9 @@ func (s *testColumnChangeSuiteToVerify) checkAddWriteOnly(ctx sessionctx.Context return errors.Trace(err) } // After delete table has deleted the first row, check the WriteOnly table records. - err = checkResult(ctx, writeOnlyTable, writeOnlyTable.WritableCols(), testutil.RowsWithSep(" ", "2 3 3")) + err = checkResult(ctx, writeOnlyTable, writeOnlyTable.WritableCols(), [][]string{ + {"2", "3", "3"}, + }) return errors.Trace(err) } @@ -412,7 +293,7 @@ func touchedSlice(t table.Table) []bool { return touched } -func (s *testColumnChangeSuiteToVerify) checkAddPublic(sctx sessionctx.Context, d *ddl, writeOnlyTable, publicTable table.Table) error { +func checkAddPublic(sctx sessionctx.Context, writeOnlyTable, publicTable table.Table) error { ctx := context.TODO() // publicTable Insert t values (4, 4, 4) err := sctx.NewTxn(ctx) @@ -445,36 +326,17 @@ func (s *testColumnChangeSuiteToVerify) checkAddPublic(sctx sessionctx.Context, return errors.Trace(err) } // publicTable select * from t, make sure the new c3 value 4 is not overwritten to default value 3. - err = checkResult(sctx, publicTable, publicTable.WritableCols(), testutil.RowsWithSep(" ", "2 3 3", "3 4 4")) + err = checkResult(sctx, publicTable, publicTable.WritableCols(), [][]string{ + {"2", "3", "3"}, + {"3", "4", "4"}, + }) if err != nil { return errors.Trace(err) } return nil } -func getCurrentTable(d *ddl, schemaID, tableID int64) (table.Table, error) { - var tblInfo *model.TableInfo - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) - var err error - tblInfo, err = t.GetTable(schemaID, tableID) - if err != nil { - return errors.Trace(err) - } - return nil - }) - if err != nil { - return nil, errors.Trace(err) - } - alloc := autoid.NewAllocator(d.store, schemaID, tblInfo.ID, false, autoid.RowIDAllocType) - tbl, err := table.TableFromMeta(autoid.NewAllocators(alloc), tblInfo) - if err != nil { - return nil, errors.Trace(err) - } - return tbl, err -} - -func checkResult(ctx sessionctx.Context, t table.Table, cols []*table.Column, rows [][]interface{}) error { +func checkResult(ctx sessionctx.Context, t table.Table, cols []*table.Column, rows [][]string) error { var gotRows [][]interface{} err := tables.IterRecords(t, ctx, cols, func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { gotRows = append(gotRows, datumsToInterfaces(data)) @@ -498,3 +360,76 @@ func datumsToInterfaces(datums []types.Datum) []interface{} { } return ifs } + +type historyJobArgs struct { + ver int64 + db *model.DBInfo + tbl *model.TableInfo + tblIDs map[int64]struct{} +} + +func getSchemaVer(t *testing.T, ctx sessionctx.Context) int64 { + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) + txn, err := ctx.Txn(true) + require.NoError(t, err) + m := meta.NewMeta(txn) + ver, err := m.GetSchemaVersion() + require.NoError(t, err) + return ver +} + +func checkEqualTable(t *testing.T, t1, t2 *model.TableInfo) { + require.Equal(t, t1.ID, t2.ID) + require.Equal(t, t1.Name, t2.Name) + require.Equal(t, t1.Charset, t2.Charset) + require.Equal(t, t1.Collate, t2.Collate) + require.Equal(t, t1.PKIsHandle, t2.PKIsHandle) + require.Equal(t, t1.Comment, t2.Comment) + require.Equal(t, t1.AutoIncID, t2.AutoIncID) +} + +func checkHistoryJobArgs(t *testing.T, ctx sessionctx.Context, id int64, args *historyJobArgs) { + txn, err := ctx.Txn(true) + require.NoError(t, err) + tran := meta.NewMeta(txn) + historyJob, err := tran.GetHistoryDDLJob(id) + require.NoError(t, err) + require.Greater(t, historyJob.BinlogInfo.FinishedTS, uint64(0)) + + if args.tbl != nil { + require.Equal(t, historyJob.BinlogInfo.SchemaVersion, args.ver) + checkEqualTable(t, historyJob.BinlogInfo.TableInfo, args.tbl) + return + } + + // for handling schema job + require.Equal(t, historyJob.BinlogInfo.SchemaVersion, args.ver) + require.Equal(t, historyJob.BinlogInfo.DBInfo, args.db) + // only for creating schema job + if args.db != nil && len(args.tblIDs) == 0 { + return + } +} + +func testCheckJobDone(t *testing.T, store kv.Storage, jobID int64, isAdd bool) { + require.NoError(t, kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + historyJob, err := m.GetHistoryDDLJob(jobID) + require.NoError(t, err) + require.Equal(t, historyJob.State, model.JobStateSynced) + if isAdd { + require.Equal(t, historyJob.SchemaState, model.StatePublic) + } else { + require.Equal(t, historyJob.SchemaState, model.StateNone) + } + + return nil + })) +} + +func testNewContext(store kv.Storage) sessionctx.Context { + ctx := mock.NewContext() + ctx.Store = store + return ctx +} diff --git a/ddl/column_modify_test.go b/ddl/column_modify_test.go new file mode 100644 index 0000000000000..12cd8296682ac --- /dev/null +++ b/ddl/column_modify_test.go @@ -0,0 +1,1303 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "context" + "fmt" + "math/rand" + "strconv" + "strings" + "testing" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/tidb/ddl" + testddlutil "github.com/pingcap/tidb/ddl/testutil" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/table/tables" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/mock" + "github.com/stretchr/testify/require" +) + +const columnModifyLease = 600 * time.Millisecond + +func TestAddAndDropColumn(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t2 (c1 int, c2 int, c3 int)") + tk.MustExec("set @@tidb_disable_txn_auto_retry = 0") + + // ========== + // ADD COLUMN + // ========== + + done := make(chan error, 1) + + num := defaultBatchSize + 10 + // add some rows + batchInsert(tk, "t2", 0, num) + + testddlutil.SessionExecInGoroutine(store, "test", "alter table t2 add column c4 int default -1", done) + + ticker := time.NewTicker(columnModifyLease / 2) + defer ticker.Stop() + step := 10 +AddLoop: + for { + select { + case err := <-done: + if err == nil { + break AddLoop + } + require.NoError(t, err) + case <-ticker.C: + // delete some rows, and add some data + for i := num; i < num+step; i++ { + n := rand.Intn(num) + tk.MustExec("begin") + tk.MustExec("delete from t2 where c1 = ?", n) + tk.MustExec("commit") + + // Make sure that statement of insert and show use the same infoSchema. + tk.MustExec("begin") + err := tk.ExecToErr("insert into t2 values (?, ?, ?)", i, i, i) + if err != nil { + // if err is failed, the column number must be 4 now. + values := tk.MustQuery("show columns from t2").Rows() + require.Len(t, values, 4) + } + tk.MustExec("commit") + } + num += step + } + } + + // add data, here c4 must exist + for i := num; i < num+step; i++ { + tk.MustExec("insert into t2 values (?, ?, ?, ?)", i, i, i, i) + } + + rows := tk.MustQuery("select count(c4) from t2").Rows() + require.Len(t, rows, 1) + require.Len(t, rows[0], 1) + count, err := strconv.ParseInt(rows[0][0].(string), 10, 64) + require.NoError(t, err) + require.Greater(t, count, int64(0)) + + tk.MustQuery("select count(c4) from t2 where c4 = -1").Check([][]interface{}{ + {fmt.Sprintf("%v", count-int64(step))}, + }) + + for i := num; i < num+step; i++ { + tk.MustQuery("select c4 from t2 where c4 = ?", i).Check([][]interface{}{ + {fmt.Sprintf("%v", i)}, + }) + } + + tbl := external.GetTableByName(t, tk, "test", "t2") + i := 0 + j := 0 + require.NoError(t, tk.Session().NewTxn(context.Background())) + defer func() { + if txn, err := tk.Session().Txn(true); err == nil { + require.NoError(t, txn.Rollback()) + } + }() + + err = tables.IterRecords(tbl, tk.Session(), tbl.Cols(), + func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + i++ + // c4 must be -1 or > 0 + v, err := data[3].ToInt64(tk.Session().GetSessionVars().StmtCtx) + require.NoError(t, err) + if v == -1 { + j++ + } else { + require.Greater(t, v, int64(0)) + } + return true, nil + }) + require.NoError(t, err) + require.Equal(t, int(count), i) + require.LessOrEqual(t, i, num+step) + require.Equal(t, int(count)-step, j) + + // for modifying columns after adding columns + tk.MustExec("alter table t2 modify c4 int default 11") + for i := num + step; i < num+step+10; i++ { + tk.MustExec("insert into t2 values (?, ?, ?, ?)", i, i, i, i) + } + tk.MustQuery("select count(c4) from t2 where c4 = -1").Check([][]interface{}{ + {fmt.Sprintf("%v", count-int64(step))}, + }) + + // add timestamp type column + tk.MustExec("create table test_on_update_c (c1 int, c2 timestamp);") + defer tk.MustExec("drop table test_on_update_c;") + tk.MustExec("alter table test_on_update_c add column c3 timestamp null default '2017-02-11' on update current_timestamp;") + is := domain.GetDomain(tk.Session()).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("test_on_update_c")) + require.NoError(t, err) + tblInfo := tbl.Meta() + colC := tblInfo.Columns[2] + require.Equal(t, mysql.TypeTimestamp, colC.Tp) + require.False(t, mysql.HasNotNullFlag(colC.Flag)) + // add datetime type column + tk.MustExec("create table test_on_update_d (c1 int, c2 datetime);") + tk.MustExec("alter table test_on_update_d add column c3 datetime on update current_timestamp;") + is = domain.GetDomain(tk.Session()).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("test_on_update_d")) + require.NoError(t, err) + tblInfo = tbl.Meta() + colC = tblInfo.Columns[2] + require.Equal(t, mysql.TypeDatetime, colC.Tp) + require.False(t, mysql.HasNotNullFlag(colC.Flag)) + + // add year type column + tk.MustExec("create table test_on_update_e (c1 int);") + defer tk.MustExec("drop table test_on_update_e;") + tk.MustExec("insert into test_on_update_e (c1) values (0);") + tk.MustExec("alter table test_on_update_e add column c2 year not null;") + tk.MustQuery("select c2 from test_on_update_e").Check(testkit.Rows("0")) + + // test add unsupported constraint + tk.MustExec("create table t_add_unsupported_constraint (a int);") + err = tk.ExecToErr("ALTER TABLE t_add_unsupported_constraint ADD id int AUTO_INCREMENT;") + require.EqualError(t, err, "[ddl:8200]unsupported add column 'id' constraint AUTO_INCREMENT when altering 'test.t_add_unsupported_constraint'") + err = tk.ExecToErr("ALTER TABLE t_add_unsupported_constraint ADD id int KEY;") + require.EqualError(t, err, "[ddl:8200]unsupported add column 'id' constraint PRIMARY KEY when altering 'test.t_add_unsupported_constraint'") + err = tk.ExecToErr("ALTER TABLE t_add_unsupported_constraint ADD id int UNIQUE;") + require.EqualError(t, err, "[ddl:8200]unsupported add column 'id' constraint UNIQUE KEY when altering 'test.t_add_unsupported_constraint'") + + // =========== + // DROP COLUMN + // =========== + + done = make(chan error, 1) + tk.MustExec("delete from t2") + + num = 100 + // add some rows + for i := 0; i < num; i++ { + tk.MustExec("insert into t2 values (?, ?, ?, ?)", i, i, i, i) + } + + // get c4 column id + testddlutil.SessionExecInGoroutine(store, "test", "alter table t2 drop column c4", done) + + ticker = time.NewTicker(columnModifyLease / 2) + defer ticker.Stop() + step = 10 +DropLoop: + for { + select { + case err := <-done: + if err == nil { + break DropLoop + } + require.NoError(t, err) + case <-ticker.C: + // delete some rows, and add some data + for i := num; i < num+step; i++ { + // Make sure that statement of insert and show use the same infoSchema. + tk.MustExec("begin") + err := tk.ExecToErr("insert into t2 values (?, ?, ?)", i, i, i) + if err != nil { + // If executing is failed, the column number must be 4 now. + values := tk.MustQuery("show columns from t2").Rows() + require.Len(t, values, 4) + } + tk.MustExec("commit") + } + num += step + } + } + + // add data, here c4 must not exist + for i := num; i < num+step; i++ { + tk.MustExec("insert into t2 values (?, ?, ?)", i, i, i) + } + + rows = tk.MustQuery("select count(*) from t2").Rows() + require.Len(t, rows, 1) + require.Len(t, rows[0], 1) + count, err = strconv.ParseInt(rows[0][0].(string), 10, 64) + require.NoError(t, err) + require.Greater(t, count, int64(0)) +} + +// TestDropColumn is for inserting value with a to-be-dropped column when do drop column. +// Column info from schema in build-insert-plan should be public only, +// otherwise they will not be consisted with Table.Col(), then the server will panic. +func TestDropColumn(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + num := 25 + multiDDL := make([]string, 0, num) + sql := "create table t2 (c1 int, c2 int, c3 int, " + for i := 4; i < 4+num; i++ { + multiDDL = append(multiDDL, fmt.Sprintf("alter table t2 drop column c%d", i)) + + if i != 3+num { + sql += fmt.Sprintf("c%d int, ", i) + } else { + sql += fmt.Sprintf("c%d int)", i) + } + } + tk.MustExec(sql) + dmlDone := make(chan error, num) + ddlDone := make(chan error, num) + + testddlutil.ExecMultiSQLInGoroutine(store, "test", multiDDL, ddlDone) + for i := 0; i < num; i++ { + testddlutil.ExecMultiSQLInGoroutine(store, "test", []string{"insert into t2 set c1 = 1, c2 = 1, c3 = 1, c4 = 1"}, dmlDone) + } + for i := 0; i < num; i++ { + err := <-ddlDone + require.NoError(t, err) + } + + // Test for drop partition table column. + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int,b int) partition by hash(a) partitions 4;") + err := tk.ExecToErr("alter table t1 drop column a") + // TODO: refine the error message to compatible with MySQL + require.EqualError(t, err, "[planner:1054]Unknown column 'a' in 'expression'") +} + +func TestChangeColumn(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("create table t3 (a int default '0', b varchar(10), d int not null default '0')") + tk.MustExec("insert into t3 set b = 'a'") + tk.MustQuery("select a from t3").Check(testkit.Rows("0")) + tk.MustExec("alter table t3 change a aa bigint") + tk.MustExec("insert into t3 set b = 'b'") + tk.MustQuery("select aa from t3").Check(testkit.Rows("0", "")) + // for no default flag + tk.MustExec("alter table t3 change d dd bigint not null") + is := domain.GetDomain(tk.Session()).InfoSchema() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t3")) + require.NoError(t, err) + tblInfo := tbl.Meta() + colD := tblInfo.Columns[2] + require.True(t, mysql.HasNoDefaultValueFlag(colD.Flag)) + // for the following definitions: 'not null', 'null', 'default value' and 'comment' + tk.MustExec("alter table t3 change b b varchar(20) null default 'c' comment 'my comment'") + is = domain.GetDomain(tk.Session()).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t3")) + require.NoError(t, err) + tblInfo = tbl.Meta() + colB := tblInfo.Columns[1] + require.Equal(t, "my comment", colB.Comment) + require.False(t, mysql.HasNotNullFlag(colB.Flag)) + tk.MustExec("insert into t3 set aa = 3, dd = 5") + tk.MustQuery("select b from t3").Check(testkit.Rows("a", "b", "c")) + // for timestamp + tk.MustExec("alter table t3 add column c timestamp not null") + tk.MustExec("alter table t3 change c c timestamp null default '2017-02-11' comment 'col c comment' on update current_timestamp") + is = domain.GetDomain(tk.Session()).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t3")) + require.NoError(t, err) + tblInfo = tbl.Meta() + colC := tblInfo.Columns[3] + require.Equal(t, "col c comment", colC.Comment) + require.False(t, mysql.HasNotNullFlag(colC.Flag)) + // for enum + tk.MustExec("alter table t3 add column en enum('a', 'b', 'c') not null default 'a'") + // https://github.com/pingcap/tidb/issues/23488 + // if there is a prefix index on the varchar column, then we can change it to text + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (k char(10), v int, INDEX(k(7)));") + tk.MustExec("alter table t change column k k tinytext") + is = domain.GetDomain(tk.Session()).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + + // for failing tests + sql := "alter table t3 change aa a bigint default ''" + tk.MustGetErrCode(sql, errno.ErrInvalidDefault) + sql = "alter table t3 change a testx.t3.aa bigint" + tk.MustGetErrCode(sql, errno.ErrWrongDBName) + sql = "alter table t3 change t.a aa bigint" + tk.MustGetErrCode(sql, errno.ErrWrongTableName) + tk.MustExec("create table t4 (c1 int, c2 int, c3 int default 1, index (c1));") + tk.MustExec("insert into t4(c2) values (null);") + err = tk.ExecToErr("alter table t4 change c1 a1 int not null;") + require.EqualError(t, err, "[ddl:1265]Data truncated for column 'a1' at row 1") + sql = "alter table t4 change c2 a bigint not null;" + tk.MustGetErrCode(sql, mysql.WarnDataTruncated) + sql = "alter table t3 modify en enum('a', 'z', 'b', 'c') not null default 'a'" + tk.MustExec(sql) + // Rename to an existing column. + tk.MustExec("alter table t3 add column a bigint") + sql = "alter table t3 change aa a bigint" + tk.MustGetErrCode(sql, errno.ErrDupFieldName) + // https://github.com/pingcap/tidb/issues/23488 + tk.MustExec("drop table if exists t5") + tk.MustExec("create table t5 (k char(10) primary key, v int)") + sql = "alter table t5 change column k k tinytext;" + tk.MustGetErrCode(sql, mysql.ErrBlobKeyWithoutLength) + tk.MustExec("drop table t5") + tk.MustExec("drop table if exists t5") + tk.MustExec("create table t5 (k char(10), v int, INDEX(k))") + sql = "alter table t5 change column k k tinytext;" + tk.MustGetErrCode(sql, mysql.ErrBlobKeyWithoutLength) + tk.MustExec("drop table t5") + tk.MustExec("drop table t3") +} + +func TestRenameColumn(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + assertColNames := func(tableName string, colNames ...string) { + cols := external.GetTableByName(t, tk, "test", tableName).Cols() + require.Equal(t, len(colNames), len(cols)) + for i := range cols { + require.Equal(t, strings.ToLower(colNames[i]), cols[i].Name.L) + } + } + + tk.MustExec("create table test_rename_column (id int not null primary key auto_increment, col1 int)") + tk.MustExec("alter table test_rename_column rename column col1 to col1") + assertColNames("test_rename_column", "id", "col1") + tk.MustExec("alter table test_rename_column rename column col1 to col2") + assertColNames("test_rename_column", "id", "col2") + + // Test renaming non-exist columns. + tk.MustGetErrCode("alter table test_rename_column rename column non_exist_col to col3", errno.ErrBadField) + + // Test renaming to an exist column. + tk.MustGetErrCode("alter table test_rename_column rename column col2 to id", errno.ErrDupFieldName) + + // Test renaming the column with foreign key. + tk.MustExec("drop table test_rename_column") + tk.MustExec("create table test_rename_column_base (base int)") + tk.MustExec("create table test_rename_column (col int, foreign key (col) references test_rename_column_base(base))") + + tk.MustGetErrCode("alter table test_rename_column rename column col to col1", errno.ErrFKIncompatibleColumns) + + tk.MustExec("drop table test_rename_column_base") + + // Test renaming generated columns. + tk.MustExec("drop table test_rename_column") + tk.MustExec("create table test_rename_column (id int, col1 int generated always as (id + 1))") + + tk.MustExec("alter table test_rename_column rename column col1 to col2") + assertColNames("test_rename_column", "id", "col2") + tk.MustExec("alter table test_rename_column rename column col2 to col1") + assertColNames("test_rename_column", "id", "col1") + tk.MustGetErrCode("alter table test_rename_column rename column id to id1", errno.ErrDependentByGeneratedColumn) + + // Test renaming view columns. + tk.MustExec("drop table test_rename_column") + tk.MustExec("create table test_rename_column (id int, col1 int)") + tk.MustExec("create view test_rename_column_view as select * from test_rename_column") + + tk.MustExec("alter table test_rename_column rename column col1 to col2") + tk.MustGetErrCode("select * from test_rename_column_view", errno.ErrViewInvalid) + + tk.MustExec("drop view test_rename_column_view") + tk.MustExec("drop table test_rename_column") +} + +// TestCancelDropColumn tests cancel ddl job which type is drop column. +func TestCancelDropColumn(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("create table test_drop_column(c1 int, c2 int)") + defer tk.MustExec("drop table test_drop_column;") + testCases := []struct { + needAddColumn bool + jobState model.JobState + JobSchemaState model.SchemaState + cancelSucc bool + }{ + {true, model.JobStateNone, model.StateNone, true}, + {false, model.JobStateRunning, model.StateWriteOnly, false}, + {true, model.JobStateRunning, model.StateDeleteOnly, false}, + {true, model.JobStateRunning, model.StateDeleteReorganization, false}, + } + var checkErr error + hook := &ddl.TestDDLCallback{Do: dom} + var jobID int64 + testCase := &testCases[0] + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type == model.ActionDropColumn && job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { + jobIDs := []int64{job.ID} + jobID = job.ID + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.TODO()) + if err != nil { + checkErr = errors.Trace(err) + return + } + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + checkErr = txn.Commit(context.Background()) + } + } + + originalHook := dom.DDL().GetHook() + dom.DDL().SetHook(hook) + for i := range testCases { + var c3IdxID int64 + testCase = &testCases[i] + if testCase.needAddColumn { + tk.MustExec("alter table test_drop_column add column c3 int") + tk.MustExec("alter table test_drop_column add index idx_c3(c3)") + c3IdxID = external.GetIndexID(t, tk, "test", "test_drop_column", "idx_c3") + } + + err := tk.ExecToErr("alter table test_drop_column drop column c3") + var col1 *table.Column + var idx1 table.Index + tbl := external.GetTableByName(t, tk, "test", "test_drop_column") + for _, col := range tbl.Cols() { + if strings.EqualFold(col.Name.L, "c3") { + col1 = col + break + } + } + for _, idx := range tbl.Indices() { + if strings.EqualFold(idx.Meta().Name.L, "idx_c3") { + idx1 = idx + break + } + } + if testCase.cancelSucc { + require.NoError(t, checkErr) + require.NotNil(t, col1) + require.Equal(t, "c3", col1.Name.L) + require.NotNil(t, idx1) + require.Equal(t, "idx_c3", idx1.Meta().Name.L) + require.EqualError(t, err, "[ddl:8214]Cancelled DDL job") + } else { + require.Nil(t, col1) + require.Nil(t, col1) + require.NoError(t, err) + require.EqualError(t, checkErr, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error()) + if c3IdxID != 0 { + // Check index is deleted + checkDelRangeAdded(tk, jobID, c3IdxID) + } + } + } + dom.DDL().SetHook(originalHook) + tk.MustExec("alter table test_drop_column add column c3 int") + tk.MustExec("alter table test_drop_column drop column c3") +} + +// TestCancelDropColumns tests cancel ddl job which type is drop multi-columns. +func TestCancelDropColumns(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("create table test_drop_column(c1 int, c2 int)") + defer tk.MustExec("drop table test_drop_column;") + testCases := []struct { + needAddColumn bool + jobState model.JobState + JobSchemaState model.SchemaState + cancelSucc bool + }{ + {true, model.JobStateNone, model.StateNone, true}, + {false, model.JobStateRunning, model.StateWriteOnly, false}, + {true, model.JobStateRunning, model.StateDeleteOnly, false}, + {true, model.JobStateRunning, model.StateDeleteReorganization, false}, + } + var checkErr error + hook := &ddl.TestDDLCallback{Do: dom} + var jobID int64 + testCase := &testCases[0] + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type == model.ActionDropColumns && job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { + jobIDs := []int64{job.ID} + jobID = job.ID + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.TODO()) + if err != nil { + checkErr = errors.Trace(err) + return + } + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + checkErr = txn.Commit(context.Background()) + } + } + + originalHook := dom.DDL().GetHook() + dom.DDL().SetHook(hook) + for i := range testCases { + var c3IdxID int64 + testCase = &testCases[i] + if testCase.needAddColumn { + tk.MustExec("alter table test_drop_column add column c3 int, add column c4 int") + tk.MustExec("alter table test_drop_column add index idx_c3(c3)") + c3IdxID = external.GetIndexID(t, tk, "test", "test_drop_column", "idx_c3") + } + err := tk.ExecToErr("alter table test_drop_column drop column c3, drop column c4") + tbl := external.GetTableByName(t, tk, "test", "test_drop_column") + col3 := table.FindCol(tbl.Cols(), "c3") + col4 := table.FindCol(tbl.Cols(), "c4") + var idx3 table.Index + for _, idx := range tbl.Indices() { + if strings.EqualFold(idx.Meta().Name.L, "idx_c3") { + idx3 = idx + break + } + } + if testCase.cancelSucc { + require.NoError(t, checkErr) + require.NotNil(t, col3) + require.NotNil(t, col4) + require.NotNil(t, idx3) + require.Equal(t, "c3", col3.Name.L) + require.Equal(t, "c4", col4.Name.L) + require.Equal(t, "idx_c3", idx3.Meta().Name.L) + require.EqualError(t, err, "[ddl:8214]Cancelled DDL job") + } else { + require.Nil(t, col3) + require.Nil(t, col4) + require.Nil(t, idx3) + require.NoError(t, err) + require.EqualError(t, checkErr, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error()) + if c3IdxID != 0 { + // Check index is deleted + checkDelRangeAdded(tk, jobID, c3IdxID) + } + } + } + dom.DDL().SetHook(originalHook) + tk.MustExec("alter table test_drop_column add column c3 int, add column c4 int") + tk.MustExec("alter table test_drop_column drop column c3, drop column c4") +} + +func TestVirtualColumnDDL(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec(`create global temporary table test_gv_ddl(a int, b int as (a+8) virtual, c int as (b + 2) stored) on commit delete rows;`) + is := tk.Session().(sessionctx.Context).GetInfoSchema().(infoschema.InfoSchema) + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("test_gv_ddl")) + require.NoError(t, err) + testCases := []struct { + generatedExprString string + generatedStored bool + }{ + {"", false}, + {"`a` + 8", false}, + {"`b` + 2", true}, + } + for i, column := range tbl.Meta().Columns { + require.Equal(t, testCases[i].generatedExprString, column.GeneratedExprString) + require.Equal(t, testCases[i].generatedStored, column.GeneratedStored) + } + result := tk.MustQuery(`DESC test_gv_ddl`) + result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) + tk.MustExec("begin;") + tk.MustExec("insert into test_gv_ddl values (1, default, default)") + tk.MustQuery("select * from test_gv_ddl").Check(testkit.Rows("1 9 11")) + tk.MustExec("commit") + + // for local temporary table + tk.MustExec(`create temporary table test_local_gv_ddl(a int, b int as (a+8) virtual, c int as (b + 2) stored);`) + is = tk.Session().(sessionctx.Context).GetInfoSchema().(infoschema.InfoSchema) + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("test_local_gv_ddl")) + require.NoError(t, err) + for i, column := range tbl.Meta().Columns { + require.Equal(t, testCases[i].generatedExprString, column.GeneratedExprString) + require.Equal(t, testCases[i].generatedStored, column.GeneratedStored) + } + result = tk.MustQuery(`DESC test_local_gv_ddl`) + result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) + tk.MustExec("begin;") + tk.MustExec("insert into test_local_gv_ddl values (1, default, default)") + tk.MustQuery("select * from test_local_gv_ddl").Check(testkit.Rows("1 9 11")) + tk.MustExec("commit") + tk.MustQuery("select * from test_local_gv_ddl").Check(testkit.Rows("1 9 11")) +} + +func TestGeneratedColumnDDL(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + // Check create table with virtual and stored generated columns. + tk.MustExec(`CREATE TABLE test_gv_ddl(a int, b int as (a+8) virtual, c int as (b + 2) stored)`) + + // Check desc table with virtual and stored generated columns. + result := tk.MustQuery(`DESC test_gv_ddl`) + result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) + + // Check show create table with virtual and stored generated columns. + result = tk.MustQuery(`show create table test_gv_ddl`) + result.Check(testkit.Rows( + "test_gv_ddl CREATE TABLE `test_gv_ddl` (\n `a` int(11) DEFAULT NULL,\n `b` int(11) GENERATED ALWAYS AS (`a` + 8) VIRTUAL,\n `c` int(11) GENERATED ALWAYS AS (`b` + 2) STORED\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", + )) + + // Check generated expression with blanks. + tk.MustExec("create table table_with_gen_col_blanks (a int, b char(20) as (cast( \r\n\t a \r\n\tas char)), c int as (a+100))") + result = tk.MustQuery(`show create table table_with_gen_col_blanks`) + result.Check(testkit.Rows("table_with_gen_col_blanks CREATE TABLE `table_with_gen_col_blanks` (\n" + + " `a` int(11) DEFAULT NULL,\n" + + " `b` char(20) GENERATED ALWAYS AS (cast(`a` as char)) VIRTUAL,\n" + + " `c` int(11) GENERATED ALWAYS AS (`a` + 100) VIRTUAL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + + // Check generated expression with charset latin1 ("latin1" != mysql.DefaultCharset). + tk.MustExec("create table table_with_gen_col_latin1 (a int, b char(20) as (cast( \r\n\t a \r\n\tas char charset latin1)), c int as (a+100))") + result = tk.MustQuery(`show create table table_with_gen_col_latin1`) + result.Check(testkit.Rows("table_with_gen_col_latin1 CREATE TABLE `table_with_gen_col_latin1` (\n" + + " `a` int(11) DEFAULT NULL,\n" + + " `b` char(20) GENERATED ALWAYS AS (cast(`a` as char charset latin1)) VIRTUAL,\n" + + " `c` int(11) GENERATED ALWAYS AS (`a` + 100) VIRTUAL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + + // Check generated expression with string (issue 9457). + tk.MustExec("create table table_with_gen_col_string (first_name varchar(10), last_name varchar(10), full_name varchar(255) AS (CONCAT(first_name,' ',last_name)))") + result = tk.MustQuery(`show create table table_with_gen_col_string`) + result.Check(testkit.Rows("table_with_gen_col_string CREATE TABLE `table_with_gen_col_string` (\n" + + " `first_name` varchar(10) DEFAULT NULL,\n" + + " `last_name` varchar(10) DEFAULT NULL,\n" + + " `full_name` varchar(255) GENERATED ALWAYS AS (concat(`first_name`, _utf8mb4' ', `last_name`)) VIRTUAL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + + tk.MustExec("alter table table_with_gen_col_string modify column full_name varchar(255) GENERATED ALWAYS AS (CONCAT(last_name,' ' ,first_name) ) VIRTUAL") + result = tk.MustQuery(`show create table table_with_gen_col_string`) + result.Check(testkit.Rows("table_with_gen_col_string CREATE TABLE `table_with_gen_col_string` (\n" + + " `first_name` varchar(10) DEFAULT NULL,\n" + + " `last_name` varchar(10) DEFAULT NULL,\n" + + " `full_name` varchar(255) GENERATED ALWAYS AS (concat(`last_name`, _utf8mb4' ', `first_name`)) VIRTUAL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + + // Test incorrect parameter count. + tk.MustGetErrCode("create table test_gv_incorrect_pc(a double, b int as (lower(a, 2)))", errno.ErrWrongParamcountToNativeFct) + tk.MustGetErrCode("create table test_gv_incorrect_pc(a double, b int as (lower(a, 2)) stored)", errno.ErrWrongParamcountToNativeFct) + + genExprTests := []struct { + stmt string + err int + }{ + // Drop/rename columns dependent by other column. + {`alter table test_gv_ddl drop column a`, errno.ErrDependentByGeneratedColumn}, + {`alter table test_gv_ddl change column a anew int`, errno.ErrBadField}, + + // Modify/change stored status of generated columns. + {`alter table test_gv_ddl modify column b bigint`, errno.ErrUnsupportedOnGeneratedColumn}, + {`alter table test_gv_ddl change column c cnew bigint as (a+100)`, errno.ErrUnsupportedOnGeneratedColumn}, + + // Modify/change generated columns breaking prior. + {`alter table test_gv_ddl modify column b int as (c+100)`, errno.ErrGeneratedColumnNonPrior}, + {`alter table test_gv_ddl change column b bnew int as (c+100)`, errno.ErrGeneratedColumnNonPrior}, + + // Refer not exist columns in generation expression. + {`create table test_gv_ddl_bad (a int, b int as (c+8))`, errno.ErrBadField}, + + // Refer generated columns non prior. + {`create table test_gv_ddl_bad (a int, b int as (c+1), c int as (a+1))`, errno.ErrGeneratedColumnNonPrior}, + + // Virtual generated columns cannot be primary key. + {`create table test_gv_ddl_bad (a int, b int, c int as (a+b) primary key)`, errno.ErrUnsupportedOnGeneratedColumn}, + {`create table test_gv_ddl_bad (a int, b int, c int as (a+b), primary key(c))`, errno.ErrUnsupportedOnGeneratedColumn}, + {`create table test_gv_ddl_bad (a int, b int, c int as (a+b), primary key(a, c))`, errno.ErrUnsupportedOnGeneratedColumn}, + + // Add stored generated column through alter table. + {`alter table test_gv_ddl add column d int as (b+2) stored`, errno.ErrUnsupportedOnGeneratedColumn}, + {`alter table test_gv_ddl modify column b int as (a + 8) stored`, errno.ErrUnsupportedOnGeneratedColumn}, + + // Add generated column with incorrect parameter count. + {`alter table test_gv_ddl add column z int as (lower(a, 2))`, errno.ErrWrongParamcountToNativeFct}, + {`alter table test_gv_ddl add column z int as (lower(a, 2)) stored`, errno.ErrWrongParamcountToNativeFct}, + + // Modify generated column with incorrect parameter count. + {`alter table test_gv_ddl modify column b int as (lower(a, 2))`, errno.ErrWrongParamcountToNativeFct}, + {`alter table test_gv_ddl change column b b int as (lower(a, 2))`, errno.ErrWrongParamcountToNativeFct}, + } + for _, tt := range genExprTests { + tk.MustGetErrCode(tt.stmt, tt.err) + } + + // Check alter table modify/change generated column. + modStoredColErrMsg := "[ddl:3106]'modifying a stored column' is not supported for generated columns." + tk.MustGetErrMsg(`alter table test_gv_ddl modify column c bigint as (b+200) stored`, modStoredColErrMsg) + + result = tk.MustQuery(`DESC test_gv_ddl`) + result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) + + tk.MustExec(`alter table test_gv_ddl change column b b bigint as (a+100) virtual`) + result = tk.MustQuery(`DESC test_gv_ddl`) + result.Check(testkit.Rows(`a int(11) YES `, `b bigint(20) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) + + tk.MustExec(`alter table test_gv_ddl change column c cnew bigint`) + result = tk.MustQuery(`DESC test_gv_ddl`) + result.Check(testkit.Rows(`a int(11) YES `, `b bigint(20) YES VIRTUAL GENERATED`, `cnew bigint(20) YES `)) + + // Test generated column `\\`. + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t(c0 TEXT AS ('\\\\'));") + tk.MustExec("insert into t values ()") + tk.MustQuery("select * from t").Check(testkit.Rows("\\")) + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t(c0 TEXT AS ('a\\\\b\\\\c\\\\'))") + tk.MustExec("insert into t values ()") + tk.MustQuery("select * from t").Check(testkit.Rows("a\\b\\c\\")) +} + +func TestColumnModifyingDefinition(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table test2 (c1 int, c2 int, c3 int default 1, index (c1));") + tk.MustExec("alter table test2 change c2 a int not null;") + is := domain.GetDomain(tk.Session()).InfoSchema() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("test2")) + require.NoError(t, err) + var c2 *table.Column + for _, col := range tbl.Cols() { + if col.Name.L == "a" { + c2 = col + } + } + require.True(t, mysql.HasNotNullFlag(c2.Flag)) + + tk.MustExec("drop table if exists test2;") + tk.MustExec("create table test2 (c1 int, c2 int, c3 int default 1, index (c1));") + tk.MustExec("insert into test2(c2) values (null);") + tk.MustGetErrMsg("alter table test2 change c2 a int not null", "[ddl:1265]Data truncated for column 'a' at row 1") + tk.MustGetErrCode("alter table test2 change c1 a1 bigint not null;", mysql.WarnDataTruncated) +} + +func TestTransactionWithWriteOnlyColumn(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int key);") + + transactions := [][]string{ + { + "begin", + "insert into t1 set a=1", + "update t1 set a=2 where a=1", + "commit", + }, + } + + hook := &ddl.TestDDLCallback{Do: dom} + var checkErr error + hook.OnJobRunBeforeExported = func(job *model.Job) { + if checkErr != nil { + return + } + switch job.SchemaState { + case model.StateWriteOnly: + default: + return + } + // do transaction. + for _, transaction := range transactions { + for _, sql := range transaction { + if _, checkErr = tk.Exec(sql); checkErr != nil { + checkErr = errors.Errorf("err: %s, sql: %s, job schema state: %s", checkErr.Error(), sql, job.SchemaState) + return + } + } + } + } + dom.DDL().SetHook(hook) + done := make(chan error, 1) + // test transaction on add column. + go backgroundExec(store, "alter table t1 add column c int not null", done) + err := <-done + require.NoError(t, err) + require.NoError(t, checkErr) + tk.MustQuery("select a from t1").Check(testkit.Rows("2")) + tk.MustExec("delete from t1") + + // test transaction on drop column. + go backgroundExec(store, "alter table t1 drop column c", done) + err = <-done + require.NoError(t, err) + require.NoError(t, checkErr) + tk.MustQuery("select a from t1").Check(testkit.Rows("2")) +} + +func TestColumnCheck(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists column_check") + tk.MustExec("create table column_check (pk int primary key, a int check (a > 1))") + defer tk.MustExec("drop table if exists column_check") + require.Equal(t, uint16(1), tk.Session().GetSessionVars().StmtCtx.WarningCount()) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|8231|CONSTRAINT CHECK is not supported")) +} + +func TestModifyGeneratedColumn(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + modIdxColErrMsg := "[ddl:3106]'modifying an indexed column' is not supported for generated columns." + modStoredColErrMsg := "[ddl:3106]'modifying a stored column' is not supported for generated columns." + + // Modify column with single-col-index. + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t1 (a int, b int as (a+1), index idx(b));") + tk.MustExec("insert into t1 set a=1;") + tk.MustGetErrMsg("alter table t1 modify column b int as (a+2);", modIdxColErrMsg) + tk.MustExec("drop index idx on t1;") + tk.MustExec("alter table t1 modify b int as (a+2);") + tk.MustQuery("select * from t1").Check(testkit.Rows("1 3")) + + // Modify column with multi-col-index. + tk.MustExec("drop table t1;") + tk.MustExec("create table t1 (a int, b int as (a+1), index idx(a, b));") + tk.MustExec("insert into t1 set a=1;") + tk.MustGetErrMsg("alter table t1 modify column b int as (a+2);", modIdxColErrMsg) + tk.MustExec("drop index idx on t1;") + tk.MustExec("alter table t1 modify b int as (a+2);") + tk.MustQuery("select * from t1").Check(testkit.Rows("1 3")) + + // Modify column with stored status to a different expression. + tk.MustExec("drop table t1;") + tk.MustExec("create table t1 (a int, b int as (a+1) stored);") + tk.MustExec("insert into t1 set a=1;") + tk.MustGetErrMsg("alter table t1 modify column b int as (a+2) stored;", modStoredColErrMsg) + + // Modify column with stored status to the same expression. + tk.MustExec("drop table t1;") + tk.MustExec("create table t1 (a int, b int as (a+1) stored);") + tk.MustExec("insert into t1 set a=1;") + tk.MustExec("alter table t1 modify column b bigint as (a+1) stored;") + tk.MustExec("alter table t1 modify column b bigint as (a + 1) stored;") + tk.MustQuery("select * from t1").Check(testkit.Rows("1 2")) + + // Modify column with index to the same expression. + tk.MustExec("drop table t1;") + tk.MustExec("create table t1 (a int, b int as (a+1), index idx(b));") + tk.MustExec("insert into t1 set a=1;") + tk.MustExec("alter table t1 modify column b bigint as (a+1);") + tk.MustExec("alter table t1 modify column b bigint as (a + 1);") + tk.MustQuery("select * from t1").Check(testkit.Rows("1 2")) + + // Modify column from non-generated to stored generated. + tk.MustExec("drop table t1;") + tk.MustExec("create table t1 (a int, b int);") + tk.MustGetErrMsg("alter table t1 modify column b bigint as (a+1) stored;", modStoredColErrMsg) + + // Modify column from stored generated to non-generated. + tk.MustExec("drop table t1;") + tk.MustExec("create table t1 (a int, b int as (a+1) stored);") + tk.MustExec("insert into t1 set a=1;") + tk.MustExec("alter table t1 modify column b int;") + tk.MustQuery("select * from t1").Check(testkit.Rows("1 2")) +} + +func TestCheckColumnDefaultValue(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists text_default_text;") + tk.MustGetErrCode("create table text_default_text(c1 text not null default '');", errno.ErrBlobCantHaveDefault) + tk.MustGetErrCode("create table text_default_text(c1 text not null default 'scds');", errno.ErrBlobCantHaveDefault) + + tk.MustExec("drop table if exists text_default_json;") + tk.MustGetErrCode("create table text_default_json(c1 json not null default '');", errno.ErrBlobCantHaveDefault) + tk.MustGetErrCode("create table text_default_json(c1 json not null default 'dfew555');", errno.ErrBlobCantHaveDefault) + + tk.MustExec("drop table if exists text_default_blob;") + tk.MustGetErrCode("create table text_default_blob(c1 blob not null default '');", errno.ErrBlobCantHaveDefault) + tk.MustGetErrCode("create table text_default_blob(c1 blob not null default 'scds54');", errno.ErrBlobCantHaveDefault) + + tk.MustExec("set sql_mode='';") + tk.MustExec("create table text_default_text(c1 text not null default '');") + tk.MustQuery(`show create table text_default_text`).Check(testkit.RowsWithSep("|", + "text_default_text CREATE TABLE `text_default_text` (\n"+ + " `c1` text NOT NULL\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", + )) + is := domain.GetDomain(tk.Session()).InfoSchema() + tblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("text_default_text")) + require.NoError(t, err) + require.Empty(t, tblInfo.Meta().Columns[0].DefaultValue) + + tk.MustExec("create table text_default_blob(c1 blob not null default '');") + tk.MustQuery(`show create table text_default_blob`).Check(testkit.RowsWithSep("|", + "text_default_blob CREATE TABLE `text_default_blob` (\n"+ + " `c1` blob NOT NULL\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", + )) + is = domain.GetDomain(tk.Session()).InfoSchema() + tblInfo, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("text_default_blob")) + require.NoError(t, err) + require.Empty(t, tblInfo.Meta().Columns[0].DefaultValue) + + tk.MustExec("create table text_default_json(c1 json not null default '');") + tk.MustQuery(`show create table text_default_json`).Check(testkit.RowsWithSep("|", + "text_default_json CREATE TABLE `text_default_json` (\n"+ + " `c1` json NOT NULL DEFAULT 'null'\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", + )) + is = domain.GetDomain(tk.Session()).InfoSchema() + tblInfo, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("text_default_json")) + require.NoError(t, err) + require.Equal(t, "null", tblInfo.Meta().Columns[0].DefaultValue) +} + +func TestCheckConvertToCharacter(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a varchar(10) charset binary);") + is := domain.GetDomain(tk.Session()).InfoSchema() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + tk.MustGetErrCode("alter table t modify column a varchar(10) charset utf8 collate utf8_bin", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t modify column a varchar(10) charset utf8mb4 collate utf8mb4_bin", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t modify column a varchar(10) charset latin1 collate latin1_bin", errno.ErrUnsupportedDDLOperation) + require.Equal(t, "binary", tbl.Cols()[0].Charset) +} + +func TestAddMultiColumnsIndex(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("drop database if exists tidb;") + tk.MustExec("create database tidb;") + tk.MustExec("use tidb;") + tk.MustExec("create table tidb.test (a int auto_increment primary key, b int);") + tk.MustExec("insert tidb.test values (1, 1);") + tk.MustExec("update tidb.test set b = b + 1 where a = 1;") + tk.MustExec("insert into tidb.test values (2, 2);") + // Test that the b value is nil. + tk.MustExec("insert into tidb.test (a) values (3);") + tk.MustExec("insert into tidb.test values (4, 4);") + // Test that the b value is nil again. + tk.MustExec("insert into tidb.test (a) values (5);") + tk.MustExec("insert tidb.test values (6, 6);") + tk.MustExec("alter table tidb.test add index idx1 (a, b);") + tk.MustExec("admin check table test") +} + +// For issue #31735. +func TestAddGeneratedColumnAndInsert(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (a int, unique kye(a))") + tk.MustExec("insert into t1 value (1), (10)") + + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + + d := dom.DDL() + hook := &ddl.TestDDLCallback{Do: dom} + ctx := mock.NewContext() + ctx.Store = store + times := 0 + var checkErr error + hook.OnJobUpdatedExported = func(job *model.Job) { + if checkErr != nil { + return + } + switch job.SchemaState { + case model.StateDeleteOnly: + _, checkErr = tk1.Exec("insert into t1 values (1) on duplicate key update a=a+1") + if checkErr == nil { + _, checkErr = tk1.Exec("replace into t1 values (2)") + } + case model.StateWriteOnly: + _, checkErr = tk1.Exec("insert into t1 values (2) on duplicate key update a=a+1") + if checkErr == nil { + _, checkErr = tk1.Exec("replace into t1 values (3)") + } + case model.StateWriteReorganization: + if checkErr == nil && job.SchemaState == model.StateWriteReorganization && times == 0 { + _, checkErr = tk1.Exec("insert into t1 values (3) on duplicate key update a=a+1") + if checkErr == nil { + _, checkErr = tk1.Exec("replace into t1 values (4)") + } + times++ + } + } + } + d.SetHook(hook) + + tk.MustExec("alter table t1 add column gc int as ((a+1))") + tk.MustQuery("select * from t1 order by a").Check(testkit.Rows("4 5", "10 11")) + require.NoError(t, checkErr) +} + +func TestColumnTypeChangeGenUniqueChangingName(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + hook := &ddl.TestDDLCallback{} + var checkErr error + assertChangingColName := "_col$_c2_0" + assertChangingIdxName := "_idx$_idx_0" + hook.OnJobUpdatedExported = func(job *model.Job) { + if job.SchemaState == model.StateDeleteOnly && job.Type == model.ActionModifyColumn { + var ( + newCol *model.ColumnInfo + oldColName *model.CIStr + modifyColumnTp byte + updatedAutoRandomBits uint64 + changingCol *model.ColumnInfo + changingIdxs []*model.IndexInfo + ) + pos := &ast.ColumnPosition{} + err := job.DecodeArgs(&newCol, &oldColName, pos, &modifyColumnTp, &updatedAutoRandomBits, &changingCol, &changingIdxs) + if err != nil { + checkErr = err + return + } + if changingCol.Name.L != assertChangingColName { + checkErr = errors.New("changing column name is incorrect") + } else if changingIdxs[0].Name.L != assertChangingIdxName { + checkErr = errors.New("changing index name is incorrect") + } + } + } + d := dom.DDL() + d.SetHook(hook) + + tk.MustExec("create table if not exists t(c1 varchar(256), c2 bigint, `_col$_c2` varchar(10), unique _idx$_idx(c1), unique idx(c2));") + tk.MustExec("alter table test.t change column c2 cC2 tinyint after `_col$_c2`") + require.NoError(t, checkErr) + + tbl := external.GetTableByName(t, tk, "test", "t") + require.Len(t, tbl.Meta().Columns, 3) + require.Equal(t, "c1", tbl.Meta().Columns[0].Name.O) + require.Equal(t, 0, tbl.Meta().Columns[0].Offset) + require.Equal(t, "_col$_c2", tbl.Meta().Columns[1].Name.O) + require.Equal(t, 1, tbl.Meta().Columns[1].Offset) + require.Equal(t, "cC2", tbl.Meta().Columns[2].Name.O) + require.Equal(t, 2, tbl.Meta().Columns[2].Offset) + + require.Len(t, tbl.Meta().Indices, 2) + require.Equal(t, "_idx$_idx", tbl.Meta().Indices[0].Name.O) + require.Equal(t, "idx", tbl.Meta().Indices[1].Name.O) + + require.Len(t, tbl.Meta().Indices[0].Columns, 1) + require.Equal(t, "c1", tbl.Meta().Indices[0].Columns[0].Name.O) + require.Equal(t, 0, tbl.Meta().Indices[0].Columns[0].Offset) + + require.Len(t, tbl.Meta().Indices[1].Columns, 1) + require.Equal(t, "cC2", tbl.Meta().Indices[1].Columns[0].Name.O) + require.Equal(t, 2, tbl.Meta().Indices[1].Columns[0].Offset) + + assertChangingColName1 := "_col$__col$_c1_1" + assertChangingColName2 := "_col$__col$__col$_c1_0_1" + query1 := "alter table t modify column _col$_c1 tinyint" + query2 := "alter table t modify column _col$__col$_c1_0 tinyint" + hook.OnJobUpdatedExported = func(job *model.Job) { + if (job.Query == query1 || job.Query == query2) && job.SchemaState == model.StateDeleteOnly && job.Type == model.ActionModifyColumn { + var ( + newCol *model.ColumnInfo + oldColName *model.CIStr + modifyColumnTp byte + updatedAutoRandomBits uint64 + changingCol *model.ColumnInfo + changingIdxs []*model.IndexInfo + ) + pos := &ast.ColumnPosition{} + err := job.DecodeArgs(&newCol, &oldColName, pos, &modifyColumnTp, &updatedAutoRandomBits, &changingCol, &changingIdxs) + if err != nil { + checkErr = err + return + } + if job.Query == query1 && changingCol.Name.L != assertChangingColName1 { + checkErr = errors.New("changing column name is incorrect") + } + if job.Query == query2 && changingCol.Name.L != assertChangingColName2 { + checkErr = errors.New("changing column name is incorrect") + } + } + } + d.SetHook(hook) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table if not exists t(c1 bigint, _col$_c1 bigint, _col$__col$_c1_0 bigint, _col$__col$__col$_c1_0_0 bigint)") + tk.MustExec("alter table t modify column c1 tinyint") + tk.MustExec("alter table t modify column _col$_c1 tinyint") + require.NoError(t, checkErr) + tk.MustExec("alter table t modify column _col$__col$_c1_0 tinyint") + require.NoError(t, checkErr) + tk.MustExec("alter table t change column _col$__col$__col$_c1_0_0 _col$__col$__col$_c1_0_0 tinyint") + + tbl = external.GetTableByName(t, tk, "test", "t") + require.Len(t, tbl.Meta().Columns, 4) + require.Equal(t, "c1", tbl.Meta().Columns[0].Name.O) + require.Equal(t, mysql.TypeTiny, tbl.Meta().Columns[0].Tp) + require.Equal(t, 0, tbl.Meta().Columns[0].Offset) + require.Equal(t, "_col$_c1", tbl.Meta().Columns[1].Name.O) + require.Equal(t, mysql.TypeTiny, tbl.Meta().Columns[1].Tp) + require.Equal(t, 1, tbl.Meta().Columns[1].Offset) + require.Equal(t, "_col$__col$_c1_0", tbl.Meta().Columns[2].Name.O) + require.Equal(t, mysql.TypeTiny, tbl.Meta().Columns[2].Tp) + require.Equal(t, 2, tbl.Meta().Columns[2].Offset) + require.Equal(t, "_col$__col$__col$_c1_0_0", tbl.Meta().Columns[3].Name.O) + require.Equal(t, mysql.TypeTiny, tbl.Meta().Columns[3].Tp) + require.Equal(t, 3, tbl.Meta().Columns[3].Offset) + + tk.MustExec("drop table if exists t") +} + +func TestWriteReorgForColumnTypeChangeOnAmendTxn(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("set global tidb_enable_amend_pessimistic_txn = ON") + defer tk.MustExec("set global tidb_enable_amend_pessimistic_txn = OFF") + + d := dom.DDL() + testInsertOnModifyColumn := func(sql string, startColState, commitColState model.SchemaState, retStrs []string, retErr error) { + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int, unique key(c1))") + tk.MustExec("insert into t1 values (20, 20, 20);") + + var checkErr error + tk1 := testkit.NewTestKit(t, store) + defer func() { + if tk1.Session() != nil { + tk1.Session().Close() + } + }() + hook := &ddl.TestDDLCallback{Do: dom} + times := 0 + hook.OnJobUpdatedExported = func(job *model.Job) { + if job.Type != model.ActionModifyColumn || checkErr != nil || + (job.SchemaState != startColState && job.SchemaState != commitColState) { + return + } + + if job.SchemaState == startColState { + tk1.MustExec("use test") + tk1.MustExec("begin pessimistic;") + tk1.MustExec("insert into t1 values(101, 102, 103)") + return + } + if times == 0 { + _, checkErr = tk1.Exec("commit;") + } + times++ + } + d.SetHook(hook) + + tk.MustExec(sql) + if retErr == nil { + require.NoError(t, checkErr) + } else { + require.Error(t, checkErr) + require.Contains(t, checkErr.Error(), retErr.Error()) + } + tk.MustQuery("select * from t1").Check(testkit.Rows(retStrs...)) + tk.MustExec("admin check table t1") + } + + // Testing it needs reorg data. + ddlStatement := "alter table t1 change column c2 cc smallint;" + testInsertOnModifyColumn(ddlStatement, model.StateNone, model.StateWriteReorganization, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) + testInsertOnModifyColumn(ddlStatement, model.StateDeleteOnly, model.StateWriteReorganization, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) + testInsertOnModifyColumn(ddlStatement, model.StateWriteOnly, model.StateWriteReorganization, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) + testInsertOnModifyColumn(ddlStatement, model.StateNone, model.StatePublic, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) + testInsertOnModifyColumn(ddlStatement, model.StateDeleteOnly, model.StatePublic, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) + testInsertOnModifyColumn(ddlStatement, model.StateWriteOnly, model.StatePublic, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) + + // Testing it needs not reorg data. This case only have two states: none, public. + ddlStatement = "alter table t1 change column c2 cc bigint;" + testInsertOnModifyColumn(ddlStatement, model.StateNone, model.StateWriteReorganization, []string{"20 20 20"}, nil) + testInsertOnModifyColumn(ddlStatement, model.StateWriteOnly, model.StateWriteReorganization, []string{"20 20 20"}, nil) + testInsertOnModifyColumn(ddlStatement, model.StateNone, model.StatePublic, []string{"20 20 20", "101 102 103"}, nil) + testInsertOnModifyColumn(ddlStatement, model.StateWriteOnly, model.StatePublic, []string{"20 20 20"}, nil) +} diff --git a/ddl/column_test.go b/ddl/column_test.go index 51b0317084eff..ae743d36ba7bb 100644 --- a/ddl/column_test.go +++ b/ddl/column_test.go @@ -12,345 +12,302 @@ // See the License for the specific language governing permissions and // limitations under the License. -package ddl +package ddl_test import ( "context" "fmt" "reflect" + "strconv" "sync" "testing" "github.com/pingcap/errors" - "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/parser" - "github.com/pingcap/tidb/parser/ast" - "github.com/pingcap/tidb/parser/charset" "github.com/pingcap/tidb/parser/model" - "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" ) -type testColumnSuiteToVerify struct { - suite.Suite - store kv.Storage - dbInfo *model.DBInfo -} - -func TestColumnSuite(t *testing.T) { - suite.Run(t, new(testColumnSuiteToVerify)) -} - -func (s *testColumnSuiteToVerify) SetupSuite() { - s.store = createMockStore(s.T()) - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - - s.dbInfo, err = testSchemaInfo(d, "test_column") - require.NoError(s.T(), err) - testCreateSchema(s.T(), testNewContext(d), d, s.dbInfo) - require.Nil(s.T(), d.Stop()) -} - -func (s *testColumnSuiteToVerify) TearDownSuite() { - err := s.store.Close() - require.NoError(s.T(), err) -} - -func buildCreateColumnJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, colName string, - pos *ast.ColumnPosition, defaultValue interface{}) *model.Job { - col := &model.ColumnInfo{ - Name: model.NewCIStr(colName), - Offset: len(tblInfo.Columns), - DefaultValue: defaultValue, - OriginDefaultValue: defaultValue, - } - col.ID = allocateColumnID(tblInfo) - col.FieldType = *types.NewFieldType(mysql.TypeLong) - - job := &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionAddColumn, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{col, pos, 0}, +func testCreateColumn(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context, tblID int64, + colName string, pos string, defaultValue interface{}, dom *domain.Domain) int64 { + sql := fmt.Sprintf("alter table t1 add column %s int ", colName) + if defaultValue != nil { + sql += fmt.Sprintf("default %v ", defaultValue) } - return job -} - -func testCreateColumn(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, - colName string, pos *ast.ColumnPosition, defaultValue interface{}) *model.Job { - job := buildCreateColumnJob(dbInfo, tblInfo, colName, pos, defaultValue) - err := d.doDDLJob(ctx, job) - require.NoError(t, err) + sql += pos + tk.MustExec(sql) + idi, _ := strconv.Atoi(tk.MustQuery("admin show ddl jobs 1;").Rows()[0][0].(string)) + id := int64(idi) v := getSchemaVer(t, ctx) - checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - return job + require.NoError(t, dom.Reload()) + tblInfo, exist := dom.InfoSchema().TableByID(tblID) + require.True(t, exist) + checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) + return id } -func buildCreateColumnsJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, colNames []string, - positions []*ast.ColumnPosition, defaultValue interface{}) *model.Job { - colInfos := make([]*model.ColumnInfo, len(colNames)) - offsets := make([]int, len(colNames)) - ifNotExists := make([]bool, len(colNames)) +func testCreateColumns(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context, tblID int64, + colNames []string, positions []string, defaultValue interface{}, dom *domain.Domain) int64 { + sql := "alter table t1 add column " for i, colName := range colNames { - col := &model.ColumnInfo{ - Name: model.NewCIStr(colName), - Offset: len(tblInfo.Columns), - DefaultValue: defaultValue, - OriginDefaultValue: defaultValue, + if i != 0 { + sql += ", add column " + } + sql += fmt.Sprintf("%s int %s", colName, positions[i]) + if defaultValue != nil { + sql += fmt.Sprintf(" default %v", defaultValue) } - col.ID = allocateColumnID(tblInfo) - col.FieldType = *types.NewFieldType(mysql.TypeLong) - colInfos[i] = col } + tk.MustExec(sql) + idi, _ := strconv.Atoi(tk.MustQuery("admin show ddl jobs 1;").Rows()[0][0].(string)) + id := int64(idi) + v := getSchemaVer(t, ctx) + require.NoError(t, dom.Reload()) + tblInfo, exist := dom.InfoSchema().TableByID(tblID) + require.True(t, exist) + checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) + return id +} - job := &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionAddColumns, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{colInfos, positions, offsets, ifNotExists}, +func testDropColumnInternal(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context, tblID int64, colName string, isError bool, dom *domain.Domain) int64 { + sql := fmt.Sprintf("alter table t1 drop column %s ", colName) + _, err := tk.Exec(sql) + if isError { + require.Error(t, err) + } else { + require.NoError(t, err) } - return job -} -func testCreateColumns(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, - colNames []string, positions []*ast.ColumnPosition, defaultValue interface{}) *model.Job { - job := buildCreateColumnsJob(dbInfo, tblInfo, colNames, positions, defaultValue) - err := d.doDDLJob(ctx, job) - require.NoError(t, err) + idi, _ := strconv.Atoi(tk.MustQuery("admin show ddl jobs 1;").Rows()[0][0].(string)) + id := int64(idi) v := getSchemaVer(t, ctx) - checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - return job + require.NoError(t, dom.Reload()) + tblInfo, exist := dom.InfoSchema().TableByID(tblID) + require.True(t, exist) + checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) + return id } -func buildDropColumnJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, colName string) *model.Job { - return &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionDropColumn, - BinlogInfo: &model.HistoryInfo{}, - MultiSchemaInfo: &model.MultiSchemaInfo{}, - Args: []interface{}{model.NewCIStr(colName)}, - } +func testDropTable(tk *testkit.TestKit, t *testing.T, tblName string, dom *domain.Domain) int64 { + sql := fmt.Sprintf("drop table %s ", tblName) + tk.MustExec(sql) + + idi, _ := strconv.Atoi(tk.MustQuery("admin show ddl jobs 1;").Rows()[0][0].(string)) + id := int64(idi) + require.NoError(t, dom.Reload()) + _, err := dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr(tblName)) + require.Error(t, err) + return id } -func testDropColumn(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, colName string, isError bool) *model.Job { - job := buildDropColumnJob(dbInfo, tblInfo, colName) - err := d.doDDLJob(ctx, job) - if isError { - require.Error(t, err) - return nil +func testCreateIndex(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context, tblID int64, unique bool, indexName string, colName string, dom *domain.Domain) int64 { + un := "" + if unique { + un = "unique" } - require.NoError(t, err) + sql := fmt.Sprintf("alter table t1 add %s index %s(%s)", un, indexName, colName) + tk.MustExec(sql) + + idi, _ := strconv.Atoi(tk.MustQuery("admin show ddl jobs 1;").Rows()[0][0].(string)) + id := int64(idi) v := getSchemaVer(t, ctx) - checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - return job + require.NoError(t, dom.Reload()) + tblInfo, exist := dom.InfoSchema().TableByID(tblID) + require.True(t, exist) + checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) + return id } -func buildDropColumnsJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, colNames []string) *model.Job { - columnNames := make([]model.CIStr, len(colNames)) - ifExists := make([]bool, len(colNames)) - for i, colName := range colNames { - columnNames[i] = model.NewCIStr(colName) - } - job := &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionDropColumns, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{columnNames, ifExists}, +func testDropColumns(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context, tblID int64, colName []string, isError bool, dom *domain.Domain) int64 { + sql := "alter table t1 drop column " + for i, name := range colName { + if i != 0 { + sql += ", drop column " + } + sql += name } - return job -} - -func testDropColumns(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, colNames []string, isError bool) *model.Job { - job := buildDropColumnsJob(dbInfo, tblInfo, colNames) - err := d.doDDLJob(ctx, job) + _, err := tk.Exec(sql) if isError { require.Error(t, err) - return nil + } else { + require.NoError(t, err) } - require.NoError(t, err) + + idi, _ := strconv.Atoi(tk.MustQuery("admin show ddl jobs 1;").Rows()[0][0].(string)) + id := int64(idi) v := getSchemaVer(t, ctx) - checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - return job + require.NoError(t, dom.Reload()) + tblInfo, exist := dom.InfoSchema().TableByID(tblID) + require.True(t, exist) + checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) + return id } -func (s *testColumnSuiteToVerify) TestColumnBasic() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - err := d.Stop() - require.NoError(s.T(), err) - }() - - tblInfo, err := testTableInfo(d, "t1", 3) - require.NoError(s.T(), err) - ctx := testNewContext(d) - - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - t := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) +func TestColumnBasic(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int);") num := 10 for i := 0; i < num; i++ { - _, err := t.AddRecord(ctx, types.MakeDatums(i, 10*i, 100*i)) - require.NoError(s.T(), err) + tk.MustExec(fmt.Sprintf("insert into t1 values(%d, %d, %d)", i, 10*i, 100*i)) } - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - - i := int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - require.Len(s.T(), data, 3) - require.Equal(s.T(), data[0].GetInt64(), i) - require.Equal(s.T(), data[1].GetInt64(), 10*i) - require.Equal(s.T(), data[2].GetInt64(), 100*i) + ctx := testNewContext(store) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) + + var tableID int64 + rs := tk.MustQuery("select TIDB_TABLE_ID from information_schema.tables where table_name='t1' and table_schema='test';") + tableIDi, _ := strconv.Atoi(rs.Rows()[0][0].(string)) + tableID = int64(tableIDi) + + tbl := testGetTable(t, dom, tableID) + + i := 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Len(t, data, 3) + require.Equal(t, data[0].GetInt64(), int64(i)) + require.Equal(t, data[1].GetInt64(), int64(10*i)) + require.Equal(t, data[2].GetInt64(), int64(100*i)) i++ return true, nil }) - require.NoError(s.T(), err) - require.Equal(s.T(), i, int64(num)) + require.NoError(t, err) + require.Equal(t, i, num) - require.Nil(s.T(), table.FindCol(t.Cols(), "c4")) + require.Nil(t, table.FindCol(tbl.Cols(), "c4")) - job := testCreateColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c4", &ast.ColumnPosition{Tp: ast.ColumnPositionAfter, RelativeColumn: &ast.ColumnName{Name: model.NewCIStr("c3")}}, 100) - testCheckJobDone(s.T(), d, job, true) + jobID := testCreateColumn(tk, t, testNewContext(store), tableID, "c4", "after c3", 100, dom) + testCheckJobDone(t, store, jobID, true) - t = testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - require.NotNil(s.T(), table.FindCol(t.Cols(), "c4")) + tbl = testGetTable(t, dom, tableID) + require.NotNil(t, table.FindCol(tbl.Cols(), "c4")) - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - require.Len(s.T(), data, 4) - require.Equal(s.T(), data[0].GetInt64(), i) - require.Equal(s.T(), data[1].GetInt64(), 10*i) - require.Equal(s.T(), data[2].GetInt64(), 100*i) - require.Equal(s.T(), data[3].GetInt64(), int64(100)) + require.Len(t, data, 4) + require.Equal(t, data[0].GetInt64(), int64(i)) + require.Equal(t, data[1].GetInt64(), int64(10*i)) + require.Equal(t, data[2].GetInt64(), int64(100*i)) + require.Equal(t, data[3].GetInt64(), int64(100)) i++ return true, nil }) - require.NoError(s.T(), err) - require.Equal(s.T(), i, int64(num)) + require.NoError(t, err) + require.Equal(t, i, num) - h, err := t.AddRecord(ctx, types.MakeDatums(11, 12, 13, 14)) - require.NoError(s.T(), err) + h, err := tbl.AddRecord(ctx, types.MakeDatums(11, 12, 13, 14)) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - values, err := tables.RowWithCols(t, ctx, h, t.Cols()) - require.NoError(s.T(), err) - - require.Len(s.T(), values, 4) - require.Equal(s.T(), values[3].GetInt64(), int64(14)) - - job = testDropColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c4", false) - testCheckJobDone(s.T(), d, job, false) - - t = testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - values, err = tables.RowWithCols(t, ctx, h, t.Cols()) - require.NoError(s.T(), err) + require.NoError(t, err) + values, err := tables.RowWithCols(tbl, ctx, h, tbl.Cols()) + require.NoError(t, err) - require.Len(s.T(), values, 3) - require.Equal(s.T(), values[2].GetInt64(), int64(13)) + require.Len(t, values, 4) + require.Equal(t, values[3].GetInt64(), int64(14)) - job = testCreateColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c4", &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, 111) - testCheckJobDone(s.T(), d, job, true) + jobID = testDropColumnInternal(tk, t, testNewContext(store), tableID, "c4", false, dom) + testCheckJobDone(t, store, jobID, false) - t = testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - values, err = tables.RowWithCols(t, ctx, h, t.Cols()) - require.NoError(s.T(), err) + tbl = testGetTable(t, dom, tableID) + values, err = tables.RowWithCols(tbl, ctx, h, tbl.Cols()) + require.NoError(t, err) - require.Len(s.T(), values, 4) - require.Equal(s.T(), values[3].GetInt64(), int64(111)) + require.Len(t, values, 3) + require.Equal(t, values[2].GetInt64(), int64(13)) - job = testCreateColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c5", &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, 101) - testCheckJobDone(s.T(), d, job, true) + jobID = testCreateColumn(tk, t, testNewContext(store), tableID, "c4", "", 111, dom) + testCheckJobDone(t, store, jobID, true) - t = testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - values, err = tables.RowWithCols(t, ctx, h, t.Cols()) - require.NoError(s.T(), err) + tbl = testGetTable(t, dom, tableID) + values, err = tables.RowWithCols(tbl, ctx, h, tbl.Cols()) + require.NoError(t, err) - require.Len(s.T(), values, 5) - require.Equal(s.T(), values[4].GetInt64(), int64(101)) + require.Len(t, values, 4) + require.Equal(t, values[3].GetInt64(), int64(111)) - job = testCreateColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c6", &ast.ColumnPosition{Tp: ast.ColumnPositionFirst}, 202) - testCheckJobDone(s.T(), d, job, true) + jobID = testCreateColumn(tk, t, testNewContext(store), tableID, "c5", "", 101, dom) + testCheckJobDone(t, store, jobID, true) - t = testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - cols := t.Cols() - require.Len(s.T(), cols, 6) - require.Equal(s.T(), cols[0].Offset, 0) - require.Equal(s.T(), cols[0].Name.L, "c6") - require.Equal(s.T(), cols[1].Offset, 1) - require.Equal(s.T(), cols[1].Name.L, "c1") - require.Equal(s.T(), cols[2].Offset, 2) - require.Equal(s.T(), cols[2].Name.L, "c2") - require.Equal(s.T(), cols[3].Offset, 3) - require.Equal(s.T(), cols[3].Name.L, "c3") - require.Equal(s.T(), cols[4].Offset, 4) - require.Equal(s.T(), cols[4].Name.L, "c4") - require.Equal(s.T(), cols[5].Offset, 5) - require.Equal(s.T(), cols[5].Name.L, "c5") + tbl = testGetTable(t, dom, tableID) + values, err = tables.RowWithCols(tbl, ctx, h, tbl.Cols()) + require.NoError(t, err) - values, err = tables.RowWithCols(t, ctx, h, cols) - require.NoError(s.T(), err) + require.Len(t, values, 5) + require.Equal(t, values[4].GetInt64(), int64(101)) + + jobID = testCreateColumn(tk, t, testNewContext(store), tableID, "c6", "first", 202, dom) + testCheckJobDone(t, store, jobID, true) + + tbl = testGetTable(t, dom, tableID) + cols := tbl.Cols() + require.Len(t, cols, 6) + require.Equal(t, cols[0].Offset, 0) + require.Equal(t, cols[0].Name.L, "c6") + require.Equal(t, cols[1].Offset, 1) + require.Equal(t, cols[1].Name.L, "c1") + require.Equal(t, cols[2].Offset, 2) + require.Equal(t, cols[2].Name.L, "c2") + require.Equal(t, cols[3].Offset, 3) + require.Equal(t, cols[3].Name.L, "c3") + require.Equal(t, cols[4].Offset, 4) + require.Equal(t, cols[4].Name.L, "c4") + require.Equal(t, cols[5].Offset, 5) + require.Equal(t, cols[5].Name.L, "c5") + + values, err = tables.RowWithCols(tbl, ctx, h, cols) + require.NoError(t, err) - require.Len(s.T(), values, 6) - require.Equal(s.T(), values[0].GetInt64(), int64(202)) - require.Equal(s.T(), values[5].GetInt64(), int64(101)) + require.Len(t, values, 6) + require.Equal(t, values[0].GetInt64(), int64(202)) + require.Equal(t, values[5].GetInt64(), int64(101)) - job = testDropColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c2", false) - testCheckJobDone(s.T(), d, job, false) + jobID = testDropColumnInternal(tk, t, testNewContext(store), tableID, "c2", false, dom) + testCheckJobDone(t, store, jobID, false) - t = testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) + tbl = testGetTable(t, dom, tableID) - values, err = tables.RowWithCols(t, ctx, h, t.Cols()) - require.NoError(s.T(), err) - require.Len(s.T(), values, 5) - require.Equal(s.T(), values[0].GetInt64(), int64(202)) - require.Equal(s.T(), values[4].GetInt64(), int64(101)) + values, err = tables.RowWithCols(tbl, ctx, h, tbl.Cols()) + require.NoError(t, err) + require.Len(t, values, 5) + require.Equal(t, values[0].GetInt64(), int64(202)) + require.Equal(t, values[4].GetInt64(), int64(101)) - job = testDropColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c1", false) - testCheckJobDone(s.T(), d, job, false) + jobID = testDropColumnInternal(tk, t, testNewContext(store), tableID, "c1", false, dom) + testCheckJobDone(t, store, jobID, false) - job = testDropColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c3", false) - testCheckJobDone(s.T(), d, job, false) + jobID = testDropColumnInternal(tk, t, testNewContext(store), tableID, "c3", false, dom) + testCheckJobDone(t, store, jobID, false) - job = testDropColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c4", false) - testCheckJobDone(s.T(), d, job, false) + jobID = testDropColumnInternal(tk, t, testNewContext(store), tableID, "c4", false, dom) + testCheckJobDone(t, store, jobID, false) - job = testCreateIndex(s.T(), ctx, d, s.dbInfo, tblInfo, false, "c5_idx", "c5") - testCheckJobDone(s.T(), d, job, true) + jobID = testCreateIndex(tk, t, testNewContext(store), tableID, false, "c5_idx", "c5", dom) + testCheckJobDone(t, store, jobID, true) - job = testDropColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c5", false) - testCheckJobDone(s.T(), d, job, false) + jobID = testDropColumnInternal(tk, t, testNewContext(store), tableID, "c5", false, dom) + testCheckJobDone(t, store, jobID, false) - testDropColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c6", true) + jobID = testDropColumnInternal(tk, t, testNewContext(store), tableID, "c6", true, dom) + testCheckJobDone(t, store, jobID, false) - testDropTable(s.T(), ctx, d, s.dbInfo, tblInfo) + testDropTable(tk, t, "t1", dom) } -func (s *testColumnSuiteToVerify) checkColumnKVExist(ctx sessionctx.Context, t table.Table, handle kv.Handle, col *table.Column, columnValue interface{}, isExist bool) error { +func checkColumnKVExist(ctx sessionctx.Context, t table.Table, handle kv.Handle, col *table.Column, columnValue interface{}, isExist bool) error { err := ctx.NewTxn(context.Background()) if err != nil { return errors.Trace(err) @@ -396,440 +353,277 @@ func (s *testColumnSuiteToVerify) checkColumnKVExist(ctx sessionctx.Context, t t return nil } -func (s *testColumnSuiteToVerify) checkNoneColumn(ctx sessionctx.Context, d *ddl, tblInfo *model.TableInfo, handle kv.Handle, col *table.Column, columnValue interface{}) error { - t, err := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - return errors.Trace(err) - } - err = s.checkColumnKVExist(ctx, t, handle, col, columnValue, false) - if err != nil { - return errors.Trace(err) - } - err = s.testGetColumn(t, col.Name.L, false) - if err != nil { - return errors.Trace(err) - } - return nil +func checkNoneColumn(t *testing.T, ctx sessionctx.Context, tableID int64, handle kv.Handle, col *table.Column, columnValue interface{}, dom *domain.Domain) { + tbl := testGetTable(t, dom, tableID) + err := checkColumnKVExist(ctx, tbl, handle, col, columnValue, false) + require.NoError(t, err) + err = testGetColumn(tbl, col.Name.L, false) + require.NoError(t, err) } -func (s *testColumnSuiteToVerify) checkDeleteOnlyColumn(ctx sessionctx.Context, d *ddl, tblInfo *model.TableInfo, handle kv.Handle, col *table.Column, row []types.Datum, columnValue interface{}) error { - t, err := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - return errors.Trace(err) - } - err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } - i := int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, row) { - return false, errors.Errorf("%v not equal to %v", data, row) - } +func checkDeleteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, handle kv.Handle, col *table.Column, row []types.Datum, columnValue interface{}, dom *domain.Domain) { + tbl := testGetTable(t, dom, tableID) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) + i := 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, row), "%v not equal to %v", data, row) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 1 { - return errors.Errorf("expect 1, got %v", i) - } - err = s.checkColumnKVExist(ctx, t, handle, col, columnValue, false) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) + require.Equalf(t, 1, i, "expect 1, got %v", i) + err = checkColumnKVExist(ctx, tbl, handle, col, columnValue, false) + require.NoError(t, err) // Test add a new row. err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) newRow := types.MakeDatums(int64(11), int64(22), int64(33)) - newHandle, err := t.AddRecord(ctx, newRow) - if err != nil { - return errors.Trace(err) - } + newHandle, err := tbl.AddRecord(ctx, newRow) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) rows := [][]types.Datum{row, newRow} - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, rows[i]) { - return false, errors.Errorf("%v not equal to %v", data, rows[i]) - } + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, rows[i]), "%v not equal to %v", data, rows[i]) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 2 { - return errors.Errorf("expect 2, got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 2, i, "expect 2, got %v", i) - err = s.checkColumnKVExist(ctx, t, handle, col, columnValue, false) - if err != nil { - return errors.Trace(err) - } + err = checkColumnKVExist(ctx, tbl, handle, col, columnValue, false) + require.NoError(t, err) // Test remove a row. err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) - err = t.RemoveRecord(ctx, newHandle, newRow) - if err != nil { - return errors.Trace(err) - } + err = tbl.RemoveRecord(ctx, newHandle, newRow) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.NoError(t, err) + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) - if i != 1 { - return errors.Errorf("expect 1, got %v", i) - } - err = s.checkColumnKVExist(ctx, t, newHandle, col, columnValue, false) - if err != nil { - return errors.Trace(err) - } - err = s.testGetColumn(t, col.Name.L, false) - if err != nil { - return errors.Trace(err) - } - return nil + require.Equalf(t, 1, i, "expect 1, got %v", i) + err = checkColumnKVExist(ctx, tbl, newHandle, col, columnValue, false) + require.NoError(t, err) + err = testGetColumn(tbl, col.Name.L, false) + require.NoError(t, err) } -func (s *testColumnSuiteToVerify) checkWriteOnlyColumn(ctx sessionctx.Context, d *ddl, tblInfo *model.TableInfo, handle kv.Handle, col *table.Column, row []types.Datum, columnValue interface{}) error { - t, err := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - return errors.Trace(err) - } - err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } +func checkWriteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, handle kv.Handle, col *table.Column, row []types.Datum, columnValue interface{}, dom *domain.Domain) { + tbl := testGetTable(t, dom, tableID) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) - i := int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, row) { - return false, errors.Errorf("%v not equal to %v", data, row) - } + i := 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, row), "%v not equal to %v", data, row) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 1 { - return errors.Errorf("expect 1, got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 1, i, "expect 1, got %v", i) - err = s.checkColumnKVExist(ctx, t, handle, col, columnValue, false) - if err != nil { - return errors.Trace(err) - } + err = checkColumnKVExist(ctx, tbl, handle, col, columnValue, false) + require.NoError(t, err) // Test add a new row. err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) newRow := types.MakeDatums(int64(11), int64(22), int64(33)) - newHandle, err := t.AddRecord(ctx, newRow) - if err != nil { - return errors.Trace(err) - } + newHandle, err := tbl.AddRecord(ctx, newRow) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) rows := [][]types.Datum{row, newRow} - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, rows[i]) { - return false, errors.Errorf("%v not equal to %v", data, rows[i]) - } + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, rows[i]), "%v not equal to %v", data, rows[i]) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 2 { - return errors.Errorf("expect 2, got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 2, i, "expect 2, got %v", i) - err = s.checkColumnKVExist(ctx, t, newHandle, col, columnValue, true) - if err != nil { - return errors.Trace(err) - } + err = checkColumnKVExist(ctx, tbl, newHandle, col, columnValue, true) + require.NoError(t, err) // Test remove a row. err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) - err = t.RemoveRecord(ctx, newHandle, newRow) - if err != nil { - return errors.Trace(err) - } + err = tbl.RemoveRecord(ctx, newHandle, newRow) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 1 { - return errors.Errorf("expect 1, got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 1, i, "expect 1, got %v", i) - err = s.checkColumnKVExist(ctx, t, newHandle, col, columnValue, false) - if err != nil { - return errors.Trace(err) - } - err = s.testGetColumn(t, col.Name.L, false) - if err != nil { - return errors.Trace(err) - } - return nil + err = checkColumnKVExist(ctx, tbl, newHandle, col, columnValue, false) + require.NoError(t, err) + err = testGetColumn(tbl, col.Name.L, false) + require.NoError(t, err) } -func (s *testColumnSuiteToVerify) checkReorganizationColumn(ctx sessionctx.Context, d *ddl, tblInfo *model.TableInfo, col *table.Column, row []types.Datum, columnValue interface{}) error { - t, err := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - return errors.Trace(err) - } - err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } +func checkReorganizationColumn(t *testing.T, ctx sessionctx.Context, tableID int64, col *table.Column, row []types.Datum, columnValue interface{}, dom *domain.Domain) { + tbl := testGetTable(t, dom, tableID) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) - i := int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, row) { - return false, errors.Errorf("%v not equal to %v", data, row) - } + i := 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, row), "%v not equal to %v", data, row) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 1 { - return errors.Errorf("expect 1 got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 1, i, "expect 1, got %v", i) // Test add a new row. err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) newRow := types.MakeDatums(int64(11), int64(22), int64(33)) - newHandle, err := t.AddRecord(ctx, newRow) - if err != nil { - return errors.Trace(err) - } + newHandle, err := tbl.AddRecord(ctx, newRow) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) rows := [][]types.Datum{row, newRow} - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, rows[i]) { - return false, errors.Errorf("%v not equal to %v", data, rows[i]) - } + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, rows[i]), "%v not equal to %v", data, rows[i]) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 2 { - return errors.Errorf("expect 2, got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 2, i, "expect 2, got %v", i) - err = s.checkColumnKVExist(ctx, t, newHandle, col, columnValue, true) - if err != nil { - return errors.Trace(err) - } + err = checkColumnKVExist(ctx, tbl, newHandle, col, columnValue, true) + require.NoError(t, err) // Test remove a row. err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) - err = t.RemoveRecord(ctx, newHandle, newRow) - if err != nil { - return errors.Trace(err) - } + err = tbl.RemoveRecord(ctx, newHandle, newRow) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 1 { - return errors.Errorf("expect 1, got %v", i) - } - err = s.testGetColumn(t, col.Name.L, false) - if err != nil { - return errors.Trace(err) - } - return nil + require.NoError(t, err) + require.Equalf(t, 1, i, "expect 1, got %v", i) + err = testGetColumn(tbl, col.Name.L, false) + require.NoError(t, err) } -func (s *testColumnSuiteToVerify) checkPublicColumn(ctx sessionctx.Context, d *ddl, tblInfo *model.TableInfo, newCol *table.Column, oldRow []types.Datum, columnValue interface{}) error { - t, err := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - return errors.Trace(err) - } - err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } +func checkPublicColumn(t *testing.T, ctx sessionctx.Context, tableID int64, newCol *table.Column, oldRow []types.Datum, columnValue interface{}, dom *domain.Domain, columnCnt int) { + tbl := testGetTable(t, dom, tableID) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) - i := int64(0) - updatedRow := append(oldRow, types.NewDatum(columnValue)) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, updatedRow) { - return false, errors.Errorf("%v not equal to %v", data, updatedRow) - } + i := 0 + var updatedRow []types.Datum + updatedRow = append(updatedRow, oldRow...) + for j := 0; j < columnCnt; j++ { + updatedRow = append(updatedRow, types.NewDatum(columnValue)) + } + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, updatedRow), "%v not equal to %v", data, updatedRow) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 1 { - return errors.Errorf("expect 1, got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 1, i, "expect 1, got %v", i) // Test add a new row. err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) newRow := types.MakeDatums(int64(11), int64(22), int64(33), int64(44)) - handle, err := t.AddRecord(ctx, newRow) - if err != nil { - return errors.Trace(err) + for j := 1; j < columnCnt; j++ { + newRow = append(newRow, types.NewDatum(int64(44))) } + handle, err := tbl.AddRecord(ctx, newRow) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) rows := [][]types.Datum{updatedRow, newRow} - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, rows[i]) { - return false, errors.Errorf("%v not equal to %v", data, rows[i]) - } + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, rows[i]), "%v not equal to %v", data, rows[i]) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 2 { - return errors.Errorf("expect 2, got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 2, i, "expect 2, got %v", i) // Test remove a row. err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) - err = t.RemoveRecord(ctx, handle, newRow) - if err != nil { - return errors.Trace(err) - } + err = tbl.RemoveRecord(ctx, handle, newRow) + require.NoError(t, err) err = ctx.NewTxn(context.Background()) - if err != nil { - return errors.Trace(err) - } + require.NoError(t, err) - i = int64(0) - err = tables.IterRecords(t, ctx, t.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - if !reflect.DeepEqual(data, updatedRow) { - return false, errors.Errorf("%v not equal to %v", data, updatedRow) - } + i = 0 + err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + require.Truef(t, reflect.DeepEqual(data, rows[i]), "%v not equal to %v", data, rows[i]) i++ return true, nil }) - if err != nil { - return errors.Trace(err) - } - if i != 1 { - return errors.Errorf("expect 1, got %v", i) - } + require.NoError(t, err) + require.Equalf(t, 1, i, "expect 1, got %v", i) - err = s.testGetColumn(t, newCol.Name.L, true) - if err != nil { - return errors.Trace(err) - } - return nil + err = testGetColumn(tbl, newCol.Name.L, true) + require.NoError(t, err) } -func (s *testColumnSuiteToVerify) checkAddColumn(state model.SchemaState, d *ddl, tblInfo *model.TableInfo, handle kv.Handle, newCol *table.Column, oldRow []types.Datum, columnValue interface{}) error { - ctx := testNewContext(d) - var err error +func checkAddColumn(t *testing.T, state model.SchemaState, tableID int64, handle kv.Handle, newCol *table.Column, oldRow []types.Datum, columnValue interface{}, dom *domain.Domain, store kv.Storage, columnCnt int) { + ctx := testNewContext(store) switch state { case model.StateNone: - err = errors.Trace(s.checkNoneColumn(ctx, d, tblInfo, handle, newCol, columnValue)) + checkNoneColumn(t, ctx, tableID, handle, newCol, columnValue, dom) case model.StateDeleteOnly: - err = errors.Trace(s.checkDeleteOnlyColumn(ctx, d, tblInfo, handle, newCol, oldRow, columnValue)) + checkDeleteOnlyColumn(t, ctx, tableID, handle, newCol, oldRow, columnValue, dom) case model.StateWriteOnly: - err = errors.Trace(s.checkWriteOnlyColumn(ctx, d, tblInfo, handle, newCol, oldRow, columnValue)) + checkWriteOnlyColumn(t, ctx, tableID, handle, newCol, oldRow, columnValue, dom) case model.StateWriteReorganization, model.StateDeleteReorganization: - err = errors.Trace(s.checkReorganizationColumn(ctx, d, tblInfo, newCol, oldRow, columnValue)) + checkReorganizationColumn(t, ctx, tableID, newCol, oldRow, columnValue, dom) case model.StatePublic: - err = errors.Trace(s.checkPublicColumn(ctx, d, tblInfo, newCol, oldRow, columnValue)) + checkPublicColumn(t, ctx, tableID, newCol, oldRow, columnValue, dom, columnCnt) } - return err } -func (s *testColumnSuiteToVerify) testGetColumn(t table.Table, name string, isExist bool) error { +func testGetColumn(t table.Table, name string, isExist bool) error { col := table.FindCol(t.Cols(), name) if isExist { if col == nil { @@ -843,62 +637,50 @@ func (s *testColumnSuiteToVerify) testGetColumn(t table.Table, name string, isEx return nil } -func (s *testColumnSuiteToVerify) TestAddColumn() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - tblInfo, err := testTableInfo(d, "t", 3) - require.NoError(s.T(), err) - ctx := testNewContext(d) +func TestAddColumn(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int);") - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - t := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) + var tableID int64 + rs := tk.MustQuery("select TIDB_TABLE_ID from information_schema.tables where table_name='t1' and table_schema='test';") + tableIDi, _ := strconv.Atoi(rs.Rows()[0][0].(string)) + tableID = int64(tableIDi) + tbl := testGetTable(t, dom, tableID) + ctx := testNewContext(store) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) oldRow := types.MakeDatums(int64(1), int64(2), int64(3)) - handle, err := t.AddRecord(ctx, oldRow) - require.NoError(s.T(), err) + handle, err := tbl.AddRecord(ctx, oldRow) + require.NoError(t, err) txn, err := ctx.Txn(true) - require.NoError(s.T(), err) + require.NoError(t, err) err = txn.Commit(context.Background()) - require.NoError(s.T(), err) + require.NoError(t, err) newColName := "c4" defaultColValue := int64(4) - var mu sync.Mutex - var hookErr error checkOK := false - tc := &TestDDLCallback{} - tc.onJobUpdated = func(job *model.Job) { - mu.Lock() - defer mu.Unlock() + d := dom.DDL() + tc := &ddl.TestDDLCallback{Do: dom} + tc.OnJobUpdatedExported = func(job *model.Job) { if checkOK { return } - t, err1 := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err1 != nil { - hookErr = errors.Trace(err1) - return - } - newCol := table.FindCol(t.(*tables.TableCommon).Columns, newColName) + tbl := testGetTable(t, dom, tableID) + newCol := table.FindCol(tbl.(*tables.TableCommon).Columns, newColName) if newCol == nil { return } - err1 = s.checkAddColumn(newCol.State, d, tblInfo, handle, newCol, oldRow, defaultColValue) - if err1 != nil { - hookErr = errors.Trace(err1) - return - } + checkAddColumn(t, newCol.State, tableID, handle, newCol, oldRow, defaultColValue, dom, store, 1) if newCol.State == model.StatePublic { checkOK = true @@ -907,61 +689,26 @@ func (s *testColumnSuiteToVerify) TestAddColumn() { d.SetHook(tc) - job := testCreateColumn(s.T(), ctx, d, s.dbInfo, tblInfo, newColName, &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, defaultColValue) - - testCheckJobDone(s.T(), d, job, true) - mu.Lock() - hErr := hookErr - ok := checkOK - mu.Unlock() - require.NoError(s.T(), hErr) - require.True(s.T(), ok) - - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - - job = testDropTable(s.T(), ctx, d, s.dbInfo, tblInfo) - testCheckJobDone(s.T(), d, job, false) + jobID := testCreateColumn(tk, t, testNewContext(store), tableID, newColName, "", defaultColValue, dom) + testCheckJobDone(t, store, jobID, true) - txn, err = ctx.Txn(true) - require.NoError(s.T(), err) - err = txn.Commit(context.Background()) - require.NoError(s.T(), err) + require.True(t, checkOK) - err = d.Stop() - require.NoError(s.T(), err) + jobID = testDropTable(tk, t, "t1", dom) + testCheckJobDone(t, store, jobID, false) } -func (s *testColumnSuiteToVerify) TestAddColumns() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - tblInfo, err := testTableInfo(d, "t", 3) - require.NoError(s.T(), err) - ctx := testNewContext(d) - - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - t := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) +func TestAddColumns(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int);") - oldRow := types.MakeDatums(int64(1), int64(2), int64(3)) - handle, err := t.AddRecord(ctx, oldRow) - require.NoError(s.T(), err) - - txn, err := ctx.Txn(true) - require.NoError(s.T(), err) - err = txn.Commit(context.Background()) - require.NoError(s.T(), err) - - newColNames := []string{"c4,c5,c6"} - positions := make([]*ast.ColumnPosition, 3) + newColNames := []string{"c4", "c5", "c6"} + positions := make([]string, 3) for i := range positions { - positions[i] = &ast.ColumnPosition{Tp: ast.ColumnPositionNone} + positions[i] = "" } defaultColValue := int64(4) @@ -969,30 +716,41 @@ func (s *testColumnSuiteToVerify) TestAddColumns() { var hookErr error checkOK := false - tc := &TestDDLCallback{} - tc.onJobUpdated = func(job *model.Job) { + var tableID int64 + rs := tk.MustQuery("select TIDB_TABLE_ID from information_schema.tables where table_name='t1' and table_schema='test';") + tableIDi, _ := strconv.Atoi(rs.Rows()[0][0].(string)) + tableID = int64(tableIDi) + tbl := testGetTable(t, dom, tableID) + + ctx := testNewContext(store) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) + oldRow := types.MakeDatums(int64(1), int64(2), int64(3)) + handle, err := tbl.AddRecord(ctx, oldRow) + require.NoError(t, err) + + txn, err := ctx.Txn(true) + require.NoError(t, err) + err = txn.Commit(context.Background()) + require.NoError(t, err) + + d := dom.DDL() + tc := &ddl.TestDDLCallback{Do: dom} + tc.OnJobUpdatedExported = func(job *model.Job) { mu.Lock() defer mu.Unlock() if checkOK { return } - t, err1 := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err1 != nil { - hookErr = errors.Trace(err1) - return - } + tbl := testGetTable(t, dom, tableID) for _, newColName := range newColNames { - newCol := table.FindCol(t.(*tables.TableCommon).Columns, newColName) + newCol := table.FindCol(tbl.(*tables.TableCommon).Columns, newColName) if newCol == nil { return } - err1 = s.checkAddColumn(newCol.State, d, tblInfo, handle, newCol, oldRow, defaultColValue) - if err1 != nil { - hookErr = errors.Trace(err1) - return - } + checkAddColumn(t, newCol.State, tableID, handle, newCol, oldRow, defaultColValue, dom, store, 3) if newCol.State == model.StatePublic { checkOK = true @@ -1002,67 +760,61 @@ func (s *testColumnSuiteToVerify) TestAddColumns() { d.SetHook(tc) - job := testCreateColumns(s.T(), ctx, d, s.dbInfo, tblInfo, newColNames, positions, defaultColValue) + jobID := testCreateColumns(tk, t, testNewContext(store), tableID, newColNames, positions, defaultColValue, dom) - testCheckJobDone(s.T(), d, job, true) + testCheckJobDone(t, store, jobID, true) mu.Lock() hErr := hookErr ok := checkOK mu.Unlock() - require.NoError(s.T(), hErr) - require.True(s.T(), ok) + require.NoError(t, hErr) + require.True(t, ok) - job = testDropTable(s.T(), ctx, d, s.dbInfo, tblInfo) - testCheckJobDone(s.T(), d, job, false) - err = d.Stop() - require.NoError(s.T(), err) + jobID = testDropTable(tk, t, "t1", dom) + testCheckJobDone(t, store, jobID, false) } -func (s *testColumnSuiteToVerify) TestDropColumn() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - tblInfo, err := testTableInfo(d, "t2", 4) - require.NoError(s.T(), err) - ctx := testNewContext(d) - - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) +func TestDropColumnInColumnTest(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int, c4 int);") - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - t := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) + var tableID int64 + rs := tk.MustQuery("select TIDB_TABLE_ID from information_schema.tables where table_name='t1' and table_schema='test';") + tableIDi, _ := strconv.Atoi(rs.Rows()[0][0].(string)) + tableID = int64(tableIDi) + tbl := testGetTable(t, dom, tableID) + ctx := testNewContext(store) colName := "c4" defaultColValue := int64(4) row := types.MakeDatums(int64(1), int64(2), int64(3)) - _, err = t.AddRecord(ctx, append(row, types.NewDatum(defaultColValue))) - require.NoError(s.T(), err) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) + _, err = tbl.AddRecord(ctx, append(row, types.NewDatum(defaultColValue))) + require.NoError(t, err) txn, err := ctx.Txn(true) - require.NoError(s.T(), err) + require.NoError(t, err) err = txn.Commit(context.Background()) - require.NoError(s.T(), err) + require.NoError(t, err) checkOK := false var hookErr error var mu sync.Mutex - tc := &TestDDLCallback{} - tc.onJobUpdated = func(job *model.Job) { + d := dom.DDL() + tc := &ddl.TestDDLCallback{Do: dom} + tc.OnJobUpdatedExported = func(job *model.Job) { mu.Lock() defer mu.Unlock() if checkOK { return } - t, err1 := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err1 != nil { - hookErr = errors.Trace(err1) - return - } - col := table.FindCol(t.(*tables.TableCommon).Columns, colName) + tbl := testGetTable(t, dom, tableID) + col := table.FindCol(tbl.(*tables.TableCommon).Columns, colName) if col == nil { checkOK = true return @@ -1071,76 +823,62 @@ func (s *testColumnSuiteToVerify) TestDropColumn() { d.SetHook(tc) - job := testDropColumn(s.T(), ctx, d, s.dbInfo, tblInfo, colName, false) - testCheckJobDone(s.T(), d, job, false) + jobID := testDropColumnInternal(tk, t, testNewContext(store), tableID, colName, false, dom) + testCheckJobDone(t, store, jobID, false) mu.Lock() hErr := hookErr ok := checkOK mu.Unlock() - require.NoError(s.T(), hErr) - require.True(s.T(), ok) - - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - - job = testDropTable(s.T(), ctx, d, s.dbInfo, tblInfo) - testCheckJobDone(s.T(), d, job, false) + require.NoError(t, hErr) + require.True(t, ok) - txn, err = ctx.Txn(true) - require.NoError(s.T(), err) - err = txn.Commit(context.Background()) - require.NoError(s.T(), err) - - err = d.Stop() - require.NoError(s.T(), err) + jobID = testDropTable(tk, t, "t1", dom) + testCheckJobDone(t, store, jobID, false) } -func (s *testColumnSuiteToVerify) TestDropColumns() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - tblInfo, err := testTableInfo(d, "t2", 4) - require.NoError(s.T(), err) - ctx := testNewContext(d) +func TestDropColumns(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int, c4 int);") - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) + var tableID int64 + rs := tk.MustQuery("select TIDB_TABLE_ID from information_schema.tables where table_name='t1' and table_schema='test';") + tableIDi, _ := strconv.Atoi(rs.Rows()[0][0].(string)) + tableID = int64(tableIDi) + tbl := testGetTable(t, dom, tableID) - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - t := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) + ctx := testNewContext(store) + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) colNames := []string{"c3", "c4"} defaultColValue := int64(4) row := types.MakeDatums(int64(1), int64(2), int64(3)) - _, err = t.AddRecord(ctx, append(row, types.NewDatum(defaultColValue))) - require.NoError(s.T(), err) + _, err = tbl.AddRecord(ctx, append(row, types.NewDatum(defaultColValue))) + require.NoError(t, err) txn, err := ctx.Txn(true) - require.NoError(s.T(), err) + require.NoError(t, err) err = txn.Commit(context.Background()) - require.NoError(s.T(), err) + require.NoError(t, err) checkOK := false var hookErr error var mu sync.Mutex - tc := &TestDDLCallback{} - tc.onJobUpdated = func(job *model.Job) { + d := dom.DDL() + tc := &ddl.TestDDLCallback{Do: dom} + tc.OnJobUpdatedExported = func(job *model.Job) { mu.Lock() defer mu.Unlock() if checkOK { return } - t, err1 := testGetTableWithError(d, s.dbInfo.ID, tblInfo.ID) - if err1 != nil { - hookErr = errors.Trace(err1) - return - } + tbl := testGetTable(t, dom, tableID) for _, colName := range colNames { - col := table.FindCol(t.(*tables.TableCommon).Columns, colName) + col := table.FindCol(tbl.(*tables.TableCommon).Columns, colName) if col == nil { checkOK = true return @@ -1150,147 +888,22 @@ func (s *testColumnSuiteToVerify) TestDropColumns() { d.SetHook(tc) - job := testDropColumns(s.T(), ctx, d, s.dbInfo, tblInfo, colNames, false) - testCheckJobDone(s.T(), d, job, false) + jobID := testDropColumns(tk, t, testNewContext(store), tableID, colNames, false, dom) + testCheckJobDone(t, store, jobID, false) mu.Lock() hErr := hookErr ok := checkOK mu.Unlock() - require.NoError(s.T(), hErr) - require.True(s.T(), ok) - - job = testDropTable(s.T(), ctx, d, s.dbInfo, tblInfo) - testCheckJobDone(s.T(), d, job, false) - err = d.Stop() - require.NoError(s.T(), err) -} - -func TestModifyColumn(t *testing.T) { - store, err := mockstore.NewMockStore() - require.NoError(t, err) - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - - require.NoError(t, err) - ctx := testNewContext(d) - - defer func() { - err := d.Stop() - require.NoError(t, err) - err = store.Close() - require.NoError(t, err) - }() - - tests := []struct { - origin string - to string - err error - }{ - {"int", "bigint", nil}, - {"int", "int unsigned", nil}, - {"varchar(10)", "text", nil}, - {"varbinary(10)", "blob", nil}, - {"text", "blob", errUnsupportedModifyCharset.GenWithStackByArgs("charset from utf8mb4 to binary")}, - {"varchar(10)", "varchar(8)", nil}, - {"varchar(10)", "varchar(11)", nil}, - {"varchar(10) character set utf8 collate utf8_bin", "varchar(10) character set utf8", nil}, - {"decimal(2,1)", "decimal(3,2)", nil}, - {"decimal(2,1)", "decimal(2,2)", nil}, - {"decimal(2,1)", "decimal(2,1)", nil}, - {"decimal(2,1)", "int", nil}, - {"decimal", "int", nil}, - {"decimal(2,1)", "bigint", nil}, - {"int", "varchar(10) character set gbk", errUnsupportedModifyCharset.GenWithStackByArgs("charset from binary to gbk")}, - {"varchar(10) character set gbk", "int", errUnsupportedModifyCharset.GenWithStackByArgs("charset from gbk to binary")}, - {"varchar(10) character set gbk", "varchar(10) character set utf8", errUnsupportedModifyCharset.GenWithStackByArgs("charset from gbk to utf8")}, - {"varchar(10) character set gbk", "char(10) character set utf8", errUnsupportedModifyCharset.GenWithStackByArgs("charset from gbk to utf8")}, - {"varchar(10) character set utf8", "char(10) character set gbk", errUnsupportedModifyCharset.GenWithStackByArgs("charset from utf8 to gbk")}, - {"varchar(10) character set utf8", "varchar(10) character set gbk", errUnsupportedModifyCharset.GenWithStackByArgs("charset from utf8 to gbk")}, - {"varchar(10) character set gbk", "varchar(255) character set gbk", nil}, - } - for _, tt := range tests { - ftA := colDefStrToFieldType(t, tt.origin, ctx) - ftB := colDefStrToFieldType(t, tt.to, ctx) - err := checkModifyTypes(ctx, ftA, ftB, false) - if err == nil { - require.NoErrorf(t, tt.err, "origin:%v, to:%v", tt.origin, tt.to) - } else { - require.EqualError(t, err, tt.err.Error()) - } - } -} + require.NoError(t, hErr) + require.True(t, ok) -func colDefStrToFieldType(t *testing.T, str string, ctx sessionctx.Context) *types.FieldType { - sqlA := "alter table t modify column a " + str - stmt, err := parser.New().ParseOneStmt(sqlA, "", "") - require.NoError(t, err) - colDef := stmt.(*ast.AlterTableStmt).Specs[0].NewColumns[0] - chs, coll := charset.GetDefaultCharsetAndCollate() - col, _, err := buildColumnAndConstraint(ctx, 0, colDef, nil, chs, coll) - require.NoError(t, err) - return &col.FieldType + jobID = testDropTable(tk, t, "t1", dom) + testCheckJobDone(t, store, jobID, false) } -func TestFieldCase(t *testing.T) { - var fields = []string{"field", "Field"} - colObjects := make([]*model.ColumnInfo, len(fields)) - for i, name := range fields { - colObjects[i] = &model.ColumnInfo{ - Name: model.NewCIStr(name), - } - } - err := checkDuplicateColumn(colObjects) - require.EqualError(t, err, infoschema.ErrColumnExists.GenWithStackByArgs("Field").Error()) -} - -func (s *testColumnSuiteToVerify) TestAutoConvertBlobTypeByLength() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - // Close the customized ddl(worker goroutine included) after the test is finished, otherwise, it will - // cause go routine in TiDB leak test. - defer func() { - err := d.Stop() - require.NoError(s.T(), err) - }() - - sql := fmt.Sprintf("create table t0(c0 Blob(%d), c1 Blob(%d), c2 Blob(%d), c3 Blob(%d))", - tinyBlobMaxLength-1, blobMaxLength-1, mediumBlobMaxLength-1, longBlobMaxLength-1) - stmt, err := parser.New().ParseOneStmt(sql, "", "") - require.NoError(s.T(), err) - tblInfo, err := BuildTableInfoFromAST(stmt.(*ast.CreateTableStmt)) - require.NoError(s.T(), err) - genIDs, err := d.genGlobalIDs(1) - require.NoError(s.T(), err) - tblInfo.ID = genIDs[0] - - ctx := testNewContext(d) - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - t := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - - require.Equal(s.T(), t.Cols()[0].Tp, mysql.TypeTinyBlob) - require.Equal(s.T(), t.Cols()[0].Flen, tinyBlobMaxLength) - require.Equal(s.T(), t.Cols()[1].Tp, mysql.TypeBlob) - require.Equal(s.T(), t.Cols()[1].Flen, blobMaxLength) - require.Equal(s.T(), t.Cols()[2].Tp, mysql.TypeMediumBlob) - require.Equal(s.T(), t.Cols()[2].Flen, mediumBlobMaxLength) - require.Equal(s.T(), t.Cols()[3].Tp, mysql.TypeLongBlob) - require.Equal(s.T(), t.Cols()[3].Flen, longBlobMaxLength) - - oldRow := types.MakeDatums([]byte("a"), []byte("a"), []byte("a"), []byte("a")) - _, err = t.AddRecord(ctx, oldRow) - require.NoError(s.T(), err) - - txn, err := ctx.Txn(true) - require.NoError(s.T(), err) - err = txn.Commit(context.Background()) - require.NoError(s.T(), err) +func testGetTable(t *testing.T, dom *domain.Domain, tableID int64) table.Table { + require.NoError(t, dom.Reload()) + tbl, exist := dom.InfoSchema().TableByID(tableID) + require.True(t, exist) + return tbl } diff --git a/ddl/column_type_change_test.go b/ddl/column_type_change_test.go index 222c5436cfd7b..003bcc59b995c 100644 --- a/ddl/column_type_change_test.go +++ b/ddl/column_type_change_test.go @@ -36,6 +36,7 @@ import ( "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" @@ -121,13 +122,10 @@ func TestColumnTypeChangeStateBetweenInteger(t *testing.T) { internalTK := testkit.NewTestKit(t, store) internalTK.MustExec("use test") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, 2, len(tbl.Cols())) - require.NotNil(t, tk.GetModifyColumn("test", "t", "c2", false)) - - originalHook := dom.DDL().GetHook() - defer dom.DDL().(ddl.DDLForTest).SetHook(originalHook) + require.NotNil(t, external.GetModifyColumn(t, tk, "test", "t", "c2", false)) hook := &ddl.TestDDLCallback{Do: dom} var checkErr error @@ -140,38 +138,38 @@ func TestColumnTypeChangeStateBetweenInteger(t *testing.T) { } switch job.SchemaState { case model.StateNone: - tbl = internalTK.GetTableByName("test", "t") + tbl = external.GetTableByName(t, internalTK, "test", "t") if tbl == nil { checkErr = errors.New("tbl is nil") } else if len(tbl.Cols()) != 2 { checkErr = errors.New("len(cols) is not right") } case model.StateDeleteOnly, model.StateWriteOnly, model.StateWriteReorganization: - tbl = internalTK.GetTableByName("test", "t") + tbl = external.GetTableByName(t, internalTK, "test", "t") if tbl == nil { checkErr = errors.New("tbl is nil") } else if len(tbl.(*tables.TableCommon).Columns) != 3 { // changingCols has been added into meta. checkErr = errors.New("len(cols) is not right") - } else if internalTK.GetModifyColumn("test", "t", "c2", true).Flag&mysql.PreventNullInsertFlag == uint(0) { + } else if external.GetModifyColumn(t, internalTK, "test", "t", "c2", true).Flag&mysql.PreventNullInsertFlag == uint(0) { checkErr = errors.New("old col's flag is not right") - } else if internalTK.GetModifyColumn("test", "t", "_Col$_c2_0", true) == nil { + } else if external.GetModifyColumn(t, internalTK, "test", "t", "_Col$_c2_0", true) == nil { checkErr = errors.New("changingCol is nil") } } } - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) // Alter sql will modify column c2 to tinyint not null. SQL := "alter table t modify column c2 tinyint not null" tk.MustExec(SQL) // Assert the checkErr in the job of every state. - require.Nil(t, checkErr) + require.NoError(t, checkErr) // Check the col meta after the column type change. - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, 2, len(tbl.Cols())) - col := tk.GetModifyColumn("test", "t", "c2", false) + col := external.GetModifyColumn(t, tk, "test", "t", "c2", false) require.NotNil(t, col) require.Equal(t, true, mysql.HasNotNullFlag(col.Flag)) require.NotEqual(t, 0, col.Flag&mysql.NoDefaultValueFlag) @@ -189,47 +187,40 @@ func TestRollbackColumnTypeChangeBetweenInteger(t *testing.T) { tk.MustExec("create table t (c1 bigint, c2 bigint)") tk.MustExec("insert into t(c1, c2) values (1, 1)") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, 2, len(tbl.Cols())) - require.NotNil(t, tk.GetModifyColumn("test", "t", "c2", false)) - - originalHook := dom.DDL().GetHook() - defer dom.DDL().(ddl.DDLForTest).SetHook(originalHook) + require.NotNil(t, external.GetModifyColumn(t, tk, "test", "t", "c2", false)) hook := &ddl.TestDDLCallback{Do: dom} // Mock roll back at model.StateNone. customizeHookRollbackAtState(hook, tbl, model.StateNone) - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) // Alter sql will modify column c2 to bigint not null. SQL := "alter table t modify column c2 int not null" - _, err := tk.Exec(SQL) - require.Error(t, err) - require.Equal(t, "[ddl:1]MockRollingBackInCallBack-queueing", err.Error()) + err := tk.ExecToErr(SQL) + require.EqualError(t, err, "[ddl:1]MockRollingBackInCallBack-queueing") assertRollBackedColUnchanged(t, tk) // Mock roll back at model.StateDeleteOnly. customizeHookRollbackAtState(hook, tbl, model.StateDeleteOnly) - dom.DDL().(ddl.DDLForTest).SetHook(hook) - _, err = tk.Exec(SQL) - require.Error(t, err) - require.Equal(t, "[ddl:1]MockRollingBackInCallBack-delete only", err.Error()) + dom.DDL().SetHook(hook) + err = tk.ExecToErr(SQL) + require.EqualError(t, err, "[ddl:1]MockRollingBackInCallBack-delete only") assertRollBackedColUnchanged(t, tk) // Mock roll back at model.StateWriteOnly. customizeHookRollbackAtState(hook, tbl, model.StateWriteOnly) - dom.DDL().(ddl.DDLForTest).SetHook(hook) - _, err = tk.Exec(SQL) - require.Error(t, err) - require.Equal(t, "[ddl:1]MockRollingBackInCallBack-write only", err.Error()) + dom.DDL().SetHook(hook) + err = tk.ExecToErr(SQL) + require.EqualError(t, err, "[ddl:1]MockRollingBackInCallBack-write only") assertRollBackedColUnchanged(t, tk) // Mock roll back at model.StateWriteReorg. customizeHookRollbackAtState(hook, tbl, model.StateWriteReorganization) - dom.DDL().(ddl.DDLForTest).SetHook(hook) - _, err = tk.Exec(SQL) - require.Error(t, err) - require.Equal(t, "[ddl:1]MockRollingBackInCallBack-write reorganization", err.Error()) + dom.DDL().SetHook(hook) + err = tk.ExecToErr(SQL) + require.EqualError(t, err, "[ddl:1]MockRollingBackInCallBack-write reorganization") assertRollBackedColUnchanged(t, tk) } @@ -246,10 +237,10 @@ func customizeHookRollbackAtState(hook *ddl.TestDDLCallback, tbl table.Table, st } func assertRollBackedColUnchanged(t *testing.T, tk *testkit.TestKit) { - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, 2, len(tbl.Cols())) - col := tk.GetModifyColumn("test", "t", "c2", false) + col := external.GetModifyColumn(t, tk, "test", "t", "c2", false) require.NotNil(t, col) require.Equal(t, uint(0), col.Flag) require.Equal(t, mysql.TypeLonglong, col.Tp) @@ -287,37 +278,37 @@ func TestColumnTypeChangeFromIntegerToOthers(t *testing.T) { // integer to string prepare(tk) tk.MustExec("alter table t modify a varchar(10)") - modifiedColumn := tk.GetModifyColumn("test", "t", "a", false) + modifiedColumn := external.GetModifyColumn(t, tk, "test", "t", "a", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeVarchar, modifiedColumn.Tp) tk.MustQuery("select a from t").Check(testkit.Rows("1")) tk.MustExec("alter table t modify b char(10)") - modifiedColumn = tk.GetModifyColumn("test", "t", "b", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "b", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeString, modifiedColumn.Tp) tk.MustQuery("select b from t").Check(testkit.Rows("11")) tk.MustExec("alter table t modify c binary(10)") - modifiedColumn = tk.GetModifyColumn("test", "t", "c", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "c", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeString, modifiedColumn.Tp) tk.MustQuery("select c from t").Check(testkit.Rows("111\x00\x00\x00\x00\x00\x00\x00")) tk.MustExec("alter table t modify d varbinary(10)") - modifiedColumn = tk.GetModifyColumn("test", "t", "d", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "d", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeVarchar, modifiedColumn.Tp) tk.MustQuery("select d from t").Check(testkit.Rows("1111")) tk.MustExec("alter table t modify e blob(10)") - modifiedColumn = tk.GetModifyColumn("test", "t", "e", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "e", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeTinyBlob, modifiedColumn.Tp) tk.MustQuery("select e from t").Check(testkit.Rows("11111")) tk.MustExec("alter table t modify f text(10)") - modifiedColumn = tk.GetModifyColumn("test", "t", "f", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "f", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeTinyBlob, modifiedColumn.Tp) tk.MustQuery("select f from t").Check(testkit.Rows("111111")) @@ -325,7 +316,7 @@ func TestColumnTypeChangeFromIntegerToOthers(t *testing.T) { // integer to decimal prepare(tk) tk.MustExec("alter table t modify a decimal(2,1)") - modifiedColumn = tk.GetModifyColumn("test", "t", "a", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "a", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeNewDecimal, modifiedColumn.Tp) tk.MustQuery("select a from t").Check(testkit.Rows("1.0")) @@ -333,21 +324,21 @@ func TestColumnTypeChangeFromIntegerToOthers(t *testing.T) { // integer to year // For year(2), MySQL converts values in the ranges '0' to '69' and '70' to '99' to YEAR values in the ranges 2000 to 2069 and 1970 to 1999. tk.MustExec("alter table t modify b year") - modifiedColumn = tk.GetModifyColumn("test", "t", "b", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "b", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeYear, modifiedColumn.Tp) tk.MustQuery("select b from t").Check(testkit.Rows("2011")) // integer to time tk.MustExec("alter table t modify c time") - modifiedColumn = tk.GetModifyColumn("test", "t", "c", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "c", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeDuration, modifiedColumn.Tp) tk.MustQuery("select c from t").Check(testkit.Rows("00:01:11")) // integer to date (mysql will throw `Incorrect date value: '1111' for column 'd' at row 1` error) tk.MustExec("alter table t modify d date") - modifiedColumn = tk.GetModifyColumn("test", "t", "d", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "d", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeDate, modifiedColumn.Tp) tk.MustQuery("select d from t").Check(testkit.Rows("2000-11-11")) // the given number will be left-forward used. @@ -355,14 +346,14 @@ func TestColumnTypeChangeFromIntegerToOthers(t *testing.T) { // integer to timestamp (according to what timezone you have set) tk.MustExec("alter table t modify e timestamp") tk.MustExec("set @@session.time_zone=UTC") - modifiedColumn = tk.GetModifyColumn("test", "t", "e", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "e", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeTimestamp, modifiedColumn.Tp) tk.MustQuery("select e from t").Check(testkit.Rows("2001-11-10 16:00:00")) // the given number will be left-forward used. // integer to datetime tk.MustExec("alter table t modify f datetime") - modifiedColumn = tk.GetModifyColumn("test", "t", "f", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "f", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeDatetime, modifiedColumn.Tp) tk.MustQuery("select f from t").Check(testkit.Rows("2011-11-11 00:00:00")) // the given number will be left-forward used. @@ -370,20 +361,20 @@ func TestColumnTypeChangeFromIntegerToOthers(t *testing.T) { // integer to floating-point values prepare(tk) tk.MustExec("alter table t modify a float") - modifiedColumn = tk.GetModifyColumn("test", "t", "a", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "a", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeFloat, modifiedColumn.Tp) tk.MustQuery("select a from t").Check(testkit.Rows("1")) tk.MustExec("alter table t modify b double") - modifiedColumn = tk.GetModifyColumn("test", "t", "b", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "b", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeDouble, modifiedColumn.Tp) tk.MustQuery("select b from t").Check(testkit.Rows("11")) // integer to bit tk.MustExec("alter table t modify c bit(10)") - modifiedColumn = tk.GetModifyColumn("test", "t", "c", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "c", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeBit, modifiedColumn.Tp) // 111 will be stored ad 0x00,0110,1111 = 0x6F, which will be shown as ASCII('o')=111 as well. @@ -391,7 +382,7 @@ func TestColumnTypeChangeFromIntegerToOthers(t *testing.T) { // integer to json tk.MustExec("alter table t modify d json") - modifiedColumn = tk.GetModifyColumn("test", "t", "d", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "d", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeJSON, modifiedColumn.Tp) tk.MustQuery("select d from t").Check(testkit.Rows("1111")) @@ -400,14 +391,14 @@ func TestColumnTypeChangeFromIntegerToOthers(t *testing.T) { prepareForEnumSet(tk) // TiDB take integer as the enum element offset to cast. tk.MustExec("alter table t modify a enum(\"a\", \"b\")") - modifiedColumn = tk.GetModifyColumn("test", "t", "a", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "a", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeEnum, modifiedColumn.Tp) tk.MustQuery("select a from t").Check(testkit.Rows("a")) // TiDB take integer as the set element offset to cast. tk.MustExec("alter table t modify b set(\"a\", \"b\")") - modifiedColumn = tk.GetModifyColumn("test", "t", "b", false) + modifiedColumn = external.GetModifyColumn(t, tk, "test", "t", "b", false) require.NotNil(t, modifiedColumn) require.Equal(t, mysql.TypeSet, modifiedColumn.Tp) tk.MustQuery("select b from t").Check(testkit.Rows("a")) @@ -948,12 +939,9 @@ func TestColumnTypeChangeIgnoreDisplayLength(t *testing.T) { tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - originalHook := dom.DDL().GetHook() - defer dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - var assertResult bool assertHasAlterWriteReorg := func(tbl table.Table) { - // Restore the assert result to false. + // Restore assertResult to false. assertResult = false hook := &ddl.TestDDLCallback{Do: dom} hook.OnJobRunBeforeExported = func(job *model.Job) { @@ -964,26 +952,26 @@ func TestColumnTypeChangeIgnoreDisplayLength(t *testing.T) { assertResult = true } } - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) } // Change int to tinyint. // Although display length is increased, the default flen is decreased, reorg is needed. tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int(1))") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") assertHasAlterWriteReorg(tbl) tk.MustExec("alter table t modify column a tinyint(3)") - require.Equal(t, true, assertResult) + require.True(t, assertResult) // Change tinyint to tinyint // Although display length is decreased, default flen is the same, reorg is not needed. tk.MustExec("drop table if exists t") tk.MustExec("create table t(a tinyint(3))") - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") assertHasAlterWriteReorg(tbl) tk.MustExec("alter table t modify column a tinyint(1)") - require.Equal(t, false, assertResult) + require.False(t, assertResult) tk.MustExec("drop table if exists t") } @@ -1593,7 +1581,7 @@ func TestRowFormat(t *testing.T) { tk.MustExec("insert into t values (1, \"123\");") tk.MustExec("alter table t modify column v varchar(5);") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") encodedKey := tablecodec.EncodeRowKeyWithHandle(tbl.Meta().ID, kv.IntHandle(1)) h := helper.NewHelper(store.(helper.Storage)) @@ -1624,7 +1612,7 @@ func TestChangingColOriginDefaultValue(t *testing.T) { tk.MustExec("insert into t values(1, 1)") tk.MustExec("insert into t values(2, 2)") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") originalHook := dom.DDL().GetHook() hook := &ddl.TestDDLCallback{Do: dom} var ( @@ -1642,7 +1630,7 @@ func TestChangingColOriginDefaultValue(t *testing.T) { if (job.SchemaState == model.StateWriteOnly || job.SchemaState == model.StateWriteReorganization) && i < 3 { if !once { once = true - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") if len(tbl.WritableCols()) != 3 { checkErr = errors.New("assert the writable column number error") return @@ -1678,10 +1666,10 @@ func TestChangingColOriginDefaultValue(t *testing.T) { i++ } } - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) tk.MustExec("alter table t modify column b tinyint NOT NULL") - dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - require.Nil(t, checkErr) + dom.DDL().SetHook(originalHook) + require.NoError(t, checkErr) // Since getReorgInfo will stagnate StateWriteReorganization for a ddl round, so insert should exec 3 times. tk.MustQuery("select * from t order by a").Check(testkit.Rows("1 -1", "2 -2", "3 3", "4 4", "5 5")) tk.MustExec("drop table if exists t") @@ -1703,7 +1691,7 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastSucc(t *testing.T) { tk.MustExec("insert into t values(2, 2)") tk.MustExec("alter table t add column c timestamp default '1971-06-09' not null") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") originalHook := dom.DDL().GetHook() hook := &ddl.TestDDLCallback{Do: dom} var ( @@ -1721,7 +1709,7 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastSucc(t *testing.T) { if (job.SchemaState == model.StateWriteOnly || job.SchemaState == model.StateWriteReorganization) && stableTimes < 3 { if !once { once = true - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") if len(tbl.WritableCols()) != 4 { checkErr = errors.New("assert the writable column number error") return @@ -1764,10 +1752,10 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastSucc(t *testing.T) { i++ } - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) tk.MustExec("alter table t modify column c date NOT NULL") - dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - require.Nil(t, checkErr) + dom.DDL().SetHook(originalHook) + require.NoError(t, checkErr) // Since getReorgInfo will stagnate StateWriteReorganization for a ddl round, so insert should exec 3 times. tk.MustQuery("select * from t order by a").Check( testkit.Rows("1 -1 1971-06-09", "2 -2 1971-06-09", "5 5 2021-06-06", "6 6 2021-06-06", "7 7 2021-06-06")) @@ -1789,7 +1777,7 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastFail(t *testing.T) { tk.MustExec("create table t(a VARCHAR(31) NULL DEFAULT 'wwrzfwzb01j6ddj', b DECIMAL(12,0) NULL DEFAULT '-729850476163')") tk.MustExec("ALTER TABLE t ADD COLUMN x CHAR(218) NULL DEFAULT 'lkittuae'") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") originalHook := dom.DDL().GetHook() hook := &ddl.TestDDLCallback{Do: dom} var checkErr error @@ -1802,7 +1790,7 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastFail(t *testing.T) { } if job.SchemaState == model.StateWriteOnly || job.SchemaState == model.StateWriteReorganization { - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") if len(tbl.WritableCols()) != 4 { errMsg := fmt.Sprintf("cols len:%v", len(tbl.WritableCols())) checkErr = errors.New("assert the writable column number error" + errMsg) @@ -1824,10 +1812,10 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastFail(t *testing.T) { } } - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) tk.MustExec("alter table t modify column x DATETIME NULL DEFAULT '3771-02-28 13:00:11' AFTER b;") - dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - require.Nil(t, checkErr) + dom.DDL().SetHook(originalHook) + require.NoError(t, checkErr) tk.MustQuery("select * from t order by a").Check(testkit.Rows()) tk.MustExec("drop table if exists t") } @@ -1849,18 +1837,18 @@ func TestChangingAttributeOfColumnWithFK(t *testing.T) { prepare() // For column with FK, alter action can be performed for changing null/not null, default value, comment and so on, but column type. tk.MustExec("alter table orders modify user_id int null;") - tbl := tk.GetTableByName("test", "orders") + tbl := external.GetTableByName(t, tk, "test", "orders") require.Equal(t, false, mysql.HasNotNullFlag(tbl.Meta().Columns[1].Flag)) prepare() tk.MustExec("alter table orders change user_id user_id2 int null") - tbl = tk.GetTableByName("test", "orders") + tbl = external.GetTableByName(t, tk, "test", "orders") require.Equal(t, "user_id2", tbl.Meta().Columns[1].Name.L) require.Equal(t, false, mysql.HasNotNullFlag(tbl.Meta().Columns[1].Flag)) prepare() tk.MustExec("alter table orders modify user_id int default -1 comment \"haha\"") - tbl = tk.GetTableByName("test", "orders") + tbl = external.GetTableByName(t, tk, "test", "orders") require.Equal(t, "haha", tbl.Meta().Columns[1].Comment) require.Equal(t, "-1", tbl.Meta().Columns[1].DefaultValue.(string)) @@ -1925,9 +1913,6 @@ func TestDDLExitWhenCancelMeetPanic(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockExceedErrorLimit")) }() - originalHook := dom.DDL().GetHook() - defer dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - hook := &ddl.TestDDLCallback{Do: dom} var jobID int64 hook.OnJobRunBeforeExported = func(job *model.Job) { @@ -1938,21 +1923,20 @@ func TestDDLExitWhenCancelMeetPanic(t *testing.T) { jobID = job.ID } } - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) // when it panics in write-reorg state, the job will be pulled up as a cancelling job. Since drop-index with // write-reorg can't be cancelled, so it will be converted to running state and try again (dead loop). - _, err := tk.Exec("alter table t drop index b") - require.Error(t, err) - require.Equal(t, "[ddl:-1]panic in handling DDL logic and error count beyond the limitation 3, cancelled", err.Error()) - require.Equal(t, true, jobID > 0) + err := tk.ExecToErr("alter table t drop index b") + require.EqualError(t, err, "[ddl:-1]panic in handling DDL logic and error count beyond the limitation 3, cancelled") + require.Less(t, int64(0), jobID) // Verification of the history job state. var job *model.Job err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) + m := meta.NewMeta(txn) var err1 error - job, err1 = t.GetHistoryDDLJob(jobID) + job, err1 = m.GetHistoryDDLJob(jobID) return errors2.Trace(err1) }) require.NoError(t, err) @@ -2010,7 +1994,7 @@ func TestCancelCTCInReorgStateWillCauseGoroutineLeak(t *testing.T) { tk.MustExec("drop table if exists ctc_goroutine_leak") tk.MustExec("create table ctc_goroutine_leak (a int)") tk.MustExec("insert into ctc_goroutine_leak values(1),(2),(3)") - tbl := tk.GetTableByName("test", "ctc_goroutine_leak") + tbl := external.GetTableByName(t, tk, "test", "ctc_goroutine_leak") hook := &ddl.TestDDLCallback{Do: dom} var jobID int64 @@ -2025,7 +2009,7 @@ func TestCancelCTCInReorgStateWillCauseGoroutineLeak(t *testing.T) { jobID = job.ID } } - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") @@ -2244,53 +2228,41 @@ func TestChangeFromTimeToYear(t *testing.T) { // Fix issue: https://github.com/pingcap/tidb/issues/26292 // Cast date to timestamp has two kind behavior: cast("3977-02-22" as date) -// For select statement, it truncate the string and return no errors. (which is 3977-02-22 00:00:00 here) -// For ddl reorging or changing column in ctc, it need report some errors. +// For select statement, it truncates the string and return no errors. (which is 3977-02-22 00:00:00 here) +// For ddl reorging or changing column in ctc, it needs report some errors. func TestCastDateToTimestampInReorgAttribute(t *testing.T) { - store, dom, clean := testkit.CreateMockStoreAndDomain(t) + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 600*time.Millisecond) defer clean() tk := testkit.NewTestKit(t, store) - tk.MustExec("use test;") + tk.MustExec("use test") - tk.MustExec("drop table if exists t") tk.MustExec("CREATE TABLE `t` (`a` DATE NULL DEFAULT '8497-01-06')") tk.MustExec("insert into t values(now())") - originalHook := dom.DDL().GetHook() - defer dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - - // use new session to check meta in callback function. - internalTK := testkit.NewTestKit(t, store) - internalTK.MustExec("use test") - - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) - require.Equal(t, 1, len(tbl.Cols())) + require.Len(t, tbl.Cols(), 1) + var checkErr1 error + var checkErr2 error hook := &ddl.TestDDLCallback{Do: dom} - var ( - checkErr1 error - checkErr2 error - ) hook.OnJobRunBeforeExported = func(job *model.Job) { - if checkErr1 != nil || checkErr2 != nil { - return - } - if tbl.Meta().ID != job.TableID { + if checkErr1 != nil || checkErr2 != nil || tbl.Meta().ID != job.TableID { return } switch job.SchemaState { case model.StateWriteOnly: - _, checkErr1 = internalTK.Exec("insert into `t` set `a` = '3977-02-22'") // this(string) will be cast to a as date, then cast a(date) as timestamp to changing column. - _, checkErr2 = internalTK.Exec("update t set `a` = '3977-02-22'") + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + checkErr1 = tk.ExecToErr("insert into `t` set `a` = '3977-02-22'") // this(string) will be cast to a as date, then cast a(date) as timestamp to changing column. + checkErr2 = tk.ExecToErr("update t set `a` = '3977-02-22'") } } - dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) tk.MustExec("alter table t modify column a TIMESTAMP NULL DEFAULT '2021-04-28 03:35:11' FIRST") - require.Equal(t, "[types:1292]Incorrect timestamp value: '3977-02-22'", checkErr1.Error()) - require.Equal(t, "[types:1292]Incorrect timestamp value: '3977-02-22'", checkErr2.Error()) - tk.MustExec("drop table if exists t") + require.EqualError(t, checkErr1, "[types:1292]Incorrect timestamp value: '3977-02-22'") + require.EqualError(t, checkErr2, "[types:1292]Incorrect timestamp value: '3977-02-22'") } // https://github.com/pingcap/tidb/issues/25282. diff --git a/ddl/db_cache_test.go b/ddl/db_cache_test.go index 7b29c8f9f410f..001500aaae856 100644 --- a/ddl/db_cache_test.go +++ b/ddl/db_cache_test.go @@ -18,7 +18,6 @@ import ( "testing" "time" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/parser/model" @@ -26,11 +25,13 @@ import ( "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" ) func checkTableCacheStatus(t *testing.T, tk *testkit.TestKit, dbName, tableName string, status model.TableCacheStatusType) { - tb := tk.GetTableByName(dbName, tableName) + tb := external.GetTableByName(t, tk, dbName, tableName) dom := domain.GetDomain(tk.Session()) err := dom.Reload() require.NoError(t, err) @@ -124,6 +125,10 @@ func TestIndexOnCacheTable(t *testing.T) { tk.MustExec("create table cache_index_1 (id int, c1 int, c2 int, primary key(id), key i1(c1), key i2(c2));") tk.MustExec("alter table cache_index_1 cache") tk.MustGetErrCode("alter table cache_index_1 drop index i1, drop index i2;", errno.ErrOptOnCacheTable) + + // cleanup + tk.MustExec("alter table cache_index_1 nocache") + tk.MustExec("alter table cache_index nocache") } func TestAlterTableCache(t *testing.T) { @@ -154,6 +159,7 @@ func TestAlterTableCache(t *testing.T) { tk.MustGetErrCode("alter table t2 cache", errno.ErrNoSuchTable) tk.MustExec("alter table t1 cache") checkTableCacheStatus(t, tk, "test", "t1", model.TableCacheStatusEnable) + tk.MustExec("alter table t1 nocache") tk.MustExec("drop table if exists t1") /*Test can't skip schema checker*/ tk.MustExec("drop table if exists t1,t2") @@ -166,6 +172,7 @@ func TestAlterTableCache(t *testing.T) { require.True(t, terror.ErrorEqual(domain.ErrInfoSchemaChanged, err)) /* Test can skip schema checker */ tk.MustExec("begin") + tk.MustExec("alter table t1 nocache") tk.MustExec("drop table if exists t1") tk.MustExec("CREATE TABLE t1 (a int)") tk.MustExec("insert into t1 set a=2;") @@ -180,6 +187,7 @@ func TestAlterTableCache(t *testing.T) { tk.MustExec("alter table t cache") tk.MustExec("alter table t cache") // Test a temporary table + tk.MustExec("alter table t nocache") tk.MustExec("drop table if exists t") tk.MustExec("create temporary table t (id int primary key auto_increment, u int unique, v int)") tk.MustExec("drop table if exists tmp1") @@ -189,7 +197,7 @@ func TestAlterTableCache(t *testing.T) { tk.MustExec("create global temporary table tmp1 " + "(id int not null primary key, code int not null, value int default null, unique key code(code))" + "on commit delete rows") - tk.MustGetErrMsg("alter table tmp1 cache", ddl.ErrOptOnTemporaryTable.GenWithStackByArgs("alter temporary table cache").Error()) + tk.MustGetErrMsg("alter table tmp1 cache", dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("alter temporary table cache").Error()) } func TestCacheTableSizeLimit(t *testing.T) { @@ -246,3 +254,17 @@ func TestCacheTableSizeLimit(t *testing.T) { // Forbit the insert once the table size limit is detected. tk.MustGetErrCode("insert into cache_t2 select * from tmp;", errno.ErrOptOnCacheTable) } + +func TestIssue32692(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("create table cache_t2 (c1 int);") + tk.MustExec("alter table cache_t2 cache;") + tk.MustExec("alter table cache_t2 nocache;") + // Check no warning message here. + tk.MustExec("alter table cache_t2 cache;") + tk.MustQuery("show warnings").Check(testkit.Rows()) +} diff --git a/ddl/db_change_test.go b/ddl/db_change_test.go index d3a857f27b805..a8ff452287576 100644 --- a/ddl/db_change_test.go +++ b/ddl/db_change_test.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/log" "github.com/pingcap/tidb/ddl" + ddlutil "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/executor" @@ -42,6 +43,7 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/admin" "github.com/pingcap/tidb/util/gcutil" @@ -124,7 +126,7 @@ func (s *stateChangeSuite) TestShowCreateTable() { } if job.SchemaState != model.StatePublic { var result sqlexec.RecordSet - tbl2 := tkInternal.GetTableByName("test", "t2") + tbl2 := external.GetTableByName(s.T(), tkInternal, "test", "t2") if job.TableID == tbl2.Meta().ID { // Try to do not use mustQuery in hook func, cause assert fail in mustQuery will cause ddl job hung. result, checkErr = tkInternal.Exec("show create table t2") @@ -152,8 +154,8 @@ func (s *stateChangeSuite) TestShowCreateTable() { } d := s.dom.DDL() originalCallback := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originalCallback) - d.(ddl.DDLForTest).SetHook(callback) + defer d.SetHook(originalCallback) + d.SetHook(callback) for _, tc := range testCases { tk.MustExec(tc.sql) s.Require().NoError(checkErr) @@ -200,7 +202,7 @@ func (s *stateChangeSuite) TestDropNotNullColumn() { } } - d.(ddl.DDLForTest).SetHook(callback) + d.SetHook(callback) tk.MustExec("alter table t drop column a") s.Require().NoError(checkErr) sqlNum++ @@ -212,7 +214,7 @@ func (s *stateChangeSuite) TestDropNotNullColumn() { sqlNum++ tk.MustExec("alter table t3 drop column d") s.Require().NoError(checkErr) - d.(ddl.DDLForTest).SetHook(originalCallback) + d.SetHook(originalCallback) tk.MustExec("drop table t, t1, t2, t3") } @@ -315,8 +317,8 @@ func (s *stateChangeSuite) test(alterTableSQL string, testInfo *testExecInfo) { } d := s.dom.DDL() originalCallback := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originalCallback) - d.(ddl.DDLForTest).SetHook(callback) + defer d.SetHook(originalCallback) + d.SetHook(callback) s.tk.MustExec(alterTableSQL) s.Require().NoError(testInfo.compileSQL(4)) s.Require().NoError(testInfo.execSQL(4)) @@ -847,10 +849,10 @@ func (s *stateChangeSuite) runTestInSchemaState( } d := s.dom.DDL() originalCallback := d.GetHook() - d.(ddl.DDLForTest).SetHook(callback) + d.SetHook(callback) s.tk.MustExec(alterTableSQL) s.Require().NoError(checkErr) - d.(ddl.DDLForTest).SetHook(originalCallback) + d.SetHook(originalCallback) if expectQuery != nil { tk := testkit.NewTestKit(s.T(), s.store) @@ -897,7 +899,7 @@ func (s *stateChangeSuite) TestShowIndex() { d := s.dom.DDL() originalCallback := d.GetHook() - d.(ddl.DDLForTest).SetHook(callback) + d.SetHook(callback) alterTableSQL := `alter table t add index c2(c2)` s.tk.MustExec(alterTableSQL) s.Require().NoError(checkErr) @@ -906,7 +908,7 @@ func (s *stateChangeSuite) TestShowIndex() { "t 0 PRIMARY 1 c1 A 0 BTREE YES NO", "t 1 c2 1 c2 A 0 YES BTREE YES NO", )) - d.(ddl.DDLForTest).SetHook(originalCallback) + d.SetHook(originalCallback) s.tk.MustExec(`create table tr( id int, name varchar(50), @@ -956,6 +958,8 @@ func (s *stateChangeSuite) TestParallelAlterModifyColumn() { } func (s *stateChangeSuite) TestParallelAlterModifyColumnWithData() { + // modify column: double -> int + // modify column: double -> int sql := "ALTER TABLE t MODIFY COLUMN c int;" f := func(err1, err2 error) { s.Require().NoError(err1) @@ -975,9 +979,56 @@ func (s *stateChangeSuite) TestParallelAlterModifyColumnWithData() { s.Require().NoError(rs.Close()) } s.testControlParallelExecSQL("", sql, sql, f) + + // modify column: int -> double + // rename column: double -> int + sql1 := "ALTER TABLE t MODIFY b double;" + sql2 := "ALTER TABLE t RENAME COLUMN b to bb;" + f = func(err1, err2 error) { + s.Require().Nil(err1) + s.Require().Nil(err2) + rs, err := s.tk.Exec("select * from t") + s.Require().NoError(err) + sRows, err := session.ResultSetToStringSlice(context.Background(), s.tk.Session(), rs) + s.Require().NoError(err) + s.Require().Equal("2", sRows[0][1]) + s.Require().NoError(rs.Close()) + s.tk.MustExec("insert into t values(11, 22.2, 33, 44, 55)") + rs, err = s.tk.Exec("select * from t") + s.Require().NoError(err) + sRows, err = session.ResultSetToStringSlice(context.Background(), s.tk.Session(), rs) + s.Require().NoError(err) + s.Require().Equal("22", sRows[1][1]) + s.Require().NoError(rs.Close()) + } + s.testControlParallelExecSQL("", sql1, sql2, f) + + // modify column: int -> double + // modify column: double -> int + sql2 = "ALTER TABLE t CHANGE b bb int;" + f = func(err1, err2 error) { + s.Require().Nil(err1) + s.Require().Nil(err2) + rs, err := s.tk.Exec("select * from t") + s.Require().NoError(err) + sRows, err := session.ResultSetToStringSlice(context.Background(), s.tk.Session(), rs) + s.Require().NoError(err) + s.Require().Equal("2", sRows[0][1]) + s.Require().NoError(rs.Close()) + s.tk.MustExec("insert into t values(11, 22.2, 33, 44, 55)") + rs, err = s.tk.Exec("select * from t") + s.Require().NoError(err) + sRows, err = session.ResultSetToStringSlice(context.Background(), s.tk.Session(), rs) + s.Require().NoError(err) + s.Require().Equal("22", sRows[1][1]) + s.Require().NoError(rs.Close()) + } + s.testControlParallelExecSQL("", sql1, sql2, f) } func (s *stateChangeSuite) TestParallelAlterModifyColumnToNotNullWithData() { + // double null -> int not null + // double null -> int not null sql := "ALTER TABLE t MODIFY COLUMN c int not null;" f := func(err1, err2 error) { s.Require().NoError(err1) @@ -999,6 +1050,32 @@ func (s *stateChangeSuite) TestParallelAlterModifyColumnToNotNullWithData() { s.Require().NoError(rs.Close()) } s.testControlParallelExecSQL("", sql, sql, f) + + // int null -> double not null + // double not null -> int null + sql1 := "ALTER TABLE t CHANGE b b double not null;" + sql2 := "ALTER TABLE t CHANGE b bb int null;" + f = func(err1, err2 error) { + s.Require().Nil(err1) + s.Require().Nil(err2) + rs, err := s.tk.Exec("select * from t") + s.Require().NoError(err) + sRows, err := session.ResultSetToStringSlice(context.Background(), s.tk.Session(), rs) + s.Require().NoError(err) + s.Require().Equal("2", sRows[0][1]) + s.Require().NoError(rs.Close()) + err = s.tk.ExecToErr("insert into t values(11, null, 33, 44, 55)") + s.Require().NoError(err) + s.tk.MustExec("insert into t values(11, 22.2, 33, 44, 55)") + rs, err = s.tk.Exec("select * from t") + s.Require().NoError(err) + sRows, err = session.ResultSetToStringSlice(context.Background(), s.tk.Session(), rs) + s.Require().NoError(err) + s.Require().Equal("", sRows[1][1]) + s.Require().Equal("22", sRows[2][1]) + s.Require().NoError(rs.Close()) + } + s.testControlParallelExecSQL("", sql1, sql2, f) } func (s *stateChangeSuite) TestParallelAddGeneratedColumnAndAlterModifyColumn() { @@ -1215,7 +1292,7 @@ func (s *stateChangeSuite) prepareTestControlParallelExecSQL() (*testkit.TestKit } d := s.dom.DDL() originalCallback := d.GetHook() - d.(ddl.DDLForTest).SetHook(callback) + d.SetHook(callback) tk1 := testkit.NewTestKit(s.T(), s.store) tk1.MustExec("use test_db_state") @@ -1266,7 +1343,7 @@ func (s *stateChangeSuite) testControlParallelExecSQL(preSQL, sql1, sql2 string, );`) tk1, tk2, ch, originalCallback := s.prepareTestControlParallelExecSQL() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originalCallback) + defer s.dom.DDL().SetHook(originalCallback) var err1 error var err2 error @@ -1303,9 +1380,9 @@ func (s *stateChangeSuite) TestParallelUpdateTableReplica() { s.tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") tk1, tk2, ch, originalCallback := s.prepareTestControlParallelExecSQL() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originalCallback) + defer s.dom.DDL().SetHook(originalCallback) - t1 := tk1.GetTableByName("test_db_state", "t1") + t1 := external.GetTableByName(s.T(), s.tk, "test_db_state", "t1") var err1 error var err2 error @@ -1345,8 +1422,8 @@ func (s *stateChangeSuite) testParallelExecSQL(sql string) { d := s.dom.DDL() originalCallback := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originalCallback) - d.(ddl.DDLForTest).SetHook(callback) + defer d.SetHook(originalCallback) + d.SetHook(callback) wg.Run(func() { err2 = tk1.ExecToErr(sql) }) @@ -1538,15 +1615,15 @@ func (s *stateChangeSuite) TestParallelFlashbackTable() { defer func(originGC bool) { s.Require().NoError(failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange")) if originGC { - ddl.EmulatorGCEnable() + ddlutil.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + ddlutil.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) + }(ddlutil.IsEmulatorGCEnable()) // disable emulator GC. // Disable emulator GC, otherwise, emulator GC will delete table record as soon as possible after executing drop table DDL. - ddl.EmulatorGCDisable() + ddlutil.EmulatorGCDisable() gcTimeFormat := "20060102-15:04:05 -0700 MST" timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) safePointSQL := `INSERT HIGH_PRIORITY INTO mysql.tidb VALUES ('tikv_gc_safe_point', '%[1]s', '') @@ -1600,7 +1677,7 @@ func (s *stateChangeSuite) TestModifyColumnTypeArgs() { s.Require().Equal("[ddl:-1]mock update version and tableInfo error", strs[0]) jobID := strings.Split(strs[1], "=")[1] - tbl := tk.GetTableByName("test", "t_modify_column_args") + tbl := external.GetTableByName(s.T(), tk, "test", "t_modify_column_args") s.Require().Len(tbl.Meta().Columns, 1) s.Require().Len(tbl.Meta().Indices, 1) @@ -1672,7 +1749,7 @@ func (s *stateChangeSuite) TestCreateExpressionIndex() { var checkErr error d := s.dom.DDL() originalCallback := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originalCallback) + defer d.SetHook(originalCallback) callback := &ddl.TestDDLCallback{} callback.OnJobUpdatedExported = func(job *model.Job) { if checkErr != nil { @@ -1713,7 +1790,7 @@ func (s *stateChangeSuite) TestCreateExpressionIndex() { } } - d.(ddl.DDLForTest).SetHook(callback) + d.SetHook(callback) tk.MustExec("alter table t add index idx((b+1))") s.Require().NoError(checkErr) tk.MustExec("admin check table t") @@ -1738,7 +1815,7 @@ func (s *stateChangeSuite) TestCreateUniqueExpressionIndex() { var checkErr error d := s.dom.DDL() originalCallback := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originalCallback) + defer d.SetHook(originalCallback) callback := &ddl.TestDDLCallback{} callback.OnJobUpdatedExported = func(job *model.Job) { if checkErr != nil { @@ -1825,7 +1902,7 @@ func (s *stateChangeSuite) TestCreateUniqueExpressionIndex() { } } - d.(ddl.DDLForTest).SetHook(callback) + d.SetHook(callback) tk.MustExec("alter table t add unique index idx((a*b+1))") s.Require().NoError(checkErr) tk.MustExec("admin check table t") @@ -1849,7 +1926,7 @@ func (s *stateChangeSuite) TestDropExpressionIndex() { var checkErr error d := s.dom.DDL() originalCallback := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originalCallback) + defer d.SetHook(originalCallback) callback := &ddl.TestDDLCallback{} callback.OnJobUpdatedExported = func(job *model.Job) { if checkErr != nil { @@ -1885,7 +1962,7 @@ func (s *stateChangeSuite) TestDropExpressionIndex() { } } - d.(ddl.DDLForTest).SetHook(callback) + d.SetHook(callback) tk.MustExec("alter table t drop index idx") s.Require().NoError(checkErr) tk.MustExec("admin check table t") diff --git a/ddl/db_foreign_key_test.go b/ddl/db_foreign_key_test.go new file mode 100644 index 0000000000000..6ac5de33e5f52 --- /dev/null +++ b/ddl/db_foreign_key_test.go @@ -0,0 +1,69 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "testing" + + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/testkit" +) + +func TestDuplicateForeignKey(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("drop table if exists t1") + // Foreign table. + tk.MustExec("create table t(id int key)") + // Create target table with duplicate fk. + tk.MustGetErrCode("create table t1(id int, id_fk int, CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`), CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`))", mysql.ErrFkDupName) + tk.MustGetErrCode("create table t1(id int, id_fk int, CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`), CONSTRAINT `fk_aaA` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`))", mysql.ErrFkDupName) + + tk.MustExec("create table t1(id int, id_fk int, CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`))") + // Alter target table with duplicate fk. + tk.MustGetErrCode("alter table t1 add CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`)", mysql.ErrFkDupName) + tk.MustGetErrCode("alter table t1 add CONSTRAINT `fk_aAa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`)", mysql.ErrFkDupName) + tk.MustExec("drop table if exists t") + tk.MustExec("drop table if exists t1") +} + +func TestTemporaryTableForeignKey(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t1 (a int, b int);") + tk.MustExec("drop table if exists t1_tmp;") + tk.MustExec("create global temporary table t1_tmp (a int, b int) on commit delete rows;") + tk.MustExec("create temporary table t2_tmp (a int, b int)") + // test add foreign key. + tk.MustExec("drop table if exists t2;") + tk.MustExec("create table t2 (a int, b int);") + failSQL := "alter table t1_tmp add foreign key (c) REFERENCES t2(a);" + tk.MustGetErrCode(failSQL, mysql.ErrCannotAddForeign) + failSQL = "alter table t2_tmp add foreign key (c) REFERENCES t2(a);" + tk.MustGetErrCode(failSQL, errno.ErrUnsupportedDDLOperation) + // Test drop column with foreign key. + failSQL = "create global temporary table t3 (c int,d int,foreign key (d) references t1 (b)) on commit delete rows;" + tk.MustGetErrCode(failSQL, mysql.ErrCannotAddForeign) + failSQL = "create temporary table t4(c int,d int,foreign key (d) references t1 (b));" + tk.MustGetErrCode(failSQL, mysql.ErrCannotAddForeign) + tk.MustExec("drop table if exists t1,t2,t3, t4,t1_tmp,t2_tmp;") +} diff --git a/ddl/db_integration_test.go b/ddl/db_integration_test.go index 6172fef9d3951..c4100d5d23027 100644 --- a/ddl/db_integration_test.go +++ b/ddl/db_integration_test.go @@ -27,30 +27,28 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/auth" "github.com/pingcap/tidb/parser/charset" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/planner/core" + "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/mock" - "github.com/pingcap/tidb/util/testutil" "github.com/stretchr/testify/require" - "github.com/tikv/client-go/v2/testutils" ) func TestNoZeroDateMode(t *testing.T) { @@ -816,7 +814,7 @@ func TestChangingTableCharset(t *testing.T) { tk.MustExec("create table t(a varchar(10)) charset utf8") tk.MustExec("alter table t convert to charset utf8mb4;") checkCharset := func(chs, coll string) { - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, chs, tbl.Meta().Charset) require.Equal(t, coll, tbl.Meta().Collate) @@ -846,7 +844,7 @@ func TestChangingTableCharset(t *testing.T) { // Mock table info with charset is "". Old TiDB maybe create table with charset is "". db, ok := dom.InfoSchema().SchemaByName(model.NewCIStr("test")) require.True(t, ok) - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") tblInfo := tbl.Meta().Clone() tblInfo.Charset = "" tblInfo.Collate = "" @@ -868,7 +866,7 @@ func TestChangingTableCharset(t *testing.T) { // check table charset is "" tk.MustExec("alter table t add column b varchar(10);") // load latest schema. - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, "", tbl.Meta().Charset) require.Equal(t, "", tbl.Meta().Collate) @@ -877,14 +875,14 @@ func TestChangingTableCharset(t *testing.T) { checkCharset(charset.CharsetUTF8MB4, charset.CollationUTF8MB4) // Test when column charset is "". - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") tblInfo = tbl.Meta().Clone() tblInfo.Columns[0].Charset = "" tblInfo.Columns[0].Collate = "" updateTableInfo(tblInfo) // check table charset is "" tk.MustExec("alter table t drop column b;") // load latest schema. - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, "", tbl.Meta().Columns[0].Charset) require.Equal(t, "", tbl.Meta().Columns[0].Collate) @@ -894,7 +892,7 @@ func TestChangingTableCharset(t *testing.T) { tk.MustExec("drop table t") tk.MustExec("create table t (a blob) character set utf8;") tk.MustExec("alter table t charset=utf8mb4 collate=utf8mb4_bin;") - tk.MustQuery("show create table t").Check(testutil.RowsWithSep("|", + tk.MustQuery("show create table t").Check(testkit.RowsWithSep("|", "t CREATE TABLE `t` (\n"+ " `a` blob DEFAULT NULL\n"+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", @@ -903,7 +901,7 @@ func TestChangingTableCharset(t *testing.T) { tk.MustExec("drop table t") tk.MustExec("create table t(a varchar(5) charset utf8) charset utf8") tk.MustExec("alter table t charset utf8mb4") - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, "utf8mb4", tbl.Meta().Charset) require.Equal(t, "utf8mb4_bin", tbl.Meta().Collate) @@ -916,7 +914,7 @@ func TestChangingTableCharset(t *testing.T) { tk.MustExec("drop table t") tk.MustExec("create table t(a varchar(5) charset utf8 collate utf8_unicode_ci) charset utf8 collate utf8_unicode_ci") tk.MustExec("alter table t collate utf8_general_ci") - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.Equal(t, "utf8", tbl.Meta().Charset) require.Equal(t, "utf8_general_ci", tbl.Meta().Collate) @@ -1090,7 +1088,7 @@ func TestCaseInsensitiveCharsetAndCollate(t *testing.T) { db, ok := dom.InfoSchema().SchemaByName(model.NewCIStr("test_charset_collate")) require.True(t, ok) - tbl := tk.GetTableByName("test_charset_collate", "t5") + tbl := external.GetTableByName(t, tk, "test_charset_collate", "t5") tblInfo := tbl.Meta().Clone() require.Equal(t, "utf8mb4", tblInfo.Charset) require.Equal(t, "utf8mb4", tblInfo.Columns[0].Charset) @@ -1115,7 +1113,7 @@ func TestCaseInsensitiveCharsetAndCollate(t *testing.T) { updateTableInfo(tblInfo) tk.MustExec("alter table t5 add column b varchar(10);") // load latest schema. - tblInfo = tk.GetTableByName("test_charset_collate", "t5").Meta() + tblInfo = external.GetTableByName(t, tk, "test_charset_collate", "t5").Meta() require.Equal(t, "utf8mb4", tblInfo.Charset) require.Equal(t, "utf8mb4", tblInfo.Columns[0].Charset) @@ -1126,7 +1124,7 @@ func TestCaseInsensitiveCharsetAndCollate(t *testing.T) { updateTableInfo(tblInfo) tk.MustExec("alter table t5 add column c varchar(10);") // load latest schema. - tblInfo = tk.GetTableByName("test_charset_collate", "t5").Meta() + tblInfo = external.GetTableByName(t, tk, "test_charset_collate", "t5").Meta() require.Equal(t, "UTF8MB4", tblInfo.Charset) require.Equal(t, "utf8mb4", tblInfo.Columns[0].Charset) } @@ -1230,86 +1228,20 @@ func TestBitDefaultValue(t *testing.T) { );`) } -func TestBackwardCompatibility(t *testing.T) { - var cluster testutils.Cluster - store, dom, clean := testkit.CreateMockStoreAndDomain(t, mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithSingleStore(c) - cluster = c - })) - defer clean() - tk := testkit.NewTestKit(t, store) - tk.MustExec("create database if not exists test_backward_compatibility") - defer tk.MustExec("drop database test_backward_compatibility") - tk.MustExec("use test_backward_compatibility") - tk.MustExec("create table t(a int primary key, b int)") - for i := 0; i < 200; i++ { - tk.MustExec(fmt.Sprintf("insert into t values(%v, %v)", i, i)) - } - - // alter table t add index idx_b(b); - is := dom.InfoSchema() - schemaName := model.NewCIStr("test_backward_compatibility") - tableName := model.NewCIStr("t") - schema, ok := is.SchemaByName(schemaName) - require.True(t, ok) - tbl, err := is.TableByName(schemaName, tableName) - require.NoError(t, err) - - // Split the table. - tableStart := tablecodec.GenTableRecordPrefix(tbl.Meta().ID) - cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 10) - - unique := false - indexName := model.NewCIStr("idx_b") - indexPartSpecification := &ast.IndexPartSpecification{ - Column: &ast.ColumnName{ - Schema: schemaName, - Table: tableName, - Name: model.NewCIStr("b"), - }, - Length: types.UnspecifiedLength, +func backgroundExec(s kv.Storage, sql string, done chan error) { + se, err := session.CreateSession4Test(s) + if err != nil { + done <- errors.Trace(err) + return } - indexPartSpecifications := []*ast.IndexPartSpecification{indexPartSpecification} - var indexOption *ast.IndexOption - job := &model.Job{ - SchemaID: schema.ID, - TableID: tbl.Meta().ID, - Type: model.ActionAddIndex, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{unique, indexName, indexPartSpecifications, indexOption}, + defer se.Close() + _, err = se.Execute(context.Background(), "use test") + if err != nil { + done <- errors.Trace(err) + return } - txn, err := store.Begin() - require.NoError(t, err) - tt := meta.NewMeta(txn) - job.ID, err = tt.GenGlobalID() - require.NoError(t, err) - job.Version = 1 - job.StartTS = txn.StartTS() - - // Simulate old TiDB init the add index job, old TiDB will not init the model.Job.ReorgMeta field, - // if we set job.SnapshotVer here, can simulate the behavior. - job.SnapshotVer = txn.StartTS() - err = tt.EnQueueDDLJob(job) - require.NoError(t, err) - err = txn.Commit(context.Background()) - require.NoError(t, err) - ticker := time.NewTicker(50 * time.Millisecond) - defer ticker.Stop() - for range ticker.C { - historyJob, err := getHistoryDDLJob(store, job.ID) - require.NoError(t, err) - if historyJob == nil { - continue - } - require.Nil(t, historyJob.Error) - - if historyJob.IsSynced() { - break - } - } - - // finished add index - tk.MustExec("admin check index t idx_b") + _, err = se.Execute(context.Background(), sql) + done <- errors.Trace(err) } func getHistoryDDLJob(store kv.Storage, id int64) (*model.Job, error) { @@ -1816,7 +1748,7 @@ func assertWarningExec(tk *testkit.TestKit, t *testing.T, sql string, expectedWa } func assertAlterWarnExec(tk *testkit.TestKit, t *testing.T, sql string) { - assertWarningExec(tk, t, sql, ddl.ErrAlterOperationNotSupported) + assertWarningExec(tk, t, sql, dbterror.ErrAlterOperationNotSupported) } func TestAlterAlgorithm(t *testing.T) { @@ -1924,8 +1856,8 @@ func TestFulltextIndexIgnore(t *testing.T) { tk.MustExec("drop table if exists t_ft") defer tk.MustExec("drop table if exists t_ft") // Make sure that creating and altering to add a fulltext key gives the correct warning - assertWarningExec(tk, t, "create table t_ft (a text, fulltext key (a))", ddl.ErrTableCantHandleFt) - assertWarningExec(tk, t, "alter table t_ft add fulltext key (a)", ddl.ErrTableCantHandleFt) + assertWarningExec(tk, t, "create table t_ft (a text, fulltext key (a))", dbterror.ErrTableCantHandleFt) + assertWarningExec(tk, t, "alter table t_ft add fulltext key (a)", dbterror.ErrTableCantHandleFt) // Make sure table t_ft still has no indexes even after it was created and altered r := tk.MustQuery("show index from t_ft") @@ -1954,7 +1886,7 @@ func TestTreatOldVersionUTF8AsUTF8MB4(t *testing.T) { // Mock old version table info with column charset is utf8. db, ok := domain.GetDomain(tk.Session()).InfoSchema().SchemaByName(model.NewCIStr("test")) - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") tblInfo := tbl.Meta().Clone() tblInfo.Version = model.TableInfoVersion0 tblInfo.Columns[0].Version = model.ColumnInfoVersion0 @@ -1992,7 +1924,7 @@ func TestTreatOldVersionUTF8AsUTF8MB4(t *testing.T) { ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) // Mock old version table info with table and column charset is utf8. - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") tblInfo = tbl.Meta().Clone() tblInfo.Charset = charset.CharsetUTF8 tblInfo.Collate = charset.CollationUTF8 @@ -2026,7 +1958,7 @@ func TestTreatOldVersionUTF8AsUTF8MB4(t *testing.T) { conf.TreatOldVersionUTF8AsUTF8MB4 = true }) tk.MustExec("alter table t modify column a varchar(10) character set utf8mb4") // change column charset. - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") require.Equal(t, charset.CharsetUTF8MB4, tbl.Meta().Columns[0].Charset) require.Equal(t, charset.CollationUTF8MB4, tbl.Meta().Columns[0].Collate) require.Equal(t, model.ColumnInfoVersion0, tbl.Meta().Columns[0].Version) @@ -2037,13 +1969,13 @@ func TestTreatOldVersionUTF8AsUTF8MB4(t *testing.T) { ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) // Test for change column should not modify the column version. tk.MustExec("alter table t change column a a varchar(20)") // change column. - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") require.Equal(t, charset.CharsetUTF8MB4, tbl.Meta().Columns[0].Charset) require.Equal(t, charset.CollationUTF8MB4, tbl.Meta().Columns[0].Collate) require.Equal(t, model.ColumnInfoVersion0, tbl.Meta().Columns[0].Version) // Test for v2.1.5 and v2.1.6 that table version is 1 but column version is 0. - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") tblInfo = tbl.Meta().Clone() tblInfo.Charset = charset.CharsetUTF8 tblInfo.Collate = charset.CollationUTF8 @@ -2095,7 +2027,7 @@ func TestDefaultValueIsString(t *testing.T) { tk.MustExec("drop table if exists t") defer tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int default b'1');") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") require.Equal(t, "1", tbl.Meta().Columns[0].DefaultValue) } @@ -2220,6 +2152,10 @@ func TestDropAutoIncrementIndex(t *testing.T) { tk.MustExec("create database if not exists test") tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int(11) not null auto_increment key, b int(11), c bigint, unique key (a, b, c))") + tk.MustExec("alter table t1 drop index a") + tk.MustExec("drop table if exists t1") tk.MustExec("create table t1 (a int auto_increment, unique key (a))") dropIndexSQL := "alter table t1 drop index a" @@ -2916,13 +2852,13 @@ func TestEnumAndSetDefaultValue(t *testing.T) { tk.MustExec("drop table if exists t") defer tk.MustExec("drop table if exists t") tk.MustExec("create table t (a enum(0x61, 'b') not null default 0x61, b set(0x61, 'b') not null default 0x61) character set latin1") - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") require.Equal(t, "a", tbl.Meta().Columns[0].DefaultValue) require.Equal(t, "a", tbl.Meta().Columns[1].DefaultValue) tk.MustExec("drop table t") tk.MustExec("create table t (a enum(0x61, 'b') not null default 0x61, b set(0x61, 'b') not null default 0x61) character set utf8mb4") - tbl = tk.GetTableByName("test", "t") + tbl = external.GetTableByName(t, tk, "test", "t") require.Equal(t, "a", tbl.Meta().Columns[0].DefaultValue) require.Equal(t, "a", tbl.Meta().Columns[1].DefaultValue) } @@ -3363,7 +3299,7 @@ func TestDropTemporaryTable(t *testing.T) { tk.MustExec("create temporary table if not exists b_table_local_and_normal (id int)") tk.MustQuery("select * from b_table_local_and_normal").Check(testkit.Rows()) tk.MustExec("drop table b_table_local_and_normal") - sequenceTable := tk.GetTableByName("test", "b_table_local_and_normal") + sequenceTable := external.GetTableByName(t, tk, "test", "b_table_local_and_normal") require.Equal(t, model.TempTableNone, sequenceTable.Meta().TempTableType) tk.MustExec("drop table if exists b_table_local_and_normal") _, err = tk.Exec("select * from b_table_local_and_normal") @@ -3907,16 +3843,16 @@ func TestInvalidPartitionNameWhenCreateTable(t *testing.T) { _, err := tk.Exec("create table t(a int) partition by range (a) (partition p0 values less than (0), partition `p1 ` values less than (3))") require.Error(t, err) - require.Truef(t, terror.ErrorEqual(err, ddl.ErrWrongPartitionName), "err %v", err) + require.Truef(t, terror.ErrorEqual(err, dbterror.ErrWrongPartitionName), "err %v", err) _, err = tk.Exec("create table t(a int) partition by range (a) (partition `` values less than (0), partition `p1` values less than (3))") require.Error(t, err) - require.Truef(t, terror.ErrorEqual(err, ddl.ErrWrongPartitionName), "err %v", err) + require.Truef(t, terror.ErrorEqual(err, dbterror.ErrWrongPartitionName), "err %v", err) tk.MustExec("create table t(a int) partition by range (a) (partition `p0` values less than (0), partition `p1` values less than (3))") _, err = tk.Exec("alter table t add partition (partition `p2 ` values less than (5))") require.Error(t, err) - require.Truef(t, terror.ErrorEqual(err, ddl.ErrWrongPartitionName), "err %v", err) + require.Truef(t, terror.ErrorEqual(err, dbterror.ErrWrongPartitionName), "err %v", err) } func TestDDLLastInfo(t *testing.T) { diff --git a/ddl/db_partition_test.go b/ddl/db_partition_test.go index b5121c5853aef..0244f0bd54048 100644 --- a/ddl/db_partition_test.go +++ b/ddl/db_partition_test.go @@ -24,7 +24,6 @@ import ( "testing" "time" - . "github.com/pingcap/check" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/config" @@ -45,37 +44,51 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" - ntestkit "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/admin" - "github.com/pingcap/tidb/util/israce" + "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/mock" - "github.com/pingcap/tidb/util/testkit" + "github.com/stretchr/testify/require" "go.uber.org/zap" ) -var _ = Suite(&testIntegrationSuite1{&testIntegrationSuite{}}) -var _ = Suite(&testIntegrationSuite2{&testIntegrationSuite{}}) -var _ = Suite(&testIntegrationSuite3{&testIntegrationSuite{}}) -var _ = Suite(&testIntegrationSuite4{&testIntegrationSuite{}}) -var _ = Suite(&testIntegrationSuite5{&testIntegrationSuite{}}) -var _ = Suite(&testIntegrationSuite6{&testIntegrationSuite{}}) - -type testIntegrationSuite1 struct{ *testIntegrationSuite } -type testIntegrationSuite2 struct{ *testIntegrationSuite } +func checkGlobalIndexCleanUpDone(t *testing.T, ctx sessionctx.Context, tblInfo *model.TableInfo, idxInfo *model.IndexInfo, pid int64) int { + require.NoError(t, ctx.NewTxn(context.Background())) + txn, err := ctx.Txn(true) + require.NoError(t, err) + defer func() { + err := txn.Rollback() + require.NoError(t, err) + }() -func (s *testIntegrationSuite2) TearDownTest(c *C) { - tearDownIntegrationSuiteTest(s.testIntegrationSuite, c) + cnt := 0 + prefix := tablecodec.EncodeTableIndexPrefix(tblInfo.ID, idxInfo.ID) + it, err := txn.Iter(prefix, nil) + require.NoError(t, err) + for it.Valid() { + if !it.Key().HasPrefix(prefix) { + break + } + segs := tablecodec.SplitIndexValue(it.Value()) + require.NotNil(t, segs.PartitionID) + _, pi, err := codec.DecodeInt(segs.PartitionID) + require.NoError(t, err) + require.NotEqual(t, pid, pi) + cnt++ + err = it.Next() + require.NoError(t, err) + } + return cnt } -type testIntegrationSuite3 struct{ *testIntegrationSuite } -type testIntegrationSuite4 struct{ *testIntegrationSuite } -type testIntegrationSuite5 struct{ *testIntegrationSuite } -type testIntegrationSuite6 struct{ *testIntegrationSuite } - -func (s *testIntegrationSuite3) TestCreateTableWithPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreateTableWithPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists tp;") tk.MustExec(`CREATE TABLE tp (a int) PARTITION BY RANGE(a) ( @@ -83,24 +96,24 @@ func (s *testIntegrationSuite3) TestCreateTableWithPartition(c *C) { PARTITION p1 VALUES LESS THAN (20), PARTITION p2 VALUES LESS THAN (MAXVALUE) );`) - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("tp")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().Partition, NotNil) + require.NoError(t, err) + require.NotNil(t, tbl.Meta().Partition) part := tbl.Meta().Partition - c.Assert(part.Type, Equals, model.PartitionTypeRange) - c.Assert(part.Expr, Equals, "`a`") + require.Equal(t, model.PartitionTypeRange, part.Type) + require.Equal(t, "`a`", part.Expr) for _, pdef := range part.Definitions { - c.Assert(pdef.ID, Greater, int64(0)) + require.Greater(t, pdef.ID, int64(0)) } - c.Assert(part.Definitions, HasLen, 3) - c.Assert(part.Definitions[0].LessThan[0], Equals, "10") - c.Assert(part.Definitions[0].Name.L, Equals, "p0") - c.Assert(part.Definitions[1].LessThan[0], Equals, "20") - c.Assert(part.Definitions[1].Name.L, Equals, "p1") - c.Assert(part.Definitions[2].LessThan[0], Equals, "MAXVALUE") - c.Assert(part.Definitions[2].Name.L, Equals, "p2") + require.Len(t, part.Definitions, 3) + require.Equal(t, "10", part.Definitions[0].LessThan[0]) + require.Equal(t, "p0", part.Definitions[0].Name.L) + require.Equal(t, "20", part.Definitions[1].LessThan[0]) + require.Equal(t, "p1", part.Definitions[1].Name.L) + require.Equal(t, "MAXVALUE", part.Definitions[2].LessThan[0]) + require.Equal(t, "p2", part.Definitions[2].Name.L) tk.MustExec("drop table if exists employees;") sql1 := `create table employees ( @@ -158,7 +171,7 @@ func (s *testIntegrationSuite3) TestCreateTableWithPartition(c *C) { partition p3 values less than (65,30,13), partition p4 values less than (maxvalue,30,40) );`) - c.Assert(err, IsNil) + require.NoError(t, err) sql6 := `create table employees ( id int not null, @@ -211,7 +224,7 @@ func (s *testIntegrationSuite3) TestCreateTableWithPartition(c *C) { partition p2 values less than (20), partition p3 values less than (20) );`) - c.Assert(ddl.ErrRangeNotIncreasing.Equal(err), IsTrue) + require.True(t, dbterror.ErrRangeNotIncreasing.Equal(err)) tk.MustGetErrCode(`create TABLE t10 (c1 int,c2 int) partition by range(c1 / c2 ) (partition p0 values less than (2));`, tmysql.ErrPartitionFunctionIsNotAllowed) @@ -327,8 +340,10 @@ partition by range (a) partition p2 values less than maxvalue)`) } -func (s *testIntegrationSuite2) TestCreateTableWithHashPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreateTableWithHashPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists employees;") tk.MustExec("set @@session.tidb_enable_table_partition = 1") @@ -384,8 +399,10 @@ func (s *testIntegrationSuite2) TestCreateTableWithHashPartition(c *C) { tk.MustExec("create table t4 (a int, b int) partition by hash(floor(a-b)) partitions 10") } -func (s *testSerialDBSuite1) TestCreateTableWithRangeColumnPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreateTableWithRangeColumnPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists log_message_1;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") @@ -433,15 +450,15 @@ create table log_message_1 ( }, { "create table t(a datetime) partition by range columns (a) (partition p1 values less than ('2000-02-01'), partition p2 values less than ('20000102'));", - ddl.ErrRangeNotIncreasing, + dbterror.ErrRangeNotIncreasing, }, { "create table t(a time) partition by range columns (a) (partition p1 values less than ('202020'), partition p2 values less than ('20:20:10'));", - ddl.ErrRangeNotIncreasing, + dbterror.ErrRangeNotIncreasing, }, { "create table t(a time) partition by range columns (a) (partition p1 values less than ('202090'));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (id int) partition by range columns (id) (partition p0 values less than (1, 2));", @@ -453,15 +470,15 @@ create table log_message_1 ( }, { "create table t (a int) partition by range columns (b) (partition p0 values less than (1));", - ddl.ErrFieldNotFoundPart, + dbterror.ErrFieldNotFoundPart, }, { "create table t (a date) partition by range (to_days(to_days(a))) (partition p0 values less than (1));", - ddl.ErrWrongExprInPartitionFunc, + dbterror.ErrWrongExprInPartitionFunc, }, { "create table t (id timestamp) partition by range columns (id) (partition p0 values less than ('2019-01-09 11:23:34'));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { `create table t29 ( @@ -469,120 +486,120 @@ create table log_message_1 ( ) partition by range columns (a) (partition p0 values less than (0));`, - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id text) partition by range columns (id) (partition p0 values less than ('abc'));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, // create as normal table, warning. // { // "create table t (a int, b varchar(64)) partition by range columns (a, b) (" + // "partition p0 values less than (1, 'a')," + // "partition p1 values less than (1, 'a'))", - // ddl.ErrRangeNotIncreasing, + // dbterror.ErrRangeNotIncreasing, // }, { "create table t (a int, b varchar(64)) partition by range columns ( b) (" + "partition p0 values less than ( 'a')," + "partition p1 values less than ('a'))", - ddl.ErrRangeNotIncreasing, + dbterror.ErrRangeNotIncreasing, }, // create as normal table, warning. // { // "create table t (a int, b varchar(64)) partition by range columns (a, b) (" + // "partition p0 values less than (1, 'b')," + // "partition p1 values less than (1, 'a'))", - // ddl.ErrRangeNotIncreasing, + // dbterror.ErrRangeNotIncreasing, // }, { "create table t (a int, b varchar(64)) partition by range columns (b) (" + "partition p0 values less than ('b')," + "partition p1 values less than ('a'))", - ddl.ErrRangeNotIncreasing, + dbterror.ErrRangeNotIncreasing, }, // create as normal table, warning. // { // "create table t (a int, b varchar(64)) partition by range columns (a, b) (" + // "partition p0 values less than (1, maxvalue)," + // "partition p1 values less than (1, 'a'))", - // ddl.ErrRangeNotIncreasing, + // dbterror.ErrRangeNotIncreasing, // }, { "create table t (a int, b varchar(64)) partition by range columns ( b) (" + "partition p0 values less than ( maxvalue)," + "partition p1 values less than ('a'))", - ddl.ErrRangeNotIncreasing, + dbterror.ErrRangeNotIncreasing, }, { "create table t (col datetime not null default '2000-01-01')" + "partition by range columns (col) (" + "PARTITION p0 VALUES LESS THAN (20190905)," + "PARTITION p1 VALUES LESS THAN (20190906));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t(a char(10) collate utf8mb4_bin) " + "partition by range columns (a) (" + "partition p0 values less than ('a'), " + "partition p1 values less than ('G'));", - ddl.ErrRangeNotIncreasing, + dbterror.ErrRangeNotIncreasing, }, { "CREATE TABLE t1(c0 INT) PARTITION BY HASH((NOT c0)) PARTITIONS 2;", - ddl.ErrPartitionFunctionIsNotAllowed, + dbterror.ErrPartitionFunctionIsNotAllowed, }, { "CREATE TABLE t1(c0 INT) PARTITION BY HASH((!c0)) PARTITIONS 2;", - ddl.ErrPartitionFunctionIsNotAllowed, + dbterror.ErrPartitionFunctionIsNotAllowed, }, { "CREATE TABLE t1(c0 INT) PARTITION BY LIST((NOT c0)) (partition p0 values in (0), partition p1 values in (1));", - ddl.ErrPartitionFunctionIsNotAllowed, + dbterror.ErrPartitionFunctionIsNotAllowed, }, { "CREATE TABLE t1(c0 INT) PARTITION BY LIST((!c0)) (partition p0 values in (0), partition p1 values in (1));", - ddl.ErrPartitionFunctionIsNotAllowed, + dbterror.ErrPartitionFunctionIsNotAllowed, }, { "CREATE TABLE t1 (a TIME, b DATE) PARTITION BY range(DATEDIFF(a, b)) (partition p1 values less than (20));", - ddl.ErrWrongExprInPartitionFunc, + dbterror.ErrWrongExprInPartitionFunc, }, { "CREATE TABLE t1 (a DATE, b VARCHAR(10)) PARTITION BY range(DATEDIFF(a, b)) (partition p1 values less than (20));", - ddl.ErrWrongExprInPartitionFunc, + dbterror.ErrWrongExprInPartitionFunc, }, { "create table t1 (a bigint unsigned) partition by list (a) (partition p0 values in (10, 20, 30, -1));", - ddl.ErrPartitionConstDomain, + dbterror.ErrPartitionConstDomain, }, { "create table t1 (a bigint unsigned) partition by range (a) (partition p0 values less than (-1));", - ddl.ErrPartitionConstDomain, + dbterror.ErrPartitionConstDomain, }, { "create table t1 (a int unsigned) partition by range (a) (partition p0 values less than (-1));", - ddl.ErrPartitionConstDomain, + dbterror.ErrPartitionConstDomain, }, { "create table t1 (a tinyint(20) unsigned) partition by range (a) (partition p0 values less than (-1));", - ddl.ErrPartitionConstDomain, + dbterror.ErrPartitionConstDomain, }, { "CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY) PARTITION BY RANGE (a % 2) (PARTITION p VALUES LESS THAN (20080819));", - ddl.ErrWrongExprInPartitionFunc, + dbterror.ErrWrongExprInPartitionFunc, }, { "CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY) PARTITION BY RANGE (a+2) (PARTITION p VALUES LESS THAN (20080819));", - ddl.ErrWrongExprInPartitionFunc, + dbterror.ErrWrongExprInPartitionFunc, }, } - for i, t := range cases { - _, err := tk.Exec(t.sql) - c.Assert(t.err.Equal(err), IsTrue, Commentf( + for i, tt := range cases { + _, err := tk.Exec(tt.sql) + require.Truef(t, tt.err.Equal(err), "case %d fail, sql = `%s`\nexpected error = `%v`\n actual error = `%v`", - i, t.sql, t.err, err, - )) + i, tt.sql, tt.err, err, + ) } tk.MustExec("drop table if exists t1;") @@ -615,11 +632,10 @@ create table log_message_1 ( tk.MustQuery(`select * from t where a < X'0D' order by a`).Check(testkit.Rows("\x0B", "\x0C")) } -func (s *testIntegrationSuite1) TestDisableTablePartition(c *C) { - if israce.RaceEnabled { - c.Skip("skip race test") - } - tk := testkit.NewTestKit(c, s.store) +func TestDisableTablePartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") for _, v := range []string{"'AUTO'", "'OFF'", "0", "'ON'"} { tk.MustExec("set @@session.tidb_enable_table_partition = " + v) @@ -627,17 +643,17 @@ func (s *testIntegrationSuite1) TestDisableTablePartition(c *C) { tk.MustExec("drop table if exists t") tk.MustExec(`create table t (id int) partition by list (id) ( partition p0 values in (1,2),partition p1 values in (3,4));`) - tbl := testGetTableByName(c, tk.Se, "test", "t") - c.Assert(tbl.Meta().Partition, IsNil) + tbl := external.GetTableByName(t, tk, "test", "t") + require.Nil(t, tbl.Meta().Partition) _, err := tk.Exec(`alter table t add partition ( partition p4 values in (7), partition p5 values in (8,9));`) - c.Assert(ddl.ErrPartitionMgmtOnNonpartitioned.Equal(err), IsTrue) + require.True(t, dbterror.ErrPartitionMgmtOnNonpartitioned.Equal(err)) tk.MustExec("insert into t values (1),(3),(5),(100),(null)") } } -func (s *testIntegrationSuite1) generatePartitionTableByNum(num int) string { +func generatePartitionTableByNum(num int) string { buf := bytes.NewBuffer(make([]byte, 0, 1024*1024)) buf.WriteString("create table gen_t (id int) partition by list (id) (") for i := 0; i < num; i++ { @@ -650,8 +666,10 @@ func (s *testIntegrationSuite1) generatePartitionTableByNum(num int) string { return buf.String() } -func (s *testIntegrationSuite1) TestCreateTableWithListPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreateTableWithListPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") tk.MustExec("drop table if exists t") @@ -666,75 +684,75 @@ func (s *testIntegrationSuite1) TestCreateTableWithListPartition(c *C) { }, { "create table t (a int) partition by list (b) (partition p0 values in (1));", - ddl.ErrBadField, + dbterror.ErrBadField, }, { "create table t (id timestamp) partition by list (id) (partition p0 values in ('2019-01-09 11:23:34'));", - ddl.ErrValuesIsNotIntType, + dbterror.ErrValuesIsNotIntType, }, { "create table t (id decimal) partition by list (id) (partition p0 values in ('2019-01-09 11:23:34'));", - ddl.ErrValuesIsNotIntType, + dbterror.ErrValuesIsNotIntType, }, { "create table t (id float) partition by list (id) (partition p0 values in (1));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id double) partition by list (id) (partition p0 values in (1));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id text) partition by list (id) (partition p0 values in ('abc'));", - ddl.ErrValuesIsNotIntType, + dbterror.ErrValuesIsNotIntType, }, { "create table t (id blob) partition by list (id) (partition p0 values in ('abc'));", - ddl.ErrValuesIsNotIntType, + dbterror.ErrValuesIsNotIntType, }, { "create table t (id enum('a','b')) partition by list (id) (partition p0 values in ('a'));", - ddl.ErrValuesIsNotIntType, + dbterror.ErrValuesIsNotIntType, }, { "create table t (id set('a','b')) partition by list (id) (partition p0 values in ('a'));", - ddl.ErrValuesIsNotIntType, + dbterror.ErrValuesIsNotIntType, }, { "create table t (a int) partition by list (a) (partition p0 values in (1), partition p0 values in (2));", - ddl.ErrSameNamePartition, + dbterror.ErrSameNamePartition, }, { "create table t (a int) partition by list (a) (partition p0 values in (1), partition P0 values in (2));", - ddl.ErrSameNamePartition, + dbterror.ErrSameNamePartition, }, { "create table t (id bigint) partition by list (cast(id as unsigned)) (partition p0 values in (1))", - ddl.ErrPartitionFunctionIsNotAllowed, + dbterror.ErrPartitionFunctionIsNotAllowed, }, { "create table t (id float) partition by list (ceiling(id)) (partition p0 values in (1))", - ddl.ErrPartitionFuncNotAllowed, + dbterror.ErrPartitionFuncNotAllowed, }, { "create table t(b char(10)) partition by range columns (b) (partition p1 values less than ('G' collate utf8mb4_unicode_ci));", - ddl.ErrPartitionFunctionIsNotAllowed, + dbterror.ErrPartitionFunctionIsNotAllowed, }, { "create table t (a date) partition by list (to_days(to_days(a))) (partition p0 values in (1), partition P1 values in (2));", - ddl.ErrWrongExprInPartitionFunc, + dbterror.ErrWrongExprInPartitionFunc, }, { "create table t (a int) partition by list (a) (partition p0 values in (1), partition p1 values in (1));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a int) partition by list (a) (partition p0 values in (1), partition p1 values in (+1));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a int) partition by list (a) (partition p0 values in (null), partition p1 values in (NULL));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { `create table t1 (id int key, name varchar(10), unique index idx(name)) partition by list (id) ( @@ -743,19 +761,19 @@ func (s *testIntegrationSuite1) TestCreateTableWithListPartition(c *C) { partition p2 values in (4,12,13,14,18), partition p3 values in (7,8,15,16) );`, - ddl.ErrUniqueKeyNeedAllFieldsInPf, + dbterror.ErrUniqueKeyNeedAllFieldsInPf, }, { - s.generatePartitionTableByNum(ddl.PartitionCountLimit + 1), - ddl.ErrTooManyPartitions, + generatePartitionTableByNum(ddl.PartitionCountLimit + 1), + dbterror.ErrTooManyPartitions, }, } - for i, t := range cases { - _, err := tk.Exec(t.sql) - c.Assert(t.err.Equal(err), IsTrue, Commentf( + for i, tt := range cases { + _, err := tk.Exec(tt.sql) + require.Truef(t, tt.err.Equal(err), "case %d fail, sql = `%s`\nexpected error = `%v`\n actual error = `%v`", - i, t.sql, t.err, err, - )) + i, tt.sql, tt.err, err, + ) } validCases := []string{ @@ -777,7 +795,7 @@ func (s *testIntegrationSuite1) TestCreateTableWithListPartition(c *C) { "create table t (a datetime) partition by list (to_seconds(a)) (partition p0 values in (to_seconds('2020-09-28 17:03:38'),to_seconds('2020-09-28 17:03:39')));", "create table t (a int, b int generated always as (a+1) virtual) partition by list (b + 1) (partition p0 values in (1));", "create table t(a binary) partition by list columns (a) (partition p0 values in (X'0C'));", - s.generatePartitionTableByNum(ddl.PartitionCountLimit), + generatePartitionTableByNum(ddl.PartitionCountLimit), } for id, sql := range validCases { @@ -787,16 +805,18 @@ func (s *testIntegrationSuite1) TestCreateTableWithListPartition(c *C) { if id == len(validCases)-1 { tblName = "gen_t" } - tbl := testGetTableByName(c, s.ctx, "test", tblName) + tbl := external.GetTableByName(t, tk, "test", tblName) tblInfo := tbl.Meta() - c.Assert(tblInfo.Partition, NotNil) - c.Assert(tblInfo.Partition.Enable, Equals, true) - c.Assert(tblInfo.Partition.Type == model.PartitionTypeList, IsTrue) + require.NotNil(t, tblInfo.Partition) + require.True(t, tblInfo.Partition.Enable) + require.Equal(t, model.PartitionTypeList, tblInfo.Partition.Type) } } -func (s *testIntegrationSuite1) TestCreateTableWithListColumnsPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreateTableWithListColumnsPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") tk.MustExec("drop table if exists t") @@ -811,119 +831,119 @@ func (s *testIntegrationSuite1) TestCreateTableWithListColumnsPartition(c *C) { }, { "create table t (a int) partition by list columns (b) (partition p0 values in (1));", - ddl.ErrFieldNotFoundPart, + dbterror.ErrFieldNotFoundPart, }, { "create table t (id timestamp) partition by list columns (id) (partition p0 values in ('2019-01-09 11:23:34'));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id decimal) partition by list columns (id) (partition p0 values in ('2019-01-09 11:23:34'));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id year) partition by list columns (id) (partition p0 values in (2000));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id float) partition by list columns (id) (partition p0 values in (1));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id double) partition by list columns (id) (partition p0 values in (1));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id text) partition by list columns (id) (partition p0 values in ('abc'));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id blob) partition by list columns (id) (partition p0 values in ('abc'));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id enum('a','b')) partition by list columns (id) (partition p0 values in ('a'));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (id set('a','b')) partition by list columns (id) (partition p0 values in ('a'));", - ddl.ErrNotAllowedTypeInPartition, + dbterror.ErrNotAllowedTypeInPartition, }, { "create table t (a varchar(2)) partition by list columns (a) (partition p0 values in ('abc'));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a tinyint) partition by list columns (a) (partition p0 values in (65536));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a bigint) partition by list columns (a) (partition p0 values in (18446744073709551615));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a bigint unsigned) partition by list columns (a) (partition p0 values in (-1));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a char) partition by list columns (a) (partition p0 values in ('abc'));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a datetime) partition by list columns (a) (partition p0 values in ('2020-11-31 12:00:00'));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a int) partition by list columns (a) (partition p0 values in (1), partition p0 values in (2));", - ddl.ErrSameNamePartition, + dbterror.ErrSameNamePartition, }, { "create table t (a int) partition by list columns (a) (partition p0 values in (1), partition P0 values in (2));", - ddl.ErrSameNamePartition, + dbterror.ErrSameNamePartition, }, { "create table t (a int) partition by list columns (a) (partition p0 values in (1), partition p1 values in (1));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a int) partition by list columns (a) (partition p0 values in (1), partition p1 values in (+1));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a tinyint) partition by list columns (a) (partition p0 values in (1), partition p1 values in (+1));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a mediumint) partition by list columns (a) (partition p0 values in (1), partition p1 values in (+1));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a bigint) partition by list columns (a) (partition p0 values in (1), partition p1 values in (+1));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a bigint) partition by list columns (a) (partition p0 values in (1,+1))", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a int) partition by list columns (a) (partition p0 values in (null), partition p1 values in (NULL));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a bigint, b int) partition by list columns (a,b) (partition p0 values in ((1,2),(1,2)))", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a bigint, b int) partition by list columns (a,b) (partition p0 values in ((1,1),(2,2)), partition p1 values in ((+1,1)));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t1 (a int, b int) partition by list columns(a,a) ( partition p values in ((1,1)));", - ddl.ErrSameNamePartitionField, + dbterror.ErrSameNamePartitionField, }, { "create table t1 (a int, b int) partition by list columns(a,b,b) ( partition p values in ((1,1,1)));", - ddl.ErrSameNamePartitionField, + dbterror.ErrSameNamePartitionField, }, { `create table t1 (id int key, name varchar(10), unique index idx(name)) partition by list columns (id) ( @@ -932,11 +952,11 @@ func (s *testIntegrationSuite1) TestCreateTableWithListColumnsPartition(c *C) { partition p2 values in (4,12,13,14,18), partition p3 values in (7,8,15,16) );`, - ddl.ErrUniqueKeyNeedAllFieldsInPf, + dbterror.ErrUniqueKeyNeedAllFieldsInPf, }, { "create table t (a date) partition by list columns (a) (partition p0 values in ('2020-02-02'), partition p1 values in ('20200202'));", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, { "create table t (a int, b varchar(10)) partition by list columns (a,b) (partition p0 values in (1));", @@ -944,7 +964,7 @@ func (s *testIntegrationSuite1) TestCreateTableWithListColumnsPartition(c *C) { }, { "create table t (a int, b varchar(10)) partition by list columns (a,b) (partition p0 values in (('ab','ab')));", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a int, b datetime) partition by list columns (a,b) (partition p0 values in ((1)));", @@ -952,15 +972,15 @@ func (s *testIntegrationSuite1) TestCreateTableWithListColumnsPartition(c *C) { }, { "create table t(b int) partition by hash ( b ) partitions 3 (partition p1, partition p2, partition p2);", - ddl.ErrSameNamePartition, + dbterror.ErrSameNamePartition, }, } - for i, t := range cases { - _, err := tk.Exec(t.sql) - c.Assert(t.err.Equal(err), IsTrue, Commentf( + for i, tt := range cases { + _, err := tk.Exec(tt.sql) + require.Truef(t, tt.err.Equal(err), "case %d fail, sql = `%s`\nexpected error = `%v`\n actual error = `%v`", - i, t.sql, t.err, err, - )) + i, tt.sql, tt.err, err, + ) } validCases := []string{ @@ -992,16 +1012,18 @@ func (s *testIntegrationSuite1) TestCreateTableWithListColumnsPartition(c *C) { for _, sql := range validCases { tk.MustExec("drop table if exists t") tk.MustExec(sql) - tbl := testGetTableByName(c, s.ctx, "test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") tblInfo := tbl.Meta() - c.Assert(tblInfo.Partition, NotNil) - c.Assert(tblInfo.Partition.Enable, Equals, true) - c.Assert(tblInfo.Partition.Type == model.PartitionTypeList, IsTrue) + require.NotNil(t, tblInfo.Partition) + require.Equal(t, true, tblInfo.Partition.Enable) + require.True(t, tblInfo.Partition.Type == model.PartitionTypeList) } } -func (s *testIntegrationSuite5) TestAlterTableAddPartitionByList(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableAddPartitionByList(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists t;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") @@ -1014,57 +1036,57 @@ func (s *testIntegrationSuite5) TestAlterTableAddPartitionByList(c *C) { partition p4 values in (7), partition p5 values in (8,9));`) - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().Partition, NotNil) + require.NoError(t, err) + require.NotNil(t, tbl.Meta().Partition) part := tbl.Meta().Partition - c.Assert(part.Type == model.PartitionTypeList, IsTrue) - - c.Assert(part.Expr, Equals, "`id`") - c.Assert(part.Definitions, HasLen, 5) - c.Assert(part.Definitions[0].InValues, DeepEquals, [][]string{{"1"}, {"2"}}) - c.Assert(part.Definitions[0].Name, Equals, model.NewCIStr("p0")) - c.Assert(part.Definitions[1].InValues, DeepEquals, [][]string{{"3"}, {"4"}}) - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p1")) - c.Assert(part.Definitions[2].InValues, DeepEquals, [][]string{{"5"}, {"NULL"}}) - c.Assert(part.Definitions[2].Name, Equals, model.NewCIStr("p3")) - c.Assert(part.Definitions[3].InValues, DeepEquals, [][]string{{"7"}}) - c.Assert(part.Definitions[3].Name, Equals, model.NewCIStr("p4")) - c.Assert(part.Definitions[4].InValues, DeepEquals, [][]string{{"8"}, {"9"}}) - c.Assert(part.Definitions[4].Name, Equals, model.NewCIStr("p5")) + require.True(t, part.Type == model.PartitionTypeList) + + require.Equal(t, "`id`", part.Expr) + require.Len(t, part.Definitions, 5) + require.Equal(t, [][]string{{"1"}, {"2"}}, part.Definitions[0].InValues) + require.Equal(t, model.NewCIStr("p0"), part.Definitions[0].Name) + require.Equal(t, [][]string{{"3"}, {"4"}}, part.Definitions[1].InValues) + require.Equal(t, model.NewCIStr("p1"), part.Definitions[1].Name) + require.Equal(t, [][]string{{"5"}, {"NULL"}}, part.Definitions[2].InValues) + require.Equal(t, model.NewCIStr("p3"), part.Definitions[2].Name) + require.Equal(t, [][]string{{"7"}}, part.Definitions[3].InValues) + require.Equal(t, model.NewCIStr("p4"), part.Definitions[3].Name) + require.Equal(t, [][]string{{"8"}, {"9"}}, part.Definitions[4].InValues) + require.Equal(t, model.NewCIStr("p5"), part.Definitions[4].Name) errorCases := []struct { sql string err *terror.Error }{ {"alter table t add partition (partition p4 values in (7))", - ddl.ErrSameNamePartition, + dbterror.ErrSameNamePartition, }, {"alter table t add partition (partition p6 values less than (7))", ast.ErrPartitionWrongValues, }, {"alter table t add partition (partition p6 values in (null))", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, {"alter table t add partition (partition p6 values in (7))", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, {"alter table t add partition (partition p6 values in ('a'))", - ddl.ErrValuesIsNotIntType, + dbterror.ErrValuesIsNotIntType, }, {"alter table t add partition (partition p5 values in (10),partition p6 values in (7))", - ddl.ErrSameNamePartition, + dbterror.ErrSameNamePartition, }, } - for i, t := range errorCases { - _, err := tk.Exec(t.sql) - c.Assert(t.err.Equal(err), IsTrue, Commentf( + for i, tt := range errorCases { + _, err := tk.Exec(tt.sql) + require.Truef(t, tt.err.Equal(err), "case %d fail, sql = `%s`\nexpected error = `%v`\n actual error = `%v`", - i, t.sql, t.err, err, - )) + i, tt.sql, tt.err, err, + ) } errorCases2 := []struct { @@ -1075,48 +1097,50 @@ func (s *testIntegrationSuite5) TestAlterTableAddPartitionByList(c *C) { { "create table t (a bigint unsigned) partition by list columns (a) (partition p0 values in (1));", "alter table t add partition (partition p1 values in (-1))", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a varchar(2)) partition by list columns (a) (partition p0 values in ('a','b'));", "alter table t add partition (partition p1 values in ('abc'))", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a tinyint) partition by list columns (a) (partition p0 values in (1,2,3));", "alter table t add partition (partition p1 values in (65536))", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a bigint) partition by list columns (a) (partition p0 values in (1,2,3));", "alter table t add partition (partition p1 values in (18446744073709551615))", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a char) partition by list columns (a) (partition p0 values in ('a','b'));", "alter table t add partition (partition p1 values in ('abc'))", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, { "create table t (a datetime) partition by list columns (a) (partition p0 values in ('2020-11-30 12:00:00'));", "alter table t add partition (partition p1 values in ('2020-11-31 12:00:00'))", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, } - for i, t := range errorCases2 { + for i, tt := range errorCases2 { tk.MustExec("drop table if exists t;") - tk.MustExec(t.create) - _, err := tk.Exec(t.alter) - c.Assert(t.err.Equal(err), IsTrue, Commentf( + tk.MustExec(tt.create) + _, err := tk.Exec(tt.alter) + require.Truef(t, tt.err.Equal(err), "case %d fail, sql = `%s`\nexpected error = `%v`\n actual error = `%v`", - i, t.alter, t.err, err, - )) + i, tt.alter, tt.err, err, + ) } } -func (s *testIntegrationSuite5) TestAlterTableAddPartitionByListColumns(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableAddPartitionByListColumns(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists t;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") @@ -1129,61 +1153,63 @@ func (s *testIntegrationSuite5) TestAlterTableAddPartitionByListColumns(c *C) { partition p4 values in ((7,'a')), partition p5 values in ((8,'a')));`) - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().Partition, NotNil) + require.NoError(t, err) + require.NotNil(t, tbl.Meta().Partition) part := tbl.Meta().Partition - c.Assert(part.Type == model.PartitionTypeList, IsTrue) - - c.Assert(part.Expr, Equals, "") - c.Assert(part.Columns[0].O, Equals, "id") - c.Assert(part.Columns[1].O, Equals, "name") - c.Assert(part.Definitions, HasLen, 5) - c.Assert(part.Definitions[0].InValues, DeepEquals, [][]string{{"1", `"a"`}, {"2", `"b"`}}) - c.Assert(part.Definitions[0].Name, Equals, model.NewCIStr("p0")) - c.Assert(part.Definitions[1].InValues, DeepEquals, [][]string{{"3", `"a"`}, {"4", `"b"`}}) - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p1")) - c.Assert(part.Definitions[2].InValues, DeepEquals, [][]string{{"5", `NULL`}}) - c.Assert(part.Definitions[2].Name, Equals, model.NewCIStr("p3")) - c.Assert(part.Definitions[3].InValues, DeepEquals, [][]string{{"7", `"a"`}}) - c.Assert(part.Definitions[3].Name, Equals, model.NewCIStr("p4")) - c.Assert(part.Definitions[4].InValues, DeepEquals, [][]string{{"8", `"a"`}}) - c.Assert(part.Definitions[4].Name, Equals, model.NewCIStr("p5")) + require.True(t, part.Type == model.PartitionTypeList) + + require.Equal(t, "", part.Expr) + require.Equal(t, "id", part.Columns[0].O) + require.Equal(t, "name", part.Columns[1].O) + require.Len(t, part.Definitions, 5) + require.Equal(t, [][]string{{"1", `"a"`}, {"2", `"b"`}}, part.Definitions[0].InValues) + require.Equal(t, model.NewCIStr("p0"), part.Definitions[0].Name) + require.Equal(t, [][]string{{"3", `"a"`}, {"4", `"b"`}}, part.Definitions[1].InValues) + require.Equal(t, model.NewCIStr("p1"), part.Definitions[1].Name) + require.Equal(t, [][]string{{"5", `NULL`}}, part.Definitions[2].InValues) + require.Equal(t, model.NewCIStr("p3"), part.Definitions[2].Name) + require.Equal(t, [][]string{{"7", `"a"`}}, part.Definitions[3].InValues) + require.Equal(t, model.NewCIStr("p4"), part.Definitions[3].Name) + require.Equal(t, [][]string{{"8", `"a"`}}, part.Definitions[4].InValues) + require.Equal(t, model.NewCIStr("p5"), part.Definitions[4].Name) errorCases := []struct { sql string err *terror.Error }{ {"alter table t add partition (partition p4 values in ((7,'b')))", - ddl.ErrSameNamePartition, + dbterror.ErrSameNamePartition, }, {"alter table t add partition (partition p6 values less than ((7,'a')))", ast.ErrPartitionWrongValues, }, {"alter table t add partition (partition p6 values in ((5,null)))", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, {"alter table t add partition (partition p6 values in ((7,'a')))", - ddl.ErrMultipleDefConstInListPart, + dbterror.ErrMultipleDefConstInListPart, }, {"alter table t add partition (partition p6 values in (('a','a')))", - ddl.ErrWrongTypeColumnValue, + dbterror.ErrWrongTypeColumnValue, }, } - for i, t := range errorCases { - _, err := tk.Exec(t.sql) - c.Assert(t.err.Equal(err), IsTrue, Commentf( + for i, tt := range errorCases { + _, err := tk.Exec(tt.sql) + require.Truef(t, tt.err.Equal(err), "case %d fail, sql = `%s`\nexpected error = `%v`\n actual error = `%v`", - i, t.sql, t.err, err, - )) + i, tt.sql, tt.err, err, + ) } } -func (s *testIntegrationSuite5) TestAlterTableDropPartitionByList(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableDropPartitionByList(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists t;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") @@ -1195,19 +1221,19 @@ func (s *testIntegrationSuite5) TestAlterTableDropPartitionByList(c *C) { tk.MustExec(`insert into t values (1),(3),(5),(null)`) tk.MustExec(`alter table t drop partition p1`) tk.MustQuery("select * from t").Check(testkit.Rows("1", "5", "")) - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().Partition, NotNil) + require.NoError(t, err) + require.NotNil(t, tbl.Meta().Partition) part := tbl.Meta().Partition - c.Assert(part.Type == model.PartitionTypeList, IsTrue) - c.Assert(part.Expr, Equals, "`id`") - c.Assert(part.Definitions, HasLen, 2) - c.Assert(part.Definitions[0].InValues, DeepEquals, [][]string{{"1"}, {"2"}}) - c.Assert(part.Definitions[0].Name, Equals, model.NewCIStr("p0")) - c.Assert(part.Definitions[1].InValues, DeepEquals, [][]string{{"5"}, {"NULL"}}) - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p3")) + require.True(t, part.Type == model.PartitionTypeList) + require.Equal(t, "`id`", part.Expr) + require.Len(t, part.Definitions, 2) + require.Equal(t, [][]string{{"1"}, {"2"}}, part.Definitions[0].InValues) + require.Equal(t, model.NewCIStr("p0"), part.Definitions[0].Name) + require.Equal(t, [][]string{{"5"}, {"NULL"}}, part.Definitions[1].InValues) + require.Equal(t, model.NewCIStr("p3"), part.Definitions[1].Name) sql := "alter table t drop partition p10;" tk.MustGetErrCode(sql, tmysql.ErrDropPartitionNonExistent) @@ -1217,8 +1243,10 @@ func (s *testIntegrationSuite5) TestAlterTableDropPartitionByList(c *C) { tk.MustGetErrCode(sql, tmysql.ErrDropLastPartition) } -func (s *testIntegrationSuite5) TestAlterTableDropPartitionByListColumns(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableDropPartitionByListColumns(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists t;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") @@ -1230,21 +1258,21 @@ func (s *testIntegrationSuite5) TestAlterTableDropPartitionByListColumns(c *C) { tk.MustExec(`insert into t values (1,'a'),(3,'a'),(5,'a'),(null,null)`) tk.MustExec(`alter table t drop partition p1`) tk.MustQuery("select * from t").Sort().Check(testkit.Rows("1 a", "5 a", " ")) - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().Partition, NotNil) + require.NoError(t, err) + require.NotNil(t, tbl.Meta().Partition) part := tbl.Meta().Partition - c.Assert(part.Type == model.PartitionTypeList, IsTrue) - c.Assert(part.Expr, Equals, "") - c.Assert(part.Columns[0].O, Equals, "id") - c.Assert(part.Columns[1].O, Equals, "name") - c.Assert(part.Definitions, HasLen, 2) - c.Assert(part.Definitions[0].InValues, DeepEquals, [][]string{{"1", `"a"`}, {"2", `"b"`}}) - c.Assert(part.Definitions[0].Name, Equals, model.NewCIStr("p0")) - c.Assert(part.Definitions[1].InValues, DeepEquals, [][]string{{"5", `"a"`}, {"NULL", "NULL"}}) - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p3")) + require.True(t, part.Type == model.PartitionTypeList) + require.Equal(t, "", part.Expr) + require.Equal(t, "id", part.Columns[0].O) + require.Equal(t, "name", part.Columns[1].O) + require.Len(t, part.Definitions, 2) + require.Equal(t, [][]string{{"1", `"a"`}, {"2", `"b"`}}, part.Definitions[0].InValues) + require.Equal(t, model.NewCIStr("p0"), part.Definitions[0].Name) + require.Equal(t, [][]string{{"5", `"a"`}, {"NULL", "NULL"}}, part.Definitions[1].InValues) + require.Equal(t, model.NewCIStr("p3"), part.Definitions[1].Name) sql := "alter table t drop partition p10;" tk.MustGetErrCode(sql, tmysql.ErrDropPartitionNonExistent) @@ -1254,8 +1282,10 @@ func (s *testIntegrationSuite5) TestAlterTableDropPartitionByListColumns(c *C) { tk.MustGetErrCode(sql, tmysql.ErrDropLastPartition) } -func (s *testIntegrationSuite5) TestAlterTableTruncatePartitionByList(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableTruncatePartitionByList(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists t;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") @@ -1265,17 +1295,17 @@ func (s *testIntegrationSuite5) TestAlterTableTruncatePartitionByList(c *C) { partition p3 values in (5,null) );`) tk.MustExec(`insert into t values (1),(3),(5),(null)`) - oldTbl := testGetTableByName(c, tk.Se, "test", "t") + oldTbl := external.GetTableByName(t, tk, "test", "t") tk.MustExec(`alter table t truncate partition p1`) - tk.MustQuery("select * from t").Check(testkit.Rows("1", "5", "")) - tbl := testGetTableByName(c, tk.Se, "test", "t") - c.Assert(tbl.Meta().Partition, NotNil) + tk.MustQuery("select * from t").Sort().Check(testkit.Rows("1", "5", "")) + tbl := external.GetTableByName(t, tk, "test", "t") + require.NotNil(t, tbl.Meta().Partition) part := tbl.Meta().Partition - c.Assert(part.Type == model.PartitionTypeList, IsTrue) - c.Assert(part.Definitions, HasLen, 3) - c.Assert(part.Definitions[1].InValues, DeepEquals, [][]string{{"3"}, {"4"}}) - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p1")) - c.Assert(part.Definitions[1].ID == oldTbl.Meta().Partition.Definitions[1].ID, IsFalse) + require.True(t, part.Type == model.PartitionTypeList) + require.Len(t, part.Definitions, 3) + require.Equal(t, [][]string{{"3"}, {"4"}}, part.Definitions[1].InValues) + require.Equal(t, model.NewCIStr("p1"), part.Definitions[1].Name) + require.False(t, part.Definitions[1].ID == oldTbl.Meta().Partition.Definitions[1].ID) sql := "alter table t truncate partition p10;" tk.MustGetErrCode(sql, tmysql.ErrUnknownPartition) @@ -1285,8 +1315,10 @@ func (s *testIntegrationSuite5) TestAlterTableTruncatePartitionByList(c *C) { tk.MustQuery("select * from t").Check(testkit.Rows()) } -func (s *testIntegrationSuite5) TestAlterTableTruncatePartitionByListColumns(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableTruncatePartitionByListColumns(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists t;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") @@ -1296,17 +1328,17 @@ func (s *testIntegrationSuite5) TestAlterTableTruncatePartitionByListColumns(c * partition p3 values in ((5,'a'),(null,null)) );`) tk.MustExec(`insert into t values (1,'a'),(3,'a'),(5,'a'),(null,null)`) - oldTbl := testGetTableByName(c, tk.Se, "test", "t") + oldTbl := external.GetTableByName(t, tk, "test", "t") tk.MustExec(`alter table t truncate partition p1`) - tk.MustQuery("select * from t").Check(testkit.Rows("1 a", "5 a", " ")) - tbl := testGetTableByName(c, tk.Se, "test", "t") - c.Assert(tbl.Meta().Partition, NotNil) + tk.MustQuery("select * from t").Sort().Check(testkit.Rows("1 a", "5 a", " ")) + tbl := external.GetTableByName(t, tk, "test", "t") + require.NotNil(t, tbl.Meta().Partition) part := tbl.Meta().Partition - c.Assert(part.Type == model.PartitionTypeList, IsTrue) - c.Assert(part.Definitions, HasLen, 3) - c.Assert(part.Definitions[1].InValues, DeepEquals, [][]string{{"3", `"a"`}, {"4", `"b"`}}) - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p1")) - c.Assert(part.Definitions[1].ID == oldTbl.Meta().Partition.Definitions[1].ID, IsFalse) + require.True(t, part.Type == model.PartitionTypeList) + require.Len(t, part.Definitions, 3) + require.Equal(t, [][]string{{"3", `"a"`}, {"4", `"b"`}}, part.Definitions[1].InValues) + require.Equal(t, model.NewCIStr("p1"), part.Definitions[1].Name) + require.False(t, part.Definitions[1].ID == oldTbl.Meta().Partition.Definitions[1].ID) sql := "alter table t truncate partition p10;" tk.MustGetErrCode(sql, tmysql.ErrUnknownPartition) @@ -1316,8 +1348,10 @@ func (s *testIntegrationSuite5) TestAlterTableTruncatePartitionByListColumns(c * tk.MustQuery("select * from t").Check(testkit.Rows()) } -func (s *testIntegrationSuite3) TestCreateTableWithKeyPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreateTableWithKeyPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists tm1;") tk.MustExec(`create table tm1 @@ -1330,8 +1364,10 @@ func (s *testIntegrationSuite3) TestCreateTableWithKeyPartition(c *C) { tk.MustExec(`create table tm2 (a char(5), unique key(a(5))) partition by key() partitions 5;`) } -func (s *testIntegrationSuite5) TestAlterTableAddPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableAddPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists employees;") tk.MustExec(`create table employees ( @@ -1348,26 +1384,26 @@ func (s *testIntegrationSuite5) TestAlterTableAddPartition(c *C) { partition p5 values less than MAXVALUE );`) - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("employees")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().Partition, NotNil) + require.NoError(t, err) + require.NotNil(t, tbl.Meta().Partition) part := tbl.Meta().Partition - c.Assert(part.Type, Equals, model.PartitionTypeRange) - - c.Assert(part.Expr, Equals, "YEAR(`hired`)") - c.Assert(part.Definitions, HasLen, 5) - c.Assert(part.Definitions[0].LessThan[0], Equals, "1991") - c.Assert(part.Definitions[0].Name, Equals, model.NewCIStr("p1")) - c.Assert(part.Definitions[1].LessThan[0], Equals, "1996") - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p2")) - c.Assert(part.Definitions[2].LessThan[0], Equals, "2001") - c.Assert(part.Definitions[2].Name, Equals, model.NewCIStr("p3")) - c.Assert(part.Definitions[3].LessThan[0], Equals, "2010") - c.Assert(part.Definitions[3].Name, Equals, model.NewCIStr("p4")) - c.Assert(part.Definitions[4].LessThan[0], Equals, "MAXVALUE") - c.Assert(part.Definitions[4].Name, Equals, model.NewCIStr("p5")) + require.Equal(t, model.PartitionTypeRange, part.Type) + + require.Equal(t, "YEAR(`hired`)", part.Expr) + require.Len(t, part.Definitions, 5) + require.Equal(t, "1991", part.Definitions[0].LessThan[0]) + require.Equal(t, model.NewCIStr("p1"), part.Definitions[0].Name) + require.Equal(t, "1996", part.Definitions[1].LessThan[0]) + require.Equal(t, model.NewCIStr("p2"), part.Definitions[1].Name) + require.Equal(t, "2001", part.Definitions[2].LessThan[0]) + require.Equal(t, model.NewCIStr("p3"), part.Definitions[2].Name) + require.Equal(t, "2010", part.Definitions[3].LessThan[0]) + require.Equal(t, model.NewCIStr("p4"), part.Definitions[3].Name) + require.Equal(t, "MAXVALUE", part.Definitions[4].LessThan[0]) + require.Equal(t, model.NewCIStr("p5"), part.Definitions[4].Name) tk.MustExec("drop table if exists table1;") tk.MustExec("create table table1(a int)") @@ -1476,8 +1512,10 @@ func (s *testIntegrationSuite5) TestAlterTableAddPartition(c *C) { tk.MustGetErrCode(sql, tmysql.ErrWrongTypeColumnValue) } -func (s *testIntegrationSuite5) TestAlterTableDropPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableDropPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists employees") tk.MustExec(`create table employees ( @@ -1491,19 +1529,19 @@ func (s *testIntegrationSuite5) TestAlterTableDropPartition(c *C) { );`) tk.MustExec("alter table employees drop partition p3;") - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("employees")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().GetPartitionInfo(), NotNil) + require.NoError(t, err) + require.NotNil(t, tbl.Meta().GetPartitionInfo()) part := tbl.Meta().Partition - c.Assert(part.Type, Equals, model.PartitionTypeRange) - c.Assert(part.Expr, Equals, "`hired`") - c.Assert(part.Definitions, HasLen, 2) - c.Assert(part.Definitions[0].LessThan[0], Equals, "1991") - c.Assert(part.Definitions[0].Name, Equals, model.NewCIStr("p1")) - c.Assert(part.Definitions[1].LessThan[0], Equals, "1996") - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p2")) + require.Equal(t, model.PartitionTypeRange, part.Type) + require.Equal(t, "`hired`", part.Expr) + require.Len(t, part.Definitions, 2) + require.Equal(t, "1991", part.Definitions[0].LessThan[0]) + require.Equal(t, model.NewCIStr("p1"), part.Definitions[0].Name) + require.Equal(t, "1996", part.Definitions[1].LessThan[0]) + require.Equal(t, model.NewCIStr("p2"), part.Definitions[1].Name) tk.MustExec("drop table if exists table1;") tk.MustExec("create table table1 (a int);") @@ -1546,16 +1584,16 @@ func (s *testIntegrationSuite5) TestAlterTableDropPartition(c *C) { tk.MustExec("alter table table4 drop partition p2;") is = domain.GetDomain(ctx).InfoSchema() tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("table4")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().GetPartitionInfo(), NotNil) + require.NoError(t, err) + require.NotNil(t, tbl.Meta().GetPartitionInfo()) part = tbl.Meta().Partition - c.Assert(part.Type, Equals, model.PartitionTypeRange) - c.Assert(part.Expr, Equals, "`id`") - c.Assert(part.Definitions, HasLen, 2) - c.Assert(part.Definitions[0].LessThan[0], Equals, "10") - c.Assert(part.Definitions[0].Name, Equals, model.NewCIStr("p1")) - c.Assert(part.Definitions[1].LessThan[0], Equals, "MAXVALUE") - c.Assert(part.Definitions[1].Name, Equals, model.NewCIStr("p3")) + require.Equal(t, model.PartitionTypeRange, part.Type) + require.Equal(t, "`id`", part.Expr) + require.Len(t, part.Definitions, 2) + require.Equal(t, "10", part.Definitions[0].LessThan[0]) + require.Equal(t, model.NewCIStr("p1"), part.Definitions[0].Name) + require.Equal(t, "MAXVALUE", part.Definitions[1].LessThan[0]) + require.Equal(t, model.NewCIStr("p3"), part.Definitions[1].Name) tk.MustExec("drop table if exists tr;") tk.MustExec(` create table tr( @@ -1616,8 +1654,10 @@ func (s *testIntegrationSuite5) TestAlterTableDropPartition(c *C) { tk.MustGetErrCode("alter table t1 drop partition p2", tmysql.ErrOnlyOnRangeListPartition) } -func (s *testIntegrationSuite5) TestMultiPartitionDropAndTruncate(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestMultiPartitionDropAndTruncate(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists employees") tk.MustExec(`create table employees ( @@ -1641,11 +1681,15 @@ func (s *testIntegrationSuite5) TestMultiPartitionDropAndTruncate(c *C) { result.Check(testkit.Rows(`2010`)) } -func (s *testSerialDBSuite1) TestDropPartitionWithGlobalIndex(c *C) { +func TestDropPartitionWithGlobalIndex(t *testing.T) { + restore := config.RestoreFunc() + defer restore() + store, clean := testkit.CreateMockStore(t) + defer clean() config.UpdateGlobal(func(conf *config.Config) { conf.EnableGlobalIndex = true }) - tk := testkit.NewTestKit(c, s.store) + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists test_global") tk.MustExec(`create table test_global ( a int, b int, c int) @@ -1653,8 +1697,8 @@ func (s *testSerialDBSuite1) TestDropPartitionWithGlobalIndex(c *C) { partition p1 values less than (10), partition p2 values less than (20) );`) - t := testGetTableByName(c, s.ctx, "test", "test_global") - pid := t.Meta().Partition.Definitions[1].ID + tt := external.GetTableByName(t, tk, "test", "test_global") + pid := tt.Meta().Partition.Definitions[1].ID tk.MustExec("Alter Table test_global Add Unique Index idx_b (b);") tk.MustExec("Alter Table test_global Add Unique Index idx_c (c);") @@ -1664,23 +1708,25 @@ func (s *testSerialDBSuite1) TestDropPartitionWithGlobalIndex(c *C) { result := tk.MustQuery("select * from test_global;") result.Sort().Check(testkit.Rows(`1 1 1`, `2 2 2`)) - t = testGetTableByName(c, s.ctx, "test", "test_global") - idxInfo := t.Meta().FindIndexByName("idx_b") - c.Assert(idxInfo, NotNil) - cnt := checkGlobalIndexCleanUpDone(c, s.ctx, t.Meta(), idxInfo, pid) - c.Assert(cnt, Equals, 2) + tt = external.GetTableByName(t, tk, "test", "test_global") + idxInfo := tt.Meta().FindIndexByName("idx_b") + require.NotNil(t, idxInfo) + cnt := checkGlobalIndexCleanUpDone(t, tk.Session(), tt.Meta(), idxInfo, pid) + require.Equal(t, 2, cnt) - idxInfo = t.Meta().FindIndexByName("idx_c") - c.Assert(idxInfo, NotNil) - cnt = checkGlobalIndexCleanUpDone(c, s.ctx, t.Meta(), idxInfo, pid) - c.Assert(cnt, Equals, 2) + idxInfo = tt.Meta().FindIndexByName("idx_c") + require.NotNil(t, idxInfo) + cnt = checkGlobalIndexCleanUpDone(t, tk.Session(), tt.Meta(), idxInfo, pid) + require.Equal(t, 2, cnt) config.UpdateGlobal(func(conf *config.Config) { conf.EnableGlobalIndex = false }) } -func (s *testSerialDBSuite1) TestAlterTableExchangePartition(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAlterTableExchangePartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists e") tk.MustExec("drop table if exists e2") @@ -1834,10 +1880,10 @@ func (s *testSerialDBSuite1) TestAlterTableExchangePartition(c *C) { tk.MustGetErrCode("alter table e12 exchange partition p0 with table e14", tmysql.ErrPartitionExchangeDifferentOption) // test for tiflash replica - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`), IsNil) + require.Nil(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`)) defer func() { err := failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") - c.Assert(err, IsNil) + require.NoError(t, err) }() tk.MustExec("create table e15 (a int) partition by hash(a) partitions 1;") @@ -1845,15 +1891,15 @@ func (s *testSerialDBSuite1) TestAlterTableExchangePartition(c *C) { tk.MustExec("alter table e15 set tiflash replica 1;") tk.MustExec("alter table e16 set tiflash replica 2;") - e15 := testGetTableByName(c, s.ctx, "test", "e15") + e15 := external.GetTableByName(t, tk, "test", "e15") partition := e15.Meta().Partition - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, true) - c.Assert(err, IsNil) + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, true) + require.NoError(t, err) - e16 := testGetTableByName(c, s.ctx, "test", "e16") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, e16.Meta().ID, true) - c.Assert(err, IsNil) + e16 := external.GetTableByName(t, tk, "test", "e16") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), e16.Meta().ID, true) + require.NoError(t, err) tk.MustGetErrCode("alter table e15 exchange partition p0 with table e16", tmysql.ErrTablesDifferentMetadata) tk.MustExec("drop table e15, e16") @@ -1863,29 +1909,29 @@ func (s *testSerialDBSuite1) TestAlterTableExchangePartition(c *C) { tk.MustExec("alter table e15 set tiflash replica 1;") tk.MustExec("alter table e16 set tiflash replica 1;") - e15 = testGetTableByName(c, s.ctx, "test", "e15") + e15 = external.GetTableByName(t, tk, "test", "e15") partition = e15.Meta().Partition - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, true) - c.Assert(err, IsNil) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, true) + require.NoError(t, err) - e16 = testGetTableByName(c, s.ctx, "test", "e16") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, e16.Meta().ID, true) - c.Assert(err, IsNil) + e16 = external.GetTableByName(t, tk, "test", "e16") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), e16.Meta().ID, true) + require.NoError(t, err) tk.MustExec("alter table e15 exchange partition p0 with table e16") - e15 = testGetTableByName(c, s.ctx, "test", "e15") + e15 = external.GetTableByName(t, tk, "test", "e15") partition = e15.Meta().Partition - c.Assert(e15.Meta().TiFlashReplica, NotNil) - c.Assert(e15.Meta().TiFlashReplica.Available, IsTrue) - c.Assert(e15.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[0].ID}) + require.NotNil(t, e15.Meta().TiFlashReplica) + require.True(t, e15.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[0].ID}, e15.Meta().TiFlashReplica.AvailablePartitionIDs) - e16 = testGetTableByName(c, s.ctx, "test", "e16") - c.Assert(e16.Meta().TiFlashReplica, NotNil) - c.Assert(e16.Meta().TiFlashReplica.Available, IsTrue) + e16 = external.GetTableByName(t, tk, "test", "e16") + require.NotNil(t, e16.Meta().TiFlashReplica) + require.True(t, e16.Meta().TiFlashReplica.Available) tk.MustExec("drop table e15, e16") tk.MustExec("create table e15 (a int) partition by hash(a) partitions 1;") @@ -1898,20 +1944,22 @@ func (s *testSerialDBSuite1) TestAlterTableExchangePartition(c *C) { tk.MustExec("alter table e16 set tiflash replica 1 location labels 'a', 'b';") - e15 = testGetTableByName(c, s.ctx, "test", "e15") + e15 = external.GetTableByName(t, tk, "test", "e15") partition = e15.Meta().Partition - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, true) - c.Assert(err, IsNil) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, true) + require.NoError(t, err) - e16 = testGetTableByName(c, s.ctx, "test", "e16") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, e16.Meta().ID, true) - c.Assert(err, IsNil) + e16 = external.GetTableByName(t, tk, "test", "e16") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), e16.Meta().ID, true) + require.NoError(t, err) tk.MustExec("alter table e15 exchange partition p0 with table e16") } -func (s *testIntegrationSuite4) TestExchangePartitionTableCompatiable(c *C) { +func TestExchangePartitionTableCompatiable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() type testCase struct { ptSQL string ntSQL string @@ -1929,37 +1977,37 @@ func (s *testIntegrationSuite4) TestExchangePartitionTableCompatiable(c *C) { "create table pt1 (id int not null, fname varchar(3)) partition by hash (id) partitions 4;", "create table nt1 (id int not null, fname varchar(4));", "alter table pt1 exchange partition p0 with table nt1;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt2 (id int not null, salary decimal) partition by hash(id) partitions 4;", "create table nt2 (id int not null, salary decimal(3,2));", "alter table pt2 exchange partition p0 with table nt2;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt3 (id int not null, salary decimal) partition by hash(id) partitions 1;", "create table nt3 (id int not null, salary decimal(10, 1));", "alter table pt3 exchange partition p0 with table nt3", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt4 (id int not null) partition by hash(id) partitions 1;", "create table nt4 (id1 int not null);", "alter table pt4 exchange partition p0 with table nt4;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt5 (id int not null, primary key (id)) partition by hash(id) partitions 1;", "create table nt5 (id int not null);", "alter table pt5 exchange partition p0 with table nt5;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt6 (id int not null, salary decimal, index idx (id, salary)) partition by hash(id) partitions 1;", "create table nt6 (id int not null, salary decimal, index idx (salary, id));", "alter table pt6 exchange partition p0 with table nt6;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt7 (id int not null, index idx (id) invisible) partition by hash(id) partitions 1;", @@ -1971,7 +2019,7 @@ func (s *testIntegrationSuite4) TestExchangePartitionTableCompatiable(c *C) { "create table pt8 (id int not null, index idx (id)) partition by hash(id) partitions 1;", "create table nt8 (id int not null, index id_idx (id));", "alter table pt8 exchange partition p0 with table nt8;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { // foreign key test @@ -1979,33 +2027,33 @@ func (s *testIntegrationSuite4) TestExchangePartitionTableCompatiable(c *C) { "create table pt9 (id int not null primary key auto_increment,t_id int not null) partition by hash(id) partitions 1;", "create table nt9 (id int not null primary key auto_increment, t_id int not null,foreign key fk_id (t_id) references pt5(id));", "alter table pt9 exchange partition p0 with table nt9;", - ddl.ErrPartitionExchangeForeignKey, + dbterror.ErrPartitionExchangeForeignKey, }, { // Generated column (virtual) "create table pt10 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(lname,' ')) virtual) partition by hash(id) partitions 1;", "create table nt10 (id int not null, lname varchar(30), fname varchar(100));", "alter table pt10 exchange partition p0 with table nt10;", - ddl.ErrUnsupportedOnGeneratedColumn, + dbterror.ErrUnsupportedOnGeneratedColumn, }, { "create table pt11 (id int not null, lname varchar(30), fname varchar(100)) partition by hash(id) partitions 1;", "create table nt11 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(lname, ' ')) virtual);", "alter table pt11 exchange partition p0 with table nt11;", - ddl.ErrUnsupportedOnGeneratedColumn, + dbterror.ErrUnsupportedOnGeneratedColumn, }, { "create table pt12 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(lname,' ')) stored) partition by hash(id) partitions 1;", "create table nt12 (id int not null, lname varchar(30), fname varchar(100));", "alter table pt12 exchange partition p0 with table nt12;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt13 (id int not null, lname varchar(30), fname varchar(100)) partition by hash(id) partitions 1;", "create table nt13 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(lname, ' ')) stored);", "alter table pt13 exchange partition p0 with table nt13;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt14 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(lname, ' ')) virtual) partition by hash(id) partitions 1;", @@ -2018,14 +2066,14 @@ func (s *testIntegrationSuite4) TestExchangePartitionTableCompatiable(c *C) { "create table pt15 (id int not null, unique index uk_id (id)) partition by hash(id) partitions 1;", "create table nt15 (id int not null, index uk_id (id));", "alter table pt15 exchange partition p0 with table nt15", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { // auto_increment "create table pt16 (id int not null primary key auto_increment) partition by hash(id) partitions 1;", "create table nt16 (id int not null primary key);", "alter table pt16 exchange partition p0 with table nt16;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { // default @@ -2039,39 +2087,39 @@ func (s *testIntegrationSuite4) TestExchangePartitionTableCompatiable(c *C) { "create table pt18 (id int not null) partition by hash(id) partitions 1;", "create view nt18 as select id from nt17;", "alter table pt18 exchange partition p0 with table nt18", - ddl.ErrCheckNoSuchTable, + dbterror.ErrCheckNoSuchTable, }, { "create table pt19 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(lname, ' ')) stored) partition by hash(id) partitions 1;", "create table nt19 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(lname, ' ')) virtual);", "alter table pt19 exchange partition p0 with table nt19;", - ddl.ErrUnsupportedOnGeneratedColumn, + dbterror.ErrUnsupportedOnGeneratedColumn, }, { "create table pt20 (id int not null) partition by hash(id) partitions 1;", "create table nt20 (id int default null);", "alter table pt20 exchange partition p0 with table nt20;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { // unsigned "create table pt21 (id int unsigned) partition by hash(id) partitions 1;", "create table nt21 (id int);", "alter table pt21 exchange partition p0 with table nt21;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { // zerofill "create table pt22 (id int) partition by hash(id) partitions 1;", "create table nt22 (id int zerofill);", "alter table pt22 exchange partition p0 with table nt22;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt23 (id int, lname varchar(10) charset binary) partition by hash(id) partitions 1;", "create table nt23 (id int, lname varchar(10));", "alter table pt23 exchange partition p0 with table nt23;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt25 (id int, a datetime on update current_timestamp) partition by hash(id) partitions 1;", @@ -2083,39 +2131,51 @@ func (s *testIntegrationSuite4) TestExchangePartitionTableCompatiable(c *C) { "create table pt26 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(lname, ' ')) virtual) partition by hash(id) partitions 1;", "create table nt26 (id int not null, lname varchar(30), fname varchar(100) generated always as (concat(id, ' ')) virtual);", "alter table pt26 exchange partition p0 with table nt26;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, { "create table pt27 (a int key, b int, index(a)) partition by hash(a) partitions 1;", "create table nt27 (a int not null, b int, index(a));", "alter table pt27 exchange partition p0 with table nt27;", - ddl.ErrTablesDifferentMetadata, + dbterror.ErrTablesDifferentMetadata, }, } - tk := testkit.NewTestKit(c, s.store) + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - err := tk.Se.GetSessionVars().SetSystemVar("tidb_enable_exchange_partition", "1") - c.Assert(err, IsNil) - for i, t := range cases { - tk.MustExec(t.ptSQL) - tk.MustExec(t.ntSQL) - if t.err != nil { - _, err := tk.Exec(t.exchangeSQL) - c.Assert(terror.ErrorEqual(err, t.err), IsTrue, Commentf( + err := tk.Session().GetSessionVars().SetSystemVar("tidb_enable_exchange_partition", "1") + require.NoError(t, err) + for i, tt := range cases { + tk.MustExec(tt.ptSQL) + tk.MustExec(tt.ntSQL) + if tt.err != nil { + _, err := tk.Exec(tt.exchangeSQL) + require.Truef(t, terror.ErrorEqual(err, tt.err), "case %d fail, sql = `%s`\nexpected error = `%v`\n actual error = `%v`", - i, t.exchangeSQL, t.err, err, - )) + i, tt.exchangeSQL, tt.err, err, + ) } else { - tk.MustExec(t.exchangeSQL) + tk.MustExec(tt.exchangeSQL) } } - err = tk.Se.GetSessionVars().SetSystemVar("tidb_enable_exchange_partition", "0") - c.Assert(err, IsNil) + err = tk.Session().GetSessionVars().SetSystemVar("tidb_enable_exchange_partition", "0") + require.NoError(t, err) } -func (s *testSerialDBSuite1) TestExchangePartitionExpressIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestExchangePartitionExpressIndex(t *testing.T) { + restore := config.RestoreFunc() + defer restore() + config.UpdateGlobal(func(conf *config.Config) { + // Test for table lock. + conf.EnableTableLock = true + conf.Log.SlowThreshold = 10000 + conf.TiKVClient.AsyncCommit.SafeWindow = 0 + conf.TiKVClient.AsyncCommit.AllowedClockDrift = 0 + conf.Experimental.AllowsExpressionIndex = true + }) + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set @@tidb_enable_exchange_partition=1") defer tk.MustExec("set @@tidb_enable_exchange_partition=0") @@ -2147,8 +2207,10 @@ func (s *testSerialDBSuite1) TestExchangePartitionExpressIndex(c *C) { } -func (s *testIntegrationSuite4) TestAddPartitionTooManyPartitions(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAddPartitionTooManyPartitions(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") count := ddl.PartitionCountLimit tk.MustExec("drop table if exists p1;") @@ -2179,13 +2241,13 @@ func (s *testIntegrationSuite4) TestAddPartitionTooManyPartitions(c *C) { tk.MustGetErrCode(sql3, tmysql.ErrTooManyPartitions) } -func waitGCDeleteRangeDone(c *C, tk *testkit.TestKit, physicalID int64) bool { +func waitGCDeleteRangeDone(t *testing.T, tk *testkit.TestKit, physicalID int64) bool { var i int for i = 0; i < waitForCleanDataRound; i++ { rs, err := tk.Exec("select count(1) from mysql.gc_delete_range_done where element_id = ?", physicalID) - c.Assert(err, IsNil) - rows, err := session.ResultSetToStringSlice(context.Background(), tk.Se, rs) - c.Assert(err, IsNil) + require.NoError(t, err) + rows, err := session.ResultSetToStringSlice(context.Background(), tk.Session(), rs) + require.NoError(t, err) val := rows[0][0] if val != "0" { return true @@ -2196,11 +2258,11 @@ func waitGCDeleteRangeDone(c *C, tk *testkit.TestKit, physicalID int64) bool { return false } -func checkPartitionDelRangeDone(c *C, tk *testkit.TestKit, s *testIntegrationSuite, oldPID int64) { +func checkPartitionDelRangeDone(t *testing.T, tk *testkit.TestKit, store kv.Storage, oldPID int64) { startTime := time.Now() partitionPrefix := tablecodec.EncodeTablePrefix(oldPID) - done := waitGCDeleteRangeDone(c, tk, oldPID) + done := waitGCDeleteRangeDone(t, tk, oldPID) if !done { // Takes too long, give up the check. logutil.BgLogger().Info("truncate partition table", @@ -2211,7 +2273,7 @@ func checkPartitionDelRangeDone(c *C, tk *testkit.TestKit, s *testIntegrationSui } hasOldPartitionData := true - err := kv.RunInNewTxn(context.Background(), s.store, false, func(ctx context.Context, txn kv.Transaction) error { + err := kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { it, err := txn.Iter(partitionPrefix, nil) if err != nil { return err @@ -2224,12 +2286,14 @@ func checkPartitionDelRangeDone(c *C, tk *testkit.TestKit, s *testIntegrationSui it.Close() return nil }) - c.Assert(err, IsNil) - c.Assert(hasOldPartitionData, IsFalse) + require.NoError(t, err) + require.False(t, hasOldPartitionData) } -func (s *testIntegrationSuite5) TestTruncatePartitionAndDropTable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestTruncatePartitionAndDropTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") // Test truncate common table. tk.MustExec("drop table if exists t1;") @@ -2281,14 +2345,14 @@ func (s *testIntegrationSuite5) TestTruncatePartitionAndDropTable(c *C) { (10, 'lava lamp', '1998-12-25');`) result = tk.MustQuery("select count(*) from t3;") result.Check(testkit.Rows("10")) - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() oldTblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t3")) - c.Assert(err, IsNil) + require.NoError(t, err) // Only one partition id test is taken here. tk.MustExec("truncate table t3;") oldPID := oldTblInfo.Meta().Partition.Definitions[0].ID - checkPartitionDelRangeDone(c, tk, s.testIntegrationSuite, oldPID) + checkPartitionDelRangeDone(t, tk, store, oldPID) // Test drop table partition. tk.MustExec("drop table if exists t4;") @@ -2319,11 +2383,11 @@ func (s *testIntegrationSuite5) TestTruncatePartitionAndDropTable(c *C) { result.Check(testkit.Rows("10")) is = domain.GetDomain(ctx).InfoSchema() oldTblInfo, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t4")) - c.Assert(err, IsNil) + require.NoError(t, err) // Only one partition id test is taken here. oldPID = oldTblInfo.Meta().Partition.Definitions[1].ID tk.MustExec("drop table t4;") - checkPartitionDelRangeDone(c, tk, s.testIntegrationSuite, oldPID) + checkPartitionDelRangeDone(t, tk, store, oldPID) tk.MustGetErrCode("select * from t4;", tmysql.ErrNoSuchTable) // Test truncate table partition reassigns new partitionIDs. @@ -2343,15 +2407,15 @@ func (s *testIntegrationSuite5) TestTruncatePartitionAndDropTable(c *C) { );`) is = domain.GetDomain(ctx).InfoSchema() oldTblInfo, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t5")) - c.Assert(err, IsNil) + require.NoError(t, err) oldPID = oldTblInfo.Meta().Partition.Definitions[0].ID tk.MustExec("truncate table t5;") is = domain.GetDomain(ctx).InfoSchema() newTblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t5")) - c.Assert(err, IsNil) + require.NoError(t, err) newPID := newTblInfo.Meta().Partition.Definitions[0].ID - c.Assert(oldPID != newPID, IsTrue) + require.True(t, oldPID != newPID) tk.MustExec("set @@session.tidb_enable_table_partition = 1;") tk.MustExec("drop table if exists clients;") @@ -2365,22 +2429,24 @@ func (s *testIntegrationSuite5) TestTruncatePartitionAndDropTable(c *C) { partitions 12;`) is = domain.GetDomain(ctx).InfoSchema() oldTblInfo, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("clients")) - c.Assert(err, IsNil) + require.NoError(t, err) oldDefs := oldTblInfo.Meta().Partition.Definitions // Test truncate `hash partitioned table` reassigns new partitionIDs. tk.MustExec("truncate table clients;") is = domain.GetDomain(ctx).InfoSchema() newTblInfo, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("clients")) - c.Assert(err, IsNil) + require.NoError(t, err) newDefs := newTblInfo.Meta().Partition.Definitions for i := 0; i < len(oldDefs); i++ { - c.Assert(oldDefs[i].ID != newDefs[i].ID, IsTrue) + require.True(t, oldDefs[i].ID != newDefs[i].ID) } } -func (s *testIntegrationSuite5) TestPartitionUniqueKeyNeedAllFieldsInPf(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestPartitionUniqueKeyNeedAllFieldsInPf(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists part1;") tk.MustExec(`create table part1 ( @@ -2631,24 +2697,28 @@ func (s *testIntegrationSuite5) TestPartitionUniqueKeyNeedAllFieldsInPf(c *C) { tk.MustExec(sql13) } -func (s *testIntegrationSuite2) TestPartitionDropPrimaryKey(c *C) { +func TestPartitionDropPrimaryKey(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() idxName := "primary" addIdxSQL := "alter table partition_drop_idx add primary key idx1 (c1);" dropIdxSQL := "alter table partition_drop_idx drop primary key;" - testPartitionDropIndex(c, s.store, s.lease, idxName, addIdxSQL, dropIdxSQL) + testPartitionDropIndex(t, store, 50*time.Millisecond, idxName, addIdxSQL, dropIdxSQL) } -func (s *testIntegrationSuite3) TestPartitionDropIndex(c *C) { +func TestPartitionDropIndex(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() idxName := "idx1" addIdxSQL := "alter table partition_drop_idx add index idx1 (c1);" dropIdxSQL := "alter table partition_drop_idx drop index idx1;" - testPartitionDropIndex(c, s.store, s.lease, idxName, addIdxSQL, dropIdxSQL) + testPartitionDropIndex(t, store, 50*time.Millisecond, idxName, addIdxSQL, dropIdxSQL) } -func testPartitionDropIndex(c *C, store kv.Storage, lease time.Duration, idxName, addIdxSQL, dropIdxSQL string) { - tk := testkit.NewTestKit(c, store) +func testPartitionDropIndex(t *testing.T, store kv.Storage, lease time.Duration, idxName, addIdxSQL, dropIdxSQL string) { + tk := testkit.NewTestKit(t, store) done := make(chan error, 1) - tk.MustExec("use test_db") + tk.MustExec("use test") tk.MustExec("drop table if exists partition_drop_idx;") tk.MustExec(`create table partition_drop_idx ( c1 int, c2 int, c3 int @@ -2669,12 +2739,11 @@ func testPartitionDropIndex(c *C, store kv.Storage, lease time.Duration, idxName } tk.MustExec(addIdxSQL) - ctx := tk.Se.(sessionctx.Context) - indexID := testGetIndexID(c, ctx, "test_db", "partition_drop_idx", idxName) + indexID := external.GetIndexID(t, tk, "test", "partition_drop_idx", idxName) - jobIDExt, reset := setupJobIDExtCallback(ctx) + jobIDExt, reset := setupJobIDExtCallback(tk.Session()) defer reset() - testutil.SessionExecInGoroutine(store, dropIdxSQL, done) + testutil.ExecMultiSQLInGoroutine(store, "test", []string{dropIdxSQL}, done) ticker := time.NewTicker(lease / 2) defer ticker.Stop() LOOP: @@ -2684,7 +2753,7 @@ LOOP: if err == nil { break LOOP } - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) + require.NoError(t, err) case <-ticker.C: step := 10 rand.Seed(time.Now().Unix()) @@ -2700,22 +2769,37 @@ LOOP: tk.MustExec("drop table partition_drop_idx;") } -func (s *testIntegrationSuite2) TestPartitionCancelAddPrimaryKey(c *C) { +func TestPartitionCancelAddPrimaryKey(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() idxName := "primary" addIdxSQL := "alter table t1 add primary key c3_index (c1);" - testPartitionCancelAddIndex(c, s.store, s.dom.DDL(), s.lease, idxName, addIdxSQL) + testPartitionCancelAddIndex(t, store, dom.DDL(), 50*time.Millisecond, idxName, addIdxSQL) } -func (s *testIntegrationSuite4) TestPartitionCancelAddIndex(c *C) { +func TestPartitionCancelAddIndex(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() idxName := "c3_index" addIdxSQL := "create unique index c3_index on t1 (c1)" - testPartitionCancelAddIndex(c, s.store, s.dom.DDL(), s.lease, idxName, addIdxSQL) + testPartitionCancelAddIndex(t, store, dom.DDL(), 50*time.Millisecond, idxName, addIdxSQL) } -func testPartitionCancelAddIndex(c *C, store kv.Storage, d ddl.DDL, lease time.Duration, idxName, addIdxSQL string) { - tk := testkit.NewTestKit(c, store) +func batchInsertT(tk *testkit.TestKit, tbl string, start, end int) { + dml := fmt.Sprintf("insert into %s values", tbl) + for i := start; i < end; i++ { + dml += fmt.Sprintf("(%d, %d, %d)", i, i, i) + if i != end-1 { + dml += "," + } + } + tk.MustExec(dml) +} + +func testPartitionCancelAddIndex(t *testing.T, store kv.Storage, d ddl.DDL, lease time.Duration, idxName, addIdxSQL string) { + tk := testkit.NewTestKit(t, store) - tk.MustExec("use test_db") + tk.MustExec("use test") tk.MustExec("drop table if exists t1;") tk.MustExec(`create table t1 ( c1 int, c2 int, c3 int @@ -2730,7 +2814,7 @@ func testPartitionCancelAddIndex(c *C, store kv.Storage, d ddl.DDL, lease time.D count := defaultBatchSize * 32 // add some rows for i := 0; i < count; i += defaultBatchSize { - batchInsert(tk, "t1", i, i+defaultBatchSize) + batchInsertT(tk, "t1", i, i+defaultBatchSize) } var checkErr error @@ -2739,13 +2823,12 @@ func testPartitionCancelAddIndex(c *C, store kv.Storage, d ddl.DDL, lease time.D originBatchSize := tk.MustQuery("select @@global.tidb_ddl_reorg_batch_size") // Set batch size to lower try to slow down add-index reorganization, This if for hook to cancel this ddl job. tk.MustExec("set @@global.tidb_ddl_reorg_batch_size = 32") - ctx := tk.Se.(sessionctx.Context) defer tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_reorg_batch_size = %v", originBatchSize.Rows()[0][0])) - hook.OnJobUpdatedExported, c3IdxInfo, checkErr = backgroundExecOnJobUpdatedExported(c, store, ctx, hook, idxName) + hook.OnJobUpdatedExported, c3IdxInfo, checkErr = backgroundExecOnJobUpdatedExportedT(t, tk, store, hook, idxName) originHook := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originHook) + defer d.SetHook(originHook) jobIDExt := wrapJobIDExtCallback(hook) - d.(ddl.DDLForTest).SetHook(jobIDExt) + d.SetHook(jobIDExt) done := make(chan error, 1) go backgroundExec(store, addIdxSQL, done) @@ -2756,9 +2839,8 @@ LOOP: for { select { case err := <-done: - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") + require.Nil(t, checkErr) + require.EqualError(t, err, "[ddl:8214]Cancelled DDL job") break LOOP case <-ticker.C: if times >= 10 { @@ -2780,7 +2862,7 @@ LOOP: tk.MustExec("drop table t1") } -func backgroundExecOnJobUpdatedExported(c *C, store kv.Storage, ctx sessionctx.Context, hook *ddl.TestDDLCallback, idxName string) ( +func backgroundExecOnJobUpdatedExportedT(t *testing.T, tk *testkit.TestKit, store kv.Storage, hook *ddl.TestDDLCallback, idxName string) ( func(*model.Job), *model.IndexInfo, error) { var checkErr error first := true @@ -2795,8 +2877,8 @@ func backgroundExecOnJobUpdatedExported(c *C, store kv.Storage, ctx sessionctx.C if c3IdxInfo.ID != 0 { return } - t := testGetTableByName(c, ctx, "test_db", "t1") - for _, index := range t.Indices() { + tt := external.GetTableByName(t, tk, "test", "t1") + for _, index := range tt.Indices() { if !tables.IsIndexWritable(index) { continue } @@ -2850,17 +2932,21 @@ func backgroundExecOnJobUpdatedExported(c *C, store kv.Storage, ctx sessionctx.C return hook.OnJobUpdatedExported, c3IdxInfo, checkErr } -func (s *testIntegrationSuite5) TestPartitionAddPrimaryKey(c *C) { - tk := testkit.NewTestKit(c, s.store) - testPartitionAddIndexOrPK(c, tk, "primary key") +func TestPartitionAddPrimaryKey(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + testPartitionAddIndexOrPK(t, tk, "primary key") } -func (s *testIntegrationSuite1) TestPartitionAddIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - testPartitionAddIndexOrPK(c, tk, "index") +func TestPartitionAddIndex(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + testPartitionAddIndexOrPK(t, tk, "index") } -func testPartitionAddIndexOrPK(c *C, tk *testkit.TestKit, key string) { +func testPartitionAddIndexOrPK(t *testing.T, tk *testkit.TestKit, key string) { tk.MustExec("use test") tk.MustExec(`create table partition_add_idx ( id int not null, @@ -2874,7 +2960,7 @@ func testPartitionAddIndexOrPK(c *C, tk *testkit.TestKit, key string) { partition p6 values less than (2012), partition p7 values less than (2018) );`) - testPartitionAddIndex(tk, c, key) + testPartitionAddIndex(tk, t, key) // test hash partition table. tk.MustExec("set @@session.tidb_enable_table_partition = '1';") @@ -2883,7 +2969,7 @@ func testPartitionAddIndexOrPK(c *C, tk *testkit.TestKit, key string) { id int not null, hired date not null ) partition by hash( year(hired) ) partitions 4;`) - testPartitionAddIndex(tk, c, key) + testPartitionAddIndex(tk, t, key) // Test hash partition for pr 10475. tk.MustExec("drop table if exists t1") @@ -2902,7 +2988,7 @@ func testPartitionAddIndexOrPK(c *C, tk *testkit.TestKit, key string) { tk.MustExec("admin check table t1;") } -func testPartitionAddIndex(tk *testkit.TestKit, c *C, key string) { +func testPartitionAddIndex(tk *testkit.TestKit, t *testing.T, key string) { idxName1 := "idx1" f := func(end int, isPK bool) string { @@ -2931,18 +3017,18 @@ func testPartitionAddIndex(tk *testkit.TestKit, c *C, key string) { tk.MustExec(fmt.Sprintf("alter table partition_add_idx add %s idx1 (hired)", key)) tk.MustExec("alter table partition_add_idx add index idx2 (id, hired)") - ctx := tk.Se.(sessionctx.Context) + ctx := tk.Session() is := domain.GetDomain(ctx).InfoSchema() - t, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("partition_add_idx")) - c.Assert(err, IsNil) + tt, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("partition_add_idx")) + require.NoError(t, err) var idx1 table.Index - for _, idx := range t.Indices() { + for _, idx := range tt.Indices() { if idx.Meta().Name.L == idxName1 { idx1 = idx break } } - c.Assert(idx1, NotNil) + require.NotNil(t, idx1) tk.MustQuery(fmt.Sprintf("select count(hired) from partition_add_idx use index(%s)", idxName1)).Check(testkit.Rows("500")) tk.MustQuery("select count(id) from partition_add_idx use index(idx2)").Check(testkit.Rows("500")) @@ -2951,8 +3037,10 @@ func testPartitionAddIndex(tk *testkit.TestKit, c *C, key string) { tk.MustExec("drop table partition_add_idx") } -func (s *testIntegrationSuite5) TestDropSchemaWithPartitionTable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestDropSchemaWithPartitionTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("drop database if exists test_db_with_partition") tk.MustExec("create database test_db_with_partition") tk.MustExec("use test_db_with_partition") @@ -2962,39 +3050,39 @@ func (s *testIntegrationSuite5) TestDropSchemaWithPartitionTable(c *C) { partition p1 values less than (20) );`) tk.MustExec("insert into t_part values (1),(2),(11),(12);") - ctx := s.ctx - tbl := testGetTableByName(c, ctx, "test_db_with_partition", "t_part") + ctx := tk.Session() + tbl := external.GetTableByName(t, tk, "test_db_with_partition", "t_part") // check records num before drop database. - recordsNum := getPartitionTableRecordsNum(c, ctx, tbl.(table.PartitionedTable)) - c.Assert(recordsNum, Equals, 4) + recordsNum := getPartitionTableRecordsNum(t, ctx, tbl.(table.PartitionedTable)) + require.Equal(t, 4, recordsNum) tk.MustExec("drop database if exists test_db_with_partition") // check job args. rs, err := tk.Exec("admin show ddl jobs") - c.Assert(err, IsNil) - rows, err := session.GetRows4Test(context.Background(), tk.Se, rs) - c.Assert(err, IsNil) + require.NoError(t, err) + rows, err := session.GetRows4Test(context.Background(), tk.Session(), rs) + require.NoError(t, err) row := rows[0] - c.Assert(row.GetString(3), Equals, "drop schema") + require.Equal(t, "drop schema", row.GetString(3)) jobID := row.GetInt64(0) var tableIDs []int64 - err = kv.RunInNewTxn(context.Background(), s.store, false, func(ctx context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) - historyJob, err := t.GetHistoryDDLJob(jobID) - c.Assert(err, IsNil) + err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + tt := meta.NewMeta(txn) + historyJob, err := tt.GetHistoryDDLJob(jobID) + require.NoError(t, err) err = historyJob.DecodeArgs(&tableIDs) - c.Assert(err, IsNil) + require.NoError(t, err) // There is 2 partitions. - c.Assert(len(tableIDs), Equals, 3) + require.Equal(t, 3, len(tableIDs)) return nil }) - c.Assert(err, IsNil) + require.NoError(t, err) startTime := time.Now() - done := waitGCDeleteRangeDone(c, tk, tableIDs[2]) + done := waitGCDeleteRangeDone(t, tk, tableIDs[2]) if !done { // Takes too long, give up the check. logutil.BgLogger().Info("drop schema", @@ -3006,35 +3094,37 @@ func (s *testIntegrationSuite5) TestDropSchemaWithPartitionTable(c *C) { // check records num after drop database. for i := 0; i < waitForCleanDataRound; i++ { - recordsNum = getPartitionTableRecordsNum(c, ctx, tbl.(table.PartitionedTable)) + recordsNum = getPartitionTableRecordsNum(t, ctx, tbl.(table.PartitionedTable)) if recordsNum != 0 { time.Sleep(waitForCleanDataInterval) } else { break } } - c.Assert(recordsNum, Equals, 0) + require.Equal(t, 0, recordsNum) } -func getPartitionTableRecordsNum(c *C, ctx sessionctx.Context, tbl table.PartitionedTable) int { +func getPartitionTableRecordsNum(t *testing.T, ctx sessionctx.Context, tbl table.PartitionedTable) int { num := 0 info := tbl.Meta().GetPartitionInfo() for _, def := range info.Definitions { pid := def.ID partition := tbl.GetPartition(pid) - c.Assert(ctx.NewTxn(context.Background()), IsNil) + require.Nil(t, ctx.NewTxn(context.Background())) err := tables.IterRecords(partition, ctx, partition.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { num++ return true, nil }) - c.Assert(err, IsNil) + require.NoError(t, err) } return num } -func (s *testIntegrationSuite3) TestPartitionErrorCode(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestPartitionErrorCode(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) // add partition tk.MustExec("set @@session.tidb_enable_table_partition = 1") tk.MustExec("drop database if exists test_db_with_partition") @@ -3052,10 +3142,10 @@ func (s *testIntegrationSuite3) TestPartitionErrorCode(c *C) { partition by hash(store_id) partitions 4;`) _, err := tk.Exec("alter table employees add partition partitions 8;") - c.Assert(ddl.ErrUnsupportedAddPartition.Equal(err), IsTrue) + require.True(t, dbterror.ErrUnsupportedAddPartition.Equal(err)) _, err = tk.Exec("alter table employees add partition (partition p5 values less than (42));") - c.Assert(ddl.ErrUnsupportedAddPartition.Equal(err), IsTrue) + require.True(t, dbterror.ErrUnsupportedAddPartition.Equal(err)) // coalesce partition tk.MustExec(`create table clients ( @@ -3067,7 +3157,7 @@ func (s *testIntegrationSuite3) TestPartitionErrorCode(c *C) { partition by hash( month(signed) ) partitions 12;`) _, err = tk.Exec("alter table clients coalesce partition 4;") - c.Assert(ddl.ErrUnsupportedCoalescePartition.Equal(err), IsTrue) + require.True(t, dbterror.ErrUnsupportedCoalescePartition.Equal(err)) tk.MustExec(`create table t_part (a int key) partition by range(a) ( @@ -3075,7 +3165,7 @@ func (s *testIntegrationSuite3) TestPartitionErrorCode(c *C) { partition p1 values less than (20) );`) _, err = tk.Exec("alter table t_part coalesce partition 4;") - c.Assert(ddl.ErrCoalesceOnlyOnHashPartition.Equal(err), IsTrue) + require.True(t, dbterror.ErrCoalesceOnlyOnHashPartition.Equal(err)) tk.MustGetErrCode(`alter table t_part reorganize partition p0, p1 into ( partition p0 values less than (1980));`, tmysql.ErrUnsupportedDDLOperation) @@ -3087,7 +3177,7 @@ func (s *testIntegrationSuite3) TestPartitionErrorCode(c *C) { tk.MustGetErrCode("alter table t_part repair partition p1;", tmysql.ErrUnsupportedDDLOperation) // Reduce the impact on DML when executing partition DDL - tk1 := testkit.NewTestKit(c, s.store) + tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") tk1.MustExec("drop table if exists t;") tk1.MustExec(`create table t(id int primary key) @@ -3095,16 +3185,18 @@ func (s *testIntegrationSuite3) TestPartitionErrorCode(c *C) { tk1.MustExec("begin") tk1.MustExec("insert into t values(1);") - tk2 := testkit.NewTestKit(c, s.store) + tk2 := testkit.NewTestKit(t, store) tk2.MustExec("use test") tk2.MustExec("alter table t truncate partition p0;") _, err = tk1.Exec("commit") - c.Assert(err, IsNil) + require.NoError(t, err) } -func (s *testIntegrationSuite5) TestConstAndTimezoneDepent(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestConstAndTimezoneDepent(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) // add partition tk.MustExec("set @@session.tidb_enable_table_partition = 1") tk.MustExec("drop database if exists test_db_with_partition_const") @@ -3191,8 +3283,10 @@ func (s *testIntegrationSuite5) TestConstAndTimezoneDepent(c *C) { tk.MustGetErrCode(sql14, tmysql.ErrWrongExprInPartitionFunc) } -func (s *testIntegrationSuite5) TestConstAndTimezoneDepent2(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestConstAndTimezoneDepent2(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) // add partition tk.MustExec("set @@session.tidb_enable_table_partition = 1") tk.MustExec("drop database if exists test_db_with_partition_const") @@ -3221,8 +3315,10 @@ func (s *testIntegrationSuite5) TestConstAndTimezoneDepent2(c *C) { );`) } -func (s *testIntegrationSuite3) TestUnsupportedPartitionManagementDDLs(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestUnsupportedPartitionManagementDDLs(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists test_1465;") tk.MustExec(` @@ -3235,11 +3331,22 @@ func (s *testIntegrationSuite3) TestUnsupportedPartitionManagementDDLs(c *C) { `) _, err := tk.Exec("alter table test_1465 partition by hash(a)") - c.Assert(err, ErrorMatches, ".*alter table partition is unsupported") + require.Regexp(t, ".*alter table partition is unsupported", err.Error()) } -func (s *testSerialDBSuite1) TestCommitWhenSchemaChange(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCommitWhenSchemaChange(t *testing.T) { + restore := config.RestoreFunc() + defer restore() + config.UpdateGlobal(func(conf *config.Config) { + // Test for table lock. + conf.EnableTableLock = true + conf.Log.SlowThreshold = 10000 + conf.Experimental.AllowsExpressionIndex = true + }) + store, clean := testkit.CreateMockStoreWithSchemaLease(t, time.Second) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("set @@global.tidb_max_delta_schema_count= 4096") tk.MustExec("use test") tk.MustExec(`create table schema_change (a int, b timestamp) partition by range(a) ( @@ -3247,7 +3354,7 @@ func (s *testSerialDBSuite1) TestCommitWhenSchemaChange(c *C) { partition p1 values less than (7), partition p2 values less than (11) )`) - tk2 := testkit.NewTestKit(c, s.store) + tk2 := testkit.NewTestKit(t, store) tk2.MustExec("use test") tk2.MustExec("set @@tidb_enable_exchange_partition=1") defer tk2.MustExec("set @@tidb_enable_exchange_partition=0") @@ -3264,8 +3371,9 @@ func (s *testSerialDBSuite1) TestCommitWhenSchemaChange(c *C) { defer func() { atomic.StoreUint32(&session.SchemaChangedWithoutRetry, 0) }() - _, err := tk.Se.Execute(context.Background(), "commit") - c.Assert(domain.ErrInfoSchemaChanged.Equal(err), IsTrue) + _, err := tk.Exec("commit") + require.Error(t, err) + require.Truef(t, domain.ErrInfoSchemaChanged.Equal(err), err.Error()) // Cover a bug that schema validator does not prevent transaction commit when // the schema has changed on the partitioned table. @@ -3282,8 +3390,8 @@ func (s *testSerialDBSuite1) TestCommitWhenSchemaChange(c *C) { tk.MustExec("insert into nt values (1), (3), (5);") tk2.MustExec("alter table pt exchange partition p1 with table nt;") tk.MustExec("insert into nt values (7), (9);") - _, err = tk.Se.Execute(context.Background(), "commit") - c.Assert(domain.ErrInfoSchemaChanged.Equal(err), IsTrue) + _, err = tk.Session().Execute(context.Background(), "commit") + require.True(t, domain.ErrInfoSchemaChanged.Equal(err)) tk.MustExec("admin check table pt") tk.MustQuery("select * from pt").Check(testkit.Rows()) @@ -3294,8 +3402,8 @@ func (s *testSerialDBSuite1) TestCommitWhenSchemaChange(c *C) { tk.MustExec("insert into pt values (1), (3), (5);") tk2.MustExec("alter table pt exchange partition p1 with table nt;") tk.MustExec("insert into pt values (7), (9);") - _, err = tk.Se.Execute(context.Background(), "commit") - c.Assert(domain.ErrInfoSchemaChanged.Equal(err), IsTrue) + _, err = tk.Session().Execute(context.Background(), "commit") + require.True(t, domain.ErrInfoSchemaChanged.Equal(err)) tk.MustExec("admin check table pt") tk.MustQuery("select * from pt").Check(testkit.Rows()) @@ -3303,8 +3411,10 @@ func (s *testSerialDBSuite1) TestCommitWhenSchemaChange(c *C) { tk.MustQuery("select * from nt").Check(testkit.Rows()) } -func (s *testSerialDBSuite1) TestCreatePartitionTableWithWrongType(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreatePartitionTableWithWrongType(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") var err error @@ -3314,8 +3424,8 @@ func (s *testSerialDBSuite1) TestCreatePartitionTableWithWrongType(c *C) { partition p0 values less than (0x10), partition p3 values less than (0x20) )`) - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) _, err = tk.Exec(`create table t( b int(10) @@ -3323,8 +3433,8 @@ func (s *testSerialDBSuite1) TestCreatePartitionTableWithWrongType(c *C) { partition p0 values less than ('g'), partition p3 values less than ('k') )`) - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) _, err = tk.Exec(`create table t( b char(10) @@ -3332,8 +3442,8 @@ func (s *testSerialDBSuite1) TestCreatePartitionTableWithWrongType(c *C) { partition p0 values less than (30), partition p3 values less than (60) )`) - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) _, err = tk.Exec(`create table t( b datetime @@ -3341,11 +3451,13 @@ func (s *testSerialDBSuite1) TestCreatePartitionTableWithWrongType(c *C) { partition p0 values less than ('g'), partition p3 values less than ('m') )`) - c.Assert(err, NotNil) + require.Error(t, err) } -func (s *testSerialDBSuite1) TestAddPartitionForTableWithWrongType(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAddPartitionForTableWithWrongType(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop tables if exists t_int, t_char, t_date") tk.MustExec(`create table t_int(b int(10)) @@ -3366,36 +3478,38 @@ func (s *testSerialDBSuite1) TestAddPartitionForTableWithWrongType(c *C) { var err error _, err = tk.Exec("alter table t_int add partition (partition p1 values less than ('g'))") - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) _, err = tk.Exec("alter table t_int add partition (partition p1 values less than (0x20))") - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) _, err = tk.Exec("alter table t_char add partition (partition p1 values less than (0x20))") - c.Assert(err, NotNil) - c.Assert(ddl.ErrRangeNotIncreasing.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrRangeNotIncreasing.Equal(err)) _, err = tk.Exec("alter table t_char add partition (partition p1 values less than (10))") - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) _, err = tk.Exec("alter table t_date add partition (partition p1 values less than ('m'))") - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) _, err = tk.Exec("alter table t_date add partition (partition p1 values less than (0x20))") - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) _, err = tk.Exec("alter table t_date add partition (partition p1 values less than (20))") - c.Assert(err, NotNil) - c.Assert(ddl.ErrWrongTypeColumnValue.Equal(err), IsTrue) + require.Error(t, err) + require.True(t, dbterror.ErrWrongTypeColumnValue.Equal(err)) } -func (s *testSerialDBSuite1) TestPartitionListWithTimeType(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) +func TestPartitionListWithTimeType(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") tk.MustExec("create table t_list1(a date) partition by list columns (a) (partition p0 values in ('2010-02-02', '20180203'), partition p1 values in ('20200202'));") @@ -3403,8 +3517,10 @@ func (s *testSerialDBSuite1) TestPartitionListWithTimeType(c *C) { tk.MustQuery(`select * from t_list1 partition (p0);`).Check(testkit.Rows("2018-02-03")) } -func (s *testSerialDBSuite1) TestPartitionListWithNewCollation(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) +func TestPartitionListWithNewCollation(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists t;") tk.MustExec("set @@session.tidb_enable_list_partition = ON") @@ -3415,19 +3531,21 @@ func (s *testSerialDBSuite1) TestPartitionListWithNewCollation(c *C) { tk.MustQuery(`select * from t11 partition (p0);`).Check(testkit.Rows("A", "B")) tk.MustQuery(`select * from t11 partition (p1);`).Check(testkit.Rows("c", "C", "d")) str := tk.MustQuery(`desc select * from t11 where a = 'b';`).Rows()[0][3].(string) - c.Assert(strings.Contains(str, "partition:p0"), IsTrue) + require.True(t, strings.Contains(str, "partition:p0")) } -func (s *testSerialDBSuite1) TestAddTableWithPartition(c *C) { +func TestAddTableWithPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() // for global temporary table - tk := testkit.NewTestKitWithInit(c, s.store) + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("drop table if exists global_partition_table;") tk.MustGetErrCode("create global temporary table global_partition_table (a int, b int) partition by hash(a) partitions 3 ON COMMIT DELETE ROWS;", errno.ErrPartitionNoTemporary) tk.MustExec("drop table if exists global_partition_table;") tk.MustExec("drop table if exists partition_table;") _, err := tk.Exec("create table partition_table (a int, b int) partition by hash(a) partitions 3;") - c.Assert(err, IsNil) + require.NoError(t, err) tk.MustExec("drop table if exists partition_table;") tk.MustExec("drop table if exists partition_range_table;") tk.MustGetErrCode(`create global temporary table partition_range_table (c1 smallint(6) not null, c2 char(5) default null) partition by range ( c1 ) ( @@ -3453,7 +3571,7 @@ func (s *testSerialDBSuite1) TestAddTableWithPartition(c *C) { tk.MustExec("drop table if exists local_partition_table;") tk.MustExec("drop table if exists partition_table;") _, err = tk.Exec("create table partition_table (a int, b int) partition by hash(a) partitions 3;") - c.Assert(err, IsNil) + require.NoError(t, err) tk.MustExec("drop table if exists partition_table;") tk.MustExec("drop table if exists local_partition_range_table;") tk.MustGetErrCode(`create temporary table local_partition_range_table (c1 smallint(6) not null, c2 char(5) default null) partition by range ( c1 ) ( @@ -3473,13 +3591,15 @@ func (s *testSerialDBSuite1) TestAddTableWithPartition(c *C) { tk.MustExec("drop table if exists local_partition_list_table;") } -func (s *testSerialDBSuite1) TestTruncatePartitionMultipleTimes(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) +func TestTruncatePartitionMultipleTimes(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("drop table if exists test.t;") tk.MustExec(`create table test.t (a int primary key) partition by range (a) ( partition p0 values less than (10), partition p1 values less than (maxvalue));`) - dom := domain.GetDomain(tk.Se) + dom := domain.GetDomain(tk.Session()) originHook := dom.DDL().GetHook() defer dom.DDL().SetHook(originHook) hook := &ddl.TestDDLCallback{} @@ -3498,92 +3618,62 @@ func (s *testSerialDBSuite1) TestTruncatePartitionMultipleTimes(c *C) { } } done1 := make(chan error, 1) - go backgroundExec(s.store, "alter table test.t truncate partition p0;", done1) + go backgroundExec(store, "alter table test.t truncate partition p0;", done1) done2 := make(chan error, 1) - go backgroundExec(s.store, "alter table test.t truncate partition p0;", done2) + go backgroundExec(store, "alter table test.t truncate partition p0;", done2) <-done1 <-done2 - c.Assert(errCount, LessEqual, int32(1)) + require.LessOrEqual(t, errCount, int32(1)) } -func (s *testSerialDBSuite1) TestAddPartitionReplicaBiggerThanTiFlashStores(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAddPartitionReplicaBiggerThanTiFlashStores(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists test_partition2") tk.MustExec("use test_partition2") tk.MustExec("drop table if exists t1") // Build a tableInfo with replica count = 1 while there is no real tiFlash store. - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`), IsNil) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`)) tk.MustExec(`create table t1 (c int) partition by range(c) ( partition p0 values less than (100), partition p1 values less than (200))`) tk.MustExec("alter table t1 set tiflash replica 1") - c.Assert(failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount"), IsNil) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount")) // Mock partitions replica as available. - t1 := testGetTableByName(c, s.s, "test_partition2", "t1") + t1 := external.GetTableByName(t, tk, "test_partition2", "t1") partition := t1.Meta().Partition - c.Assert(len(partition.Definitions), Equals, 2) - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, true) - c.Assert(err, IsNil) - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[1].ID, true) - c.Assert(err, IsNil) - t1 = testGetTableByName(c, s.s, "test_partition2", "t1") - c.Assert(t1.Meta().TiFlashReplica.Available, IsTrue) + require.Equal(t, 2, len(partition.Definitions)) + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, true) + require.NoError(t, err) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[1].ID, true) + require.NoError(t, err) + t1 = external.GetTableByName(t, tk, "test_partition2", "t1") + require.True(t, t1.Meta().TiFlashReplica.Available) // Since there is no real TiFlash store (less than replica count), adding a partition will error here. err = tk.ExecToErr("alter table t1 add partition (partition p2 values less than (300));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:-1][ddl] the tiflash replica count: 1 should be less than the total tiflash server count: 0") + require.Error(t, err) + require.EqualError(t, err, "[ddl:-1][ddl] the tiflash replica count: 1 should be less than the total tiflash server count: 0") // Test `add partition` waiting TiFlash replica can exit when its retry count is beyond the limitation. originErrCountLimit := variable.GetDDLErrorCountLimit() tk.MustExec("set @@global.tidb_ddl_error_count_limit = 3") defer func() { tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_error_count_limit = %v", originErrCountLimit)) }() - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockWaitTiFlashReplica", `return(true)`), IsNil) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockWaitTiFlashReplica", `return(true)`)) defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/mockWaitTiFlashReplica"), IsNil) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockWaitTiFlashReplica")) }() - c.Assert(t1.Meta().TiFlashReplica.Available, IsTrue) + require.True(t, t1.Meta().TiFlashReplica.Available) err = tk.ExecToErr("alter table t1 add partition (partition p3 values less than (300));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:-1]DDL job rollback, error msg: [ddl] add partition wait for tiflash replica to complete") + require.Error(t, err) + require.Equal(t, "[ddl:-1]DDL job rollback, error msg: [ddl] add partition wait for tiflash replica to complete", err.Error()) } -func TestDropAndTruncatePartition(t *testing.T) { - // Useless, but is required to initialize the global infoSync - // Otherwise this test throw a "infoSyncer is not initialized" error - _, clean := ntestkit.CreateMockStore(t) +func TestDuplicatePartitionNames(t *testing.T) { + store, clean := testkit.CreateMockStore(t) defer clean() - - ddl.ExportTestDropAndTruncatePartition(t) -} - -func TestTable(t *testing.T) { - // Useless, but is required to initialize the global infoSync - // Otherwise this test throw a "infoSyncer is not initialized" error - _, clean := ntestkit.CreateMockStore(t) - defer clean() - - ddl.ExportTestTable(t) -} - -func TestRenameTables(t *testing.T) { - // Useless, but is required to initialize the global infoSync - // Otherwise this test throw a "infoSyncer is not initialized" error - _, clean := ntestkit.CreateMockStore(t) - defer clean() - - ddl.ExportTestRenameTables(t) -} - -func TestCreateTables(t *testing.T) { - _, clean := ntestkit.CreateMockStore(t) - defer clean() - - ddl.ExportTestRenameTables(t) -} - -func (s *testIntegrationSuite1) TestDuplicatePartitionNames(c *C) { - tk := testkit.NewTestKit(c, s.store) + tk := testkit.NewTestKit(t, store) tk.MustExec("create database DuplicatePartitionNames") defer tk.MustExec("drop database DuplicatePartitionNames") @@ -3596,17 +3686,17 @@ func (s *testIntegrationSuite1) TestDuplicatePartitionNames(c *C) { tk.MustQuery("select * from t1").Sort().Check(testkit.Rows("2", "3")) tk.MustExec("insert into t1 values (1)") err := tk.ExecToErr("alter table t1 drop partition p1,p1") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:1507]Error in list of partitions to DROP") + require.Error(t, err) + require.Equal(t, "[ddl:1507]Error in list of partitions to DROP", err.Error()) err = tk.ExecToErr("alter table t1 drop partition p1,p9") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:1507]Error in list of partitions to DROP") + require.Error(t, err) + require.Equal(t, "[ddl:1507]Error in list of partitions to DROP", err.Error()) err = tk.ExecToErr("alter table t1 drop partition p1,p1,p1") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:1508]Cannot remove all partitions, use DROP TABLE instead") + require.Error(t, err) + require.Equal(t, "[ddl:1508]Cannot remove all partitions, use DROP TABLE instead", err.Error()) err = tk.ExecToErr("alter table t1 drop partition p1,p9,p1") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:1508]Cannot remove all partitions, use DROP TABLE instead") + require.Error(t, err) + require.Equal(t, "[ddl:1508]Cannot remove all partitions, use DROP TABLE instead", err.Error()) tk.MustQuery("select * from t1").Sort().Check(testkit.Rows("1", "2", "3")) tk.MustExec("alter table t1 drop partition p1") tk.MustQuery("select * from t1").Sort().Check(testkit.Rows("2", "3")) diff --git a/ddl/db_rename_test.go b/ddl/db_rename_test.go new file mode 100644 index 0000000000000..861efe3257225 --- /dev/null +++ b/ddl/db_rename_test.go @@ -0,0 +1,370 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "context" + "fmt" + "strings" + "testing" + + "github.com/pingcap/errors" + "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/mock" + "github.com/stretchr/testify/require" +) + +func TestRenameIndex(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (pk int primary key, c int default 1, c1 int default 1, unique key k1(c), key k2(c1))") + + // Test rename success + tk.MustExec("alter table t rename index k1 to k3") + tk.MustExec("admin check index t k3") + + // Test rename to the same name + tk.MustExec("alter table t rename index k3 to k3") + tk.MustExec("admin check index t k3") + + // Test rename on non-exists keys + tk.MustGetErrCode("alter table t rename index x to x", errno.ErrKeyDoesNotExist) + + // Test rename on already-exists keys + tk.MustGetErrCode("alter table t rename index k3 to k2", errno.ErrDupKeyName) + + tk.MustExec("alter table t rename index k2 to K2") + tk.MustGetErrCode("alter table t rename key k3 to K2", errno.ErrDupKeyName) +} + +// TestCancelRenameIndex tests cancel ddl job which type is rename index. +func TestCancelRenameIndex(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create database if not exists test_rename_index") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(c1 int, c2 int)") + defer tk.MustExec("drop table t;") + for i := 0; i < 100; i++ { + tk.MustExec("insert into t values (?, ?)", i, i) + } + tk.MustExec("alter table t add index idx_c2(c2)") + var checkErr error + hook := &ddl.TestDDLCallback{Do: dom} + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type == model.ActionRenameIndex && job.State == model.JobStateNone { + jobIDs := []int64{job.ID} + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.Background()) + if err != nil { + checkErr = errors.Trace(err) + return + } + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + checkErr = txn.Commit(context.Background()) + } + } + originalHook := dom.DDL().GetHook() + dom.DDL().SetHook(hook) + tk.MustGetErrMsg("alter table t rename index idx_c2 to idx_c3", "[ddl:8214]Cancelled DDL job") + require.NoError(t, checkErr) + dom.DDL().SetHook(originalHook) + tt := external.GetTableByName(t, tk, "test", "t") + for _, idx := range tt.Indices() { + require.False(t, strings.EqualFold(idx.Meta().Name.L, "idx_c3")) + } + tk.MustExec("alter table t rename index idx_c2 to idx_c3") +} + +// See issue: https://github.com/pingcap/tidb/issues/29752 +// Ref https://dev.mysql.com/doc/refman/8.0/en/rename-table.html +func TestRenameTableWithLocked(t *testing.T) { + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.EnableTableLock = true + }) + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database renamedb") + tk.MustExec("create database renamedb2") + tk.MustExec("use renamedb") + tk.MustExec("DROP TABLE IF EXISTS t1;") + tk.MustExec("CREATE TABLE t1 (a int);") + + tk.MustExec("LOCK TABLES t1 WRITE;") + tk.MustGetErrCode("drop database renamedb2;", errno.ErrLockOrActiveTransaction) + tk.MustExec("RENAME TABLE t1 TO t2;") + tk.MustQuery("select * from renamedb.t2").Check(testkit.Rows()) + tk.MustExec("UNLOCK TABLES") + tk.MustExec("RENAME TABLE t2 TO t1;") + tk.MustQuery("select * from renamedb.t1").Check(testkit.Rows()) + + tk.MustExec("LOCK TABLES t1 READ;") + tk.MustGetErrCode("RENAME TABLE t1 TO t2;", errno.ErrTableNotLockedForWrite) + tk.MustExec("UNLOCK TABLES") + + tk.MustExec("drop database renamedb") +} + +func TestRenameTable2(t *testing.T) { + isAlterTable := false + testRenameTable(t, "rename table %s to %s", isAlterTable) +} + +func TestAlterTableRenameTable(t *testing.T) { + isAlterTable := true + testRenameTable(t, "alter table %s rename to %s", isAlterTable) +} + +func testRenameTable(t *testing.T, sql string, isAlterTable bool) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustGetErrCode("rename table tb1 to tb2;", errno.ErrNoSuchTable) + // for different databases + tk.MustExec("create table t (c1 int, c2 int)") + tk.MustExec("insert t values (1, 1), (2, 2)") + ctx := tk.Session() + is := domain.GetDomain(ctx).InfoSchema() + oldTblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + oldTblID := oldTblInfo.Meta().ID + tk.MustExec("create database test1") + tk.MustExec("use test1") + tk.MustExec(fmt.Sprintf(sql, "test.t", "test1.t1")) + is = domain.GetDomain(ctx).InfoSchema() + newTblInfo, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t1")) + require.NoError(t, err) + require.Equal(t, oldTblID, newTblInfo.Meta().ID) + tk.MustQuery("select * from t1").Check(testkit.Rows("1 1", "2 2")) + tk.MustExec("use test") + + // Make sure t doesn't exist. + tk.MustExec("create table t (c1 int, c2 int)") + tk.MustExec("drop table t") + + // for the same database + tk.MustExec("use test1") + tk.MustExec(fmt.Sprintf(sql, "t1", "t2")) + is = domain.GetDomain(ctx).InfoSchema() + newTblInfo, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t2")) + require.NoError(t, err) + require.Equal(t, oldTblID, newTblInfo.Meta().ID) + tk.MustQuery("select * from t2").Check(testkit.Rows("1 1", "2 2")) + isExist := is.TableExists(model.NewCIStr("test1"), model.NewCIStr("t1")) + require.False(t, isExist) + tk.MustQuery("show tables").Check(testkit.Rows("t2")) + + // for failure case + failSQL := fmt.Sprintf(sql, "test_not_exist.t", "test_not_exist.t") + if isAlterTable { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } else { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } + failSQL = fmt.Sprintf(sql, "test.test_not_exist", "test.test_not_exist") + if isAlterTable { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } else { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } + failSQL = fmt.Sprintf(sql, "test.t_not_exist", "test_not_exist.t") + if isAlterTable { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } else { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } + failSQL = fmt.Sprintf(sql, "test1.t2", "test_not_exist.t") + tk.MustGetErrCode(failSQL, errno.ErrErrorOnRename) + + tk.MustExec("use test1") + tk.MustExec("create table if not exists t_exist (c1 int, c2 int)") + failSQL = fmt.Sprintf(sql, "test1.t2", "test1.t_exist") + tk.MustGetErrCode(failSQL, errno.ErrTableExists) + failSQL = fmt.Sprintf(sql, "test.t_not_exist", "test1.t_exist") + if isAlterTable { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } else { + tk.MustGetErrCode(failSQL, errno.ErrTableExists) + } + failSQL = fmt.Sprintf(sql, "test_not_exist.t", "test1.t_exist") + if isAlterTable { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } else { + tk.MustGetErrCode(failSQL, errno.ErrTableExists) + } + failSQL = fmt.Sprintf(sql, "test_not_exist.t", "test1.t_not_exist") + if isAlterTable { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } else { + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + } + + // for the same table name + tk.MustExec("use test1") + tk.MustExec("create table if not exists t (c1 int, c2 int)") + tk.MustExec("create table if not exists t1 (c1 int, c2 int)") + if isAlterTable { + tk.MustExec(fmt.Sprintf(sql, "test1.t", "t")) + tk.MustExec(fmt.Sprintf(sql, "test1.t1", "test1.T1")) + } else { + tk.MustGetErrCode(fmt.Sprintf(sql, "test1.t", "t"), errno.ErrTableExists) + tk.MustGetErrCode(fmt.Sprintf(sql, "test1.t1", "test1.T1"), errno.ErrTableExists) + } + + // Test rename table name too long. + tk.MustGetErrCode("rename table test1.t1 to test1.txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", errno.ErrTooLongIdent) + tk.MustGetErrCode("alter table test1.t1 rename to test1.txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", errno.ErrTooLongIdent) + + tk.MustExec("drop database test1") +} + +func TestRenameMultiTables(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1(id int)") + tk.MustExec("create table t2(id int)") + sql := "rename table t1 to t3, t2 to t4" + _, err := tk.Exec(sql) + require.NoError(t, err) + + tk.MustExec("drop table t3, t4") + + tk.MustExec("create table t1 (c1 int, c2 int)") + tk.MustExec("create table t2 (c1 int, c2 int)") + tk.MustExec("insert t1 values (1, 1), (2, 2)") + tk.MustExec("insert t2 values (1, 1), (2, 2)") + ctx := tk.Session() + is := domain.GetDomain(ctx).InfoSchema() + oldTblInfo1, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t1")) + require.NoError(t, err) + oldTblID1 := oldTblInfo1.Meta().ID + oldTblInfo2, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t2")) + require.NoError(t, err) + oldTblID2 := oldTblInfo2.Meta().ID + tk.MustExec("create database test1") + tk.MustExec("use test1") + tk.MustExec("rename table test.t1 to test1.t1, test.t2 to test1.t2") + is = domain.GetDomain(ctx).InfoSchema() + newTblInfo1, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t1")) + require.NoError(t, err) + require.Equal(t, oldTblID1, newTblInfo1.Meta().ID) + newTblInfo2, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t2")) + require.NoError(t, err) + require.Equal(t, oldTblID2, newTblInfo2.Meta().ID) + tk.MustQuery("select * from t1").Check(testkit.Rows("1 1", "2 2")) + tk.MustQuery("select * from t2").Check(testkit.Rows("1 1", "2 2")) + + // Make sure t1,t2 doesn't exist. + isExist := is.TableExists(model.NewCIStr("test"), model.NewCIStr("t1")) + require.False(t, isExist) + isExist = is.TableExists(model.NewCIStr("test"), model.NewCIStr("t2")) + require.False(t, isExist) + + // for the same database + tk.MustExec("use test1") + tk.MustExec("rename table test1.t1 to test1.t3, test1.t2 to test1.t4") + is = domain.GetDomain(ctx).InfoSchema() + newTblInfo1, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t3")) + require.NoError(t, err) + require.Equal(t, oldTblID1, newTblInfo1.Meta().ID) + newTblInfo2, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t4")) + require.NoError(t, err) + require.Equal(t, oldTblID2, newTblInfo2.Meta().ID) + tk.MustQuery("select * from t3").Check(testkit.Rows("1 1", "2 2")) + isExist = is.TableExists(model.NewCIStr("test1"), model.NewCIStr("t1")) + require.False(t, isExist) + tk.MustQuery("select * from t4").Check(testkit.Rows("1 1", "2 2")) + isExist = is.TableExists(model.NewCIStr("test1"), model.NewCIStr("t2")) + require.False(t, isExist) + tk.MustQuery("show tables").Check(testkit.Rows("t3", "t4")) + + // for multi tables same database + tk.MustExec("create table t5 (c1 int, c2 int)") + tk.MustExec("insert t5 values (1, 1), (2, 2)") + is = domain.GetDomain(ctx).InfoSchema() + oldTblInfo3, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t5")) + require.NoError(t, err) + oldTblID3 := oldTblInfo3.Meta().ID + tk.MustExec("rename table test1.t3 to test1.t1, test1.t4 to test1.t2, test1.t5 to test1.t3") + is = domain.GetDomain(ctx).InfoSchema() + newTblInfo1, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t1")) + require.NoError(t, err) + require.Equal(t, oldTblID1, newTblInfo1.Meta().ID) + newTblInfo2, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t2")) + require.NoError(t, err) + require.Equal(t, oldTblID2, newTblInfo2.Meta().ID) + newTblInfo3, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t3")) + require.NoError(t, err) + require.Equal(t, oldTblID3, newTblInfo3.Meta().ID) + tk.MustQuery("show tables").Check(testkit.Rows("t1", "t2", "t3")) + + // for multi tables different databases + tk.MustExec("use test") + tk.MustExec("rename table test1.t1 to test.t2, test1.t2 to test.t3, test1.t3 to test.t4") + is = domain.GetDomain(ctx).InfoSchema() + newTblInfo1, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t2")) + require.NoError(t, err) + require.Equal(t, oldTblID1, newTblInfo1.Meta().ID) + newTblInfo2, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t3")) + require.NoError(t, err) + require.Equal(t, oldTblID2, newTblInfo2.Meta().ID) + newTblInfo3, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t4")) + require.NoError(t, err) + require.Equal(t, oldTblID3, newTblInfo3.Meta().ID) + tk.MustQuery("show tables").Check(testkit.Rows("t2", "t3", "t4")) + + // for failure case + failSQL := "rename table test_not_exist.t to test_not_exist.t, test_not_exist.t to test_not_exist.t" + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + failSQL = "rename table test.test_not_exist to test.test_not_exist, test.test_not_exist to test.test_not_exist" + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + failSQL = "rename table test.t_not_exist to test_not_exist.t, test.t_not_exist to test_not_exist.t" + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + failSQL = "rename table test1.t2 to test_not_exist.t, test1.t2 to test_not_exist.t" + tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) + + tk.MustExec("drop database test1") + tk.MustExec("drop database test") +} diff --git a/ddl/db_table_test.go b/ddl/db_table_test.go new file mode 100644 index 0000000000000..13a6113ad6830 --- /dev/null +++ b/ddl/db_table_test.go @@ -0,0 +1,1102 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "bytes" + "context" + "fmt" + "strings" + "testing" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/ddl" + testddlutil "github.com/pingcap/tidb/ddl/testutil" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/parser/auth" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/terror" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/table/tables" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/mock" + "github.com/stretchr/testify/require" +) + +// TestCancelDropTable tests cancel ddl job which type is drop table. +func TestCancelDropTableAndSchema(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + testCases := []struct { + needAddTableOrDB bool + action model.ActionType + jobState model.JobState + JobSchemaState model.SchemaState + cancelSucc bool + }{ + // Check drop table. + // model.JobStateNone means the jobs is canceled before the first run. + {true, model.ActionDropTable, model.JobStateNone, model.StateNone, true}, + {false, model.ActionDropTable, model.JobStateRunning, model.StateWriteOnly, false}, + {true, model.ActionDropTable, model.JobStateRunning, model.StateDeleteOnly, false}, + + // Check drop database. + {true, model.ActionDropSchema, model.JobStateNone, model.StateNone, true}, + {false, model.ActionDropSchema, model.JobStateRunning, model.StateWriteOnly, false}, + {true, model.ActionDropSchema, model.JobStateRunning, model.StateDeleteOnly, false}, + } + var checkErr error + hook := &ddl.TestDDLCallback{Do: dom} + var jobID int64 + testCase := &testCases[0] + tk.MustExec("create database if not exists test_drop_db") + dbInfo, ok := dom.InfoSchema().SchemaByName(model.NewCIStr("test_drop_db")) + require.True(t, ok) + + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type == testCase.action && job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState && job.SchemaID == dbInfo.ID { + jobIDs := []int64{job.ID} + jobID = job.ID + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.TODO()) + if err != nil { + checkErr = errors.Trace(err) + return + } + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + checkErr = txn.Commit(context.Background()) + } + } + originHook := dom.DDL().GetHook() + defer dom.DDL().SetHook(originHook) + dom.DDL().SetHook(hook) + var err error + sql := "" + for i := range testCases { + testCase = &testCases[i] + if testCase.needAddTableOrDB { + tk.MustExec("create database if not exists test_drop_db") + tk.MustExec("use test_drop_db") + tk.MustExec("create table if not exists t(c1 int, c2 int)") + } + + dbInfo, ok = dom.InfoSchema().SchemaByName(model.NewCIStr("test_drop_db")) + require.True(t, ok) + + if testCase.action == model.ActionDropTable { + sql = "drop table t;" + } else if testCase.action == model.ActionDropSchema { + sql = "drop database test_drop_db;" + } + + _, err = tk.Exec(sql) + if testCase.cancelSucc { + require.Nil(t, checkErr) + require.Error(t, err) + require.Equal(t, "[ddl:8214]Cancelled DDL job", err.Error()) + tk.MustExec("insert into t values (?, ?)", i, i) + } else { + require.NoError(t, err) + require.NotNil(t, checkErr) + require.Equal(t, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error(), checkErr.Error()) + _, err = tk.Exec("insert into t values (?, ?)", i, i) + require.Error(t, err) + } + } +} + +func TestTableForeignKey(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (a int, b int);") + // test create table with foreign key. + failSQL := "create table t2 (c int, foreign key (a) references t1(a));" + tk.MustGetErrCode(failSQL, errno.ErrKeyColumnDoesNotExits) + // test add foreign key. + tk.MustExec("create table t3 (a int, b int);") + failSQL = "alter table t1 add foreign key (c) REFERENCES t3(a);" + tk.MustGetErrCode(failSQL, errno.ErrKeyColumnDoesNotExits) + // test origin key not match error + failSQL = "alter table t1 add foreign key (a) REFERENCES t3(a, b);" + tk.MustGetErrCode(failSQL, errno.ErrWrongFkDef) + // Test drop column with foreign key. + tk.MustExec("create table t4 (c int,d int,foreign key (d) references t1 (b));") + failSQL = "alter table t4 drop column d" + tk.MustGetErrCode(failSQL, errno.ErrFkColumnCannotDrop) + // Test change column with foreign key. + failSQL = "alter table t4 change column d e bigint;" + tk.MustGetErrCode(failSQL, errno.ErrFKIncompatibleColumns) + // Test modify column with foreign key. + failSQL = "alter table t4 modify column d bigint;" + tk.MustGetErrCode(failSQL, errno.ErrFKIncompatibleColumns) + tk.MustQuery("select count(*) from information_schema.KEY_COLUMN_USAGE;") + tk.MustExec("alter table t4 drop foreign key d") + tk.MustExec("alter table t4 modify column d bigint;") + tk.MustExec("drop table if exists t1,t2,t3,t4;") +} + +func TestAddNotNullColumn(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + // for different databases + tk.MustExec("create table tnn (c1 int primary key auto_increment, c2 int)") + tk.MustExec("insert tnn (c2) values (0)" + strings.Repeat(",(0)", 99)) + done := make(chan error, 1) + testddlutil.SessionExecInGoroutine(store, "test", "alter table tnn add column c3 int not null default 3", done) + updateCnt := 0 +out: + for { + select { + case err := <-done: + require.NoError(t, err) + break out + default: + // Close issue #14636 + // Because add column action is not amendable now, it causes an error when the schema is changed + // in the process of an insert statement. + _, err := tk.Exec("update tnn set c2 = c2 + 1 where c1 = 99") + if err == nil { + updateCnt++ + } + } + } + expected := fmt.Sprintf("%d %d", updateCnt, 3) + tk.MustQuery("select c2, c3 from tnn where c1 = 99").Check(testkit.Rows(expected)) + tk.MustExec("drop table tnn") +} + +func TestCharacterSetInColumns(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database varchar_test;") + defer tk.MustExec("drop database varchar_test;") + tk.MustExec("use varchar_test") + tk.MustExec("create table t (c1 int, s1 varchar(10), s2 text)") + tk.MustQuery("select count(*) from information_schema.columns where table_schema = 'varchar_test' and character_set_name != 'utf8mb4'").Check(testkit.Rows("0")) + tk.MustQuery("select count(*) from information_schema.columns where table_schema = 'varchar_test' and character_set_name = 'utf8mb4'").Check(testkit.Rows("2")) + + tk.MustExec("create table t1(id int) charset=UTF8;") + tk.MustExec("create table t2(id int) charset=BINARY;") + tk.MustExec("create table t3(id int) charset=LATIN1;") + tk.MustExec("create table t4(id int) charset=ASCII;") + tk.MustExec("create table t5(id int) charset=UTF8MB4;") + + tk.MustExec("create table t11(id int) charset=utf8;") + tk.MustExec("create table t12(id int) charset=binary;") + tk.MustExec("create table t13(id int) charset=latin1;") + tk.MustExec("create table t14(id int) charset=ascii;") + tk.MustExec("create table t15(id int) charset=utf8mb4;") +} + +func TestAddNotNullColumnWhileInsertOnDupUpdate(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use test") + closeCh := make(chan bool) + var wg util.WaitGroupWrapper + tk1.MustExec("create table nn (a int primary key, b int)") + tk1.MustExec("insert nn values (1, 1)") + wg.Run(func() { + for { + select { + case <-closeCh: + return + default: + } + tk2.MustExec("insert nn (a, b) values (1, 1) on duplicate key update a = 1, b = values(b) + 1") + } + }) + tk1.MustExec("alter table nn add column c int not null default 3 after a") + close(closeCh) + wg.Wait() + tk1.MustQuery("select * from nn").Check(testkit.Rows("1 3 2")) +} + +func TestTransactionOnAddDropColumn(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, time.Microsecond*500) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int);") + tk.MustExec("create table t2 (a int, b int);") + tk.MustExec("insert into t2 values (2,0)") + + transactions := [][]string{ + { + "begin", + "insert into t1 set a=1", + "update t1 set b=1 where a=1", + "commit", + }, + { + "begin", + "insert into t1 select a,b from t2", + "update t1 set b=2 where a=2", + "commit", + }, + } + + originHook := dom.DDL().GetHook() + defer dom.DDL().SetHook(originHook) + hook := &ddl.TestDDLCallback{Do: dom} + var checkErr error + hook.OnJobRunBeforeExported = func(job *model.Job) { + if checkErr != nil { + return + } + switch job.SchemaState { + case model.StateWriteOnly, model.StateWriteReorganization, model.StateDeleteOnly, model.StateDeleteReorganization: + default: + return + } + // do transaction. + for _, transaction := range transactions { + for _, sql := range transaction { + if _, checkErr = tk.Exec(sql); checkErr != nil { + checkErr = errors.Errorf("err: %s, sql: %s, job schema state: %s", checkErr.Error(), sql, job.SchemaState) + return + } + } + } + } + dom.DDL().SetHook(hook) + done := make(chan error, 1) + // test transaction on add column. + go backgroundExec(store, "alter table t1 add column c int not null after a", done) + err := <-done + require.NoError(t, err) + require.Nil(t, checkErr) + tk.MustQuery("select a,b from t1 order by a").Check(testkit.Rows("1 1", "1 1", "1 1", "2 2", "2 2", "2 2")) + tk.MustExec("delete from t1") + + // test transaction on drop column. + go backgroundExec(store, "alter table t1 drop column c", done) + err = <-done + require.NoError(t, err) + require.Nil(t, checkErr) + tk.MustQuery("select a,b from t1 order by a").Check(testkit.Rows("1 1", "1 1", "1 1", "2 2", "2 2", "2 2")) +} + +func TestCreateTableWithSetCol(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t_set (a int, b set('e') default '');") + tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + + " `a` int(11) DEFAULT NULL,\n" + + " `b` set('e') DEFAULT ''\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("drop table t_set") + tk.MustExec("create table t_set (a set('a', 'b', 'c', 'd') default 'a,c,c');") + tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + + " `a` set('a','b','c','d') DEFAULT 'a,c'\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + + // It's for failure cases. + // The type of default value is string. + tk.MustExec("drop table t_set") + failedSQL := "create table t_set (a set('1', '4', '10') default '3');" + tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) + failedSQL = "create table t_set (a set('1', '4', '10') default '1,4,11');" + tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) + // Success when the new collation is enabled. + tk.MustExec("create table t_set (a set('1', '4', '10') default '1 ,4');") + // The type of default value is int. + failedSQL = "create table t_set (a set('1', '4', '10') default 0);" + tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) + failedSQL = "create table t_set (a set('1', '4', '10') default 8);" + tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) + + // The type of default value is int. + // It's for successful cases + tk.MustExec("drop table if exists t_set") + tk.MustExec("create table t_set (a set('1', '4', '10', '21') default 1);") + tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + + " `a` set('1','4','10','21') DEFAULT '1'\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("drop table t_set") + tk.MustExec("create table t_set (a set('1', '4', '10', '21') default 2);") + tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + + " `a` set('1','4','10','21') DEFAULT '4'\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("drop table t_set") + tk.MustExec("create table t_set (a set('1', '4', '10', '21') default 3);") + tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + + " `a` set('1','4','10','21') DEFAULT '1,4'\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("drop table t_set") + tk.MustExec("create table t_set (a set('1', '4', '10', '21') default 15);") + tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + + " `a` set('1','4','10','21') DEFAULT '1,4,10,21'\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("insert into t_set value()") + tk.MustQuery("select * from t_set").Check(testkit.Rows("1,4,10,21")) +} + +func TestCreateTableWithEnumCol(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + // It's for failure cases. + // The type of default value is string. + tk.MustExec("drop table if exists t_enum") + failedSQL := "create table t_enum (a enum('1', '4', '10') default '3');" + tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) + failedSQL = "create table t_enum (a enum('1', '4', '10') default '');" + tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) + // The type of default value is int. + failedSQL = "create table t_enum (a enum('1', '4', '10') default 0);" + tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) + failedSQL = "create table t_enum (a enum('1', '4', '10') default 8);" + tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) + + // The type of default value is int. + // It's for successful cases + tk.MustExec("drop table if exists t_enum") + tk.MustExec("create table t_enum (a enum('2', '3', '4') default 2);") + ret := tk.MustQuery("show create table t_enum").Rows()[0][1] + require.True(t, strings.Contains(ret.(string), "`a` enum('2','3','4') DEFAULT '3'")) + tk.MustExec("drop table t_enum") + tk.MustExec("create table t_enum (a enum('a', 'c', 'd') default 2);") + ret = tk.MustQuery("show create table t_enum").Rows()[0][1] + require.True(t, strings.Contains(ret.(string), "`a` enum('a','c','d') DEFAULT 'c'")) + tk.MustExec("insert into t_enum value()") + tk.MustQuery("select * from t_enum").Check(testkit.Rows("c")) +} + +// TestCancelAddTableAndDropTablePartition tests cancel ddl job which type is add/drop table partition. +func TestCancelAddTableAndDropTablePartition(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database if not exists test_partition_table") + tk.MustExec("use test_partition_table") + tk.MustExec("drop table if exists t_part") + tk.MustExec(`create table t_part (a int key) + partition by range(a) ( + partition p0 values less than (10), + partition p1 values less than (20) + );`) + defer tk.MustExec("drop table t_part;") + base := 10 + for i := 0; i < base; i++ { + tk.MustExec("insert into t_part values (?)", i) + } + + testCases := []struct { + action model.ActionType + jobState model.JobState + JobSchemaState model.SchemaState + cancelSucc bool + }{ + {model.ActionAddTablePartition, model.JobStateNone, model.StateNone, true}, + {model.ActionDropTablePartition, model.JobStateNone, model.StateNone, true}, + // Add table partition now can be cancelled in ReplicaOnly state. + {model.ActionAddTablePartition, model.JobStateRunning, model.StateReplicaOnly, true}, + } + var checkErr error + hook := &ddl.TestDDLCallback{Do: dom} + testCase := &testCases[0] + var jobID int64 + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type == testCase.action && job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { + jobIDs := []int64{job.ID} + jobID = job.ID + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.Background()) + if err != nil { + checkErr = errors.Trace(err) + return + } + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + checkErr = txn.Commit(context.Background()) + } + } + originalHook := dom.DDL().GetHook() + dom.DDL().SetHook(hook) + + var err error + sql := "" + for i := range testCases { + testCase = &testCases[i] + if testCase.action == model.ActionAddTablePartition { + sql = `alter table t_part add partition ( + partition p2 values less than (30) + );` + } else if testCase.action == model.ActionDropTablePartition { + sql = "alter table t_part drop partition p1;" + } + _, err = tk.Exec(sql) + if testCase.cancelSucc { + require.Nil(t, checkErr) + require.Error(t, err) + require.Equal(t, "[ddl:8214]Cancelled DDL job", err.Error()) + tk.MustExec("insert into t_part values (?)", i+base) + + ctx := tk.Session() + is := domain.GetDomain(ctx).InfoSchema() + tbl, err := is.TableByName(model.NewCIStr("test_partition_table"), model.NewCIStr("t_part")) + require.NoError(t, err) + partitionInfo := tbl.Meta().GetPartitionInfo() + require.NotNil(t, partitionInfo) + require.Len(t, partitionInfo.AddingDefinitions, 0) + } else { + require.NoError(t, err) + require.NoError(t, checkErr) + require.Equal(t, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error(), checkErr.Error()) + tk.MustExec("insert into t_part values (?)", i) + + } + } + dom.DDL().SetHook(originalHook) +} + +func TestAlterTableWithValidation(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + defer tk.MustExec("drop table if exists t1") + + tk.MustExec("create table t1 (c1 int, c2 int as (c1 + 1));") + + // Test for alter table with validation. + tk.MustExec("alter table t1 with validation") + require.Equal(t, uint16(1), tk.Session().GetSessionVars().StmtCtx.WarningCount()) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|8200|ALTER TABLE WITH VALIDATION is currently unsupported")) + + // Test for alter table without validation. + tk.MustExec("alter table t1 without validation") + require.Equal(t, uint16(1), tk.Session().GetSessionVars().StmtCtx.WarningCount()) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|8200|ALTER TABLE WITHOUT VALIDATION is currently unsupported")) +} + +func TestBatchCreateTable(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, time.Microsecond*500) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists tables_1") + tk.MustExec("drop table if exists tables_2") + tk.MustExec("drop table if exists tables_3") + + d := dom.DDL() + infos := []*model.TableInfo{} + infos = append(infos, &model.TableInfo{ + Name: model.NewCIStr("tables_1"), + }) + infos = append(infos, &model.TableInfo{ + Name: model.NewCIStr("tables_2"), + }) + infos = append(infos, &model.TableInfo{ + Name: model.NewCIStr("tables_3"), + }) + + // correct name + tk.Session().SetValue(sessionctx.QueryString, "skip") + err := d.BatchCreateTableWithInfo(tk.Session(), model.NewCIStr("test"), infos, ddl.OnExistError) + require.NoError(t, err) + + tk.MustQuery("show tables like '%tables_%'").Check(testkit.Rows("tables_1", "tables_2", "tables_3")) + job := tk.MustQuery("admin show ddl jobs").Rows()[0] + require.Equal(t, "test", job[1]) + require.Equal(t, "tables_1,tables_2,tables_3", job[2]) + require.Equal(t, "create tables", job[3]) + require.Equal(t, "public", job[4]) + // FIXME: we must change column type to give multiple id + // c.Assert(job[6], Matches, "[^,]+,[^,]+,[^,]+") + + // duplicated name + infos[1].Name = model.NewCIStr("tables_1") + tk.Session().SetValue(sessionctx.QueryString, "skip") + err = d.BatchCreateTableWithInfo(tk.Session(), model.NewCIStr("test"), infos, ddl.OnExistError) + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableExists)) + + newinfo := &model.TableInfo{ + Name: model.NewCIStr("tables_4"), + } + { + colNum := 2 + cols := make([]*model.ColumnInfo, colNum) + viewCols := make([]model.CIStr, colNum) + var stmtBuffer bytes.Buffer + stmtBuffer.WriteString("SELECT ") + for i := range cols { + col := &model.ColumnInfo{ + Name: model.NewCIStr(fmt.Sprintf("c%d", i+1)), + Offset: i, + State: model.StatePublic, + } + cols[i] = col + viewCols[i] = col.Name + stmtBuffer.WriteString(cols[i].Name.L + ",") + } + stmtBuffer.WriteString("1 FROM t") + newinfo.Columns = cols + newinfo.View = &model.ViewInfo{Cols: viewCols, Security: model.SecurityDefiner, Algorithm: model.AlgorithmMerge, SelectStmt: stmtBuffer.String(), CheckOption: model.CheckOptionCascaded, Definer: &auth.UserIdentity{CurrentUser: true}} + } + + tk.Session().SetValue(sessionctx.QueryString, "skip") + tk.Session().SetValue(sessionctx.QueryString, "skip") + err = d.BatchCreateTableWithInfo(tk.Session(), model.NewCIStr("test"), []*model.TableInfo{newinfo}, ddl.OnExistError) + require.NoError(t, err) +} + +// port from mysql +// https://github.com/mysql/mysql-server/blob/124c7ab1d6f914637521fd4463a993aa73403513/mysql-test/t/lock.test +func TestLock(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + /* Testing of table locking */ + tk.MustExec("DROP TABLE IF EXISTS t1") + tk.MustExec("CREATE TABLE t1 ( `id` int(11) NOT NULL default '0', `id2` int(11) NOT NULL default '0', `id3` int(11) NOT NULL default '0', `dummy1` char(30) default NULL, PRIMARY KEY (`id`,`id2`), KEY `index_id3` (`id3`))") + tk.MustExec("insert into t1 (id,id2) values (1,1),(1,2),(1,3)") + tk.MustExec("LOCK TABLE t1 WRITE") + tk.MustExec("select dummy1,count(distinct id) from t1 group by dummy1") + tk.MustExec("update t1 set id=-1 where id=1") + tk.MustExec("LOCK TABLE t1 READ") + _, err := tk.Exec("update t1 set id=1 where id=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite)) + tk.MustExec("unlock tables") + tk.MustExec("update t1 set id=1 where id=-1") + tk.MustExec("drop table t1") +} + +// port from mysql +// https://github.com/mysql/mysql-server/blob/4f1d7cf5fcb11a3f84cff27e37100d7295e7d5ca/mysql-test/t/tablelock.test +func TestTableLock(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1,t2") + + /* Test of lock tables */ + tk.MustExec("create table t1 ( n int auto_increment primary key)") + tk.MustExec("lock tables t1 write") + tk.MustExec("insert into t1 values(NULL)") + tk.MustExec("unlock tables") + checkTableLock(t, tk, "test", "t1", model.TableLockNone) + + tk.MustExec("lock tables t1 write") + tk.MustExec("insert into t1 values(NULL)") + tk.MustExec("unlock tables") + checkTableLock(t, tk, "test", "t1", model.TableLockNone) + + tk.MustExec("drop table if exists t1") + + /* Test of locking and delete of files */ + tk.MustExec("drop table if exists t1,t2") + tk.MustExec("CREATE TABLE t1 (a int)") + tk.MustExec("CREATE TABLE t2 (a int)") + tk.MustExec("lock tables t1 write, t2 write") + tk.MustExec("drop table t1,t2") + + tk.MustExec("CREATE TABLE t1 (a int)") + tk.MustExec("CREATE TABLE t2 (a int)") + tk.MustExec("lock tables t1 write, t2 write") + tk.MustExec("drop table t2,t1") +} + +// port from mysql +// https://github.com/mysql/mysql-server/blob/4f1d7cf5fcb11a3f84cff27e37100d7295e7d5ca/mysql-test/t/lock_tables_lost_commit.test +func TestTableLocksLostCommit(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk2.MustExec("use test") + + tk.MustExec("DROP TABLE IF EXISTS t1") + tk.MustExec("CREATE TABLE t1(a INT)") + tk.MustExec("LOCK TABLES t1 WRITE") + tk.MustExec("INSERT INTO t1 VALUES(10)") + + _, err := tk2.Exec("SELECT * FROM t1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + + tk.Session().Close() + + tk2.MustExec("SELECT * FROM t1") + tk2.MustExec("DROP TABLE t1") + + tk.MustExec("unlock tables") +} + +func checkTableLock(t *testing.T, tk *testkit.TestKit, dbName, tableName string, lockTp model.TableLockType) { + tb := external.GetTableByName(t, tk, dbName, tableName) + dom := domain.GetDomain(tk.Session()) + err := dom.Reload() + require.NoError(t, err) + if lockTp != model.TableLockNone { + require.NotNil(t, tb.Meta().Lock) + require.Equal(t, lockTp, tb.Meta().Lock.Tp) + require.Equal(t, model.TableLockStatePublic, tb.Meta().Lock.State) + require.True(t, len(tb.Meta().Lock.Sessions) == 1) + require.Equal(t, dom.DDL().GetID(), tb.Meta().Lock.Sessions[0].ServerID) + require.Equal(t, tk.Session().GetSessionVars().ConnectionID, tb.Meta().Lock.Sessions[0].SessionID) + } else { + require.Nil(t, tb.Meta().Lock) + } +} + +// test write local lock +func TestWriteLocal(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk2.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 ( n int auto_increment primary key)") + + // Test: allow read + tk.MustExec("lock tables t1 write local") + tk.MustExec("insert into t1 values(NULL)") + tk2.MustQuery("select count(*) from t1") + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") + + // Test: forbid write + tk.MustExec("lock tables t1 write local") + _, err := tk2.Exec("insert into t1 values(NULL)") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") + + // Test mutex: lock write local first + tk.MustExec("lock tables t1 write local") + _, err = tk2.Exec("lock tables t1 write local") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("lock tables t1 write") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("lock tables t1 read") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") + + // Test mutex: lock write first + tk.MustExec("lock tables t1 write") + _, err = tk2.Exec("lock tables t1 write local") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") + + // Test mutex: lock read first + tk.MustExec("lock tables t1 read") + _, err = tk2.Exec("lock tables t1 write local") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") +} + +func TestLockTables(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, time.Microsecond*500) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1,t2") + defer tk.MustExec("drop table if exists t1,t2") + tk.MustExec("create table t1 (a int)") + tk.MustExec("create table t2 (a int)") + + // Test lock 1 table. + tk.MustExec("lock tables t1 write") + checkTableLock(t, tk, "test", "t1", model.TableLockWrite) + tk.MustExec("lock tables t1 read") + checkTableLock(t, tk, "test", "t1", model.TableLockRead) + tk.MustExec("lock tables t1 write") + checkTableLock(t, tk, "test", "t1", model.TableLockWrite) + + // Test lock multi tables. + tk.MustExec("lock tables t1 write, t2 read") + checkTableLock(t, tk, "test", "t1", model.TableLockWrite) + checkTableLock(t, tk, "test", "t2", model.TableLockRead) + tk.MustExec("lock tables t1 read, t2 write") + checkTableLock(t, tk, "test", "t1", model.TableLockRead) + checkTableLock(t, tk, "test", "t2", model.TableLockWrite) + tk.MustExec("lock tables t2 write") + checkTableLock(t, tk, "test", "t2", model.TableLockWrite) + checkTableLock(t, tk, "test", "t1", model.TableLockNone) + tk.MustExec("lock tables t1 write") + checkTableLock(t, tk, "test", "t1", model.TableLockWrite) + checkTableLock(t, tk, "test", "t2", model.TableLockNone) + + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use test") + + // Test read lock. + tk.MustExec("lock tables t1 read") + tk.MustQuery("select * from t1") + tk2.MustQuery("select * from t1") + _, err := tk.Exec("insert into t1 set a=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite)) + _, err = tk.Exec("update t1 set a=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite)) + _, err = tk.Exec("delete from t1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite)) + + _, err = tk2.Exec("insert into t1 set a=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("update t1 set a=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("delete from t1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + tk2.MustExec("lock tables t1 read") + _, err = tk2.Exec("insert into t1 set a=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite)) + + // Test write lock. + _, err = tk.Exec("lock tables t1 write") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + tk2.MustExec("unlock tables") + tk.MustExec("lock tables t1 write") + tk.MustQuery("select * from t1") + tk.MustExec("delete from t1") + tk.MustExec("insert into t1 set a=1") + + _, err = tk2.Exec("select * from t1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("insert into t1 set a=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("lock tables t1 write") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + + // Test write local lock. + tk.MustExec("lock tables t1 write local") + tk.MustQuery("select * from t1") + tk.MustExec("delete from t1") + tk.MustExec("insert into t1 set a=1") + + tk2.MustQuery("select * from t1") + _, err = tk2.Exec("delete from t1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("insert into t1 set a=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("lock tables t1 write") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("lock tables t1 read") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + + // Test none unique table. + _, err = tk.Exec("lock tables t1 read, t1 write") + require.True(t, terror.ErrorEqual(err, infoschema.ErrNonuniqTable)) + + // Test lock table by other session in transaction and commit without retry. + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") + tk.MustExec("set @@session.tidb_disable_txn_auto_retry=1") + tk.MustExec("begin") + tk.MustExec("insert into t1 set a=1") + tk2.MustExec("lock tables t1 write") + _, err = tk.Exec("commit") + require.Error(t, err) + require.Equal(t, "previous statement: insert into t1 set a=1: [domain:8028]Information schema is changed during the execution of the statement(for example, table definition may be updated by other DDL ran in parallel). If you see this error often, try increasing `tidb_max_delta_schema_count`. [try again later]", err.Error()) + + // Test lock table by other session in transaction and commit with retry. + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") + tk.MustExec("set @@session.tidb_disable_txn_auto_retry=0") + tk.MustExec("begin") + tk.MustExec("insert into t1 set a=1") + tk2.MustExec("lock tables t1 write") + _, err = tk.Exec("commit") + require.Truef(t, terror.ErrorEqual(err, infoschema.ErrTableLocked), "err: %v\n", err) + + // Test for lock the same table multiple times. + tk2.MustExec("lock tables t1 write") + tk2.MustExec("lock tables t1 write, t2 read") + + // Test lock tables and drop tables + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") + tk.MustExec("lock tables t1 write, t2 write") + tk.MustExec("drop table t1") + tk2.MustExec("create table t1 (a int)") + tk.MustExec("lock tables t1 write, t2 read") + + // Test lock tables and drop database. + tk.MustExec("unlock tables") + tk.MustExec("create database test_lock") + tk.MustExec("create table test_lock.t3 (a int)") + tk.MustExec("lock tables t1 write, test_lock.t3 write") + tk2.MustExec("create table t3 (a int)") + tk.MustExec("lock tables t1 write, t3 write") + tk.MustExec("drop table t3") + + // Test lock tables and truncate tables. + tk.MustExec("unlock tables") + tk.MustExec("lock tables t1 write, t2 read") + tk.MustExec("truncate table t1") + tk.MustExec("insert into t1 set a=1") + _, err = tk2.Exec("insert into t1 set a=1") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + + // Test for lock unsupported schema tables. + _, err = tk2.Exec("lock tables performance_schema.global_status write") + require.True(t, terror.ErrorEqual(err, infoschema.ErrAccessDenied)) + _, err = tk2.Exec("lock tables information_schema.tables write") + require.True(t, terror.ErrorEqual(err, infoschema.ErrAccessDenied)) + _, err = tk2.Exec("lock tables mysql.db write") + require.True(t, terror.ErrorEqual(err, infoschema.ErrAccessDenied)) + + // Test create table/view when session is holding the table locks. + tk.MustExec("unlock tables") + tk.MustExec("lock tables t1 write, t2 read") + _, err = tk.Exec("create table t3 (a int)") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableNotLocked)) + _, err = tk.Exec("create view v1 as select * from t1;") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableNotLocked)) + + // Test for locking view was not supported. + tk.MustExec("unlock tables") + tk.MustExec("create view v1 as select * from t1;") + _, err = tk.Exec("lock tables v1 read") + require.True(t, terror.ErrorEqual(err, table.ErrUnsupportedOp)) + + // Test for locking sequence was not supported. + tk.MustExec("unlock tables") + tk.MustExec("create sequence seq") + _, err = tk.Exec("lock tables seq read") + require.True(t, terror.ErrorEqual(err, table.ErrUnsupportedOp)) + tk.MustExec("drop sequence seq") + + // Test for create/drop/alter database when session is holding the table locks. + tk.MustExec("unlock tables") + tk.MustExec("lock table t1 write") + _, err = tk.Exec("drop database test") + require.True(t, terror.ErrorEqual(err, table.ErrLockOrActiveTransaction)) + _, err = tk.Exec("create database test_lock") + require.True(t, terror.ErrorEqual(err, table.ErrLockOrActiveTransaction)) + _, err = tk.Exec("alter database test charset='utf8mb4'") + require.True(t, terror.ErrorEqual(err, table.ErrLockOrActiveTransaction)) + // Test alter/drop database when other session is holding the table locks of the database. + tk2.MustExec("create database test_lock2") + _, err = tk2.Exec("drop database test") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + _, err = tk2.Exec("alter database test charset='utf8mb4'") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + + // Test for admin cleanup table locks. + tk.MustExec("unlock tables") + tk.MustExec("lock table t1 write, t2 write") + _, err = tk2.Exec("lock tables t1 write, t2 read") + require.True(t, terror.ErrorEqual(err, infoschema.ErrTableLocked)) + tk2.MustExec("admin cleanup table lock t1,t2") + checkTableLock(t, tk, "test", "t1", model.TableLockNone) + checkTableLock(t, tk, "test", "t2", model.TableLockNone) + // cleanup unlocked table. + tk2.MustExec("admin cleanup table lock t1,t2") + checkTableLock(t, tk, "test", "t1", model.TableLockNone) + checkTableLock(t, tk, "test", "t2", model.TableLockNone) + tk2.MustExec("lock tables t1 write, t2 read") + checkTableLock(t, tk2, "test", "t1", model.TableLockWrite) + checkTableLock(t, tk2, "test", "t2", model.TableLockRead) + + tk.MustExec("unlock tables") + tk2.MustExec("unlock tables") +} + +func TestTablesLockDelayClean(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use test") + tk.MustExec("use test") + tk.MustExec("drop table if exists t1,t2") + defer tk.MustExec("drop table if exists t1,t2") + tk.MustExec("create table t1 (a int)") + tk.MustExec("create table t2 (a int)") + + tk.MustExec("lock tables t1 write") + checkTableLock(t, tk, "test", "t1", model.TableLockWrite) + config.UpdateGlobal(func(conf *config.Config) { + conf.DelayCleanTableLock = 100 + }) + var wg util.WaitGroupWrapper + var startTime time.Time + wg.Run(func() { + startTime = time.Now() + tk.Session().Close() + }) + time.Sleep(50 * time.Millisecond) + checkTableLock(t, tk, "test", "t1", model.TableLockWrite) + wg.Wait() + require.True(t, time.Since(startTime).Seconds() > 0.1) + checkTableLock(t, tk, "test", "t1", model.TableLockNone) + config.UpdateGlobal(func(conf *config.Config) { + conf.DelayCleanTableLock = 0 + }) +} + +func TestDDLWithInvalidTableInfo(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + defer tk.MustExec("drop table if exists t") + // Test create with invalid expression. + _, err := tk.Exec(`CREATE TABLE t ( + c0 int(11) , + c1 int(11), + c2 decimal(16,4) GENERATED ALWAYS AS ((case when (c0 = 0) then 0when (c0 > 0) then (c1 / c0) end)) + );`) + require.Error(t, err) + require.Equal(t, "[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 4 column 88 near \"then (c1 / c0) end))\n\t);\" ", err.Error()) + + tk.MustExec("create table t (a bigint, b int, c int generated always as (b+1)) partition by hash(a) partitions 4;") + // Test drop partition column. + _, err = tk.Exec("alter table t drop column a;") + require.Error(t, err) + // TODO: refine the error message to compatible with MySQL + require.Equal(t, "[planner:1054]Unknown column 'a' in 'expression'", err.Error()) + // Test modify column with invalid expression. + _, err = tk.Exec("alter table t modify column c int GENERATED ALWAYS AS ((case when (a = 0) then 0when (a > 0) then (b / a) end));") + require.Error(t, err) + require.Equal(t, "[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 97 near \"then (b / a) end));\" ", err.Error()) + // Test add column with invalid expression. + _, err = tk.Exec("alter table t add column d int GENERATED ALWAYS AS ((case when (a = 0) then 0when (a > 0) then (b / a) end));") + require.Error(t, err) + require.Equal(t, "[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 94 near \"then (b / a) end));\" ", err.Error()) +} + +func TestAddColumn2(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, time.Microsecond*500) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int key, b int);") + defer tk.MustExec("drop table if exists t1, t2") + + originHook := dom.DDL().GetHook() + defer dom.DDL().SetHook(originHook) + hook := &ddl.TestDDLCallback{Do: dom} + var writeOnlyTable table.Table + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.SchemaState == model.StateWriteOnly { + writeOnlyTable, _ = dom.InfoSchema().TableByID(job.TableID) + } + } + dom.DDL().SetHook(hook) + done := make(chan error, 1) + // test transaction on add column. + go backgroundExec(store, "alter table t1 add column c int not null", done) + err := <-done + require.NoError(t, err) + + tk.MustExec("insert into t1 values (1,1,1)") + tk.MustQuery("select a,b,c from t1").Check(testkit.Rows("1 1 1")) + + // mock for outdated tidb update record. + require.NotNil(t, writeOnlyTable) + ctx := context.Background() + err = tk.Session().NewTxn(ctx) + require.NoError(t, err) + oldRow, err := tables.RowWithCols(writeOnlyTable, tk.Session(), kv.IntHandle(1), writeOnlyTable.WritableCols()) + require.NoError(t, err) + require.Equal(t, 3, len(oldRow)) + err = writeOnlyTable.RemoveRecord(tk.Session(), kv.IntHandle(1), oldRow) + require.NoError(t, err) + _, err = writeOnlyTable.AddRecord(tk.Session(), types.MakeDatums(oldRow[0].GetInt64(), 2, oldRow[2].GetInt64()), table.IsUpdate) + require.NoError(t, err) + tk.Session().StmtCommit() + err = tk.Session().CommitTxn(ctx) + require.NoError(t, err) + + tk.MustQuery("select a,b,c from t1").Check(testkit.Rows("1 2 1")) + + // Test for _tidb_rowid + var re *testkit.Result + tk.MustExec("create table t2 (a int);") + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.SchemaState != model.StateWriteOnly { + return + } + // allow write _tidb_rowid first + tk.MustExec("set @@tidb_opt_write_row_id=1") + tk.MustExec("begin") + tk.MustExec("insert into t2 (a,_tidb_rowid) values (1,2);") + re = tk.MustQuery(" select a,_tidb_rowid from t2;") + tk.MustExec("commit") + + } + dom.DDL().SetHook(hook) + + go backgroundExec(store, "alter table t2 add column b int not null default 3", done) + err = <-done + require.NoError(t, err) + re.Check(testkit.Rows("1 2")) + tk.MustQuery("select a,b,_tidb_rowid from t2").Check(testkit.Rows("1 3 2")) +} diff --git a/ddl/db_test.go b/ddl/db_test.go index 254c316e92918..b188f05bc908b 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -1,4 +1,4 @@ -// Copyright 2015 PingCAP, Inc. +// Copyright 2022 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,57 +15,34 @@ package ddl_test import ( - "bytes" "context" "fmt" - "math" - "math/rand" "sort" "strconv" "strings" - "sync" - "sync/atomic" + "testing" "time" - . "github.com/pingcap/check" - "github.com/pingcap/errors" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" - testddlutil "github.com/pingcap/tidb/ddl/testutil" ddlutil "github.com/pingcap/tidb/ddl/util" - "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/errno" - "github.com/pingcap/tidb/executor" - "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/auth" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" - "github.com/pingcap/tidb/parser/terror" parsertypes "github.com/pingcap/tidb/parser/types" "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" - "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/table/tables" - "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/admin" - "github.com/pingcap/tidb/util/codec" - "github.com/pingcap/tidb/util/domainutil" - "github.com/pingcap/tidb/util/israce" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/sqlexec" - "github.com/pingcap/tidb/util/testkit" - "github.com/pingcap/tidb/util/testutil" - "github.com/tikv/client-go/v2/testutils" + "github.com/stretchr/testify/require" ) const ( @@ -75,7765 +52,1114 @@ const ( waitForCleanDataInterval = time.Millisecond * 100 ) -var _ = Suite(&testDBSuite1{&testDBSuite{}}) -var _ = Suite(&testDBSuite2{&testDBSuite{}}) -var _ = Suite(&testDBSuite3{&testDBSuite{}}) -var _ = Suite(&testDBSuite4{&testDBSuite{}}) -var _ = Suite(&testDBSuite5{&testDBSuite{}}) -var _ = SerialSuites(&testDBSuite6{&testDBSuite{}}) -var _ = Suite(&testDBSuite7{&testDBSuite{}}) -var _ = Suite(&testDBSuite8{&testDBSuite{}}) -var _ = SerialSuites(&testSerialDBSuite{&testDBSuite{}}) -var _ = SerialSuites(&testSerialDBSuite1{&testDBSuite{}}) - const defaultBatchSize = 1024 const defaultReorgBatchSize = 256 -type testDBSuite struct { - cluster testutils.Cluster - store kv.Storage - dom *domain.Domain - schemaName string - s session.Session - lease time.Duration - autoIDStep int64 - ctx sessionctx.Context -} +const dbTestLease = 600 * time.Millisecond -func setUpSuite(s *testDBSuite, c *C) { - var err error - - s.lease = 600 * time.Millisecond - session.SetSchemaLease(s.lease) - session.DisableStats4Test() - s.schemaName = "test_db" - s.autoIDStep = autoid.GetStep() - ddl.SetWaitTimeWhenErrorOccurred(0) - - s.store, err = mockstore.NewMockStore( - mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithSingleStore(c) - s.cluster = c - }), - ) - c.Assert(err, IsNil) - - s.dom, err = session.BootstrapSession(s.store) - c.Assert(err, IsNil) - s.s, err = session.CreateSession4Test(s.store) - c.Assert(err, IsNil) - s.ctx = s.s.(sessionctx.Context) - - _, err = s.s.Execute(context.Background(), "create database test_db") - c.Assert(err, IsNil) - _, err = s.s.Execute(context.Background(), "set @@global.tidb_max_delta_schema_count= 4096") - c.Assert(err, IsNil) -} +// Close issue #24580 +// See https://github.com/pingcap/tidb/issues/24580 +func TestIssue24580(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() -func tearDownSuite(s *testDBSuite, c *C) { - _, err := s.s.Execute(context.Background(), "drop database if exists test_db") - c.Assert(err, IsNil) - s.s.Close() - s.dom.Close() - err = s.store.Close() - c.Assert(err, IsNil) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a char(250) default null);") + tk.MustExec("insert into t values();") + tk.MustGetErrMsg("alter table t modify a char not null;", "[ddl:1265]Data truncated for column 'a' at row 1") + tk.MustExec("drop table if exists t") } -func (s *testDBSuite) SetUpSuite(c *C) { - setUpSuite(s, c) -} +// Close issue #27862 https://github.com/pingcap/tidb/issues/27862 +// Ref: https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html#data-types-storage-reqs-strings +// text(100) in utf8mb4 charset needs max 400 byte length, thus tinytext is not enough. +func TestCreateTextAdjustLen(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() -func (s *testDBSuite) TearDownSuite(c *C) { - tearDownSuite(s, c) -} + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a text(100));") + tk.MustQuery("show create table t").Check(testkit.RowsWithSep("|", ""+ + "t CREATE TABLE `t` (\n"+ + " `a` text DEFAULT NULL\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("alter table t add b text(100);") + tk.MustExec("alter table t add c text;") + tk.MustExec("alter table t add d text(50);") + tk.MustExec("alter table t change column a a text(50);") + tk.MustQuery("show create table t").Check(testkit.RowsWithSep("|", ""+ + "t CREATE TABLE `t` (\n"+ + " `a` tinytext DEFAULT NULL,\n"+ + " `b` text DEFAULT NULL,\n"+ + " `c` text DEFAULT NULL,\n"+ + " `d` tinytext DEFAULT NULL\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) -type testDBSuite1 struct{ *testDBSuite } -type testDBSuite2 struct{ *testDBSuite } -type testDBSuite3 struct{ *testDBSuite } -type testDBSuite4 struct{ *testDBSuite } -type testDBSuite5 struct{ *testDBSuite } -type testDBSuite6 struct{ *testDBSuite } -type testDBSuite7 struct{ *testDBSuite } -type testDBSuite8 struct{ *testDBSuite } -type testSerialDBSuite struct{ *testDBSuite } -type testSerialDBSuite1 struct{ *testDBSuite } - -func testAddIndexWithPK(tk *testkit.TestKit) { - tk.MustExec("drop table if exists test_add_index_with_pk") - tk.MustExec("create table test_add_index_with_pk(a int not null, b int not null default '0', primary key(a))") - tk.MustExec("insert into test_add_index_with_pk values(1, 2)") - tk.MustExec("alter table test_add_index_with_pk add index idx (a)") - tk.MustQuery("select a from test_add_index_with_pk").Check(testkit.Rows("1")) - tk.MustExec("insert into test_add_index_with_pk values(2, 2)") - tk.MustExec("alter table test_add_index_with_pk add index idx1 (a, b)") - tk.MustQuery("select * from test_add_index_with_pk").Check(testkit.Rows("1 2", "2 2")) - tk.MustExec("drop table if exists test_add_index_with_pk1") - tk.MustExec("create table test_add_index_with_pk1(a int not null, b int not null default '0', c int, d int, primary key(c))") - tk.MustExec("insert into test_add_index_with_pk1 values(1, 1, 1, 1)") - tk.MustExec("alter table test_add_index_with_pk1 add index idx (c)") - tk.MustExec("insert into test_add_index_with_pk1 values(2, 2, 2, 2)") - tk.MustQuery("select * from test_add_index_with_pk1").Check(testkit.Rows("1 1 1 1", "2 2 2 2")) - tk.MustExec("drop table if exists test_add_index_with_pk2") - tk.MustExec("create table test_add_index_with_pk2(a int not null, b int not null default '0', c int unsigned, d int, primary key(c))") - tk.MustExec("insert into test_add_index_with_pk2 values(1, 1, 1, 1)") - tk.MustExec("alter table test_add_index_with_pk2 add index idx (c)") - tk.MustExec("insert into test_add_index_with_pk2 values(2, 2, 2, 2)") - tk.MustQuery("select * from test_add_index_with_pk2").Check(testkit.Rows("1 1 1 1", "2 2 2 2")) + // Ref: https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html + // TINYBLOB, TINYTEXT L + 1 bytes, where L < 2^8 + // BLOB, TEXT L + 2 bytes, where L < 2^16 + // MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2^24 + // LONGBLOB, LONGTEXT L + 4 bytes, where L < 2^32 + tk.MustExec("alter table t change column d d text(100);") + tk.MustExec("alter table t change column c c text(30000);") + tk.MustExec("alter table t change column b b text(10000000);") + tk.MustQuery("show create table t").Check(testkit.RowsWithSep("|", ""+ + "t CREATE TABLE `t` (\n"+ + " `a` tinytext DEFAULT NULL,\n"+ + " `b` longtext DEFAULT NULL,\n"+ + " `c` mediumtext DEFAULT NULL,\n"+ + " `d` text DEFAULT NULL\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int, b int, c int, primary key(a, b));") - tk.MustExec("insert into t values (1, 2, 3);") - tk.MustExec("create index idx on t (a, b);") } -func (s *testDBSuite7) TestAddIndexWithPK(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) +func TestGetTimeZone(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() - testAddIndexWithPK(tk) - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - testAddIndexWithPK(tk) -} + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") -func (s *testDBSuite5) TestAddIndexWithDupIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - - err1 := ddl.ErrDupKeyName.GenWithStack("index already exist %s", "idx") - err2 := ddl.ErrDupKeyName.GenWithStack("index already exist %s; "+ - "a background job is trying to add the same index, "+ - "please check by `ADMIN SHOW DDL JOBS`", "idx") - - // When there is already an duplicate index, show error message. - tk.MustExec("create table test_add_index_with_dup (a int, key idx (a))") - _, err := tk.Exec("alter table test_add_index_with_dup add index idx (a)") - c.Check(errors.Cause(err1).(*terror.Error).Equal(err), Equals, true) - c.Assert(errors.Cause(err1).Error() == err.Error(), IsTrue) - - // When there is another session adding duplicate index with state other than - // StatePublic, show explicit error message. - t := s.testGetTable(c, "test_add_index_with_dup") - indexInfo := t.Meta().FindIndexByName("idx") - indexInfo.State = model.StateNone - _, err = tk.Exec("alter table test_add_index_with_dup add index idx (a)") - c.Check(errors.Cause(err2).(*terror.Error).Equal(err), Equals, true) - c.Assert(errors.Cause(err2).Error() == err.Error(), IsTrue) - - tk.MustExec("drop table test_add_index_with_dup") + testCases := []struct { + tzSQL string + tzStr string + tzName string + offset int + err string + }{ + {"set time_zone = '+00:00'", "", "UTC", 0, ""}, + {"set time_zone = '-00:00'", "", "UTC", 0, ""}, + {"set time_zone = 'UTC'", "UTC", "UTC", 0, ""}, + {"set time_zone = '+05:00'", "", "UTC", 18000, ""}, + {"set time_zone = '-08:00'", "", "UTC", -28800, ""}, + {"set time_zone = '+08:00'", "", "UTC", 28800, ""}, + {"set time_zone = 'Asia/Shanghai'", "Asia/Shanghai", "Asia/Shanghai", 0, ""}, + {"set time_zone = 'SYSTEM'", "Asia/Shanghai", "Asia/Shanghai", 0, ""}, + {"set time_zone = DEFAULT", "Asia/Shanghai", "Asia/Shanghai", 0, ""}, + {"set time_zone = 'GMT'", "GMT", "GMT", 0, ""}, + {"set time_zone = 'GMT+1'", "GMT", "GMT", 0, "[variable:1298]Unknown or incorrect time zone: 'GMT+1'"}, + {"set time_zone = 'Etc/GMT+12'", "Etc/GMT+12", "Etc/GMT+12", 0, ""}, + {"set time_zone = 'Etc/GMT-12'", "Etc/GMT-12", "Etc/GMT-12", 0, ""}, + {"set time_zone = 'EST'", "EST", "EST", 0, ""}, + {"set time_zone = 'Australia/Lord_Howe'", "Australia/Lord_Howe", "Australia/Lord_Howe", 0, ""}, + } + for _, tc := range testCases { + if tc.err != "" { + tk.MustGetErrMsg(tc.tzSQL, tc.err) + } else { + tk.MustExec(tc.tzSQL) + } + require.Equal(t, tc.tzStr, tk.Session().GetSessionVars().TimeZone.String(), fmt.Sprintf("sql: %s", tc.tzSQL)) + tz, offset := ddlutil.GetTimeZone(tk.Session()) + require.Equal(t, tz, tc.tzName, fmt.Sprintf("sql: %s, offset: %d", tc.tzSQL, offset)) + require.Equal(t, offset, tc.offset, fmt.Sprintf("sql: %s", tc.tzSQL)) + } } -func (s *testDBSuite1) TestRenameIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("create table t (pk int primary key, c int default 1, c1 int default 1, unique key k1(c), key k2(c1))") - - // Test rename success - tk.MustExec("alter table t rename index k1 to k3") - tk.MustExec("admin check index t k3") +// for issue #30328 +func TestTooBigFieldLengthAutoConvert(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() - // Test rename to the same name - tk.MustExec("alter table t rename index k3 to k3") - tk.MustExec("admin check index t k3") + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") - // Test rename on non-exists keys - tk.MustGetErrCode("alter table t rename index x to x", errno.ErrKeyDoesNotExist) + err := tk.ExecToErr("create table i30328_1(a varbinary(70000), b varchar(70000000))") + require.True(t, types.ErrTooBigFieldLength.Equal(err)) - // Test rename on already-exists keys - tk.MustGetErrCode("alter table t rename index k3 to k2", errno.ErrDupKeyName) + // save previous sql_mode and change + r := tk.MustQuery("select @@sql_mode") + defer func(sqlMode string) { + tk.MustExec("set @@sql_mode= '" + sqlMode + "'") + tk.MustExec("drop table if exists i30328_1") + tk.MustExec("drop table if exists i30328_2") + }(r.Rows()[0][0].(string)) + tk.MustExec("set @@sql_mode='NO_ENGINE_SUBSTITUTION'") - tk.MustExec("alter table t rename index k2 to K2") - tk.MustGetErrCode("alter table t rename key k3 to K2", errno.ErrDupKeyName) + tk.MustExec("create table i30328_1(a varbinary(70000), b varchar(70000000))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1246 Converting column 'a' from VARBINARY to BLOB", "Warning 1246 Converting column 'b' from VARCHAR to TEXT")) + tk.MustExec("create table i30328_2(a varchar(200))") + tk.MustExec("alter table i30328_2 modify a varchar(70000000);") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1246 Converting column 'a' from VARCHAR to TEXT")) } -func testGetTableByName(c *C, ctx sessionctx.Context, db, table string) table.Table { - dom := domain.GetDomain(ctx) - // Make sure the table schema is the new schema. - err := dom.Reload() - c.Assert(err, IsNil) - tbl, err := dom.InfoSchema().TableByName(model.NewCIStr(db), model.NewCIStr(table)) - c.Assert(err, IsNil) - return tbl -} +// For Close issue #24288 +// see https://github.com/pingcap/tidb/issues/24288 +func TestDdlMaxLimitOfIdentifier(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() -func testGetSchemaByName(c *C, ctx sessionctx.Context, db string) *model.DBInfo { - dom := domain.GetDomain(ctx) - // Make sure the table schema is the new schema. - err := dom.Reload() - c.Assert(err, IsNil) - dbInfo, ok := dom.InfoSchema().SchemaByName(model.NewCIStr(db)) - c.Assert(ok, IsTrue) - return dbInfo -} + tk := testkit.NewTestKit(t, store) -func (s *testDBSuite) testGetTable(c *C, name string) table.Table { - ctx := s.s.(sessionctx.Context) - return testGetTableByName(c, ctx, s.schemaName, name) -} + // create/drop database test + longDbName := strings.Repeat("库", mysql.MaxDatabaseNameLength-1) + tk.MustExec(fmt.Sprintf("create database %s", longDbName)) + defer func() { + tk.MustExec(fmt.Sprintf("drop database %s", longDbName)) + }() + tk.MustExec(fmt.Sprintf("use %s", longDbName)) -func (s *testDBSuite) testGetDB(c *C, dbName string) *model.DBInfo { - ctx := s.s.(sessionctx.Context) - dom := domain.GetDomain(ctx) - // Make sure the table schema is the new schema. - err := dom.Reload() - c.Assert(err, IsNil) - db, ok := dom.InfoSchema().SchemaByName(model.NewCIStr(dbName)) - c.Assert(ok, IsTrue) - return db -} + // create/drop table,index test + longTblName := strings.Repeat("表", mysql.MaxTableNameLength-1) + longColName := strings.Repeat("三", mysql.MaxColumnNameLength-1) + longIdxName := strings.Repeat("索", mysql.MaxIndexIdentifierLen-1) + tk.MustExec(fmt.Sprintf("create table %s(f1 int primary key,f2 int, %s varchar(50))", longTblName, longColName)) + tk.MustExec(fmt.Sprintf("create index %s on %s(%s)", longIdxName, longTblName, longColName)) + defer func() { + tk.MustExec(fmt.Sprintf("drop index %s on %s", longIdxName, longTblName)) + tk.MustExec(fmt.Sprintf("drop table %s", longTblName)) + }() -func backgroundExec(s kv.Storage, sql string, done chan error) { - se, err := session.CreateSession4Test(s) - if err != nil { - done <- errors.Trace(err) - return - } - defer se.Close() - _, err = se.Execute(context.Background(), "use test_db") - if err != nil { - done <- errors.Trace(err) - return - } - _, err = se.Execute(context.Background(), sql) - done <- errors.Trace(err) -} + // alter table + tk.MustExec(fmt.Sprintf("alter table %s change f2 %s int", longTblName, strings.Repeat("二", mysql.MaxColumnNameLength-1))) -// TestAddPrimaryKeyRollback1 is used to test scenarios that will roll back when a duplicate primary key is encountered. -func (s *testDBSuite8) TestAddPrimaryKeyRollback1(c *C) { - hasNullValsInKey := false - idxName := "PRIMARY" - addIdxSQL := "alter table t1 add primary key c3_index (c3);" - errMsg := "[kv:1062]Duplicate entry '" + strconv.Itoa(defaultBatchSize*2-10) + "' for key 'PRIMARY'" - testAddIndexRollback(c, s.store, s.lease, idxName, addIdxSQL, errMsg, hasNullValsInKey) } -// TestAddPrimaryKeyRollback2 is used to test scenarios that will roll back when a null primary key is encountered. -func (s *testDBSuite8) TestAddPrimaryKeyRollback2(c *C) { - hasNullValsInKey := true - idxName := "PRIMARY" - addIdxSQL := "alter table t1 add primary key c3_index (c3);" - errMsg := "[ddl:1138]Invalid use of NULL value" - testAddIndexRollback(c, s.store, s.lease, idxName, addIdxSQL, errMsg, hasNullValsInKey) -} +// Close issue #23321. +// See https://github.com/pingcap/tidb/issues/23321 +func TestJsonUnmarshalErrWhenPanicInCancellingPath(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") -func (s *testDBSuite2) TestAddUniqueIndexRollback(c *C) { - hasNullValsInKey := false - idxName := "c3_index" - addIdxSQL := "create unique index c3_index on t1 (c3)" - errMsg := "[kv:1062]Duplicate entry '" + strconv.Itoa(defaultBatchSize*2-10) + "' for key 'c3_index'" - testAddIndexRollback(c, s.store, s.lease, idxName, addIdxSQL, errMsg, hasNullValsInKey) + tk.MustExec("drop table if exists test_add_index_after_add_col") + tk.MustExec("create table test_add_index_after_add_col(a int, b int not null default '0');") + tk.MustExec("insert into test_add_index_after_add_col values(1, 2),(2,2);") + tk.MustExec("alter table test_add_index_after_add_col add column c int not null default '0';") + tk.MustGetErrMsg("alter table test_add_index_after_add_col add unique index cc(c);", "[kv:1062]Duplicate entry '0' for key 'cc'") } -func (s *testSerialDBSuite) TestWriteReorgForColumnTypeChangeOnAmendTxn(c *C) { - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test_db") - tk2.MustExec("set global tidb_enable_amend_pessimistic_txn = ON;") +func TestIssue22819(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test;") + tk1.MustExec("drop table if exists t1;") defer func() { - tk2.MustExec("set global tidb_enable_amend_pessimistic_txn = OFF;") + tk1.MustExec("drop table if exists t1;") }() - d := s.dom.DDL() - originalHook := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originalHook) - testInsertOnModifyColumn := func(sql string, startColState, commitColState model.SchemaState, retStrs []string, retErr error) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (c1 int, c2 int, c3 int, unique key(c1))") - tk.MustExec("insert into t1 values (20, 20, 20);") - - var checkErr error - tk1 := testkit.NewTestKit(c, s.store) - defer func() { - if tk1.Se != nil { - tk1.Se.Close() - } - }() - hook := &ddl.TestDDLCallback{Do: s.dom} - times := 0 - hook.OnJobUpdatedExported = func(job *model.Job) { - if job.Type != model.ActionModifyColumn || checkErr != nil || - (job.SchemaState != startColState && job.SchemaState != commitColState) { - return - } - - if job.SchemaState == startColState { - tk1.MustExec("use test_db") - tk1.MustExec("begin pessimistic;") - tk1.MustExec("insert into t1 values(101, 102, 103)") - return - } - if times == 0 { - _, checkErr = tk1.Exec("commit;") - } - times++ - } - d.(ddl.DDLForTest).SetHook(hook) + tk1.MustExec("create table t1 (v int) partition by hash (v) partitions 2") + tk1.MustExec("insert into t1 values (1)") - tk.MustExec(sql) - if retErr == nil { - c.Assert(checkErr, IsNil) - } else { - c.Assert(strings.Contains(checkErr.Error(), retErr.Error()), IsTrue) - } - tk.MustQuery("select * from t1;").Check(testkit.Rows(retStrs...)) + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use test;") + tk1.MustExec("begin") + tk1.MustExec("update t1 set v = 2 where v = 1") - tk.MustExec("admin check table t1") - } + tk2.MustExec("alter table t1 truncate partition p0") - // Testing it needs reorg data. - ddlStatement := "alter table t1 change column c2 cc smallint;" - testInsertOnModifyColumn(ddlStatement, model.StateNone, model.StateWriteReorganization, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) - testInsertOnModifyColumn(ddlStatement, model.StateDeleteOnly, model.StateWriteReorganization, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) - testInsertOnModifyColumn(ddlStatement, model.StateWriteOnly, model.StateWriteReorganization, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) - testInsertOnModifyColumn(ddlStatement, model.StateNone, model.StatePublic, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) - testInsertOnModifyColumn(ddlStatement, model.StateDeleteOnly, model.StatePublic, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) - testInsertOnModifyColumn(ddlStatement, model.StateWriteOnly, model.StatePublic, []string{"20 20 20"}, domain.ErrInfoSchemaChanged) - - // Testing it needs not reorg data. This case only have two state: none, public. - ddlStatement = "alter table t1 change column c2 cc bigint;" - testInsertOnModifyColumn(ddlStatement, model.StateNone, model.StateWriteReorganization, []string{"20 20 20"}, nil) - testInsertOnModifyColumn(ddlStatement, model.StateWriteOnly, model.StateWriteReorganization, []string{"20 20 20"}, nil) - testInsertOnModifyColumn(ddlStatement, model.StateNone, model.StatePublic, []string{"20 20 20", "101 102 103"}, nil) - testInsertOnModifyColumn(ddlStatement, model.StateWriteOnly, model.StatePublic, []string{"20 20 20"}, nil) + err := tk1.ExecToErr("commit") + require.Error(t, err) + require.Regexp(t, ".*8028.*Information schema is changed during the execution of the statement.*", err.Error()) } -func (s *testSerialDBSuite) TestAddExpressionIndexRollback(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (c1 int, c2 int, c3 int, unique key(c1))") - tk.MustExec("insert into t1 values (20, 20, 20), (40, 40, 40), (80, 80, 80), (160, 160, 160);") +func TestIssue22307(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + defer clean() - var checkErr error - tk1 := testkit.NewTestKit(c, s.store) - _, checkErr = tk1.Exec("use test_db") + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, b int)") + tk.MustExec("insert into t values(1, 1);") - d := s.dom.DDL() - hook := &ddl.TestDDLCallback{Do: s.dom} - var currJob *model.Job - ctx := mock.NewContext() - ctx.Store = s.store - times := 0 - hook.OnJobUpdatedExported = func(job *model.Job) { - if checkErr != nil { + hook := &ddl.TestDDLCallback{Do: dom} + var checkErr1, checkErr2 error + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.SchemaState != model.StateWriteOnly { return } - switch job.SchemaState { - case model.StateDeleteOnly: - _, checkErr = tk1.Exec("insert into t1 values (6, 3, 3) on duplicate key update c1 = 10") - if checkErr == nil { - _, checkErr = tk1.Exec("update t1 set c1 = 7 where c2=6;") - } - if checkErr == nil { - _, checkErr = tk1.Exec("delete from t1 where c1 = 40;") - } - case model.StateWriteOnly: - _, checkErr = tk1.Exec("insert into t1 values (2, 2, 2)") - if checkErr == nil { - _, checkErr = tk1.Exec("update t1 set c1 = 3 where c2 = 80") - } - case model.StateWriteReorganization: - if checkErr == nil && job.SchemaState == model.StateWriteReorganization && times == 0 { - _, checkErr = tk1.Exec("insert into t1 values (4, 4, 4)") - if checkErr != nil { - return - } - _, checkErr = tk1.Exec("update t1 set c1 = 5 where c2 = 80") - if checkErr != nil { - return - } - currJob = job - times++ - } - } + _, checkErr1 = tk.Exec("update t set a = 3 where b = 1;") + _, checkErr2 = tk.Exec("update t set a = 3 order by b;") } - d.(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) + done := make(chan error, 1) + // test transaction on add column. + go backgroundExec(store, "alter table t drop column b;", done) + err := <-done + require.NoError(t, err) + require.EqualError(t, checkErr1, "[planner:1054]Unknown column 'b' in 'where clause'") + require.EqualError(t, checkErr2, "[planner:1054]Unknown column 'b' in 'order clause'") +} - tk.MustGetErrMsg("alter table t1 add index expr_idx ((pow(c1, c2)));", "[ddl:8202]Cannot decode index value, because [types:1690]DOUBLE value is out of range in 'pow(160, 160)'") - c.Assert(checkErr, IsNil) - tk.MustQuery("select * from t1 order by c1;").Check(testkit.Rows("2 2 2", "4 4 4", "5 80 80", "10 3 3", "20 20 20", "160 160 160")) +func TestIssue9100(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() - // Check whether the reorg information is cleaned up. - err := ctx.NewTxn(context.Background()) - c.Assert(err, IsNil) - txn, err := ctx.Txn(true) - c.Assert(err, IsNil) - m := meta.NewMeta(txn) - element, start, end, physicalID, err := m.GetDDLReorgHandle(currJob) - c.Assert(meta.ErrDDLReorgElementNotExist.Equal(err), IsTrue) - c.Assert(element, IsNil) - c.Assert(start, IsNil) - c.Assert(end, IsNil) - c.Assert(physicalID, Equals, int64(0)) -} + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table employ (a int, b int) partition by range (b) (partition p0 values less than (1));") + tk.MustGetErrMsg("alter table employ add unique index p_a (a);", "[ddl:1503]A UNIQUE INDEX must include all columns in the table's partitioning function") + tk.MustGetErrMsg("alter table employ add primary key p_a (a);", "[ddl:1503]A PRIMARY must include all columns in the table's partitioning function") -func (s *testSerialDBSuite) TestDropTableOnTiKVDiskFull(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("create table test_disk_full_drop_table(a int);") - c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/rpcTiKVAllowedOnAlmostFull", `return(true)`), IsNil) - defer failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/rpcTiKVAllowedOnAlmostFull") - tk.MustExec("drop table test_disk_full_drop_table;") -} + tk.MustExec("create table issue9100t1 (col1 int not null, col2 date not null, col3 int not null, unique key (col1, col2)) partition by range( col1 ) (partition p1 values less than (11))") + tk.MustExec("alter table issue9100t1 add unique index p_col1 (col1)") + tk.MustExec("alter table issue9100t1 add primary key p_col1 (col1)") -func batchInsert(tk *testkit.TestKit, tbl string, start, end int) { - dml := fmt.Sprintf("insert into %s values", tbl) - for i := start; i < end; i++ { - dml += fmt.Sprintf("(%d, %d, %d)", i, i, i) - if i != end-1 { - dml += "," - } - } - tk.MustExec(dml) + tk.MustExec("create table issue9100t2 (col1 int not null, col2 date not null, col3 int not null, unique key (col1, col3)) partition by range( col1 + col3 ) (partition p1 values less than (11))") + tk.MustGetErrMsg("alter table issue9100t2 add unique index p_col1 (col1)", "[ddl:1503]A UNIQUE INDEX must include all columns in the table's partitioning function") + tk.MustGetErrMsg("alter table issue9100t2 add primary key p_col1 (col1)", "[ddl:1503]A PRIMARY must include all columns in the table's partitioning function") } -func testAddIndexRollback(c *C, store kv.Storage, lease time.Duration, idxName, addIdxSQL, errMsg string, hasNullValsInKey bool) { - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (c1 int, c2 int, c3 int, unique key(c1))") - // defaultBatchSize is equal to ddl.defaultBatchSize - base := defaultBatchSize * 2 - count := base - // add some rows - batchInsert(tk, "t1", 0, count) - // add some null rows - if hasNullValsInKey { - for i := count - 10; i < count; i++ { - tk.MustExec("insert into t1 values (?, ?, null)", i+10, i) - } - } else { - // add some duplicate rows - for i := count - 10; i < count; i++ { - tk.MustExec("insert into t1 values (?, ?, ?)", i+10, i, i) - } - } +func TestIssue22207(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() - done := make(chan error, 1) - go backgroundExec(store, addIdxSQL, done) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@session.tidb_enable_list_partition = ON") + tk.MustExec("set @@session.tidb_enable_exchange_partition = 1;") + tk.MustExec("drop table if exists t1;") + tk.MustExec("drop table if exists t2;") + tk.MustExec("create table t1(id char(10)) partition by list columns(id) (partition p0 values in ('a'), partition p1 values in ('b'));") + tk.MustExec("insert into t1 VALUES('a')") + tk.MustExec("create table t2(id char(10));") + tk.MustExec("ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;") + tk.MustQuery("select * from t2").Check(testkit.Rows("a")) + require.Len(t, tk.MustQuery("select * from t1").Rows(), 0) - times := 0 - ticker := time.NewTicker(lease / 2) - defer ticker.Stop() -LOOP: - for { - select { - case err := <-done: - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, errMsg, Commentf("err:%v", err)) - break LOOP - case <-ticker.C: - if times >= 10 { - break - } - step := 5 - // delete some rows, and add some data - for i := count; i < count+step; i++ { - n := rand.Intn(count) - // (2048, 2038, 2038) and (2038, 2038, 2038) - // Don't delete rows where c1 is 2048 or 2038, otherwise, the entry value in duplicated error message would change. - if n == defaultBatchSize*2-10 || n == defaultBatchSize*2 { - continue - } - tk.MustExec("delete from t1 where c1 = ?", n) - tk.MustExec("insert into t1 values (?, ?, ?)", i+10, i, i) - } - count += step - times++ - } - } + tk.MustExec("drop table if exists t1;") + tk.MustExec("drop table if exists t2;") + tk.MustExec("create table t1 (id int) partition by list (id) (partition p0 values in (1,2,3), partition p1 values in (4,5,6));") + tk.MustExec("insert into t1 VALUES(1);") + tk.MustExec("insert into t1 VALUES(2);") + tk.MustExec("insert into t1 VALUES(3);") + tk.MustExec("create table t2(id int);") + tk.MustExec("ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;") + tk.MustQuery("select * from t2").Check(testkit.Rows("1", "2", "3")) + require.Len(t, tk.MustQuery("select * from t1").Rows(), 0) + tk.MustExec("set @@session.tidb_enable_exchange_partition = 0;") +} - ctx := tk.Se.(sessionctx.Context) - t := testGetTableByName(c, ctx, "test_db", "t1") - for _, tidx := range t.Indices() { - c.Assert(strings.EqualFold(tidx.Meta().Name.L, idxName), IsFalse) - } +func TestIssue23473(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() - // delete duplicated/null rows, then add index - for i := base - 10; i < base; i++ { - tk.MustExec("delete from t1 where c1 = ?", i+10) - } - sessionExec(c, store, addIdxSQL) - tk.MustExec("drop table t1") -} + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t_23473;") + tk.MustExec("create table t_23473 (k int primary key, v int)") + tk.MustExec("alter table t_23473 change column k k bigint") -func (s *testDBSuite8) TestCancelAddPrimaryKey(c *C) { - idxName := "primary" - addIdxSQL := "alter table t1 add primary key idx_c2 (c2);" - testCancelAddIndex(c, s.store, s.dom.DDL(), s.lease, idxName, addIdxSQL, "", s.dom) - - // Check the column's flag when the "add primary key" failed. - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - ctx := tk.Se.(sessionctx.Context) - c.Assert(ctx.NewTxn(context.Background()), IsNil) - t := testGetTableByName(c, ctx, "test_db", "t1") - col1Flag := t.Cols()[1].Flag - c.Assert(!mysql.HasNotNullFlag(col1Flag) && !mysql.HasPreventNullInsertFlag(col1Flag) && mysql.HasUnsignedFlag(col1Flag), IsTrue) - tk.MustExec("drop table t1") + tbl := external.GetTableByName(t, tk, "test", "t_23473") + require.True(t, mysql.HasNoDefaultValueFlag(tbl.Cols()[0].Flag)) } -func (s *testDBSuite7) TestCancelAddIndex(c *C) { - idxName := "c3_index" - addIdxSQL := "create unique index c3_index on t1 (c3)" - testCancelAddIndex(c, s.store, s.dom.DDL(), s.lease, idxName, addIdxSQL, "", s.dom) +func TestDropCheck(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("drop table t1") -} - -func testCancelAddIndex(c *C, store kv.Storage, d ddl.DDL, lease time.Duration, idxName, addIdxSQL, sqlModeSQL string, dom *domain.Domain) { - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (c1 int, c2 int unsigned, c3 int, unique key(c1))") - // defaultBatchSize is equal to ddl.defaultBatchSize - count := defaultBatchSize * 32 - start := 0 - // add some rows - if len(sqlModeSQL) != 0 { - // Insert some null values. - tk.MustExec(sqlModeSQL) - tk.MustExec("insert into t1 set c1 = ?", 0) - tk.MustExec("insert into t1 set c2 = ?", 1) - tk.MustExec("insert into t1 set c3 = ?", 2) - start = 3 - } - for i := start; i < count; i += defaultBatchSize { - batchInsert(tk, "t1", i, i+defaultBatchSize) - } - - var c3IdxInfo *model.IndexInfo - hook := &ddl.TestDDLCallback{Do: dom} - originBatchSize := tk.MustQuery("select @@global.tidb_ddl_reorg_batch_size") - // Set batch size to lower try to slow down add-index reorganization, This if for hook to cancel this ddl job. - tk.MustExec("set @@global.tidb_ddl_reorg_batch_size = 32") - defer tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_reorg_batch_size = %v", originBatchSize.Rows()[0][0])) - // let hook.OnJobUpdatedExported has chance to cancel the job. - // the hook.OnJobUpdatedExported is called when the job is updated, runReorgJob will wait ddl.ReorgWaitTimeout, then return the ddl.runDDLJob. - // After that ddl call d.hook.OnJobUpdated(job), so that we can canceled the job in this test case. - var checkErr error - ctx := tk.Se.(sessionctx.Context) - hook.OnJobUpdatedExported, c3IdxInfo, checkErr = backgroundExecOnJobUpdatedExported(c, store, ctx, hook, idxName) - originalHook := d.GetHook() - jobIDExt := wrapJobIDExtCallback(hook) - d.(ddl.DDLForTest).SetHook(jobIDExt) - done := make(chan error, 1) - go backgroundExec(store, addIdxSQL, done) - - times := 0 - ticker := time.NewTicker(lease / 2) - defer ticker.Stop() -LOOP: - for { - select { - case err := <-done: - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - break LOOP - case <-ticker.C: - if times >= 10 { - break - } - step := 5 - // delete some rows, and add some data - for i := count; i < count+step; i++ { - n := rand.Intn(count) - tk.MustExec("delete from t1 where c1 = ?", n) - tk.MustExec("insert into t1 values (?, ?, ?)", i+10, i, i) - } - count += step - times++ - } - } - checkDelRangeAdded(tk, jobIDExt.jobID, c3IdxInfo.ID) - d.(ddl.DDLForTest).SetHook(originalHook) -} - -// TestCancelAddIndex1 tests canceling ddl job when the add index worker is not started. -func (s *testDBSuite4) TestCancelAddIndex1(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "drop table if exists t") - s.mustExec(tk, c, "create table t(c1 int, c2 int)") - defer s.mustExec(tk, c, "drop table t;") - - for i := 0; i < 50; i++ { - s.mustExec(tk, c, "insert into t values (?, ?)", i, i) - } - - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization && job.SnapshotVer == 0 { - jobIDs := []int64{job.ID} - hookCtx := mock.NewContext() - hookCtx.Store = s.store - err := hookCtx.NewTxn(context.Background()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return - } - - checkErr = txn.Commit(context.Background()) - } - } - originalHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - rs, err := tk.Exec("alter table t add index idx_c2(c2)") - if rs != nil { - rs.Close() - } - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - t := s.testGetTable(c, "t") - for _, idx := range t.Indices() { - c.Assert(strings.EqualFold(idx.Meta().Name.L, "idx_c2"), IsFalse) - } - s.mustExec(tk, c, "alter table t add index idx_c2(c2)") - s.mustExec(tk, c, "alter table t drop index idx_c2") + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists drop_check") + tk.MustExec("create table drop_check (pk int primary key)") + defer tk.MustExec("drop table if exists drop_check") + tk.MustExec("alter table drop_check drop check crcn") + require.Equal(t, uint16(1), tk.Session().GetSessionVars().StmtCtx.WarningCount()) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|8231|DROP CHECK is not supported")) } -// TestCancelDropIndex tests cancel ddl job which type is drop primary key. -func (s *testDBSuite4) TestCancelDropPrimaryKey(c *C) { - idxName := "primary" - addIdxSQL := "alter table t add primary key idx_c2 (c2);" - dropIdxSQL := "alter table t drop primary key;" - testCancelDropIndex(c, s.store, s.dom.DDL(), idxName, addIdxSQL, dropIdxSQL, s.dom) -} +func TestAlterOrderBy(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() -// TestCancelDropIndex tests cancel ddl job which type is drop index. -func (s *testDBSuite5) TestCancelDropIndex(c *C) { - idxName := "idx_c2" - addIdxSQL := "alter table t add index idx_c2 (c2);" - dropIdxSQL := "alter table t drop index idx_c2;" - testCancelDropIndex(c, s.store, s.dom.DDL(), idxName, addIdxSQL, dropIdxSQL, s.dom) -} + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table ob (pk int primary key, c int default 1, c1 int default 1, KEY cl(c1))") -// testCancelDropIndex tests cancel ddl job which type is drop index. -func testCancelDropIndex(c *C, store kv.Storage, d ddl.DDL, idxName, addIdxSQL, dropIdxSQL string, dom *domain.Domain) { - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(c1 int, c2 int)") - defer tk.MustExec("drop table t;") - for i := 0; i < 5; i++ { - tk.MustExec("insert into t values (?, ?)", i, i) - } - testCases := []struct { - needAddIndex bool - jobState model.JobState - JobSchemaState model.SchemaState - cancelSucc bool - }{ - // model.JobStateNone means the jobs is canceled before the first run. - // if we cancel successfully, we need to set needAddIndex to false in the next test case. Otherwise, set needAddIndex to true. - {true, model.JobStateNone, model.StateNone, true}, - {false, model.JobStateRunning, model.StateWriteOnly, false}, - {true, model.JobStateRunning, model.StateDeleteOnly, false}, - {true, model.JobStateRunning, model.StateDeleteReorganization, false}, - } - var checkErr error - hook := &ddl.TestDDLCallback{Do: dom} - var jobID int64 - testCase := &testCases[0] - hook.OnJobRunBeforeExported = func(job *model.Job) { - if (job.Type == model.ActionDropIndex || job.Type == model.ActionDropPrimaryKey) && - job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { - jobID = job.ID - jobIDs := []int64{job.ID} - hookCtx := mock.NewContext() - hookCtx.Store = store - err := hookCtx.NewTxn(context.TODO()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } + // Test order by with primary key + tk.MustExec("alter table ob order by c") + require.Equal(t, uint16(1), tk.Session().GetSessionVars().StmtCtx.WarningCount()) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1105|ORDER BY ignored as there is a user-defined clustered index in the table 'ob'")) - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return - } - checkErr = txn.Commit(context.Background()) - } - } - originalHook := d.GetHook() - d.(ddl.DDLForTest).SetHook(hook) - ctx := tk.Se.(sessionctx.Context) - for i := range testCases { - testCase = &testCases[i] - if testCase.needAddIndex { - tk.MustExec(addIdxSQL) - } - rs, err := tk.Exec(dropIdxSQL) - if rs != nil { - rs.Close() - } - t := testGetTableByName(c, ctx, "test_db", "t") - indexInfo := t.Meta().FindIndexByName(idxName) - if testCase.cancelSucc { - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - c.Assert(indexInfo, NotNil) - c.Assert(indexInfo.State, Equals, model.StatePublic) - } else { - err1 := admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID) - c.Assert(err, IsNil) - c.Assert(checkErr, NotNil) - c.Assert(checkErr.Error(), Equals, err1.Error()) - c.Assert(indexInfo, IsNil) - } - } - d.(ddl.DDLForTest).SetHook(originalHook) - tk.MustExec(addIdxSQL) - tk.MustExec(dropIdxSQL) + // Test order by with no primary key + tk.MustExec("drop table if exists ob") + tk.MustExec("create table ob (c int default 1, c1 int default 1, KEY cl(c1))") + tk.MustExec("alter table ob order by c") + require.Equal(t, uint16(0), tk.Session().GetSessionVars().StmtCtx.WarningCount()) + tk.MustExec("drop table if exists ob") } -// TestCancelTruncateTable tests cancel ddl job which type is truncate table. -func (s *testDBSuite5) TestCancelTruncateTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "create database if not exists test_truncate_table") - s.mustExec(tk, c, "drop table if exists t") - s.mustExec(tk, c, "create table t(c1 int, c2 int)") - defer s.mustExec(tk, c, "drop table t;") - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == model.ActionTruncateTable && job.State == model.JobStateNone { - jobIDs := []int64{job.ID} - hookCtx := mock.NewContext() - hookCtx.Store = s.store - err := hookCtx.NewTxn(context.Background()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return - } - checkErr = txn.Commit(context.Background()) - } - } - originalHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - _, err := tk.Exec("truncate table t") - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) -} +func TestFKOnGeneratedColumns(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() -func (s *testDBSuite5) TestParallelDropSchemaAndDropTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "create database if not exists test_drop_schema_table") - s.mustExec(tk, c, "use test_drop_schema_table") - s.mustExec(tk, c, "create table t(c1 int, c2 int)") - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - dbInfo := testGetSchemaByName(c, tk.Se, "test_drop_schema_table") - done := false - var wg sync.WaitGroup - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test_drop_schema_table") - hook.OnJobUpdatedExported = func(job *model.Job) { - if job.Type == model.ActionDropSchema && job.State == model.JobStateRunning && - job.SchemaState == model.StateWriteOnly && job.SchemaID == dbInfo.ID && done == false { - wg.Add(1) - done = true - go func() { - _, checkErr = tk2.Exec("drop table t") - wg.Done() - }() - time.Sleep(5 * time.Millisecond) - } - } - originalHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - s.mustExec(tk, c, "drop database test_drop_schema_table") - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - wg.Wait() - c.Assert(done, IsTrue) - c.Assert(checkErr, NotNil) - // There are two possible assert result because: - // 1: If drop-database is finished before drop-table being put into the ddl job queue, it will return "unknown table" error directly in the previous check. - // 2: If drop-table has passed the previous check and been put into the ddl job queue, then drop-database finished, it will return schema change error. - assertRes := checkErr.Error() == "[domain:8028]Information schema is changed during the execution of the"+ - " statement(for example, table definition may be updated by other DDL ran in parallel). "+ - "If you see this error often, try increasing `tidb_max_delta_schema_count`. [try again later]" || - checkErr.Error() == "[schema:1051]Unknown table 'test_drop_schema_table.t'" - - c.Assert(assertRes, Equals, true) - - // Below behaviour is use to mock query `curl "http://$IP:10080/tiflash/replica"` - fn := func(jobs []*model.Job) (bool, error) { - return executor.GetDropOrTruncateTableInfoFromJobs(jobs, 0, s.dom, func(job *model.Job, info *model.TableInfo) (bool, error) { - return false, nil - }) - } - err := tk.Se.NewTxn(context.Background()) - c.Assert(err, IsNil) - txn, err := tk.Se.Txn(true) - c.Assert(err, IsNil) - err = admin.IterHistoryDDLJobs(txn, fn) - c.Assert(err, IsNil) -} + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + // test add foreign key to generated column -// TestCancelRenameIndex tests cancel ddl job which type is rename index. -func (s *testDBSuite1) TestCancelRenameIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "create database if not exists test_rename_index") - s.mustExec(tk, c, "drop table if exists t") - s.mustExec(tk, c, "create table t(c1 int, c2 int)") - defer s.mustExec(tk, c, "drop table t;") - for i := 0; i < 100; i++ { - s.mustExec(tk, c, "insert into t values (?, ?)", i, i) - } - s.mustExec(tk, c, "alter table t add index idx_c2(c2)") - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == model.ActionRenameIndex && job.State == model.JobStateNone { - jobIDs := []int64{job.ID} - hookCtx := mock.NewContext() - hookCtx.Store = s.store - err := hookCtx.NewTxn(context.Background()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return - } - checkErr = txn.Commit(context.Background()) - } - } - originalHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - rs, err := tk.Exec("alter table t rename index idx_c2 to idx_c3") - if rs != nil { - rs.Close() - } - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - t := s.testGetTable(c, "t") - for _, idx := range t.Indices() { - c.Assert(strings.EqualFold(idx.Meta().Name.L, "idx_c3"), IsFalse) - } - s.mustExec(tk, c, "alter table t rename index idx_c2 to idx_c3") -} + // foreign key constraint cannot be defined on a virtual generated column. + tk.MustExec("create table t1 (a int primary key);") + tk.MustGetErrCode("create table t2 (a int, b int as (a+1) virtual, foreign key (b) references t1(a));", errno.ErrCannotAddForeign) + tk.MustExec("create table t2 (a int, b int generated always as (a+1) virtual);") + tk.MustGetErrCode("alter table t2 add foreign key (b) references t1(a);", errno.ErrCannotAddForeign) + tk.MustExec("drop table t1, t2;") -// TestCancelDropTable tests cancel ddl job which type is drop table. -func (s *testDBSuite2) TestCancelDropTableAndSchema(c *C) { - tk := testkit.NewTestKit(c, s.store) - testCases := []struct { - needAddTableOrDB bool - action model.ActionType - jobState model.JobState - JobSchemaState model.SchemaState - cancelSucc bool - }{ - // Check drop table. - // model.JobStateNone means the jobs is canceled before the first run. - {true, model.ActionDropTable, model.JobStateNone, model.StateNone, true}, - {false, model.ActionDropTable, model.JobStateRunning, model.StateWriteOnly, false}, - {true, model.ActionDropTable, model.JobStateRunning, model.StateDeleteOnly, false}, - - // Check drop database. - {true, model.ActionDropSchema, model.JobStateNone, model.StateNone, true}, - {false, model.ActionDropSchema, model.JobStateRunning, model.StateWriteOnly, false}, - {true, model.ActionDropSchema, model.JobStateRunning, model.StateDeleteOnly, false}, - } - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - var jobID int64 - testCase := &testCases[0] - s.mustExec(tk, c, "create database if not exists test_drop_db") - dbInfo := s.testGetDB(c, "test_drop_db") + // foreign key constraint can be defined on a stored generated column. + tk.MustExec("create table t2 (a int primary key);") + tk.MustExec("create table t1 (a int, b int as (a+1) stored, foreign key (b) references t2(a));") + tk.MustExec("create table t3 (a int, b int generated always as (a+1) stored);") + tk.MustExec("alter table t3 add foreign key (b) references t2(a);") + tk.MustExec("drop table t1, t2, t3;") - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == testCase.action && job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState && job.SchemaID == dbInfo.ID { - jobIDs := []int64{job.ID} - jobID = job.ID - hookCtx := mock.NewContext() - hookCtx.Store = s.store - err := hookCtx.NewTxn(context.TODO()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return - } - checkErr = txn.Commit(context.Background()) - } - } - originHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originHook) - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - var err error - sql := "" - for i := range testCases { - testCase = &testCases[i] - if testCase.needAddTableOrDB { - s.mustExec(tk, c, "create database if not exists test_drop_db") - s.mustExec(tk, c, "use test_drop_db") - s.mustExec(tk, c, "create table if not exists t(c1 int, c2 int)") - } + // foreign key constraint can reference a stored generated column. + tk.MustExec("create table t1 (a int, b int generated always as (a+1) stored primary key);") + tk.MustExec("create table t2 (a int, foreign key (a) references t1(b));") + tk.MustExec("create table t3 (a int);") + tk.MustExec("alter table t3 add foreign key (a) references t1(b);") + tk.MustExec("drop table t1, t2, t3;") - dbInfo = s.testGetDB(c, "test_drop_db") + // rejected FK options on stored generated columns + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on update set null);", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on update cascade);", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on update set default);", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on delete set null);", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on delete set default);", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustExec("create table t2 (a int primary key);") + tk.MustExec("create table t1 (a int, b int generated always as (a+1) stored);") + tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update set null;", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update cascade;", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update set default;", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on delete set null;", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on delete set default;", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustExec("drop table t1, t2;") + // column name with uppercase characters + tk.MustGetErrCode("create table t1 (A int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on update set null);", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustExec("create table t2 (a int primary key);") + tk.MustExec("create table t1 (A int, b int generated always as (a+1) stored);") + tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update set null;", errno.ErrWrongFKOptionForGeneratedColumn) + tk.MustExec("drop table t1, t2;") - if testCase.action == model.ActionDropTable { - sql = "drop table t;" - } else if testCase.action == model.ActionDropSchema { - sql = "drop database test_drop_db;" - } + // special case: TiDB error different from MySQL 8.0 + // MySQL: ERROR 3104 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a generated column. + // TiDB: ERROR 1146 (42S02): Table 'test.t2' doesn't exist + tk.MustExec("create table t1 (a int, b int generated always as (a+1) stored);") + tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update set null;", errno.ErrNoSuchTable) + tk.MustExec("drop table t1;") - _, err = tk.Exec(sql) - if testCase.cancelSucc { - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - s.mustExec(tk, c, "insert into t values (?, ?)", i, i) - } else { - c.Assert(err, IsNil) - c.Assert(checkErr, NotNil) - c.Assert(checkErr.Error(), Equals, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error()) - _, err = tk.Exec("insert into t values (?, ?)", i, i) - c.Assert(err, NotNil) - } - } -} + // allowed FK options on stored generated columns + tk.MustExec("create table t1 (a int primary key, b char(5));") + tk.MustExec("create table t2 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on update restrict);") + tk.MustExec("create table t3 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on update no action);") + tk.MustExec("create table t4 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on delete restrict);") + tk.MustExec("create table t5 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on delete cascade);") + tk.MustExec("create table t6 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on delete no action);") + tk.MustExec("drop table t2,t3,t4,t5,t6;") + tk.MustExec("create table t2 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t2 add foreign key (b) references t1(a) on update restrict;") + tk.MustExec("create table t3 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t3 add foreign key (b) references t1(a) on update no action;") + tk.MustExec("create table t4 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t4 add foreign key (b) references t1(a) on delete restrict;") + tk.MustExec("create table t5 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t5 add foreign key (b) references t1(a) on delete cascade;") + tk.MustExec("create table t6 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t6 add foreign key (b) references t1(a) on delete no action;") + tk.MustExec("drop table t1,t2,t3,t4,t5,t6;") -func (s *testDBSuite3) TestAddAnonymousIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - s.mustExec(tk, c, "create table t_anonymous_index (c1 int, c2 int, C3 int)") - s.mustExec(tk, c, "alter table t_anonymous_index add index (c1, c2)") - // for dropping empty index - _, err := tk.Exec("alter table t_anonymous_index drop index") - c.Assert(err, NotNil) - // The index name is c1 when adding index (c1, c2). - s.mustExec(tk, c, "alter table t_anonymous_index drop index c1") - t := s.testGetTable(c, "t_anonymous_index") - c.Assert(t.Indices(), HasLen, 0) - // for adding some indices that the first column name is c1 - s.mustExec(tk, c, "alter table t_anonymous_index add index (c1)") - _, err = tk.Exec("alter table t_anonymous_index add index c1 (c2)") - c.Assert(err, NotNil) - t = s.testGetTable(c, "t_anonymous_index") - c.Assert(t.Indices(), HasLen, 1) - idx := t.Indices()[0].Meta().Name.L - c.Assert(idx, Equals, "c1") - // The MySQL will be a warning. - s.mustExec(tk, c, "alter table t_anonymous_index add index c1_3 (c1)") - s.mustExec(tk, c, "alter table t_anonymous_index add index (c1, c2, C3)") - // The MySQL will be a warning. - s.mustExec(tk, c, "alter table t_anonymous_index add index (c1)") - t = s.testGetTable(c, "t_anonymous_index") - c.Assert(t.Indices(), HasLen, 4) - s.mustExec(tk, c, "alter table t_anonymous_index drop index c1") - s.mustExec(tk, c, "alter table t_anonymous_index drop index c1_2") - s.mustExec(tk, c, "alter table t_anonymous_index drop index c1_3") - s.mustExec(tk, c, "alter table t_anonymous_index drop index c1_4") - // for case insensitive - s.mustExec(tk, c, "alter table t_anonymous_index add index (C3)") - s.mustExec(tk, c, "alter table t_anonymous_index drop index c3") - s.mustExec(tk, c, "alter table t_anonymous_index add index c3 (C3)") - s.mustExec(tk, c, "alter table t_anonymous_index drop index C3") - // for anonymous index with column name `primary` - s.mustExec(tk, c, "create table t_primary (`primary` int, b int, key (`primary`))") - t = s.testGetTable(c, "t_primary") - c.Assert(t.Indices()[0].Meta().Name.String(), Equals, "primary_2") - s.mustExec(tk, c, "alter table t_primary add index (`primary`);") - t = s.testGetTable(c, "t_primary") - c.Assert(t.Indices()[0].Meta().Name.String(), Equals, "primary_2") - c.Assert(t.Indices()[1].Meta().Name.String(), Equals, "primary_3") - s.mustExec(tk, c, "alter table t_primary add primary key(b);") - t = s.testGetTable(c, "t_primary") - c.Assert(t.Indices()[0].Meta().Name.String(), Equals, "primary_2") - c.Assert(t.Indices()[1].Meta().Name.String(), Equals, "primary_3") - c.Assert(t.Indices()[2].Meta().Name.L, Equals, "primary") - s.mustExec(tk, c, "create table t_primary_2 (`primary` int, key primary_2 (`primary`), key (`primary`))") - t = s.testGetTable(c, "t_primary_2") - c.Assert(t.Indices()[0].Meta().Name.String(), Equals, "primary_2") - c.Assert(t.Indices()[1].Meta().Name.String(), Equals, "primary_3") - s.mustExec(tk, c, "create table t_primary_3 (`primary_2` int, key(`primary_2`), `primary` int, key(`primary`));") - t = s.testGetTable(c, "t_primary_3") - c.Assert(t.Indices()[0].Meta().Name.String(), Equals, "primary_2") - c.Assert(t.Indices()[1].Meta().Name.String(), Equals, "primary_3") -} + // rejected FK options on the base columns of a stored generated columns + tk.MustExec("create table t2 (a int primary key);") + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on update set null);", errno.ErrCannotAddForeign) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on update cascade);", errno.ErrCannotAddForeign) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on update set default);", errno.ErrCannotAddForeign) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on delete set null);", errno.ErrCannotAddForeign) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on delete cascade);", errno.ErrCannotAddForeign) + tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on delete set default);", errno.ErrCannotAddForeign) + tk.MustExec("create table t1 (a int, b int generated always as (a+1) stored);") + tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on update set null;", errno.ErrCannotAddForeign) + tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on update cascade;", errno.ErrCannotAddForeign) + tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on update set default;", errno.ErrCannotAddForeign) + tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on delete set null;", errno.ErrCannotAddForeign) + tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on delete cascade;", errno.ErrCannotAddForeign) + tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on delete set default;", errno.ErrCannotAddForeign) + tk.MustExec("drop table t1, t2;") -func (s *testDBSuite4) TestAlterLock(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - s.mustExec(tk, c, "create table t_index_lock (c1 int, c2 int, C3 int)") - s.mustExec(tk, c, "alter table t_index_lock add index (c1, c2), lock=none") + // allowed FK options on the base columns of a stored generated columns + tk.MustExec("create table t1 (a int primary key, b char(5));") + tk.MustExec("create table t2 (a int, b int generated always as (a % 10) stored, foreign key (a) references t1(a) on update restrict);") + tk.MustExec("create table t3 (a int, b int generated always as (a % 10) stored, foreign key (a) references t1(a) on update no action);") + tk.MustExec("create table t4 (a int, b int generated always as (a % 10) stored, foreign key (a) references t1(a) on delete restrict);") + tk.MustExec("create table t5 (a int, b int generated always as (a % 10) stored, foreign key (a) references t1(a) on delete no action);") + tk.MustExec("drop table t2,t3,t4,t5") + tk.MustExec("create table t2 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t2 add foreign key (a) references t1(a) on update restrict;") + tk.MustExec("create table t3 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t3 add foreign key (a) references t1(a) on update no action;") + tk.MustExec("create table t4 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t4 add foreign key (a) references t1(a) on delete restrict;") + tk.MustExec("create table t5 (a int, b int generated always as (a % 10) stored);") + tk.MustExec("alter table t5 add foreign key (a) references t1(a) on delete no action;") + tk.MustExec("drop table t1,t2,t3,t4,t5;") } -func (s *testDBSuite5) TestAddMultiColumnsIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) +func TestSelectInViewFromAnotherDB(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() - tk.MustExec("drop database if exists tidb;") - tk.MustExec("create database tidb;") - tk.MustExec("use tidb;") - tk.MustExec("create table tidb.test (a int auto_increment primary key, b int);") - tk.MustExec("insert tidb.test values (1, 1);") - tk.MustExec("update tidb.test set b = b + 1 where a = 1;") - tk.MustExec("insert into tidb.test values (2, 2);") - // Test that the b value is nil. - tk.MustExec("insert into tidb.test (a) values (3);") - tk.MustExec("insert into tidb.test values (4, 4);") - // Test that the b value is nil again. - tk.MustExec("insert into tidb.test (a) values (5);") - tk.MustExec("insert tidb.test values (6, 6);") - tk.MustExec("alter table tidb.test add index idx1 (a, b);") - tk.MustExec("admin check table test") + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create database test_db2") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a int)") + tk.MustExec("use test_db2") + tk.MustExec("create sql security invoker view v as select * from test.t") + tk.MustExec("use test") + tk.MustExec("select test_db2.v.a from test_db2.v") } -func (s *testDBSuite6) TestAddMultiColumnsIndexClusterIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_add_multi_col_index_clustered;") - tk.MustExec("create database test_add_multi_col_index_clustered;") - tk.MustExec("use test_add_multi_col_index_clustered;") - - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - tk.MustExec("create table t (a int, b varchar(10), c int, primary key (a, b));") - tk.MustExec("insert into t values (1, '1', 1), (2, '2', NULL), (3, '3', 3);") - tk.MustExec("create index idx on t (a, c);") - - tk.MustExec("admin check index t idx;") - tk.MustExec("admin check table t;") - - tk.MustExec("insert into t values (5, '5', 5), (6, '6', NULL);") - - tk.MustExec("admin check index t idx;") - tk.MustExec("admin check table t;") -} +func TestAddConstraintCheck(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() -func (s *testDBSuite6) TestAddPrimaryKey1(c *C) { - testAddIndex(c, s.store, s.lease, testPlain, - "create table test_add_index (c1 bigint, c2 bigint, c3 bigint, unique key(c1))", "primary") + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists add_constraint_check") + tk.MustExec("create table add_constraint_check (pk int primary key, a int)") + defer tk.MustExec("drop table if exists add_constraint_check") + tk.MustExec("alter table add_constraint_check add constraint crn check (a > 1)") + require.Equal(t, uint16(1), tk.Session().GetSessionVars().StmtCtx.WarningCount()) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|8231|ADD CONSTRAINT CHECK is not supported")) } -func (s *testDBSuite2) TestAddPrimaryKey2(c *C) { - testAddIndex(c, s.store, s.lease, testPartition, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, key(c1)) - partition by range (c3) ( - partition p0 values less than (3440), - partition p1 values less than (61440), - partition p2 values less than (122880), - partition p3 values less than (204800), - partition p4 values less than maxvalue)`, "primary") -} +func TestCreateTableIgnoreCheckConstraint(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() -func (s *testDBSuite3) TestAddPrimaryKey3(c *C) { - testAddIndex(c, s.store, s.lease, testPartition, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, key(c1)) - partition by hash (c3) partitions 4;`, "primary") + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists table_constraint_check") + tk.MustExec("CREATE TABLE admin_user (enable bool, CHECK (enable IN (0, 1)));") + require.Equal(t, uint16(1), tk.Session().GetSessionVars().StmtCtx.WarningCount()) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|8231|CONSTRAINT CHECK is not supported")) + tk.MustQuery("show create table admin_user").Check(testkit.RowsWithSep("|", ""+ + "admin_user CREATE TABLE `admin_user` (\n"+ + " `enable` tinyint(1) DEFAULT NULL\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) } -func (s *testDBSuite4) TestAddPrimaryKey4(c *C) { - testAddIndex(c, s.store, s.lease, testPartition, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, key(c1)) - partition by range columns (c3) ( - partition p0 values less than (3440), - partition p1 values less than (61440), - partition p2 values less than (122880), - partition p3 values less than (204800), - partition p4 values less than maxvalue)`, "primary") -} +func TestAutoConvertBlobTypeByLength(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() -func (s *testDBSuite6) TestAddIndex1(c *C) { - testAddIndex(c, s.store, s.lease, testPlain, - "create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c1))", "") -} + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + sql := fmt.Sprintf("create table t0(c0 Blob(%d), c1 Blob(%d), c2 Blob(%d), c3 Blob(%d))", + 255-1, 65535-1, 16777215-1, 4294967295-1) + tk.MustExec(sql) -func (s *testSerialDBSuite1) TestAddIndex1WithShardRowID(c *C) { - testAddIndex(c, s.store, s.lease, testPartition|testShardRowID, - "create table test_add_index (c1 bigint, c2 bigint, c3 bigint) SHARD_ROW_ID_BITS = 4 pre_split_regions = 4;", "") -} + var tableID int64 + rs := tk.MustQuery("select TIDB_TABLE_ID from information_schema.tables where table_name='t0' and table_schema='test';") + tableIDi, _ := strconv.Atoi(rs.Rows()[0][0].(string)) + tableID = int64(tableIDi) -func (s *testDBSuite2) TestAddIndex2(c *C) { - testAddIndex(c, s.store, s.lease, testPartition, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c1)) - partition by range (c1) ( - partition p0 values less than (3440), - partition p1 values less than (61440), - partition p2 values less than (122880), - partition p3 values less than (204800), - partition p4 values less than maxvalue)`, "") -} + tbl, exist := dom.InfoSchema().TableByID(tableID) + require.True(t, exist) -func (s *testSerialDBSuite) TestAddIndex2WithShardRowID(c *C) { - testAddIndex(c, s.store, s.lease, testPartition|testShardRowID, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint) - SHARD_ROW_ID_BITS = 4 pre_split_regions = 4 - partition by range (c1) ( - partition p0 values less than (3440), - partition p1 values less than (61440), - partition p2 values less than (122880), - partition p3 values less than (204800), - partition p4 values less than maxvalue)`, "") + require.Equal(t, tbl.Cols()[0].Tp, mysql.TypeTinyBlob) + require.Equal(t, tbl.Cols()[0].Flen, 255) + require.Equal(t, tbl.Cols()[1].Tp, mysql.TypeBlob) + require.Equal(t, tbl.Cols()[1].Flen, 65535) + require.Equal(t, tbl.Cols()[2].Tp, mysql.TypeMediumBlob) + require.Equal(t, tbl.Cols()[2].Flen, 16777215) + require.Equal(t, tbl.Cols()[3].Tp, mysql.TypeLongBlob) + require.Equal(t, tbl.Cols()[3].Flen, 4294967295) } -func (s *testDBSuite3) TestAddIndex3(c *C) { - testAddIndex(c, s.store, s.lease, testPartition, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c1)) - partition by hash (c1) partitions 4;`, "") -} +func TestAddExpressionIndexRollback(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int, unique key(c1))") + tk.MustExec("insert into t1 values (20, 20, 20), (40, 40, 40), (80, 80, 80), (160, 160, 160);") -func (s *testSerialDBSuite1) TestAddIndex3WithShardRowID(c *C) { - testAddIndex(c, s.store, s.lease, testPartition|testShardRowID, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint) - SHARD_ROW_ID_BITS = 4 pre_split_regions = 4 - partition by hash (c1) partitions 4;`, "") -} + var checkErr error + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") -func (s *testDBSuite8) TestAddIndex4(c *C) { - testAddIndex(c, s.store, s.lease, testPartition, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c1)) - partition by range columns (c1) ( - partition p0 values less than (3440), - partition p1 values less than (61440), - partition p2 values less than (122880), - partition p3 values less than (204800), - partition p4 values less than maxvalue)`, "") -} - -func (s *testSerialDBSuite) TestAddIndex4WithShardRowID(c *C) { - testAddIndex(c, s.store, s.lease, testPartition|testShardRowID, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint) - SHARD_ROW_ID_BITS = 4 pre_split_regions = 4 - partition by range columns (c1) ( - partition p0 values less than (3440), - partition p1 values less than (61440), - partition p2 values less than (122880), - partition p3 values less than (204800), - partition p4 values less than maxvalue)`, "") -} - -func (s *testDBSuite5) TestAddIndex5(c *C) { - testAddIndex(c, s.store, s.lease, testClusteredIndex, - `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c2, c3))`, "") -} - -type testAddIndexType uint8 - -const ( - testPlain testAddIndexType = 1 - testPartition testAddIndexType = 1 << 1 - testClusteredIndex testAddIndexType = 1 << 2 - testShardRowID testAddIndexType = 1 << 3 -) - -func testAddIndex(c *C, store kv.Storage, lease time.Duration, tp testAddIndexType, createTableSQL, idxTp string) { - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") - isTestPartition := (testPartition & tp) > 0 - isTestShardRowID := (testShardRowID & tp) > 0 - if isTestShardRowID { - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) - tk.MustExec("set global tidb_scatter_region = 1") - defer func() { - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) - tk.MustExec("set global tidb_scatter_region = 0") - }() - } - if isTestPartition { - tk.MustExec("set @@session.tidb_enable_table_partition = '1';") - } else if (testClusteredIndex & tp) > 0 { - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - } - tk.MustExec("drop table if exists test_add_index") - tk.MustExec(createTableSQL) - - done := make(chan error, 1) - start := -10 - num := defaultBatchSize - // first add some rows - batchInsert(tk, "test_add_index", start, num) - - // Add some discrete rows. - maxBatch := 20 - batchCnt := 100 - otherKeys := make([]int, 0, batchCnt*maxBatch) - // Make sure there are no duplicate keys. - base := defaultBatchSize * 20 - for i := 1; i < batchCnt; i++ { - if isTestShardRowID { - base = i % 4 << 61 - } - n := base + i*defaultBatchSize + i - for j := 0; j < rand.Intn(maxBatch); j++ { - n += j - sql := fmt.Sprintf("insert into test_add_index values (%d, %d, %d)", n, n, n) - tk.MustExec(sql) - otherKeys = append(otherKeys, n) + d := dom.DDL() + hook := &ddl.TestDDLCallback{Do: dom} + var currJob *model.Job + ctx := mock.NewContext() + ctx.Store = store + times := 0 + hook.OnJobUpdatedExported = func(job *model.Job) { + if checkErr != nil { + return } - } - // Encounter the value of math.MaxInt64 in middle of - v := math.MaxInt64 - defaultBatchSize/2 - tk.MustExec(fmt.Sprintf("insert into test_add_index values (%d, %d, %d)", v, v, v)) - otherKeys = append(otherKeys, v) - - addIdxSQL := fmt.Sprintf("alter table test_add_index add %s key c3_index(c3)", idxTp) - testddlutil.SessionExecInGoroutine(store, addIdxSQL, done) - - deletedKeys := make(map[int]struct{}) - - ticker := time.NewTicker(lease / 2) - defer ticker.Stop() -LOOP: - for { - select { - case err := <-done: - if err == nil { - break LOOP + switch job.SchemaState { + case model.StateDeleteOnly: + _, checkErr = tk1.Exec("insert into t1 values (6, 3, 3) on duplicate key update c1 = 10") + if checkErr == nil { + _, checkErr = tk1.Exec("update t1 set c1 = 7 where c2=6;") } - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) - case <-ticker.C: - // When the server performance is particularly poor, - // the adding index operation can not be completed. - // So here is a limit to the number of rows inserted. - if num > defaultBatchSize*10 { - break + if checkErr == nil { + _, checkErr = tk1.Exec("delete from t1 where c1 = 40;") + } + case model.StateWriteOnly: + _, checkErr = tk1.Exec("insert into t1 values (2, 2, 2)") + if checkErr == nil { + _, checkErr = tk1.Exec("update t1 set c1 = 3 where c2 = 80") } - step := 5 - // delete some rows, and add some data - for i := num; i < num+step; i++ { - n := rand.Intn(num) - deletedKeys[n] = struct{}{} - sql := fmt.Sprintf("delete from test_add_index where c1 = %d", n) - tk.MustExec(sql) - sql = fmt.Sprintf("insert into test_add_index values (%d, %d, %d)", i, i, i) - tk.MustExec(sql) + case model.StateWriteReorganization: + if checkErr == nil && job.SchemaState == model.StateWriteReorganization && times == 0 { + _, checkErr = tk1.Exec("insert into t1 values (4, 4, 4)") + if checkErr != nil { + return + } + _, checkErr = tk1.Exec("update t1 set c1 = 5 where c2 = 80") + if checkErr != nil { + return + } + currJob = job + times++ } - num += step } } + d.SetHook(hook) - if isTestShardRowID { - re := tk.MustQuery("show table test_add_index regions;") - rows := re.Rows() - c.Assert(len(rows), GreaterEqual, 16) - tk.MustExec("admin check table test_add_index") - return - } - - // get exists keys - keys := make([]int, 0, num) - for i := start; i < num; i++ { - if _, ok := deletedKeys[i]; ok { - continue - } - keys = append(keys, i) - } - keys = append(keys, otherKeys...) - - // test index key - expectedRows := make([][]interface{}, 0, len(keys)) - for _, key := range keys { - expectedRows = append(expectedRows, []interface{}{key}) - } - rows := tk.MustQuery(fmt.Sprintf("select c1 from test_add_index where c3 >= %d order by c1", start)).Rows() - matchRows(c, rows, expectedRows) - - tk.MustExec("admin check table test_add_index") - if isTestPartition { - return - } + tk.MustGetErrMsg("alter table t1 add index expr_idx ((pow(c1, c2)));", "[ddl:8202]Cannot decode index value, because [types:1690]DOUBLE value is out of range in 'pow(160, 160)'") + require.NoError(t, checkErr) + tk.MustQuery("select * from t1 order by c1;").Check(testkit.Rows("2 2 2", "4 4 4", "5 80 80", "10 3 3", "20 20 20", "160 160 160")) - // TODO: Support explain in future. - // rows := s.mustQuery(c, "explain select c1 from test_add_index where c3 >= 100") - - // ay := dumpRows(c, rows) - // c.Assert(strings.Contains(fmt.Sprintf("%v", ay), "c3_index"), IsTrue) - - // get all row handles - ctx := tk.Se.(sessionctx.Context) - c.Assert(ctx.NewTxn(context.Background()), IsNil) - t := testGetTableByName(c, ctx, "test_db", "test_add_index") - handles := kv.NewHandleMap() - err := tables.IterRecords(t, ctx, t.Cols(), - func(h kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - handles.Set(h, struct{}{}) - return true, nil - }) - c.Assert(err, IsNil) - - // check in index - var nidx table.Index - idxName := "c3_index" - if len(idxTp) != 0 { - idxName = "primary" - } - for _, tidx := range t.Indices() { - if tidx.Meta().Name.L == idxName { - nidx = tidx - break - } - } - // Make sure there is index with name c3_index. - c.Assert(nidx, NotNil) - c.Assert(nidx.Meta().ID, Greater, int64(0)) + // Check whether the reorg information is cleaned up. + err := ctx.NewTxn(context.Background()) + require.NoError(t, err) txn, err := ctx.Txn(true) - c.Assert(err, IsNil) - err = txn.Rollback() - c.Assert(err, IsNil) - - c.Assert(ctx.NewTxn(context.Background()), IsNil) - - tk.MustExec("admin check table test_add_index") - tk.MustExec("drop table test_add_index") -} - -func (s *testDBSuite1) TestAddIndexWithSplitTable(c *C) { - createSQL := "CREATE TABLE test_add_index(a bigint PRIMARY KEY AUTO_RANDOM(4), b varchar(255), c bigint)" - stSQL := fmt.Sprintf("SPLIT TABLE test_add_index BETWEEN (%d) AND (%d) REGIONS 16;", math.MinInt64, math.MaxInt64) - testAddIndexWithSplitTable(c, s.store, s.lease, createSQL, stSQL) + require.NoError(t, err) + m := meta.NewMeta(txn) + element, start, end, physicalID, err := m.GetDDLReorgHandle(currJob) + require.True(t, meta.ErrDDLReorgElementNotExist.Equal(err)) + require.Nil(t, element) + require.Nil(t, start) + require.Nil(t, end) + require.Equal(t, int64(0), physicalID) } -func (s *testSerialDBSuite) TestAddIndexWithShardRowID(c *C) { - createSQL := "create table test_add_index(a bigint, b bigint, c bigint) SHARD_ROW_ID_BITS = 4 pre_split_regions = 4;" - testAddIndexWithSplitTable(c, s.store, s.lease, createSQL, "") +func TestDropTableOnTiKVDiskFull(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table test_disk_full_drop_table(a int);") + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/rpcTiKVAllowedOnAlmostFull", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/rpcTiKVAllowedOnAlmostFull")) + }() + tk.MustExec("drop table test_disk_full_drop_table;") } -func testAddIndexWithSplitTable(c *C, store kv.Storage, lease time.Duration, createSQL, splitTableSQL string) { - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists test_add_index") - hasAutoRadomField := len(splitTableSQL) > 0 - if !hasAutoRadomField { - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) - tk.MustExec("set global tidb_scatter_region = 1") - defer func() { - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) - tk.MustExec("set global tidb_scatter_region = 0") - }() - } - tk.MustExec(createSQL) +func TestRebaseAutoID(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange", `return(true)`)) + defer func() { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange")) }() - batchInsertRows := func(tk *testkit.TestKit, needVal bool, tbl string, start, end int) error { - dml := fmt.Sprintf("insert into %s values", tbl) - for i := start; i < end; i++ { - if needVal { - dml += fmt.Sprintf("(%d, %d, %d)", i, i, i) - } else { - dml += "()" - } - if i != end-1 { - dml += "," - } - } - _, err := tk.Exec(dml) - return err - } + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) - done := make(chan error, 1) - start := -20 - num := defaultBatchSize - // Add some discrete rows. - goCnt := 10 - errCh := make(chan error, goCnt) - for i := 0; i < goCnt; i++ { - base := (i % 8) << 60 - go func(b int, eCh chan error) { - tk1 := testkit.NewTestKit(c, store) - tk1.MustExec("use test_db") - eCh <- batchInsertRows(tk1, !hasAutoRadomField, "test_add_index", base+start, base+num) - }(base, errCh) - } - for i := 0; i < goCnt; i++ { - e := <-errCh - c.Assert(e, IsNil) - } + tk.MustExec("drop database if exists tidb;") + tk.MustExec("create database tidb;") + tk.MustExec("use tidb;") + tk.MustExec("create table tidb.test (a int auto_increment primary key, b int);") + tk.MustExec("insert tidb.test values (null, 1);") + tk.MustQuery("select * from tidb.test").Check(testkit.Rows("1 1")) + tk.MustExec("alter table tidb.test auto_increment = 6000;") + tk.MustExec("insert tidb.test values (null, 1);") + tk.MustQuery("select * from tidb.test").Check(testkit.Rows("1 1", "6000 1")) + tk.MustExec("alter table tidb.test auto_increment = 5;") + tk.MustExec("insert tidb.test values (null, 1);") + tk.MustQuery("select * from tidb.test").Check(testkit.Rows("1 1", "6000 1", "11000 1")) - if hasAutoRadomField { - tk.MustQuery(splitTableSQL).Check(testkit.Rows("15 1")) - } - tk.MustQuery("select @@session.tidb_wait_split_region_finish;").Check(testkit.Rows("1")) - re := tk.MustQuery("show table test_add_index regions;") - rows := re.Rows() - c.Assert(len(rows), Equals, 16) - addIdxSQL := "alter table test_add_index add index idx(a)" - testddlutil.SessionExecInGoroutine(store, addIdxSQL, done) - - ticker := time.NewTicker(lease / 5) - defer ticker.Stop() - num = 0 -LOOP: - for { - select { - case err := <-done: - if err == nil { - break LOOP - } - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) - case <-ticker.C: - // When the server performance is particularly poor, - // the adding index operation can not be completed. - // So here is a limit to the number of rows inserted. - if num >= 1000 { - break - } - step := 20 - // delete, insert and update some data - for i := num; i < num+step; i++ { - sql := fmt.Sprintf("delete from test_add_index where a = %d", i+1) - tk.MustExec(sql) - if hasAutoRadomField { - sql = "insert into test_add_index values ()" - } else { - sql = fmt.Sprintf("insert into test_add_index values (%d, %d, %d)", i, i, i) - } - tk.MustExec(sql) - sql = fmt.Sprintf("update test_add_index set b = %d", i*10) - tk.MustExec(sql) - } - num += step - } - } + // Current range for table test is [11000, 15999]. + // Though it does not have a tuple "a = 15999", its global next auto increment id should be 16000. + // Anyway it is not compatible with MySQL. + tk.MustExec("alter table tidb.test auto_increment = 12000;") + tk.MustExec("insert tidb.test values (null, 1);") + tk.MustQuery("select * from tidb.test").Check(testkit.Rows("1 1", "6000 1", "11000 1", "16000 1")) - tk.MustExec("admin check table test_add_index") + tk.MustExec("create table tidb.test2 (a int);") + tk.MustGetErrCode("alter table tidb.test2 add column b int auto_increment key, auto_increment=10;", errno.ErrUnsupportedDDLOperation) } -// TestCancelAddTableAndDropTablePartition tests cancel ddl job which type is add/drop table partition. -func (s *testDBSuite1) TestCancelAddTableAndDropTablePartition(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "create database if not exists test_partition_table") - s.mustExec(tk, c, "use test_partition_table") - s.mustExec(tk, c, "drop table if exists t_part") - s.mustExec(tk, c, `create table t_part (a int key) - partition by range(a) ( - partition p0 values less than (10), - partition p1 values less than (20) - );`) - defer s.mustExec(tk, c, "drop table t_part;") - base := 10 - for i := 0; i < base; i++ { - s.mustExec(tk, c, "insert into t_part values (?)", i) - } +func TestProcessColumnFlags(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + // check `processColumnFlags()` + tk.MustExec("create table t(a year(4) comment 'xxx', b year, c bit)") + defer tk.MustExec("drop table t;") - testCases := []struct { - action model.ActionType - jobState model.JobState - JobSchemaState model.SchemaState - cancelSucc bool - }{ - {model.ActionAddTablePartition, model.JobStateNone, model.StateNone, true}, - {model.ActionDropTablePartition, model.JobStateNone, model.StateNone, true}, - // Add table partition now can be cancelled in ReplicaOnly state. - {model.ActionAddTablePartition, model.JobStateRunning, model.StateReplicaOnly, true}, - } - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - testCase := &testCases[0] - var jobID int64 - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == testCase.action && job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { - jobIDs := []int64{job.ID} - jobID = job.ID - hookCtx := mock.NewContext() - hookCtx.Store = s.store - err := hookCtx.NewTxn(context.Background()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return + check := func(n string, f func(uint) bool) { + tbl := external.GetTableByName(t, tk, "test", "t") + for _, col := range tbl.Cols() { + if strings.EqualFold(col.Name.L, n) { + require.True(t, f(col.Flag)) + break } - checkErr = txn.Commit(context.Background()) - } - } - originalHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - - var err error - sql := "" - for i := range testCases { - testCase = &testCases[i] - if testCase.action == model.ActionAddTablePartition { - sql = `alter table t_part add partition ( - partition p2 values less than (30) - );` - } else if testCase.action == model.ActionDropTablePartition { - sql = "alter table t_part drop partition p1;" - } - _, err = tk.Exec(sql) - if testCase.cancelSucc { - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - s.mustExec(tk, c, "insert into t_part values (?)", i+base) - - ctx := s.s.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - tbl, err := is.TableByName(model.NewCIStr("test_partition_table"), model.NewCIStr("t_part")) - c.Assert(err, IsNil) - partitionInfo := tbl.Meta().GetPartitionInfo() - c.Assert(partitionInfo, NotNil) - c.Assert(len(partitionInfo.AddingDefinitions), Equals, 0) - } else { - c.Assert(err, IsNil, Commentf("err:%v", err)) - c.Assert(checkErr, NotNil) - c.Assert(checkErr.Error(), Equals, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error()) - _, err = tk.Exec("insert into t_part values (?)", i) - c.Assert(err, NotNil) } } - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) -} -func (s *testDBSuite1) TestDropPrimaryKey(c *C) { - idxName := "primary" - createSQL := "create table test_drop_index (c1 int, c2 int, c3 int, unique key(c1), primary key(c3) nonclustered)" - dropIdxSQL := "alter table test_drop_index drop primary key;" - testDropIndex(c, s.store, s.lease, createSQL, dropIdxSQL, idxName) -} + yearcheck := func(f uint) bool { + return mysql.HasUnsignedFlag(f) && mysql.HasZerofillFlag(f) && !mysql.HasBinaryFlag(f) + } -func (s *testDBSuite2) TestDropIndex(c *C) { - idxName := "c3_index" - createSQL := "create table test_drop_index (c1 int, c2 int, c3 int, unique key(c1), key c3_index(c3))" - dropIdxSQL := "alter table test_drop_index drop index c3_index;" - testDropIndex(c, s.store, s.lease, createSQL, dropIdxSQL, idxName) -} + tk.MustExec("alter table t modify a year(4)") + check("a", yearcheck) -func testDropIndex(c *C, store kv.Storage, lease time.Duration, createSQL, dropIdxSQL, idxName string) { - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists test_drop_index") - tk.MustExec(createSQL) - done := make(chan error, 1) - tk.MustExec("delete from test_drop_index") + tk.MustExec("alter table t modify a year(4) unsigned") + check("a", yearcheck) - num := 100 - // add some rows - for i := 0; i < num; i++ { - tk.MustExec("insert into test_drop_index values (?, ?, ?)", i, i, i) - } - ctx := tk.Se.(sessionctx.Context) - indexID := testGetIndexID(c, ctx, "test_db", "test_drop_index", idxName) - jobIDExt, reset := setupJobIDExtCallback(ctx) - defer reset() - testddlutil.SessionExecInGoroutine(store, dropIdxSQL, done) - - ticker := time.NewTicker(lease / 2) - defer ticker.Stop() -LOOP: - for { - select { - case err := <-done: - if err == nil { - break LOOP - } - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) - case <-ticker.C: - step := 5 - // delete some rows, and add some data - for i := num; i < num+step; i++ { - n := rand.Intn(num) - tk.MustExec("update test_drop_index set c2 = 1 where c1 = ?", n) - tk.MustExec("insert into test_drop_index values (?, ?, ?)", i, i, i) - } - num += step - } - } + tk.MustExec("alter table t modify a year(4) zerofill") - rows := tk.MustQuery("explain select c1 from test_drop_index where c3 >= 0") - c.Assert(strings.Contains(fmt.Sprintf("%v", rows), idxName), IsFalse) + tk.MustExec("alter table t modify b year") + check("b", yearcheck) - checkDelRangeAdded(tk, jobIDExt.jobID, indexID) - tk.MustExec("drop table test_drop_index") + tk.MustExec("alter table t modify c bit") + check("c", func(f uint) bool { + return mysql.HasUnsignedFlag(f) && !mysql.HasBinaryFlag(f) + }) } -// TestCancelDropColumn tests cancel ddl job which type is drop column. -func (s *testDBSuite3) TestCancelDropColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - s.mustExec(tk, c, "drop table if exists test_drop_column") - s.mustExec(tk, c, "create table test_drop_column(c1 int, c2 int)") - defer s.mustExec(tk, c, "drop table test_drop_column;") - testCases := []struct { - needAddColumn bool - jobState model.JobState - JobSchemaState model.SchemaState - cancelSucc bool - }{ - {true, model.JobStateNone, model.StateNone, true}, - {false, model.JobStateRunning, model.StateWriteOnly, false}, - {true, model.JobStateRunning, model.StateDeleteOnly, false}, - {true, model.JobStateRunning, model.StateDeleteReorganization, false}, - } - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - var jobID int64 - testCase := &testCases[0] - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == model.ActionDropColumn && job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { - jobIDs := []int64{job.ID} - jobID = job.ID - hookCtx := mock.NewContext() - hookCtx.Store = s.store - err := hookCtx.NewTxn(context.TODO()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return - } - checkErr = txn.Commit(context.Background()) - } - } - - originalHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - var err1 error - for i := range testCases { - var c3IdxID int64 - testCase = &testCases[i] - if testCase.needAddColumn { - s.mustExec(tk, c, "alter table test_drop_column add column c3 int") - s.mustExec(tk, c, "alter table test_drop_column add index idx_c3(c3)") - ctx := tk.Se.(sessionctx.Context) - c3IdxID = testGetIndexID(c, ctx, s.schemaName, "test_drop_column", "idx_c3") - } - _, err1 = tk.Exec("alter table test_drop_column drop column c3") - var col1 *table.Column - var idx1 table.Index - t := s.testGetTable(c, "test_drop_column") - for _, col := range t.Cols() { - if strings.EqualFold(col.Name.L, "c3") { - col1 = col - break - } - } - for _, idx := range t.Indices() { - if strings.EqualFold(idx.Meta().Name.L, "idx_c3") { - idx1 = idx - break - } - } - if testCase.cancelSucc { - c.Assert(checkErr, IsNil) - c.Assert(col1, NotNil) - c.Assert(col1.Name.L, Equals, "c3") - c.Assert(idx1, NotNil) - c.Assert(idx1.Meta().Name.L, Equals, "idx_c3") - c.Assert(err1.Error(), Equals, "[ddl:8214]Cancelled DDL job") - } else { - c.Assert(col1, IsNil) - c.Assert(idx1, IsNil) - c.Assert(err1, IsNil) - c.Assert(checkErr, NotNil) - c.Assert(checkErr.Error(), Equals, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error()) - if c3IdxID != 0 { - // Check index is deleted - checkDelRangeAdded(tk, jobID, c3IdxID) - } +func TestForbidCacheTableForSystemTable(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) + sysTables := make([]string, 0, 24) + memOrSysDB := []string{"MySQL", "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "METRICS_SCHEMA"} + for _, db := range memOrSysDB { + tk.MustExec("use " + db) + tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil) + rows := tk.MustQuery("show tables").Rows() + for i := 0; i < len(rows); i++ { + sysTables = append(sysTables, rows[i][0].(string)) } - } - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - s.mustExec(tk, c, "alter table test_drop_column add column c3 int") - s.mustExec(tk, c, "alter table test_drop_column drop column c3") -} - -// TestCancelDropColumns tests cancel ddl job which type is drop multi-columns. -func (s *testDBSuite3) TestCancelDropColumns(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - s.mustExec(tk, c, "drop table if exists test_drop_column") - s.mustExec(tk, c, "create table test_drop_column(c1 int, c2 int)") - defer s.mustExec(tk, c, "drop table test_drop_column;") - testCases := []struct { - needAddColumn bool - jobState model.JobState - JobSchemaState model.SchemaState - cancelSucc bool - }{ - {true, model.JobStateNone, model.StateNone, true}, - {false, model.JobStateRunning, model.StateWriteOnly, false}, - {true, model.JobStateRunning, model.StateDeleteOnly, false}, - {true, model.JobStateRunning, model.StateDeleteReorganization, false}, - } - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - var jobID int64 - testCase := &testCases[0] - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == model.ActionDropColumns && job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { - jobIDs := []int64{job.ID} - jobID = job.ID - hookCtx := mock.NewContext() - hookCtx.Store = s.store - err := hookCtx.NewTxn(context.TODO()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return + for _, one := range sysTables { + err := tk.ExecToErr(fmt.Sprintf("alter table `%s` cache", one)) + if db == "MySQL" { + require.EqualError(t, err, "[ddl:8200]ALTER table cache for tables in system database is currently unsupported") + } else { + require.EqualError(t, err, fmt.Sprintf("[planner:1142]ALTER command denied to user 'root'@'%%' for table '%s'", strings.ToLower(one))) } - checkErr = txn.Commit(context.Background()) - } - } - originalHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - var err1 error - for i := range testCases { - var c3IdxID int64 - testCase = &testCases[i] - if testCase.needAddColumn { - s.mustExec(tk, c, "alter table test_drop_column add column c3 int, add column c4 int") - s.mustExec(tk, c, "alter table test_drop_column add index idx_c3(c3)") - ctx := tk.Se.(sessionctx.Context) - c3IdxID = testGetIndexID(c, ctx, s.schemaName, "test_drop_column", "idx_c3") - } - _, err1 = tk.Exec("alter table test_drop_column drop column c3, drop column c4") - t := s.testGetTable(c, "test_drop_column") - col3 := table.FindCol(t.Cols(), "c3") - col4 := table.FindCol(t.Cols(), "c4") - var idx3 table.Index - for _, idx := range t.Indices() { - if strings.EqualFold(idx.Meta().Name.L, "idx_c3") { - idx3 = idx - break - } - } - if testCase.cancelSucc { - c.Assert(checkErr, IsNil) - c.Assert(col3, NotNil) - c.Assert(col4, NotNil) - c.Assert(idx3, NotNil) - c.Assert(col3.Name.L, Equals, "c3") - c.Assert(col4.Name.L, Equals, "c4") - c.Assert(idx3.Meta().Name.L, Equals, "idx_c3") - c.Assert(err1.Error(), Equals, "[ddl:8214]Cancelled DDL job") - } else { - c.Assert(col3, IsNil) - c.Assert(col4, IsNil) - c.Assert(idx3, IsNil) - c.Assert(err1, IsNil) - c.Assert(checkErr, NotNil) - c.Assert(checkErr.Error(), Equals, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error()) - if c3IdxID != 0 { - // Check index is deleted - checkDelRangeAdded(tk, jobID, c3IdxID) - } } + sysTables = sysTables[:0] } - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - s.mustExec(tk, c, "alter table test_drop_column add column c3 int, add column c4 int") - s.mustExec(tk, c, "alter table test_drop_column drop column c3, drop column c4") } -func testGetIndexID(c *C, ctx sessionctx.Context, dbName, tblName, idxName string) int64 { - is := domain.GetDomain(ctx).InfoSchema() - t, err := is.TableByName(model.NewCIStr(dbName), model.NewCIStr(tblName)) - c.Assert(err, IsNil) +func TestAlterShardRowIDBits(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange")) + }() - for _, idx := range t.Indices() { - if idx.Meta().Name.L == idxName { - return idx.Meta().ID - } - } - c.Fatalf("index %s not found(db: %s, tbl: %s)", idxName, dbName, tblName) - return -1 -} + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) -type testDDLJobIDCallback struct { - ddl.Callback - jobID int64 -} + tk.MustExec("use test") + // Test alter shard_row_id_bits + tk.MustExec("create table t1 (a int) shard_row_id_bits = 5") + tk.MustExec(fmt.Sprintf("alter table t1 auto_increment = %d;", 1<<56)) + tk.MustExec("insert into t1 set a=1;") -func (t *testDDLJobIDCallback) OnJobUpdated(job *model.Job) { - if t.jobID == 0 { - t.jobID = job.ID - } - if t.Callback != nil { - t.Callback.OnJobUpdated(job) - } -} + // Test increase shard_row_id_bits failed by overflow global auto ID. + tk.MustGetErrMsg("alter table t1 SHARD_ROW_ID_BITS = 10;", "[autoid:1467]shard_row_id_bits 10 will cause next global auto ID 72057594037932936 overflow") -func wrapJobIDExtCallback(oldCallback ddl.Callback) *testDDLJobIDCallback { - return &testDDLJobIDCallback{ - Callback: oldCallback, - jobID: 0, + // Test reduce shard_row_id_bits will be ok. + tk.MustExec("alter table t1 SHARD_ROW_ID_BITS = 3;") + checkShardRowID := func(maxShardRowIDBits, shardRowIDBits uint64) { + tbl := external.GetTableByName(t, tk, "test", "t1") + require.True(t, tbl.Meta().MaxShardRowIDBits == maxShardRowIDBits) + require.True(t, tbl.Meta().ShardRowIDBits == shardRowIDBits) } -} + checkShardRowID(5, 3) -func setupJobIDExtCallback(ctx sessionctx.Context) (jobExt *testDDLJobIDCallback, tearDown func()) { - dom := domain.GetDomain(ctx) - originHook := dom.DDL().GetHook() - jobIDExt := wrapJobIDExtCallback(originHook) - dom.DDL().SetHook(jobIDExt) - return jobIDExt, func() { - dom.DDL().SetHook(originHook) - } + // Test reduce shard_row_id_bits but calculate overflow should use the max record shard_row_id_bits. + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int) shard_row_id_bits = 10") + tk.MustExec("alter table t1 SHARD_ROW_ID_BITS = 5;") + checkShardRowID(10, 5) + tk.MustExec(fmt.Sprintf("alter table t1 auto_increment = %d;", 1<<56)) + tk.MustGetErrMsg("insert into t1 set a=1;", "[autoid:1467]Failed to read auto-increment value from storage engine") } -func checkDelRangeAdded(tk *testkit.TestKit, jobID int64, elemID int64) { - query := `select sum(cnt) from - (select count(1) cnt from mysql.gc_delete_range where job_id = ? and element_id = ? union - select count(1) cnt from mysql.gc_delete_range_done where job_id = ? and element_id = ?) as gdr;` - tk.MustQuery(query, jobID, elemID, jobID, elemID).Check(testkit.Rows("1")) +func TestShardRowIDBitsOnTemporaryTable(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + // for global temporary table + tk.MustExec("drop table if exists shard_row_id_temporary") + tk.MustGetErrMsg( + "create global temporary table shard_row_id_temporary (a int) shard_row_id_bits = 5 on commit delete rows;", + core.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) + tk.MustExec("create global temporary table shard_row_id_temporary (a int) on commit delete rows;") + tk.MustGetErrMsg( + "alter table shard_row_id_temporary shard_row_id_bits = 4;", + dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) + // for local temporary table + tk.MustExec("drop table if exists local_shard_row_id_temporary") + tk.MustGetErrMsg( + "create temporary table local_shard_row_id_temporary (a int) shard_row_id_bits = 5;", + core.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) + tk.MustExec("create temporary table local_shard_row_id_temporary (a int);") + tk.MustGetErrMsg( + "alter table local_shard_row_id_temporary shard_row_id_bits = 4;", + dbterror.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("ALTER TABLE").Error()) } -func checkGlobalIndexCleanUpDone(c *C, ctx sessionctx.Context, tblInfo *model.TableInfo, idxInfo *model.IndexInfo, pid int64) int { - c.Assert(ctx.NewTxn(context.Background()), IsNil) - txn, err := ctx.Txn(true) - c.Assert(err, IsNil) +func TestDDLJobErrorCount(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists ddl_error_table, new_ddl_error_table") + tk.MustExec("create table ddl_error_table(a int)") + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockErrEntrySizeTooLarge", `return(true)`)) defer func() { - err := txn.Rollback() - c.Assert(err, IsNil) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockErrEntrySizeTooLarge")) }() - cnt := 0 - prefix := tablecodec.EncodeTableIndexPrefix(tblInfo.ID, idxInfo.ID) - it, err := txn.Iter(prefix, nil) - c.Assert(err, IsNil) - for it.Valid() { - if !it.Key().HasPrefix(prefix) { - break - } - segs := tablecodec.SplitIndexValue(it.Value()) - c.Assert(segs.PartitionID, NotNil) - _, pi, err := codec.DecodeInt(segs.PartitionID) - c.Assert(err, IsNil) - c.Assert(pi, Not(Equals), pid) - cnt++ - err = it.Next() - c.Assert(err, IsNil) - } - return cnt -} - -func (s *testDBSuite5) TestAlterPrimaryKey(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("create table test_add_pk(a int, b int unsigned , c varchar(255) default 'abc', d int as (a+b), e int as (a+1) stored, index idx(b))") - defer tk.MustExec("drop table test_add_pk") - - // for generated columns - tk.MustGetErrCode("alter table test_add_pk add primary key(d);", errno.ErrUnsupportedOnGeneratedColumn) - // The primary key name is the same as the existing index name. - tk.MustExec("alter table test_add_pk add primary key idx(e)") - tk.MustExec("drop index `primary` on test_add_pk") - - // for describing table - tk.MustExec("create table test_add_pk1(a int, index idx(a))") - tk.MustQuery("desc test_add_pk1").Check(testutil.RowsWithSep(",", `a,int(11),YES,MUL,,`)) - tk.MustExec("alter table test_add_pk1 add primary key idx(a)") - tk.MustQuery("desc test_add_pk1").Check(testutil.RowsWithSep(",", `a,int(11),NO,PRI,,`)) - tk.MustExec("alter table test_add_pk1 drop primary key") - tk.MustQuery("desc test_add_pk1").Check(testutil.RowsWithSep(",", `a,int(11),NO,MUL,,`)) - tk.MustExec("create table test_add_pk2(a int, b int, index idx(a))") - tk.MustExec("alter table test_add_pk2 add primary key idx(a, b)") - tk.MustQuery("desc test_add_pk2").Check(testutil.RowsWithSep(",", ""+ - "a int(11) NO PRI ]\n"+ - "[b int(11) NO PRI ")) - tk.MustQuery("show create table test_add_pk2").Check(testutil.RowsWithSep("|", ""+ - "test_add_pk2 CREATE TABLE `test_add_pk2` (\n"+ - " `a` int(11) NOT NULL,\n"+ - " `b` int(11) NOT NULL,\n"+ - " KEY `idx` (`a`),\n"+ - " PRIMARY KEY (`a`,`b`) /*T![clustered_index] NONCLUSTERED */\n"+ - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("alter table test_add_pk2 drop primary key") - tk.MustQuery("desc test_add_pk2").Check(testutil.RowsWithSep(",", ""+ - "a int(11) NO MUL ]\n"+ - "[b int(11) NO ")) - - // Check if the primary key exists before checking the table's pkIsHandle. - tk.MustGetErrCode("alter table test_add_pk drop primary key", errno.ErrCantDropFieldOrKey) - - // for the limit of name - validName := strings.Repeat("a", mysql.MaxIndexIdentifierLen) - invalidName := strings.Repeat("b", mysql.MaxIndexIdentifierLen+1) - tk.MustGetErrCode("alter table test_add_pk add primary key "+invalidName+"(a)", errno.ErrTooLongIdent) - // for valid name - tk.MustExec("alter table test_add_pk add primary key " + validName + "(a)") - // for multiple primary key - tk.MustGetErrCode("alter table test_add_pk add primary key (a)", errno.ErrMultiplePriKey) - tk.MustExec("alter table test_add_pk drop primary key") - // for not existing primary key - tk.MustGetErrCode("alter table test_add_pk drop primary key", errno.ErrCantDropFieldOrKey) - tk.MustGetErrCode("drop index `primary` on test_add_pk", errno.ErrCantDropFieldOrKey) - - // for too many key parts specified - tk.MustGetErrCode("alter table test_add_pk add primary key idx_test(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17);", - errno.ErrTooManyKeyParts) - - // for the limit of comment's length - validComment := "'" + strings.Repeat("a", ddl.MaxCommentLength) + "'" - invalidComment := "'" + strings.Repeat("b", ddl.MaxCommentLength+1) + "'" - tk.MustGetErrCode("alter table test_add_pk add primary key(a) comment "+invalidComment, errno.ErrTooLongIndexComment) - // for empty sql_mode - r := tk.MustQuery("select @@sql_mode") - sqlMode := r.Rows()[0][0].(string) - tk.MustExec("set @@sql_mode=''") - tk.MustExec("alter table test_add_pk add primary key(a) comment " + invalidComment) - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1688|Comment for index 'PRIMARY' is too long (max = 1024)")) - tk.MustExec("set @@sql_mode= '" + sqlMode + "'") - tk.MustExec("alter table test_add_pk drop primary key") - // for valid comment - tk.MustExec("alter table test_add_pk add primary key(a, b, c) comment " + validComment) - ctx := tk.Se.(sessionctx.Context) - c.Assert(ctx.NewTxn(context.Background()), IsNil) - t := testGetTableByName(c, ctx, "test", "test_add_pk") - col1Flag := t.Cols()[0].Flag - col2Flag := t.Cols()[1].Flag - col3Flag := t.Cols()[2].Flag - c.Assert(mysql.HasNotNullFlag(col1Flag) && !mysql.HasPreventNullInsertFlag(col1Flag), IsTrue) - c.Assert(mysql.HasNotNullFlag(col2Flag) && !mysql.HasPreventNullInsertFlag(col2Flag) && mysql.HasUnsignedFlag(col2Flag), IsTrue) - c.Assert(mysql.HasNotNullFlag(col3Flag) && !mysql.HasPreventNullInsertFlag(col3Flag) && !mysql.HasNoDefaultValueFlag(col3Flag), IsTrue) - tk.MustExec("alter table test_add_pk drop primary key") - - // for null values in primary key - tk.MustExec("drop table test_add_pk") - tk.MustExec("create table test_add_pk(a int, b int unsigned , c varchar(255) default 'abc', index idx(b))") - tk.MustExec("insert into test_add_pk set a = 0, b = 0, c = 0") - tk.MustExec("insert into test_add_pk set a = 1") - tk.MustGetErrCode("alter table test_add_pk add primary key (b)", errno.ErrInvalidUseOfNull) - tk.MustExec("insert into test_add_pk set a = 2, b = 2") - tk.MustGetErrCode("alter table test_add_pk add primary key (a, b)", errno.ErrInvalidUseOfNull) - tk.MustExec("insert into test_add_pk set a = 3, c = 3") - tk.MustGetErrCode("alter table test_add_pk add primary key (c, b, a)", errno.ErrInvalidUseOfNull) -} - -func (s *testDBSuite4) TestAddIndexWithDupCols(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - err1 := infoschema.ErrColumnExists.GenWithStackByArgs("b") - err2 := infoschema.ErrColumnExists.GenWithStackByArgs("B") - - tk.MustExec("create table test_add_index_with_dup (a int, b int)") - _, err := tk.Exec("create index c on test_add_index_with_dup(b, a, b)") - c.Check(errors.Cause(err1).(*terror.Error).Equal(err), Equals, true) - - _, err = tk.Exec("create index c on test_add_index_with_dup(b, a, B)") - c.Check(errors.Cause(err2).(*terror.Error).Equal(err), Equals, true) - - _, err = tk.Exec("alter table test_add_index_with_dup add index c (b, a, b)") - c.Check(errors.Cause(err1).(*terror.Error).Equal(err), Equals, true) - - _, err = tk.Exec("alter table test_add_index_with_dup add index c (b, a, B)") - c.Check(errors.Cause(err2).(*terror.Error).Equal(err), Equals, true) - - tk.MustExec("drop table test_add_index_with_dup") -} - -// checkGlobalIndexRow reads one record from global index and check. Only support int handle. -func checkGlobalIndexRow(c *C, ctx sessionctx.Context, tblInfo *model.TableInfo, indexInfo *model.IndexInfo, - pid int64, idxVals []types.Datum, rowVals []types.Datum) { - err := ctx.NewTxn(context.Background()) - c.Assert(err, IsNil) - txn, err := ctx.Txn(true) - sc := ctx.GetSessionVars().StmtCtx - c.Assert(err, IsNil) - - tblColMap := make(map[int64]*types.FieldType, len(tblInfo.Columns)) - for _, col := range tblInfo.Columns { - tblColMap[col.ID] = &col.FieldType - } - - // Check local index entry does not exist. - localPrefix := tablecodec.EncodeTableIndexPrefix(pid, indexInfo.ID) - it, err := txn.Iter(localPrefix, nil) - c.Assert(err, IsNil) - // no local index entry. - c.Assert(it.Valid() && it.Key().HasPrefix(localPrefix), IsFalse) - it.Close() - - // Check global index entry. - encodedValue, err := codec.EncodeKey(sc, nil, idxVals...) - c.Assert(err, IsNil) - key := tablecodec.EncodeIndexSeekKey(tblInfo.ID, indexInfo.ID, encodedValue) - c.Assert(err, IsNil) - value, err := txn.Get(context.Background(), key) - c.Assert(err, IsNil) - idxColInfos := tables.BuildRowcodecColInfoForIndexColumns(indexInfo, tblInfo) - colVals, err := tablecodec.DecodeIndexKV(key, value, len(indexInfo.Columns), tablecodec.HandleDefault, idxColInfos) - c.Assert(err, IsNil) - c.Assert(colVals, HasLen, len(idxVals)+2) - for i, val := range idxVals { - _, d, err := codec.DecodeOne(colVals[i]) - c.Assert(err, IsNil) - c.Assert(d, DeepEquals, val) - } - _, d, err := codec.DecodeOne(colVals[len(idxVals)+1]) // pid - c.Assert(err, IsNil) - c.Assert(d.GetInt64(), Equals, pid) - - _, d, err = codec.DecodeOne(colVals[len(idxVals)]) // handle - c.Assert(err, IsNil) - h := kv.IntHandle(d.GetInt64()) - rowKey := tablecodec.EncodeRowKey(pid, h.Encoded()) - rowValue, err := txn.Get(context.Background(), rowKey) - c.Assert(err, IsNil) - rowValueDatums, err := tablecodec.DecodeRowToDatumMap(rowValue, tblColMap, time.UTC) - c.Assert(err, IsNil) - c.Assert(rowValueDatums, NotNil) - for i, val := range rowVals { - c.Assert(rowValueDatums[tblInfo.Columns[i].ID], DeepEquals, val) + var jobID int64 + hook := &ddl.TestDDLCallback{} + hook.OnJobUpdatedExported = func(job *model.Job) { + jobID = job.ID } -} - -func (s *testSerialDBSuite) TestAddGlobalIndex(c *C) { - defer config.RestoreFunc()() - config.UpdateGlobal(func(conf *config.Config) { - conf.EnableGlobalIndex = true - }) - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("create table test_t1 (a int, b int) partition by range (b)" + - " (partition p0 values less than (10), " + - " partition p1 values less than (maxvalue));") - tk.MustExec("insert test_t1 values (1, 1)") - tk.MustExec("alter table test_t1 add unique index p_a (a);") - tk.MustExec("insert test_t1 values (2, 11)") - t := s.testGetTable(c, "test_t1") - tblInfo := t.Meta() - indexInfo := tblInfo.FindIndexByName("p_a") - c.Assert(indexInfo, NotNil) - c.Assert(indexInfo.Global, IsTrue) - - ctx := s.s.(sessionctx.Context) - err := ctx.NewTxn(context.Background()) - c.Assert(err, IsNil) - txn, err := ctx.Txn(true) - c.Assert(err, IsNil) - - // check row 1 - pid := tblInfo.Partition.Definitions[0].ID - idxVals := []types.Datum{types.NewDatum(1)} - rowVals := []types.Datum{types.NewDatum(1), types.NewDatum(1)} - checkGlobalIndexRow(c, ctx, tblInfo, indexInfo, pid, idxVals, rowVals) - - // check row 2 - pid = tblInfo.Partition.Definitions[1].ID - idxVals = []types.Datum{types.NewDatum(2)} - rowVals = []types.Datum{types.NewDatum(2), types.NewDatum(11)} - checkGlobalIndexRow(c, ctx, tblInfo, indexInfo, pid, idxVals, rowVals) - err = txn.Commit(context.Background()) - c.Assert(err, IsNil) - - // Test add global Primary Key index - tk.MustExec("create table test_t2 (a int, b int) partition by range (b)" + - " (partition p0 values less than (10), " + - " partition p1 values less than (maxvalue));") - tk.MustExec("insert test_t2 values (1, 1)") - tk.MustExec("alter table test_t2 add primary key (a) nonclustered;") - tk.MustExec("insert test_t2 values (2, 11)") - t = s.testGetTable(c, "test_t2") - tblInfo = t.Meta() - indexInfo = t.Meta().FindIndexByName("primary") - c.Assert(indexInfo, NotNil) - c.Assert(indexInfo.Global, IsTrue) - - err = ctx.NewTxn(context.Background()) - c.Assert(err, IsNil) - txn, err = ctx.Txn(true) - c.Assert(err, IsNil) - - // check row 1 - pid = tblInfo.Partition.Definitions[0].ID - idxVals = []types.Datum{types.NewDatum(1)} - rowVals = []types.Datum{types.NewDatum(1), types.NewDatum(1)} - checkGlobalIndexRow(c, ctx, tblInfo, indexInfo, pid, idxVals, rowVals) - - // check row 2 - pid = tblInfo.Partition.Definitions[1].ID - idxVals = []types.Datum{types.NewDatum(2)} - rowVals = []types.Datum{types.NewDatum(2), types.NewDatum(11)} - checkGlobalIndexRow(c, ctx, tblInfo, indexInfo, pid, idxVals, rowVals) - - err = txn.Commit(context.Background()) - c.Assert(err, IsNil) -} - -func (s *testDBSuite) showColumns(tk *testkit.TestKit, c *C, tableName string) [][]interface{} { - return s.mustQuery(tk, c, fmt.Sprintf("show columns from %s", tableName)) -} - -func (s *testDBSuite5) TestCreateIndexType(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - sql := `CREATE TABLE test_index ( - price int(5) DEFAULT '0' NOT NULL, - area varchar(40) DEFAULT '' NOT NULL, - type varchar(40) DEFAULT '' NOT NULL, - transityes set('a','b'), - shopsyes enum('Y','N') DEFAULT 'Y' NOT NULL, - schoolsyes enum('Y','N') DEFAULT 'Y' NOT NULL, - petsyes enum('Y','N') DEFAULT 'Y' NOT NULL, - KEY price (price,area,type,transityes,shopsyes,schoolsyes,petsyes));` - tk.MustExec(sql) -} + originHook := dom.DDL().GetHook() + dom.DDL().SetHook(hook) + defer dom.DDL().SetHook(originHook) -func (s *testDBSuite6) TestColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("create table t2 (c1 int, c2 int, c3 int)") - tk.MustExec("set @@tidb_disable_txn_auto_retry = 0") - s.testAddColumn(tk, c) - s.testDropColumn(tk, c) - tk.MustExec("drop table t2") -} + tk.MustGetErrCode("rename table ddl_error_table to new_ddl_error_table", errno.ErrEntryTooLarge) -func sessionExec(c *C, s kv.Storage, sql string) { - se, err := session.CreateSession4Test(s) - c.Assert(err, IsNil) - _, err = se.Execute(context.Background(), "use test_db") - c.Assert(err, IsNil) - rs, err := se.Execute(context.Background(), sql) - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) - c.Assert(rs, IsNil) - se.Close() + historyJob, err := getHistoryDDLJob(store, jobID) + require.NoError(t, err) + require.NotNil(t, historyJob) + require.Equal(t, int64(1), historyJob.ErrorCount) + require.True(t, kv.ErrEntryTooLarge.Equal(historyJob.Error)) } -func (s *testDBSuite) testAddColumn(tk *testkit.TestKit, c *C) { - done := make(chan error, 1) - - num := defaultBatchSize + 10 - // add some rows - batchInsert(tk, "t2", 0, num) - - testddlutil.SessionExecInGoroutine(s.store, "alter table t2 add column c4 int default -1", done) - - ticker := time.NewTicker(s.lease / 2) - defer ticker.Stop() - step := 10 -LOOP: - for { - select { - case err := <-done: - if err == nil { - break LOOP - } - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) - case <-ticker.C: - // delete some rows, and add some data - for i := num; i < num+step; i++ { - n := rand.Intn(num) - tk.MustExec("begin") - tk.MustExec("delete from t2 where c1 = ?", n) - tk.MustExec("commit") - - // Make sure that statement of insert and show use the same infoSchema. - tk.MustExec("begin") - _, err := tk.Exec("insert into t2 values (?, ?, ?)", i, i, i) - if err != nil { - // if err is failed, the column number must be 4 now. - values := s.showColumns(tk, c, "t2") - c.Assert(values, HasLen, 4, Commentf("err:%v", errors.ErrorStack(err))) - } - tk.MustExec("commit") - } - num += step - } - } +func TestCommitTxnWithIndexChange(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + defer clean() + // Prepare work. + tk := testkit.NewTestKit(t, store) + tk.MustExec("set tidb_enable_amend_pessimistic_txn = 1;") + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int primary key, c2 int, c3 int, index ok2(c2))") + tk.MustExec("insert t1 values (1, 10, 100), (2, 20, 200)") + tk.MustExec("alter table t1 add index k2(c2)") + tk.MustExec("alter table t1 drop index k2") + tk.MustExec("alter table t1 add index k2(c2)") + tk.MustExec("alter table t1 drop index k2") + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use test") - // add data, here c4 must exist - for i := num; i < num+step; i++ { - tk.MustExec("insert into t2 values (?, ?, ?, ?)", i, i, i, i) + // tkSQLs are the sql statements for the pessimistic transaction. + // tk2DDL are the ddl statements executed before the pessimistic transaction. + // idxDDL is the DDL statement executed between pessimistic transaction begin and commit. + // failCommit means the pessimistic transaction commit should fail not. + type caseUnit struct { + tkSQLs []string + tk2DDL []string + idxDDL string + checkSQLs []string + rowsExps [][]string + failCommit bool + stateEnd model.SchemaState } - rows := s.mustQuery(tk, c, "select count(c4) from t2") - c.Assert(rows, HasLen, 1) - c.Assert(rows[0], HasLen, 1) - count, err := strconv.ParseInt(rows[0][0].(string), 10, 64) - c.Assert(err, IsNil) - c.Assert(count, Greater, int64(0)) - - rows = s.mustQuery(tk, c, "select count(c4) from t2 where c4 = -1") - matchRows(c, rows, [][]interface{}{{count - int64(step)}}) - - for i := num; i < num+step; i++ { - rows = s.mustQuery(tk, c, "select c4 from t2 where c4 = ?", i) - matchRows(c, rows, [][]interface{}{{i}}) + cases := []caseUnit{ + // Test secondary index + {[]string{"insert into t1 values(3, 30, 300)", + "insert into t2 values(11, 11, 11)"}, + []string{"alter table t1 add index k2(c2)", + "alter table t1 drop index k2", + "alter table t1 add index kk2(c2, c1)", + "alter table t1 add index k2(c2)", + "alter table t1 drop index k2"}, + "alter table t1 add index k2(c2)", + []string{"select c3, c2 from t1 use index(k2) where c2 = 20", + "select c3, c2 from t1 use index(k2) where c2 = 10", + "select * from t1", + "select * from t2 where c1 = 11"}, + [][]string{{"200 20"}, + {"100 10"}, + {"1 10 100", "2 20 200", "3 30 300"}, + {"11 11 11"}}, + false, + model.StateNone}, + // Test secondary index + {[]string{"insert into t2 values(5, 50, 500)", + "insert into t2 values(11, 11, 11)", + "delete from t2 where c2 = 11", + "update t2 set c2 = 110 where c1 = 11"}, + // "update t2 set c1 = 10 where c3 = 100"}, + []string{"alter table t1 add index k2(c2)", + "alter table t1 drop index k2", + "alter table t1 add index kk2(c2, c1)", + "alter table t1 add index k2(c2)", + "alter table t1 drop index k2"}, + "alter table t1 add index k2(c2)", + []string{"select c3, c2 from t1 use index(k2) where c2 = 20", + "select c3, c2 from t1 use index(k2) where c2 = 10", + "select * from t1", + "select * from t2 where c1 = 11", + "select * from t2 where c3 = 100"}, + [][]string{{"200 20"}, + {"100 10"}, + {"1 10 100", "2 20 200"}, + {}, + {"1 10 100"}}, + false, + model.StateNone}, + // Test unique index + {[]string{"insert into t1 values(3, 30, 300)", + "insert into t1 values(4, 40, 400)", + "insert into t2 values(11, 11, 11)", + "insert into t2 values(12, 12, 11)"}, + []string{"alter table t1 add unique index uk3(c3)", + "alter table t1 drop index uk3", + "alter table t2 add unique index ukc1c3(c1, c3)", + "alter table t2 add unique index ukc3(c3)", + "alter table t2 drop index ukc1c3", + "alter table t2 drop index ukc3", + "alter table t2 add index kc3(c3)"}, + "alter table t1 add unique index uk3(c3)", + []string{"select c3, c2 from t1 use index(uk3) where c3 = 200", + "select c3, c2 from t1 use index(uk3) where c3 = 300", + "select c3, c2 from t1 use index(uk3) where c3 = 400", + "select * from t1", + "select * from t2"}, + [][]string{{"200 20"}, + {"300 30"}, + {"400 40"}, + {"1 10 100", "2 20 200", "3 30 300", "4 40 400"}, + {"1 10 100", "2 20 200", "11 11 11", "12 12 11"}}, + false, model.StateNone}, + // Test unique index fail to commit, this case needs the new index could be inserted + {[]string{"insert into t1 values(3, 30, 300)", + "insert into t1 values(4, 40, 300)", + "insert into t2 values(11, 11, 11)", + "insert into t2 values(12, 11, 12)"}, + //[]string{"alter table t1 add unique index uk3(c3)", "alter table t1 drop index uk3"}, + []string{}, + "alter table t1 add unique index uk3(c3)", + []string{"select c3, c2 from t1 use index(uk3) where c3 = 200", + "select c3, c2 from t1 use index(uk3) where c3 = 300", + "select c3, c2 from t1 where c1 = 4", + "select * from t1", + "select * from t2"}, + [][]string{{"200 20"}, + {}, + {}, + {"1 10 100", "2 20 200"}, + {"1 10 100", "2 20 200"}}, + true, + model.StateWriteOnly}, } + tk.MustQuery("select * from t1;").Check(testkit.Rows("1 10 100", "2 20 200")) - ctx := s.s.(sessionctx.Context) - t := s.testGetTable(c, "t2") - i := 0 - j := 0 - err = ctx.NewTxn(context.Background()) - c.Assert(err, IsNil) - defer func() { - if txn, err1 := ctx.Txn(true); err1 == nil { - err := txn.Rollback() - c.Assert(err, IsNil) + // Test add index state change + do := dom.DDL() + startStates := []model.SchemaState{model.StateNone, model.StateDeleteOnly} + for _, startState := range startStates { + endStatMap := session.ConstOpAddIndex[startState] + var endStates []model.SchemaState + for st := range endStatMap { + endStates = append(endStates, st) } - }() - err = tables.IterRecords(t, ctx, t.Cols(), - func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { - i++ - // c4 must be -1 or > 0 - v, err1 := data[3].ToInt64(ctx.GetSessionVars().StmtCtx) - c.Assert(err1, IsNil) - if v == -1 { - j++ - } else { - c.Assert(v, Greater, int64(0)) - } - return true, nil - }) - c.Assert(err, IsNil) - c.Assert(i, Equals, int(count)) - c.Assert(i, LessEqual, num+step) - c.Assert(j, Equals, int(count)-step) - - // for modifying columns after adding columns - tk.MustExec("alter table t2 modify c4 int default 11") - for i := num + step; i < num+step+10; i++ { - s.mustExec(tk, c, "insert into t2 values (?, ?, ?, ?)", i, i, i, i) - } - rows = s.mustQuery(tk, c, "select count(c4) from t2 where c4 = -1") - matchRows(c, rows, [][]interface{}{{count - int64(step)}}) - - // add timestamp type column - s.mustExec(tk, c, "create table test_on_update_c (c1 int, c2 timestamp);") - defer tk.MustExec("drop table test_on_update_c;") - s.mustExec(tk, c, "alter table test_on_update_c add column c3 timestamp null default '2017-02-11' on update current_timestamp;") - is := domain.GetDomain(ctx).InfoSchema() - tbl, err := is.TableByName(model.NewCIStr("test_db"), model.NewCIStr("test_on_update_c")) - c.Assert(err, IsNil) - tblInfo := tbl.Meta() - colC := tblInfo.Columns[2] - c.Assert(colC.Tp, Equals, mysql.TypeTimestamp) - hasNotNull := mysql.HasNotNullFlag(colC.Flag) - c.Assert(hasNotNull, IsFalse) - // add datetime type column - s.mustExec(tk, c, "create table test_on_update_d (c1 int, c2 datetime);") - defer tk.MustExec("drop table test_on_update_d;") - s.mustExec(tk, c, "alter table test_on_update_d add column c3 datetime on update current_timestamp;") - is = domain.GetDomain(ctx).InfoSchema() - tbl, err = is.TableByName(model.NewCIStr("test_db"), model.NewCIStr("test_on_update_d")) - c.Assert(err, IsNil) - tblInfo = tbl.Meta() - colC = tblInfo.Columns[2] - c.Assert(colC.Tp, Equals, mysql.TypeDatetime) - hasNotNull = mysql.HasNotNullFlag(colC.Flag) - c.Assert(hasNotNull, IsFalse) - - // add year type column - s.mustExec(tk, c, "create table test_on_update_e (c1 int);") - defer tk.MustExec("drop table test_on_update_e;") - s.mustExec(tk, c, "insert into test_on_update_e (c1) values (0);") - s.mustExec(tk, c, "alter table test_on_update_e add column c2 year not null;") - tk.MustQuery("select c2 from test_on_update_e").Check(testkit.Rows("0")) - - // test add unsupported constraint - s.mustExec(tk, c, "create table t_add_unsupported_constraint (a int);") - _, err = tk.Exec("ALTER TABLE t_add_unsupported_constraint ADD id int AUTO_INCREMENT;") - c.Assert(err.Error(), Equals, "[ddl:8200]unsupported add column 'id' constraint AUTO_INCREMENT when altering 'test_db.t_add_unsupported_constraint'") - _, err = tk.Exec("ALTER TABLE t_add_unsupported_constraint ADD id int KEY;") - c.Assert(err.Error(), Equals, "[ddl:8200]unsupported add column 'id' constraint PRIMARY KEY when altering 'test_db.t_add_unsupported_constraint'") - _, err = tk.Exec("ALTER TABLE t_add_unsupported_constraint ADD id int UNIQUE;") - c.Assert(err.Error(), Equals, "[ddl:8200]unsupported add column 'id' constraint UNIQUE KEY when altering 'test_db.t_add_unsupported_constraint'") -} - -func (s *testDBSuite) testDropColumn(tk *testkit.TestKit, c *C) { - done := make(chan error, 1) - s.mustExec(tk, c, "delete from t2") - - num := 100 - // add some rows - for i := 0; i < num; i++ { - s.mustExec(tk, c, "insert into t2 values (?, ?, ?, ?)", i, i, i, i) - } - - // get c4 column id - testddlutil.SessionExecInGoroutine(s.store, "alter table t2 drop column c4", done) - - ticker := time.NewTicker(s.lease / 2) - defer ticker.Stop() - step := 10 -LOOP: - for { - select { - case err := <-done: - if err == nil { - break LOOP - } - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) - case <-ticker.C: - // delete some rows, and add some data - for i := num; i < num+step; i++ { - // Make sure that statement of insert and show use the same infoSchema. - tk.MustExec("begin") - _, err := tk.Exec("insert into t2 values (?, ?, ?)", i, i, i) - if err != nil { - // If executing is failed, the column number must be 4 now. - values := s.showColumns(tk, c, "t2") - c.Assert(values, HasLen, 4, Commentf("err:%v", errors.ErrorStack(err))) + sort.Slice(endStates, func(i, j int) bool { return endStates[i] < endStates[j] }) + for _, endState := range endStates { + for _, curCase := range cases { + if endState < curCase.stateEnd { + break } - tk.MustExec("commit") - } - num += step - } - } - - // add data, here c4 must not exist - for i := num; i < num+step; i++ { - s.mustExec(tk, c, "insert into t2 values (?, ?, ?)", i, i, i) - } - - rows := s.mustQuery(tk, c, "select count(*) from t2") - c.Assert(rows, HasLen, 1) - c.Assert(rows[0], HasLen, 1) - count, err := strconv.ParseInt(rows[0][0].(string), 10, 64) - c.Assert(err, IsNil) - c.Assert(count, Greater, int64(0)) -} - -// TestDropColumn is for inserting value with a to-be-dropped column when do drop column. -// Column info from schema in build-insert-plan should be public only, -// otherwise they will not be consist with Table.Col(), then the server will panic. -func (s *testDBSuite6) TestDropColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database drop_col_db") - tk.MustExec("use drop_col_db") - num := 25 - multiDDL := make([]string, 0, num) - sql := "create table t2 (c1 int, c2 int, c3 int, " - for i := 4; i < 4+num; i++ { - multiDDL = append(multiDDL, fmt.Sprintf("alter table t2 drop column c%d", i)) - - if i != 3+num { - sql += fmt.Sprintf("c%d int, ", i) - } else { - sql += fmt.Sprintf("c%d int)", i) - } - } - tk.MustExec(sql) - dmlDone := make(chan error, num) - ddlDone := make(chan error, num) - - testddlutil.ExecMultiSQLInGoroutine(s.store, "drop_col_db", multiDDL, ddlDone) - for i := 0; i < num; i++ { - testddlutil.ExecMultiSQLInGoroutine(s.store, "drop_col_db", []string{"insert into t2 set c1 = 1, c2 = 1, c3 = 1, c4 = 1"}, dmlDone) - } - for i := 0; i < num; i++ { - err := <-ddlDone - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) - } - - // Test for drop partition table column. - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int,b int) partition by hash(a) partitions 4;") - _, err := tk.Exec("alter table t1 drop column a") - c.Assert(err, NotNil) - // TODO: refine the error message to compatible with MySQL - c.Assert(err.Error(), Equals, "[planner:1054]Unknown column 'a' in 'expression'") - - tk.MustExec("drop database drop_col_db") -} - -func (s *testDBSuite4) TestChangeColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - - s.mustExec(tk, c, "create table t3 (a int default '0', b varchar(10), d int not null default '0')") - s.mustExec(tk, c, "insert into t3 set b = 'a'") - tk.MustQuery("select a from t3").Check(testkit.Rows("0")) - s.mustExec(tk, c, "alter table t3 change a aa bigint") - s.mustExec(tk, c, "insert into t3 set b = 'b'") - tk.MustQuery("select aa from t3").Check(testkit.Rows("0", "")) - // for no default flag - s.mustExec(tk, c, "alter table t3 change d dd bigint not null") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - tbl, err := is.TableByName(model.NewCIStr("test_db"), model.NewCIStr("t3")) - c.Assert(err, IsNil) - tblInfo := tbl.Meta() - colD := tblInfo.Columns[2] - hasNoDefault := mysql.HasNoDefaultValueFlag(colD.Flag) - c.Assert(hasNoDefault, IsTrue) - // for the following definitions: 'not null', 'null', 'default value' and 'comment' - s.mustExec(tk, c, "alter table t3 change b b varchar(20) null default 'c' comment 'my comment'") - is = domain.GetDomain(ctx).InfoSchema() - tbl, err = is.TableByName(model.NewCIStr("test_db"), model.NewCIStr("t3")) - c.Assert(err, IsNil) - tblInfo = tbl.Meta() - colB := tblInfo.Columns[1] - c.Assert(colB.Comment, Equals, "my comment") - hasNotNull := mysql.HasNotNullFlag(colB.Flag) - c.Assert(hasNotNull, IsFalse) - s.mustExec(tk, c, "insert into t3 set aa = 3, dd = 5") - tk.MustQuery("select b from t3").Check(testkit.Rows("a", "b", "c")) - // for timestamp - s.mustExec(tk, c, "alter table t3 add column c timestamp not null") - s.mustExec(tk, c, "alter table t3 change c c timestamp null default '2017-02-11' comment 'col c comment' on update current_timestamp") - is = domain.GetDomain(ctx).InfoSchema() - tbl, err = is.TableByName(model.NewCIStr("test_db"), model.NewCIStr("t3")) - c.Assert(err, IsNil) - tblInfo = tbl.Meta() - colC := tblInfo.Columns[3] - c.Assert(colC.Comment, Equals, "col c comment") - hasNotNull = mysql.HasNotNullFlag(colC.Flag) - c.Assert(hasNotNull, IsFalse) - // for enum - s.mustExec(tk, c, "alter table t3 add column en enum('a', 'b', 'c') not null default 'a'") - // https://github.com/pingcap/tidb/issues/23488 - // if there is a prefix index on the varchar column, then we can change it to text - s.mustExec(tk, c, "drop table if exists t") - s.mustExec(tk, c, "create table t (k char(10), v int, INDEX(k(7)));") - s.mustExec(tk, c, "alter table t change column k k tinytext") - is = domain.GetDomain(ctx).InfoSchema() - tbl, err = is.TableByName(model.NewCIStr("test_db"), model.NewCIStr("t")) - c.Assert(err, IsNil) - - // for failing tests - sql := "alter table t3 change aa a bigint default ''" - tk.MustGetErrCode(sql, errno.ErrInvalidDefault) - sql = "alter table t3 change a testx.t3.aa bigint" - tk.MustGetErrCode(sql, errno.ErrWrongDBName) - sql = "alter table t3 change t.a aa bigint" - tk.MustGetErrCode(sql, errno.ErrWrongTableName) - s.mustExec(tk, c, "create table t4 (c1 int, c2 int, c3 int default 1, index (c1));") - tk.MustExec("insert into t4(c2) values (null);") - _, err = tk.Exec("alter table t4 change c1 a1 int not null;") - c.Assert(err.Error(), Equals, "[ddl:1265]Data truncated for column 'a1' at row 1") - sql = "alter table t4 change c2 a bigint not null;" - tk.MustGetErrCode(sql, mysql.WarnDataTruncated) - sql = "alter table t3 modify en enum('a', 'z', 'b', 'c') not null default 'a'" - tk.MustExec(sql) - // Rename to an existing column. - s.mustExec(tk, c, "alter table t3 add column a bigint") - sql = "alter table t3 change aa a bigint" - tk.MustGetErrCode(sql, errno.ErrDupFieldName) - // https://github.com/pingcap/tidb/issues/23488 - s.mustExec(tk, c, "drop table if exists t5") - s.mustExec(tk, c, "create table t5 (k char(10) primary key, v int)") - sql = "alter table t5 change column k k tinytext;" - tk.MustGetErrCode(sql, mysql.ErrBlobKeyWithoutLength) - tk.MustExec("drop table t5") - - s.mustExec(tk, c, "drop table if exists t5") - s.mustExec(tk, c, "create table t5 (k char(10), v int, INDEX(k))") - sql = "alter table t5 change column k k tinytext;" - tk.MustGetErrCode(sql, mysql.ErrBlobKeyWithoutLength) - tk.MustExec("drop table t5") - - tk.MustExec("drop table t3") -} - -func (s *testDBSuite5) TestRenameColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - - assertColNames := func(tableName string, colNames ...string) { - cols := s.testGetTable(c, tableName).Cols() - c.Assert(len(cols), Equals, len(colNames), Commentf("number of columns mismatch")) - for i := range cols { - c.Assert(cols[i].Name.L, Equals, strings.ToLower(colNames[i])) - } - } - - s.mustExec(tk, c, "create table test_rename_column (id int not null primary key auto_increment, col1 int)") - s.mustExec(tk, c, "alter table test_rename_column rename column col1 to col1") - assertColNames("test_rename_column", "id", "col1") - s.mustExec(tk, c, "alter table test_rename_column rename column col1 to col2") - assertColNames("test_rename_column", "id", "col2") - - // Test renaming non-exist columns. - tk.MustGetErrCode("alter table test_rename_column rename column non_exist_col to col3", errno.ErrBadField) - - // Test renaming to an exist column. - tk.MustGetErrCode("alter table test_rename_column rename column col2 to id", errno.ErrDupFieldName) - - // Test renaming the column with foreign key. - tk.MustExec("drop table test_rename_column") - tk.MustExec("create table test_rename_column_base (base int)") - tk.MustExec("create table test_rename_column (col int, foreign key (col) references test_rename_column_base(base))") - - tk.MustGetErrCode("alter table test_rename_column rename column col to col1", errno.ErrFKIncompatibleColumns) - - tk.MustExec("drop table test_rename_column_base") - - // Test renaming generated columns. - tk.MustExec("drop table test_rename_column") - tk.MustExec("create table test_rename_column (id int, col1 int generated always as (id + 1))") - - s.mustExec(tk, c, "alter table test_rename_column rename column col1 to col2") - assertColNames("test_rename_column", "id", "col2") - s.mustExec(tk, c, "alter table test_rename_column rename column col2 to col1") - assertColNames("test_rename_column", "id", "col1") - tk.MustGetErrCode("alter table test_rename_column rename column id to id1", errno.ErrDependentByGeneratedColumn) - - // Test renaming view columns. - tk.MustExec("drop table test_rename_column") - s.mustExec(tk, c, "create table test_rename_column (id int, col1 int)") - s.mustExec(tk, c, "create view test_rename_column_view as select * from test_rename_column") - - s.mustExec(tk, c, "alter table test_rename_column rename column col1 to col2") - tk.MustGetErrCode("select * from test_rename_column_view", errno.ErrViewInvalid) - - s.mustExec(tk, c, "drop view test_rename_column_view") - tk.MustExec("drop table test_rename_column") -} - -func (s *testDBSuite7) TestSelectInViewFromAnotherDB(c *C) { - _, _ = s.s.Execute(context.Background(), "create database test_db2") - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(a int)") - tk.MustExec("use test_db2") - tk.MustExec("create sql security invoker view v as select * from " + s.schemaName + ".t") - tk.MustExec("use " + s.schemaName) - tk.MustExec("select test_db2.v.a from test_db2.v") -} - -func (s *testDBSuite) mustExec(tk *testkit.TestKit, c *C, query string, args ...interface{}) { - tk.MustExec(query, args...) -} - -func (s *testDBSuite) mustQuery(tk *testkit.TestKit, c *C, query string, args ...interface{}) [][]interface{} { - r := tk.MustQuery(query, args...) - return r.Rows() -} - -func matchRows(c *C, rows [][]interface{}, expected [][]interface{}) { - c.Assert(len(rows), Equals, len(expected), Commentf("got %v, expected %v", rows, expected)) - for i := range rows { - match(c, rows[i], expected[i]...) - } -} - -func match(c *C, row []interface{}, expected ...interface{}) { - c.Assert(len(row), Equals, len(expected)) - for i := range row { - got := fmt.Sprintf("%v", row[i]) - need := fmt.Sprintf("%v", expected[i]) - c.Assert(got, Equals, need) - } -} - -// TestCreateTableWithLike2 tests create table with like when refer table have non-public column/index. -func (s *testSerialDBSuite) TestCreateTableWithLike2(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t1,t2;") - defer tk.MustExec("drop table if exists t1,t2;") - tk.MustExec("create table t1 (a int, b int, c int, index idx1(c));") - - tbl1 := testGetTableByName(c, s.s, "test_db", "t1") - doneCh := make(chan error, 2) - hook := &ddl.TestDDLCallback{Do: s.dom} - var onceChecker sync.Map - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type != model.ActionAddColumn && job.Type != model.ActionDropColumn && - job.Type != model.ActionAddColumns && job.Type != model.ActionDropColumns && - job.Type != model.ActionAddIndex && job.Type != model.ActionDropIndex { - return - } - if job.TableID != tbl1.Meta().ID { - return - } - - if job.SchemaState == model.StateDeleteOnly { - if _, ok := onceChecker.Load(job.ID); ok { - return - } - - onceChecker.Store(job.ID, true) - go backgroundExec(s.store, "create table t2 like t1", doneCh) - } - } - originalHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - - // create table when refer table add column - tk.MustExec("alter table t1 add column d int") - checkTbl2 := func() { - err := <-doneCh - c.Assert(err, IsNil) - tk.MustExec("alter table t2 add column e int") - t2Info := testGetTableByName(c, s.s, "test_db", "t2") - c.Assert(len(t2Info.Meta().Columns), Equals, len(t2Info.Cols())) - } - checkTbl2() - - // create table when refer table drop column - tk.MustExec("drop table t2;") - tk.MustExec("alter table t1 drop column b;") - checkTbl2() - - // create table when refer table add index - tk.MustExec("drop table t2;") - tk.MustExec("alter table t1 add index idx2(a);") - checkTbl2 = func() { - err := <-doneCh - c.Assert(err, IsNil) - tk.MustExec("alter table t2 add column e int") - tbl2 := testGetTableByName(c, s.s, "test_db", "t2") - c.Assert(len(tbl2.Meta().Columns), Equals, len(tbl2.Cols())) - - for i := 0; i < len(tbl2.Meta().Indices); i++ { - c.Assert(tbl2.Meta().Indices[i].State, Equals, model.StatePublic) - } - } - checkTbl2() - - // create table when refer table drop index. - tk.MustExec("drop table t2;") - tk.MustExec("alter table t1 drop index idx2;") - checkTbl2() - - // Test for table has tiflash replica. - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`), IsNil) - defer func() { - err := failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") - c.Assert(err, IsNil) - }() - - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - tk.MustExec("drop table if exists t1,t2;") - tk.MustExec("create table t1 (a int) partition by hash(a) partitions 2;") - tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") - t1 := testGetTableByName(c, s.s, "test_db", "t1") - // Mock for all partitions replica was available. - partition := t1.Meta().Partition - c.Assert(len(partition.Definitions), Equals, 2) - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, true) - c.Assert(err, IsNil) - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[1].ID, true) - c.Assert(err, IsNil) - t1 = testGetTableByName(c, s.s, "test_db", "t1") - c.Assert(t1.Meta().TiFlashReplica, NotNil) - c.Assert(t1.Meta().TiFlashReplica.Available, IsTrue) - c.Assert(t1.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[0].ID, partition.Definitions[1].ID}) - - tk.MustExec("create table t2 like t1") - t2 := testGetTableByName(c, s.s, "test_db", "t2") - c.Assert(t2.Meta().TiFlashReplica.Count, Equals, t1.Meta().TiFlashReplica.Count) - c.Assert(t2.Meta().TiFlashReplica.LocationLabels, DeepEquals, t1.Meta().TiFlashReplica.LocationLabels) - c.Assert(t2.Meta().TiFlashReplica.Available, IsFalse) - c.Assert(t2.Meta().TiFlashReplica.AvailablePartitionIDs, HasLen, 0) - // Test for not affecting the original table. - t1 = testGetTableByName(c, s.s, "test_db", "t1") - c.Assert(t1.Meta().TiFlashReplica, NotNil) - c.Assert(t1.Meta().TiFlashReplica.Available, IsTrue) - c.Assert(t1.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[0].ID, partition.Definitions[1].ID}) -} - -func (s *testSerialDBSuite) TestCreateTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("CREATE TABLE `t` (`a` double DEFAULT 1.0 DEFAULT now() DEFAULT 2.0 );") - tk.MustExec("CREATE TABLE IF NOT EXISTS `t` (`a` double DEFAULT 1.0 DEFAULT now() DEFAULT 2.0 );") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - cols := tbl.Cols() - - c.Assert(len(cols), Equals, 1) - col := cols[0] - c.Assert(col.Name.L, Equals, "a") - d, ok := col.DefaultValue.(string) - c.Assert(ok, IsTrue) - c.Assert(d, Equals, "2.0") - - tk.MustExec("drop table t") - - tk.MustGetErrCode("CREATE TABLE `t` (`a` int) DEFAULT CHARSET=abcdefg", errno.ErrUnknownCharacterSet) - - tk.MustExec("CREATE TABLE `collateTest` (`a` int, `b` varchar(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci") - expects := "collateTest CREATE TABLE `collateTest` (\n `a` int(11) DEFAULT NULL,\n `b` varchar(10) COLLATE utf8_general_ci DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci" - tk.MustQuery("show create table collateTest").Check(testkit.Rows(expects)) - - tk.MustGetErrCode("CREATE TABLE `collateTest2` (`a` int) CHARSET utf8 COLLATE utf8mb4_unicode_ci", errno.ErrCollationCharsetMismatch) - tk.MustGetErrCode("CREATE TABLE `collateTest3` (`a` int) COLLATE utf8mb4_unicode_ci CHARSET utf8", errno.ErrConflictingDeclarations) - - tk.MustExec("CREATE TABLE `collateTest4` (`a` int) COLLATE utf8_uniCOde_ci") - expects = "collateTest4 CREATE TABLE `collateTest4` (\n `a` int(11) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci" - tk.MustQuery("show create table collateTest4").Check(testkit.Rows(expects)) - - tk.MustExec("create database test2 default charset utf8 collate utf8_general_ci") - tk.MustExec("use test2") - tk.MustExec("create table dbCollateTest (a varchar(10))") - expects = "dbCollateTest CREATE TABLE `dbCollateTest` (\n `a` varchar(10) COLLATE utf8_general_ci DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci" - tk.MustQuery("show create table dbCollateTest").Check(testkit.Rows(expects)) - - // test for enum column - tk.MustExec("use test") - failSQL := "create table t_enum (a enum('e','e'));" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - tk = testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - failSQL = "create table t_enum (a enum('e','E')) charset=utf8 collate=utf8_general_ci;" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - failSQL = "create table t_enum (a enum('abc','Abc')) charset=utf8 collate=utf8_general_ci;" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - failSQL = "create table t_enum (a enum('e','E')) charset=utf8 collate=utf8_unicode_ci;" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - failSQL = "create table t_enum (a enum('ss','ß')) charset=utf8 collate=utf8_unicode_ci;" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - // test for set column - failSQL = "create table t_enum (a set('e','e'));" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - failSQL = "create table t_enum (a set('e','E')) charset=utf8 collate=utf8_general_ci;" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - failSQL = "create table t_enum (a set('abc','Abc')) charset=utf8 collate=utf8_general_ci;" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - _, err = tk.Exec("create table t_enum (a enum('B','b')) charset=utf8 collate=utf8_general_ci;") - c.Assert(err.Error(), Equals, "[types:1291]Column 'a' has duplicated value 'b' in ENUM") - failSQL = "create table t_enum (a set('e','E')) charset=utf8 collate=utf8_unicode_ci;" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - failSQL = "create table t_enum (a set('ss','ß')) charset=utf8 collate=utf8_unicode_ci;" - tk.MustGetErrCode(failSQL, errno.ErrDuplicatedValueInType) - _, err = tk.Exec("create table t_enum (a enum('ss','ß')) charset=utf8 collate=utf8_unicode_ci;") - c.Assert(err.Error(), Equals, "[types:1291]Column 'a' has duplicated value 'ß' in ENUM") - - // test for table option "union" not supported - tk.MustExec("use test") - tk.MustExec("CREATE TABLE x (a INT) ENGINE = MyISAM;") - tk.MustExec("CREATE TABLE y (a INT) ENGINE = MyISAM;") - failSQL = "CREATE TABLE z (a INT) ENGINE = MERGE UNION = (x, y);" - tk.MustGetErrCode(failSQL, errno.ErrTableOptionUnionUnsupported) - failSQL = "ALTER TABLE x UNION = (y);" - tk.MustGetErrCode(failSQL, errno.ErrTableOptionUnionUnsupported) - tk.MustExec("drop table x;") - tk.MustExec("drop table y;") - - // test for table option "insert method" not supported - tk.MustExec("use test") - tk.MustExec("CREATE TABLE x (a INT) ENGINE = MyISAM;") - tk.MustExec("CREATE TABLE y (a INT) ENGINE = MyISAM;") - failSQL = "CREATE TABLE z (a INT) ENGINE = MERGE INSERT_METHOD=LAST;" - tk.MustGetErrCode(failSQL, errno.ErrTableOptionInsertMethodUnsupported) - failSQL = "ALTER TABLE x INSERT_METHOD=LAST;" - tk.MustGetErrCode(failSQL, errno.ErrTableOptionInsertMethodUnsupported) - tk.MustExec("drop table x;") - tk.MustExec("drop table y;") -} - -func (s *testSerialDBSuite) TestRepairTable(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/repairFetchCreateTable", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/infoschema/repairFetchCreateTable"), IsNil) - }() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t, other_table, origin") - - // Test repair table when TiDB is not in repair mode. - tk.MustExec("CREATE TABLE t (a int primary key nonclustered, b varchar(10));") - _, err := tk.Exec("admin repair table t CREATE TABLE t (a float primary key, b varchar(5));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: TiDB is not in REPAIR MODE") - - // Test repair table when the repaired list is empty. - domainutil.RepairInfo.SetRepairMode(true) - _, err = tk.Exec("admin repair table t CREATE TABLE t (a float primary key, b varchar(5));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: repair list is empty") - - // Test repair table when it's database isn't in repairInfo. - domainutil.RepairInfo.SetRepairTableList([]string{"test.other_table"}) - _, err = tk.Exec("admin repair table t CREATE TABLE t (a float primary key, b varchar(5));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: database test is not in repair") - - // Test repair table when the table isn't in repairInfo. - tk.MustExec("CREATE TABLE other_table (a int, b varchar(1), key using hash(b));") - _, err = tk.Exec("admin repair table t CREATE TABLE t (a float primary key, b varchar(5));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: table t is not in repair") - - // Test user can't access to the repaired table. - _, err = tk.Exec("select * from other_table") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[schema:1146]Table 'test.other_table' doesn't exist") - - // Test create statement use the same name with what is in repaired. - _, err = tk.Exec("CREATE TABLE other_table (a int);") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:1103]Incorrect table name 'other_table'%!(EXTRA string=this table is in repair)") - - // Test column lost in repair table. - _, err = tk.Exec("admin repair table other_table CREATE TABLE other_table (a int, c char(1));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: Column c has lost") - - // Test column type should be the same. - _, err = tk.Exec("admin repair table other_table CREATE TABLE other_table (a bigint, b varchar(1), key using hash(b));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: Column a type should be the same") - - // Test index lost in repair table. - _, err = tk.Exec("admin repair table other_table CREATE TABLE other_table (a int unique);") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: Index a has lost") - - // Test index type should be the same. - _, err = tk.Exec("admin repair table other_table CREATE TABLE other_table (a int, b varchar(2) unique)") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: Index b type should be the same") - - // Test sub create statement in repair statement with the same name. - _, err = tk.Exec("admin repair table other_table CREATE TABLE other_table (a int);") - c.Assert(err, IsNil) - - // Test whether repair table name is case sensitive. - domainutil.RepairInfo.SetRepairMode(true) - domainutil.RepairInfo.SetRepairTableList([]string{"test.other_table2"}) - tk.MustExec("CREATE TABLE otHer_tAblE2 (a int, b varchar(1));") - _, err = tk.Exec("admin repair table otHer_tAblE2 CREATE TABLE otHeR_tAbLe (a int, b varchar(2));") - c.Assert(err, IsNil) - repairTable := testGetTableByName(c, s.s, "test", "otHeR_tAbLe") - c.Assert(repairTable.Meta().Name.O, Equals, "otHeR_tAbLe") - - // Test memory and system database is not for repair. - domainutil.RepairInfo.SetRepairMode(true) - domainutil.RepairInfo.SetRepairTableList([]string{"test.xxx"}) - _, err = tk.Exec("admin repair table performance_schema.xxx CREATE TABLE yyy (a int);") - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: memory or system database is not for repair") - - // Test the repair detail. - turnRepairModeAndInit(true) - defer turnRepairModeAndInit(false) - // Domain reload the tableInfo and add it into repairInfo. - tk.MustExec("CREATE TABLE origin (a int primary key nonclustered auto_increment, b varchar(10), c int);") - // Repaired tableInfo has been filtered by `domain.InfoSchema()`, so get it in repairInfo. - originTableInfo, _ := domainutil.RepairInfo.GetRepairedTableInfoByTableName("test", "origin") - - hook := &ddl.TestDDLCallback{Do: s.dom} - var repairErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type != model.ActionRepairTable { - return - } - if job.TableID != originTableInfo.ID { - repairErr = errors.New("table id should be the same") - return - } - if job.SchemaState != model.StateNone { - repairErr = errors.New("repair job state should be the none") - return - } - // Test whether it's readable, when repaired table is still stateNone. - tkInternal := testkit.NewTestKitWithInit(c, s.store) - _, repairErr = tkInternal.Exec("select * from origin") - // Repaired tableInfo has been filtered by `domain.InfoSchema()`, here will get an error cause user can't get access to it. - if repairErr != nil && terror.ErrorEqual(repairErr, infoschema.ErrTableNotExists) { - repairErr = nil - } - } - originalHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - - // Exec the repair statement to override the tableInfo. - tk.MustExec("admin repair table origin CREATE TABLE origin (a int primary key nonclustered auto_increment, b varchar(5), c int);") - c.Assert(repairErr, IsNil) - - // Check the repaired tableInfo is exactly the same with old one in tableID, indexID, colID. - // testGetTableByName will extract the Table from `domain.InfoSchema()` directly. - repairTable = testGetTableByName(c, s.s, "test", "origin") - c.Assert(repairTable.Meta().ID, Equals, originTableInfo.ID) - c.Assert(len(repairTable.Meta().Columns), Equals, 3) - c.Assert(repairTable.Meta().Columns[0].ID, Equals, originTableInfo.Columns[0].ID) - c.Assert(repairTable.Meta().Columns[1].ID, Equals, originTableInfo.Columns[1].ID) - c.Assert(repairTable.Meta().Columns[2].ID, Equals, originTableInfo.Columns[2].ID) - c.Assert(len(repairTable.Meta().Indices), Equals, 1) - c.Assert(repairTable.Meta().Indices[0].ID, Equals, originTableInfo.Columns[0].ID) - c.Assert(repairTable.Meta().AutoIncID, Equals, originTableInfo.AutoIncID) - - c.Assert(repairTable.Meta().Columns[0].Tp, Equals, mysql.TypeLong) - c.Assert(repairTable.Meta().Columns[1].Tp, Equals, mysql.TypeVarchar) - c.Assert(repairTable.Meta().Columns[1].Flen, Equals, 5) - c.Assert(repairTable.Meta().Columns[2].Tp, Equals, mysql.TypeLong) - - // Exec the show create table statement to make sure new tableInfo has been set. - result := tk.MustQuery("show create table origin") - c.Assert(result.Rows()[0][1], Equals, "CREATE TABLE `origin` (\n `a` int(11) NOT NULL AUTO_INCREMENT,\n `b` varchar(5) DEFAULT NULL,\n `c` int(11) DEFAULT NULL,\n PRIMARY KEY (`a`) /*T![clustered_index] NONCLUSTERED */\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin") - -} - -func turnRepairModeAndInit(on bool) { - list := make([]string, 0) - if on { - list = append(list, "test.origin") - } - domainutil.RepairInfo.SetRepairMode(on) - domainutil.RepairInfo.SetRepairTableList(list) -} - -func (s *testSerialDBSuite) TestRepairTableWithPartition(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/repairFetchCreateTable", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/infoschema/repairFetchCreateTable"), IsNil) - }() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists origin") - - turnRepairModeAndInit(true) - defer turnRepairModeAndInit(false) - // Domain reload the tableInfo and add it into repairInfo. - tk.MustExec("create table origin (a int not null) partition by RANGE(a) (" + - "partition p10 values less than (10)," + - "partition p30 values less than (30)," + - "partition p50 values less than (50)," + - "partition p70 values less than (70)," + - "partition p90 values less than (90));") - // Test for some old partition has lost. - _, err := tk.Exec("admin repair table origin create table origin (a int not null) partition by RANGE(a) (" + - "partition p10 values less than (10)," + - "partition p30 values less than (30)," + - "partition p50 values less than (50)," + - "partition p90 values less than (90)," + - "partition p100 values less than (100));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: Partition p100 has lost") - - // Test for some partition changed the condition. - _, err = tk.Exec("admin repair table origin create table origin (a int not null) partition by RANGE(a) (" + - "partition p10 values less than (10)," + - "partition p20 values less than (25)," + - "partition p50 values less than (50)," + - "partition p90 values less than (90));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: Partition p20 has lost") - - // Test for some partition changed the partition name. - _, err = tk.Exec("admin repair table origin create table origin (a int not null) partition by RANGE(a) (" + - "partition p10 values less than (10)," + - "partition p30 values less than (30)," + - "partition pNew values less than (50)," + - "partition p90 values less than (90));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: Partition pnew has lost") - - originTableInfo, _ := domainutil.RepairInfo.GetRepairedTableInfoByTableName("test", "origin") - tk.MustExec("admin repair table origin create table origin_rename (a int not null) partition by RANGE(a) (" + - "partition p10 values less than (10)," + - "partition p30 values less than (30)," + - "partition p50 values less than (50)," + - "partition p90 values less than (90));") - repairTable := testGetTableByName(c, s.s, "test", "origin_rename") - c.Assert(repairTable.Meta().ID, Equals, originTableInfo.ID) - c.Assert(len(repairTable.Meta().Columns), Equals, 1) - c.Assert(repairTable.Meta().Columns[0].ID, Equals, originTableInfo.Columns[0].ID) - c.Assert(len(repairTable.Meta().Partition.Definitions), Equals, 4) - c.Assert(repairTable.Meta().Partition.Definitions[0].ID, Equals, originTableInfo.Partition.Definitions[0].ID) - c.Assert(repairTable.Meta().Partition.Definitions[1].ID, Equals, originTableInfo.Partition.Definitions[1].ID) - c.Assert(repairTable.Meta().Partition.Definitions[2].ID, Equals, originTableInfo.Partition.Definitions[2].ID) - c.Assert(repairTable.Meta().Partition.Definitions[3].ID, Equals, originTableInfo.Partition.Definitions[4].ID) - - // Test hash partition. - tk.MustExec("drop table if exists origin") - domainutil.RepairInfo.SetRepairMode(true) - domainutil.RepairInfo.SetRepairTableList([]string{"test.origin"}) - tk.MustExec("create table origin (a varchar(1), b int not null, c int, key idx(c)) partition by hash(b) partitions 30") - - // Test partition num in repair should be exactly same with old one, other wise will cause partition semantic problem. - _, err = tk.Exec("admin repair table origin create table origin (a varchar(2), b int not null, c int, key idx(c)) partition by hash(b) partitions 20") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8215]Failed to repair table: Hash partition num should be the same") - - originTableInfo, _ = domainutil.RepairInfo.GetRepairedTableInfoByTableName("test", "origin") - tk.MustExec("admin repair table origin create table origin (a varchar(3), b int not null, c int, key idx(c)) partition by hash(b) partitions 30") - repairTable = testGetTableByName(c, s.s, "test", "origin") - c.Assert(repairTable.Meta().ID, Equals, originTableInfo.ID) - c.Assert(len(repairTable.Meta().Partition.Definitions), Equals, 30) - c.Assert(repairTable.Meta().Partition.Definitions[0].ID, Equals, originTableInfo.Partition.Definitions[0].ID) - c.Assert(repairTable.Meta().Partition.Definitions[1].ID, Equals, originTableInfo.Partition.Definitions[1].ID) - c.Assert(repairTable.Meta().Partition.Definitions[29].ID, Equals, originTableInfo.Partition.Definitions[29].ID) -} - -func (s *testDBSuite2) TestCreateTableWithSetCol(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("create table t_set (a int, b set('e') default '');") - tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + - " `a` int(11) DEFAULT NULL,\n" + - " `b` set('e') DEFAULT ''\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("drop table t_set") - tk.MustExec("create table t_set (a set('a', 'b', 'c', 'd') default 'a,c,c');") - tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + - " `a` set('a','b','c','d') DEFAULT 'a,c'\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - - // It's for failure cases. - // The type of default value is string. - tk.MustExec("drop table t_set") - failedSQL := "create table t_set (a set('1', '4', '10') default '3');" - tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) - failedSQL = "create table t_set (a set('1', '4', '10') default '1,4,11');" - tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) - // Success when the new collation is enabled. - tk.MustExec("create table t_set (a set('1', '4', '10') default '1 ,4');") - // The type of default value is int. - failedSQL = "create table t_set (a set('1', '4', '10') default 0);" - tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) - failedSQL = "create table t_set (a set('1', '4', '10') default 8);" - tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) - - // The type of default value is int. - // It's for successful cases - tk.MustExec("drop table if exists t_set") - tk.MustExec("create table t_set (a set('1', '4', '10', '21') default 1);") - tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + - " `a` set('1','4','10','21') DEFAULT '1'\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("drop table t_set") - tk.MustExec("create table t_set (a set('1', '4', '10', '21') default 2);") - tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + - " `a` set('1','4','10','21') DEFAULT '4'\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("drop table t_set") - tk.MustExec("create table t_set (a set('1', '4', '10', '21') default 3);") - tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + - " `a` set('1','4','10','21') DEFAULT '1,4'\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("drop table t_set") - tk.MustExec("create table t_set (a set('1', '4', '10', '21') default 15);") - tk.MustQuery("show create table t_set").Check(testkit.Rows("t_set CREATE TABLE `t_set` (\n" + - " `a` set('1','4','10','21') DEFAULT '1,4,10,21'\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("insert into t_set value()") - tk.MustQuery("select * from t_set").Check(testkit.Rows("1,4,10,21")) -} - -func (s *testDBSuite2) TestCreateTableWithEnumCol(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - // It's for failure cases. - // The type of default value is string. - tk.MustExec("drop table if exists t_enum") - failedSQL := "create table t_enum (a enum('1', '4', '10') default '3');" - tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) - failedSQL = "create table t_enum (a enum('1', '4', '10') default '');" - tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) - // The type of default value is int. - failedSQL = "create table t_enum (a enum('1', '4', '10') default 0);" - tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) - failedSQL = "create table t_enum (a enum('1', '4', '10') default 8);" - tk.MustGetErrCode(failedSQL, errno.ErrInvalidDefault) - - // The type of default value is int. - // It's for successful cases - tk.MustExec("drop table if exists t_enum") - tk.MustExec("create table t_enum (a enum('2', '3', '4') default 2);") - ret := tk.MustQuery("show create table t_enum").Rows()[0][1] - c.Assert(strings.Contains(ret.(string), "`a` enum('2','3','4') DEFAULT '3'"), IsTrue) - tk.MustExec("drop table t_enum") - tk.MustExec("create table t_enum (a enum('a', 'c', 'd') default 2);") - ret = tk.MustQuery("show create table t_enum").Rows()[0][1] - c.Assert(strings.Contains(ret.(string), "`a` enum('a','c','d') DEFAULT 'c'"), IsTrue) - tk.MustExec("insert into t_enum value()") - tk.MustQuery("select * from t_enum").Check(testkit.Rows("c")) -} - -func (s *testDBSuite2) TestTableForeignKey(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("create table t1 (a int, b int);") - // test create table with foreign key. - failSQL := "create table t2 (c int, foreign key (a) references t1(a));" - tk.MustGetErrCode(failSQL, errno.ErrKeyColumnDoesNotExits) - // test add foreign key. - tk.MustExec("create table t3 (a int, b int);") - failSQL = "alter table t1 add foreign key (c) REFERENCES t3(a);" - tk.MustGetErrCode(failSQL, errno.ErrKeyColumnDoesNotExits) - // test origin key not match error - failSQL = "alter table t1 add foreign key (a) REFERENCES t3(a, b);" - tk.MustGetErrCode(failSQL, errno.ErrWrongFkDef) - // Test drop column with foreign key. - tk.MustExec("create table t4 (c int,d int,foreign key (d) references t1 (b));") - failSQL = "alter table t4 drop column d" - tk.MustGetErrCode(failSQL, errno.ErrFkColumnCannotDrop) - // Test change column with foreign key. - failSQL = "alter table t4 change column d e bigint;" - tk.MustGetErrCode(failSQL, errno.ErrFKIncompatibleColumns) - // Test modify column with foreign key. - failSQL = "alter table t4 modify column d bigint;" - tk.MustGetErrCode(failSQL, errno.ErrFKIncompatibleColumns) - tk.MustQuery("select count(*) from information_schema.KEY_COLUMN_USAGE;") - tk.MustExec("alter table t4 drop foreign key d") - tk.MustExec("alter table t4 modify column d bigint;") - tk.MustExec("drop table if exists t1,t2,t3,t4;") -} - -func (s *testDBSuite2) TestDuplicateForeignKey(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("drop table if exists t1") - // Foreign table. - tk.MustExec("create table t(id int key)") - // Create target table with duplicate fk. - tk.MustGetErrCode("create table t1(id int, id_fk int, CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`), CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`))", mysql.ErrFkDupName) - tk.MustGetErrCode("create table t1(id int, id_fk int, CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`), CONSTRAINT `fk_aaA` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`))", mysql.ErrFkDupName) - - tk.MustExec("create table t1(id int, id_fk int, CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`))") - // Alter target table with duplicate fk. - tk.MustGetErrCode("alter table t1 add CONSTRAINT `fk_aaa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`)", mysql.ErrFkDupName) - tk.MustGetErrCode("alter table t1 add CONSTRAINT `fk_aAa` FOREIGN KEY (`id_fk`) REFERENCES `t` (`id`)", mysql.ErrFkDupName) - tk.MustExec("drop table if exists t") - tk.MustExec("drop table if exists t1") -} - -func (s *testDBSuite2) TestTemporaryTableForeignKey(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1;") - tk.MustExec("create table t1 (a int, b int);") - tk.MustExec("drop table if exists t1_tmp;") - tk.MustExec("create global temporary table t1_tmp (a int, b int) on commit delete rows;") - tk.MustExec("create temporary table t2_tmp (a int, b int)") - // test add foreign key. - tk.MustExec("drop table if exists t2;") - tk.MustExec("create table t2 (a int, b int);") - failSQL := "alter table t1_tmp add foreign key (c) REFERENCES t2(a);" - tk.MustGetErrCode(failSQL, mysql.ErrCannotAddForeign) - failSQL = "alter table t2_tmp add foreign key (c) REFERENCES t2(a);" - tk.MustGetErrCode(failSQL, errno.ErrUnsupportedDDLOperation) - // Test drop column with foreign key. - failSQL = "create global temporary table t3 (c int,d int,foreign key (d) references t1 (b)) on commit delete rows;" - tk.MustGetErrCode(failSQL, mysql.ErrCannotAddForeign) - failSQL = "create temporary table t4(c int,d int,foreign key (d) references t1 (b));" - tk.MustGetErrCode(failSQL, mysql.ErrCannotAddForeign) - tk.MustExec("drop table if exists t1,t2,t3, t4,t1_tmp,t2_tmp;") -} - -func (s *testDBSuite8) TestFKOnGeneratedColumns(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - // test add foreign key to generated column - - // foreign key constraint cannot be defined on a virtual generated column. - tk.MustExec("create table t1 (a int primary key);") - tk.MustGetErrCode("create table t2 (a int, b int as (a+1) virtual, foreign key (b) references t1(a));", errno.ErrCannotAddForeign) - tk.MustExec("create table t2 (a int, b int generated always as (a+1) virtual);") - tk.MustGetErrCode("alter table t2 add foreign key (b) references t1(a);", errno.ErrCannotAddForeign) - tk.MustExec("drop table t1, t2;") - - // foreign key constraint can be defined on a stored generated column. - tk.MustExec("create table t2 (a int primary key);") - tk.MustExec("create table t1 (a int, b int as (a+1) stored, foreign key (b) references t2(a));") - tk.MustExec("create table t3 (a int, b int generated always as (a+1) stored);") - tk.MustExec("alter table t3 add foreign key (b) references t2(a);") - tk.MustExec("drop table t1, t2, t3;") - - // foreign key constraint can reference a stored generated column. - tk.MustExec("create table t1 (a int, b int generated always as (a+1) stored primary key);") - tk.MustExec("create table t2 (a int, foreign key (a) references t1(b));") - tk.MustExec("create table t3 (a int);") - tk.MustExec("alter table t3 add foreign key (a) references t1(b);") - tk.MustExec("drop table t1, t2, t3;") - - // rejected FK options on stored generated columns - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on update set null);", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on update cascade);", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on update set default);", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on delete set null);", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on delete set default);", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustExec("create table t2 (a int primary key);") - tk.MustExec("create table t1 (a int, b int generated always as (a+1) stored);") - tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update set null;", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update cascade;", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update set default;", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on delete set null;", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on delete set default;", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustExec("drop table t1, t2;") - // column name with uppercase characters - tk.MustGetErrCode("create table t1 (A int, b int generated always as (a+1) stored, foreign key (b) references t2(a) on update set null);", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustExec("create table t2 (a int primary key);") - tk.MustExec("create table t1 (A int, b int generated always as (a+1) stored);") - tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update set null;", errno.ErrWrongFKOptionForGeneratedColumn) - tk.MustExec("drop table t1, t2;") - - // special case: TiDB error different from MySQL 8.0 - // MySQL: ERROR 3104 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause on a generated column. - // TiDB: ERROR 1146 (42S02): Table 'test.t2' doesn't exist - tk.MustExec("create table t1 (a int, b int generated always as (a+1) stored);") - tk.MustGetErrCode("alter table t1 add foreign key (b) references t2(a) on update set null;", errno.ErrNoSuchTable) - tk.MustExec("drop table t1;") - - // allowed FK options on stored generated columns - tk.MustExec("create table t1 (a int primary key, b char(5));") - tk.MustExec("create table t2 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on update restrict);") - tk.MustExec("create table t3 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on update no action);") - tk.MustExec("create table t4 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on delete restrict);") - tk.MustExec("create table t5 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on delete cascade);") - tk.MustExec("create table t6 (a int, b int generated always as (a % 10) stored, foreign key (b) references t1(a) on delete no action);") - tk.MustExec("drop table t2,t3,t4,t5,t6;") - tk.MustExec("create table t2 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t2 add foreign key (b) references t1(a) on update restrict;") - tk.MustExec("create table t3 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t3 add foreign key (b) references t1(a) on update no action;") - tk.MustExec("create table t4 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t4 add foreign key (b) references t1(a) on delete restrict;") - tk.MustExec("create table t5 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t5 add foreign key (b) references t1(a) on delete cascade;") - tk.MustExec("create table t6 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t6 add foreign key (b) references t1(a) on delete no action;") - tk.MustExec("drop table t1,t2,t3,t4,t5,t6;") - - // rejected FK options on the base columns of a stored generated columns - tk.MustExec("create table t2 (a int primary key);") - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on update set null);", errno.ErrCannotAddForeign) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on update cascade);", errno.ErrCannotAddForeign) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on update set default);", errno.ErrCannotAddForeign) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on delete set null);", errno.ErrCannotAddForeign) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on delete cascade);", errno.ErrCannotAddForeign) - tk.MustGetErrCode("create table t1 (a int, b int generated always as (a+1) stored, foreign key (a) references t2(a) on delete set default);", errno.ErrCannotAddForeign) - tk.MustExec("create table t1 (a int, b int generated always as (a+1) stored);") - tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on update set null;", errno.ErrCannotAddForeign) - tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on update cascade;", errno.ErrCannotAddForeign) - tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on update set default;", errno.ErrCannotAddForeign) - tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on delete set null;", errno.ErrCannotAddForeign) - tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on delete cascade;", errno.ErrCannotAddForeign) - tk.MustGetErrCode("alter table t1 add foreign key (a) references t2(a) on delete set default;", errno.ErrCannotAddForeign) - tk.MustExec("drop table t1, t2;") - - // allowed FK options on the base columns of a stored generated columns - tk.MustExec("create table t1 (a int primary key, b char(5));") - tk.MustExec("create table t2 (a int, b int generated always as (a % 10) stored, foreign key (a) references t1(a) on update restrict);") - tk.MustExec("create table t3 (a int, b int generated always as (a % 10) stored, foreign key (a) references t1(a) on update no action);") - tk.MustExec("create table t4 (a int, b int generated always as (a % 10) stored, foreign key (a) references t1(a) on delete restrict);") - tk.MustExec("create table t5 (a int, b int generated always as (a % 10) stored, foreign key (a) references t1(a) on delete no action);") - tk.MustExec("drop table t2,t3,t4,t5") - tk.MustExec("create table t2 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t2 add foreign key (a) references t1(a) on update restrict;") - tk.MustExec("create table t3 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t3 add foreign key (a) references t1(a) on update no action;") - tk.MustExec("create table t4 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t4 add foreign key (a) references t1(a) on delete restrict;") - tk.MustExec("create table t5 (a int, b int generated always as (a % 10) stored);") - tk.MustExec("alter table t5 add foreign key (a) references t1(a) on delete no action;") - tk.MustExec("drop table t1,t2,t3,t4,t5;") -} - -func (s *testSerialDBSuite) TestTruncateTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("create table truncate_table (c1 int, c2 int)") - tk.MustExec("insert truncate_table values (1, 1), (2, 2)") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - oldTblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("truncate_table")) - c.Assert(err, IsNil) - oldTblID := oldTblInfo.Meta().ID - - tk.MustExec("truncate table truncate_table") - - tk.MustExec("insert truncate_table values (3, 3), (4, 4)") - tk.MustQuery("select * from truncate_table").Check(testkit.Rows("3 3", "4 4")) - - is = domain.GetDomain(ctx).InfoSchema() - newTblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("truncate_table")) - c.Assert(err, IsNil) - c.Assert(newTblInfo.Meta().ID, Greater, oldTblID) - - // Verify that the old table data has been deleted by background worker. - tablePrefix := tablecodec.EncodeTablePrefix(oldTblID) - hasOldTableData := true - for i := 0; i < waitForCleanDataRound; i++ { - err = kv.RunInNewTxn(context.Background(), s.store, false, func(ctx context.Context, txn kv.Transaction) error { - it, err1 := txn.Iter(tablePrefix, nil) - if err1 != nil { - return err1 - } - if !it.Valid() { - hasOldTableData = false - } else { - hasOldTableData = it.Key().HasPrefix(tablePrefix) - } - it.Close() - return nil - }) - c.Assert(err, IsNil) - if !hasOldTableData { - break - } - time.Sleep(waitForCleanDataInterval) - } - c.Assert(hasOldTableData, IsFalse) - - // Test for truncate table should clear the tiflash available status. - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`), IsNil) - defer func() { - err = failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") - c.Assert(err, IsNil) - }() - - tk.MustExec("drop table if exists t1;") - tk.MustExec("create table t1 (a int);") - tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") - t1 := testGetTableByName(c, s.s, "test", "t1") - // Mock for table tiflash replica was available. - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, t1.Meta().ID, true) - c.Assert(err, IsNil) - t1 = testGetTableByName(c, s.s, "test", "t1") - c.Assert(t1.Meta().TiFlashReplica, NotNil) - c.Assert(t1.Meta().TiFlashReplica.Available, IsTrue) - - tk.MustExec("truncate table t1") - t2 := testGetTableByName(c, s.s, "test", "t1") - c.Assert(t2.Meta().TiFlashReplica.Count, Equals, t1.Meta().TiFlashReplica.Count) - c.Assert(t2.Meta().TiFlashReplica.LocationLabels, DeepEquals, t1.Meta().TiFlashReplica.LocationLabels) - c.Assert(t2.Meta().TiFlashReplica.Available, IsFalse) - c.Assert(t2.Meta().TiFlashReplica.AvailablePartitionIDs, HasLen, 0) - - // Test for truncate partition should clear the tiflash available status. - tk.MustExec("drop table if exists t1;") - tk.MustExec("create table t1 (a int) partition by hash(a) partitions 2;") - tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") - t1 = testGetTableByName(c, s.s, "test", "t1") - // Mock for all partitions replica was available. - partition := t1.Meta().Partition - c.Assert(len(partition.Definitions), Equals, 2) - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, true) - c.Assert(err, IsNil) - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[1].ID, true) - c.Assert(err, IsNil) - t1 = testGetTableByName(c, s.s, "test", "t1") - c.Assert(t1.Meta().TiFlashReplica, NotNil) - c.Assert(t1.Meta().TiFlashReplica.Available, IsTrue) - c.Assert(t1.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[0].ID, partition.Definitions[1].ID}) - - tk.MustExec("alter table t1 truncate partition p0") - t2 = testGetTableByName(c, s.s, "test", "t1") - c.Assert(t2.Meta().TiFlashReplica.Count, Equals, t1.Meta().TiFlashReplica.Count) - c.Assert(t2.Meta().TiFlashReplica.LocationLabels, DeepEquals, t1.Meta().TiFlashReplica.LocationLabels) - c.Assert(t2.Meta().TiFlashReplica.Available, IsFalse) - c.Assert(t2.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[1].ID}) - // Test for truncate twice. - tk.MustExec("alter table t1 truncate partition p0") - t2 = testGetTableByName(c, s.s, "test", "t1") - c.Assert(t2.Meta().TiFlashReplica.Count, Equals, t1.Meta().TiFlashReplica.Count) - c.Assert(t2.Meta().TiFlashReplica.LocationLabels, DeepEquals, t1.Meta().TiFlashReplica.LocationLabels) - c.Assert(t2.Meta().TiFlashReplica.Available, IsFalse) - c.Assert(t2.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[1].ID}) - -} - -func (s *testDBSuite4) TestRenameTable(c *C) { - isAlterTable := false - s.testRenameTable(c, "rename table %s to %s", isAlterTable) -} - -func (s *testDBSuite5) TestAlterTableRenameTable(c *C) { - isAlterTable := true - s.testRenameTable(c, "alter table %s rename to %s", isAlterTable) -} - -func (s *testDBSuite) testRenameTable(c *C, sql string, isAlterTable bool) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustGetErrCode("rename table tb1 to tb2;", errno.ErrNoSuchTable) - // for different databases - tk.MustExec("create table t (c1 int, c2 int)") - tk.MustExec("insert t values (1, 1), (2, 2)") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - oldTblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - oldTblID := oldTblInfo.Meta().ID - tk.MustExec("create database test1") - tk.MustExec("use test1") - tk.MustExec(fmt.Sprintf(sql, "test.t", "test1.t1")) - is = domain.GetDomain(ctx).InfoSchema() - newTblInfo, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t1")) - c.Assert(err, IsNil) - c.Assert(newTblInfo.Meta().ID, Equals, oldTblID) - tk.MustQuery("select * from t1").Check(testkit.Rows("1 1", "2 2")) - tk.MustExec("use test") - - // Make sure t doesn't exist. - tk.MustExec("create table t (c1 int, c2 int)") - tk.MustExec("drop table t") - - // for the same database - tk.MustExec("use test1") - tk.MustExec(fmt.Sprintf(sql, "t1", "t2")) - is = domain.GetDomain(ctx).InfoSchema() - newTblInfo, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t2")) - c.Assert(err, IsNil) - c.Assert(newTblInfo.Meta().ID, Equals, oldTblID) - tk.MustQuery("select * from t2").Check(testkit.Rows("1 1", "2 2")) - isExist := is.TableExists(model.NewCIStr("test1"), model.NewCIStr("t1")) - c.Assert(isExist, IsFalse) - tk.MustQuery("show tables").Check(testkit.Rows("t2")) - - // for failure case - failSQL := fmt.Sprintf(sql, "test_not_exist.t", "test_not_exist.t") - if isAlterTable { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } else { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } - failSQL = fmt.Sprintf(sql, "test.test_not_exist", "test.test_not_exist") - if isAlterTable { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } else { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } - failSQL = fmt.Sprintf(sql, "test.t_not_exist", "test_not_exist.t") - if isAlterTable { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } else { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } - failSQL = fmt.Sprintf(sql, "test1.t2", "test_not_exist.t") - tk.MustGetErrCode(failSQL, errno.ErrErrorOnRename) - - tk.MustExec("use test1") - tk.MustExec("create table if not exists t_exist (c1 int, c2 int)") - failSQL = fmt.Sprintf(sql, "test1.t2", "test1.t_exist") - tk.MustGetErrCode(failSQL, errno.ErrTableExists) - failSQL = fmt.Sprintf(sql, "test.t_not_exist", "test1.t_exist") - if isAlterTable { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } else { - tk.MustGetErrCode(failSQL, errno.ErrTableExists) - } - failSQL = fmt.Sprintf(sql, "test_not_exist.t", "test1.t_exist") - if isAlterTable { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } else { - tk.MustGetErrCode(failSQL, errno.ErrTableExists) - } - failSQL = fmt.Sprintf(sql, "test_not_exist.t", "test1.t_not_exist") - if isAlterTable { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } else { - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - } - - // for the same table name - tk.MustExec("use test1") - tk.MustExec("create table if not exists t (c1 int, c2 int)") - tk.MustExec("create table if not exists t1 (c1 int, c2 int)") - if isAlterTable { - tk.MustExec(fmt.Sprintf(sql, "test1.t", "t")) - tk.MustExec(fmt.Sprintf(sql, "test1.t1", "test1.T1")) - } else { - tk.MustGetErrCode(fmt.Sprintf(sql, "test1.t", "t"), errno.ErrTableExists) - tk.MustGetErrCode(fmt.Sprintf(sql, "test1.t1", "test1.T1"), errno.ErrTableExists) - } - - // Test rename table name too long. - tk.MustGetErrCode("rename table test1.t1 to test1.txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", errno.ErrTooLongIdent) - tk.MustGetErrCode("alter table test1.t1 rename to test1.txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", errno.ErrTooLongIdent) - - tk.MustExec("drop database test1") -} - -func (s *testDBSuite1) TestRenameMultiTables(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("create table t1(id int)") - tk.MustExec("create table t2(id int)") - sql := "rename table t1 to t3, t2 to t4" - _, err := tk.Exec(sql) - c.Assert(err, IsNil) - - tk.MustExec("drop table t3, t4") - - tk.MustExec("create table t1 (c1 int, c2 int)") - tk.MustExec("create table t2 (c1 int, c2 int)") - tk.MustExec("insert t1 values (1, 1), (2, 2)") - tk.MustExec("insert t2 values (1, 1), (2, 2)") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - oldTblInfo1, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t1")) - c.Assert(err, IsNil) - oldTblID1 := oldTblInfo1.Meta().ID - oldTblInfo2, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t2")) - c.Assert(err, IsNil) - oldTblID2 := oldTblInfo2.Meta().ID - tk.MustExec("create database test1") - tk.MustExec("use test1") - tk.MustExec("rename table test.t1 to test1.t1, test.t2 to test1.t2") - is = domain.GetDomain(ctx).InfoSchema() - newTblInfo1, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t1")) - c.Assert(err, IsNil) - c.Assert(newTblInfo1.Meta().ID, Equals, oldTblID1) - newTblInfo2, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t2")) - c.Assert(err, IsNil) - c.Assert(newTblInfo2.Meta().ID, Equals, oldTblID2) - tk.MustQuery("select * from t1").Check(testkit.Rows("1 1", "2 2")) - tk.MustQuery("select * from t2").Check(testkit.Rows("1 1", "2 2")) - - // Make sure t1,t2 doesn't exist. - isExist := is.TableExists(model.NewCIStr("test"), model.NewCIStr("t1")) - c.Assert(isExist, IsFalse) - isExist = is.TableExists(model.NewCIStr("test"), model.NewCIStr("t2")) - c.Assert(isExist, IsFalse) - - // for the same database - tk.MustExec("use test1") - tk.MustExec("rename table test1.t1 to test1.t3, test1.t2 to test1.t4") - is = domain.GetDomain(ctx).InfoSchema() - newTblInfo1, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t3")) - c.Assert(err, IsNil) - c.Assert(newTblInfo1.Meta().ID, Equals, oldTblID1) - newTblInfo2, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t4")) - c.Assert(err, IsNil) - c.Assert(newTblInfo2.Meta().ID, Equals, oldTblID2) - tk.MustQuery("select * from t3").Check(testkit.Rows("1 1", "2 2")) - isExist = is.TableExists(model.NewCIStr("test1"), model.NewCIStr("t1")) - c.Assert(isExist, IsFalse) - tk.MustQuery("select * from t4").Check(testkit.Rows("1 1", "2 2")) - isExist = is.TableExists(model.NewCIStr("test1"), model.NewCIStr("t2")) - c.Assert(isExist, IsFalse) - tk.MustQuery("show tables").Check(testkit.Rows("t3", "t4")) - - // for multi tables same database - tk.MustExec("create table t5 (c1 int, c2 int)") - tk.MustExec("insert t5 values (1, 1), (2, 2)") - is = domain.GetDomain(ctx).InfoSchema() - oldTblInfo3, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t5")) - c.Assert(err, IsNil) - oldTblID3 := oldTblInfo3.Meta().ID - tk.MustExec("rename table test1.t3 to test1.t1, test1.t4 to test1.t2, test1.t5 to test1.t3") - is = domain.GetDomain(ctx).InfoSchema() - newTblInfo1, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t1")) - c.Assert(err, IsNil) - c.Assert(newTblInfo1.Meta().ID, Equals, oldTblID1) - newTblInfo2, err = is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t2")) - c.Assert(err, IsNil) - c.Assert(newTblInfo2.Meta().ID, Equals, oldTblID2) - newTblInfo3, err := is.TableByName(model.NewCIStr("test1"), model.NewCIStr("t3")) - c.Assert(err, IsNil) - c.Assert(newTblInfo3.Meta().ID, Equals, oldTblID3) - tk.MustQuery("show tables").Check(testkit.Rows("t1", "t2", "t3")) - - // for multi tables different databases - tk.MustExec("use test") - tk.MustExec("rename table test1.t1 to test.t2, test1.t2 to test.t3, test1.t3 to test.t4") - is = domain.GetDomain(ctx).InfoSchema() - newTblInfo1, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t2")) - c.Assert(err, IsNil) - c.Assert(newTblInfo1.Meta().ID, Equals, oldTblID1) - newTblInfo2, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t3")) - c.Assert(err, IsNil) - c.Assert(newTblInfo2.Meta().ID, Equals, oldTblID2) - newTblInfo3, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t4")) - c.Assert(err, IsNil) - c.Assert(newTblInfo3.Meta().ID, Equals, oldTblID3) - tk.MustQuery("show tables").Check(testkit.Rows("t2", "t3", "t4")) - - // for failure case - failSQL := "rename table test_not_exist.t to test_not_exist.t, test_not_exist.t to test_not_exist.t" - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - failSQL = "rename table test.test_not_exist to test.test_not_exist, test.test_not_exist to test.test_not_exist" - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - failSQL = "rename table test.t_not_exist to test_not_exist.t, test.t_not_exist to test_not_exist.t" - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - failSQL = "rename table test1.t2 to test_not_exist.t, test1.t2 to test_not_exist.t" - tk.MustGetErrCode(failSQL, errno.ErrNoSuchTable) - - tk.MustExec("drop database test1") - tk.MustExec("drop database test") -} - -func (s *testDBSuite2) TestAddNotNullColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - // for different databases - tk.MustExec("create table tnn (c1 int primary key auto_increment, c2 int)") - tk.MustExec("insert tnn (c2) values (0)" + strings.Repeat(",(0)", 99)) - done := make(chan error, 1) - testddlutil.SessionExecInGoroutine(s.store, "alter table tnn add column c3 int not null default 3", done) - updateCnt := 0 -out: - for { - select { - case err := <-done: - c.Assert(err, IsNil) - break out - default: - // Close issue #14636 - // Because add column action is not amendable now, it causes an error when the schema is changed - // in the process of an insert statement. - _, err := tk.Exec("update tnn set c2 = c2 + 1 where c1 = 99") - if err == nil { - updateCnt++ - } - } - } - expected := fmt.Sprintf("%d %d", updateCnt, 3) - tk.MustQuery("select c2, c3 from tnn where c1 = 99").Check(testkit.Rows(expected)) - - tk.MustExec("drop table tnn") -} - -func (s *testDBSuite3) TestVirtualColumnDDL(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists test_gv_ddl") - tk.MustExec(`create global temporary table test_gv_ddl(a int, b int as (a+8) virtual, c int as (b + 2) stored) on commit delete rows;`) - defer tk.MustExec("drop table if exists test_gv_ddl") - is := tk.Se.(sessionctx.Context).GetInfoSchema().(infoschema.InfoSchema) - table, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("test_gv_ddl")) - c.Assert(err, IsNil) - testCases := []struct { - generatedExprString string - generatedStored bool - }{ - {"", false}, - {"`a` + 8", false}, - {"`b` + 2", true}, - } - for i, column := range table.Meta().Columns { - c.Assert(column.GeneratedExprString, Equals, testCases[i].generatedExprString) - c.Assert(column.GeneratedStored, Equals, testCases[i].generatedStored) - } - result := tk.MustQuery(`DESC test_gv_ddl`) - result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) - tk.MustExec("begin;") - tk.MustExec("insert into test_gv_ddl values (1, default, default)") - tk.MustQuery("select * from test_gv_ddl").Check(testkit.Rows("1 9 11")) - _, err = tk.Exec("commit") - c.Assert(err, IsNil) - - // for local temporary table - tk.MustExec(`create temporary table test_local_gv_ddl(a int, b int as (a+8) virtual, c int as (b + 2) stored);`) - defer tk.MustExec("drop table if exists test_local_gv_ddl") - is = tk.Se.(sessionctx.Context).GetInfoSchema().(infoschema.InfoSchema) - table, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("test_local_gv_ddl")) - c.Assert(err, IsNil) - for i, column := range table.Meta().Columns { - c.Assert(column.GeneratedExprString, Equals, testCases[i].generatedExprString) - c.Assert(column.GeneratedStored, Equals, testCases[i].generatedStored) - } - result = tk.MustQuery(`DESC test_local_gv_ddl`) - result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) - tk.MustExec("begin;") - tk.MustExec("insert into test_local_gv_ddl values (1, default, default)") - tk.MustQuery("select * from test_local_gv_ddl").Check(testkit.Rows("1 9 11")) - _, err = tk.Exec("commit") - c.Assert(err, IsNil) - tk.MustQuery("select * from test_local_gv_ddl").Check(testkit.Rows("1 9 11")) -} - -func (s *testDBSuite3) TestGeneratedColumnDDL(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - // Check create table with virtual and stored generated columns. - tk.MustExec(`CREATE TABLE test_gv_ddl(a int, b int as (a+8) virtual, c int as (b + 2) stored)`) - - // Check desc table with virtual and stored generated columns. - result := tk.MustQuery(`DESC test_gv_ddl`) - result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) - - // Check show create table with virtual and stored generated columns. - result = tk.MustQuery(`show create table test_gv_ddl`) - result.Check(testkit.Rows( - "test_gv_ddl CREATE TABLE `test_gv_ddl` (\n `a` int(11) DEFAULT NULL,\n `b` int(11) GENERATED ALWAYS AS (`a` + 8) VIRTUAL,\n `c` int(11) GENERATED ALWAYS AS (`b` + 2) STORED\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", - )) - - // Check generated expression with blanks. - tk.MustExec("create table table_with_gen_col_blanks (a int, b char(20) as (cast( \r\n\t a \r\n\tas char)), c int as (a+100))") - result = tk.MustQuery(`show create table table_with_gen_col_blanks`) - result.Check(testkit.Rows("table_with_gen_col_blanks CREATE TABLE `table_with_gen_col_blanks` (\n" + - " `a` int(11) DEFAULT NULL,\n" + - " `b` char(20) GENERATED ALWAYS AS (cast(`a` as char)) VIRTUAL,\n" + - " `c` int(11) GENERATED ALWAYS AS (`a` + 100) VIRTUAL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - - // Check generated expression with charset latin1 ("latin1" != mysql.DefaultCharset). - tk.MustExec("create table table_with_gen_col_latin1 (a int, b char(20) as (cast( \r\n\t a \r\n\tas char charset latin1)), c int as (a+100))") - result = tk.MustQuery(`show create table table_with_gen_col_latin1`) - result.Check(testkit.Rows("table_with_gen_col_latin1 CREATE TABLE `table_with_gen_col_latin1` (\n" + - " `a` int(11) DEFAULT NULL,\n" + - " `b` char(20) GENERATED ALWAYS AS (cast(`a` as char charset latin1)) VIRTUAL,\n" + - " `c` int(11) GENERATED ALWAYS AS (`a` + 100) VIRTUAL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - - // Check generated expression with string (issue 9457). - tk.MustExec("create table table_with_gen_col_string (first_name varchar(10), last_name varchar(10), full_name varchar(255) AS (CONCAT(first_name,' ',last_name)))") - result = tk.MustQuery(`show create table table_with_gen_col_string`) - result.Check(testkit.Rows("table_with_gen_col_string CREATE TABLE `table_with_gen_col_string` (\n" + - " `first_name` varchar(10) DEFAULT NULL,\n" + - " `last_name` varchar(10) DEFAULT NULL,\n" + - " `full_name` varchar(255) GENERATED ALWAYS AS (concat(`first_name`, _utf8mb4' ', `last_name`)) VIRTUAL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - - tk.MustExec("alter table table_with_gen_col_string modify column full_name varchar(255) GENERATED ALWAYS AS (CONCAT(last_name,' ' ,first_name) ) VIRTUAL") - result = tk.MustQuery(`show create table table_with_gen_col_string`) - result.Check(testkit.Rows("table_with_gen_col_string CREATE TABLE `table_with_gen_col_string` (\n" + - " `first_name` varchar(10) DEFAULT NULL,\n" + - " `last_name` varchar(10) DEFAULT NULL,\n" + - " `full_name` varchar(255) GENERATED ALWAYS AS (concat(`last_name`, _utf8mb4' ', `first_name`)) VIRTUAL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - - // Test incorrect parameter count. - tk.MustGetErrCode("create table test_gv_incorrect_pc(a double, b int as (lower(a, 2)))", errno.ErrWrongParamcountToNativeFct) - tk.MustGetErrCode("create table test_gv_incorrect_pc(a double, b int as (lower(a, 2)) stored)", errno.ErrWrongParamcountToNativeFct) - - genExprTests := []struct { - stmt string - err int - }{ - // Drop/rename columns dependent by other column. - {`alter table test_gv_ddl drop column a`, errno.ErrDependentByGeneratedColumn}, - {`alter table test_gv_ddl change column a anew int`, errno.ErrBadField}, - - // Modify/change stored status of generated columns. - {`alter table test_gv_ddl modify column b bigint`, errno.ErrUnsupportedOnGeneratedColumn}, - {`alter table test_gv_ddl change column c cnew bigint as (a+100)`, errno.ErrUnsupportedOnGeneratedColumn}, - - // Modify/change generated columns breaking prior. - {`alter table test_gv_ddl modify column b int as (c+100)`, errno.ErrGeneratedColumnNonPrior}, - {`alter table test_gv_ddl change column b bnew int as (c+100)`, errno.ErrGeneratedColumnNonPrior}, - - // Refer not exist columns in generation expression. - {`create table test_gv_ddl_bad (a int, b int as (c+8))`, errno.ErrBadField}, - - // Refer generated columns non prior. - {`create table test_gv_ddl_bad (a int, b int as (c+1), c int as (a+1))`, errno.ErrGeneratedColumnNonPrior}, - - // Virtual generated columns cannot be primary key. - {`create table test_gv_ddl_bad (a int, b int, c int as (a+b) primary key)`, errno.ErrUnsupportedOnGeneratedColumn}, - {`create table test_gv_ddl_bad (a int, b int, c int as (a+b), primary key(c))`, errno.ErrUnsupportedOnGeneratedColumn}, - {`create table test_gv_ddl_bad (a int, b int, c int as (a+b), primary key(a, c))`, errno.ErrUnsupportedOnGeneratedColumn}, - - // Add stored generated column through alter table. - {`alter table test_gv_ddl add column d int as (b+2) stored`, errno.ErrUnsupportedOnGeneratedColumn}, - {`alter table test_gv_ddl modify column b int as (a + 8) stored`, errno.ErrUnsupportedOnGeneratedColumn}, - - // Add generated column with incorrect parameter count. - {`alter table test_gv_ddl add column z int as (lower(a, 2))`, errno.ErrWrongParamcountToNativeFct}, - {`alter table test_gv_ddl add column z int as (lower(a, 2)) stored`, errno.ErrWrongParamcountToNativeFct}, - - // Modify generated column with incorrect parameter count. - {`alter table test_gv_ddl modify column b int as (lower(a, 2))`, errno.ErrWrongParamcountToNativeFct}, - {`alter table test_gv_ddl change column b b int as (lower(a, 2))`, errno.ErrWrongParamcountToNativeFct}, - } - for _, tt := range genExprTests { - tk.MustGetErrCode(tt.stmt, tt.err) - } - - // Check alter table modify/change generated column. - modStoredColErrMsg := "[ddl:3106]'modifying a stored column' is not supported for generated columns." - _, err := tk.Exec(`alter table test_gv_ddl modify column c bigint as (b+200) stored`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, modStoredColErrMsg) - - result = tk.MustQuery(`DESC test_gv_ddl`) - result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) - - tk.MustExec(`alter table test_gv_ddl change column b b bigint as (a+100) virtual`) - result = tk.MustQuery(`DESC test_gv_ddl`) - result.Check(testkit.Rows(`a int(11) YES `, `b bigint(20) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) - - tk.MustExec(`alter table test_gv_ddl change column c cnew bigint`) - result = tk.MustQuery(`DESC test_gv_ddl`) - result.Check(testkit.Rows(`a int(11) YES `, `b bigint(20) YES VIRTUAL GENERATED`, `cnew bigint(20) YES `)) - - // Test generated column `\\`. - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE t(c0 TEXT AS ('\\\\'));") - tk.MustExec("insert into t values ()") - tk.MustQuery("select * from t").Check(testkit.Rows("\\")) - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE t(c0 TEXT AS ('a\\\\b\\\\c\\\\'))") - tk.MustExec("insert into t values ()") - tk.MustQuery("select * from t").Check(testkit.Rows("a\\b\\c\\")) -} - -func (s *testDBSuite4) TestComment(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("drop table if exists ct, ct1") - - validComment := strings.Repeat("a", 1024) - invalidComment := strings.Repeat("b", 1025) - - tk.MustExec("create table ct (c int, d int, e int, key (c) comment '" + validComment + "')") - tk.MustExec("create index i on ct (d) comment '" + validComment + "'") - tk.MustExec("alter table ct add key (e) comment '" + validComment + "'") - - tk.MustGetErrCode("create table ct1 (c int, key (c) comment '"+invalidComment+"')", errno.ErrTooLongIndexComment) - tk.MustGetErrCode("create index i1 on ct (d) comment '"+invalidComment+"b"+"'", errno.ErrTooLongIndexComment) - tk.MustGetErrCode("alter table ct add key (e) comment '"+invalidComment+"'", errno.ErrTooLongIndexComment) - - tk.MustExec("set @@sql_mode=''") - tk.MustExec("create table ct1 (c int, d int, e int, key (c) comment '" + invalidComment + "')") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1688|Comment for index 'c' is too long (max = 1024)")) - tk.MustExec("create index i1 on ct1 (d) comment '" + invalidComment + "b" + "'") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1688|Comment for index 'i1' is too long (max = 1024)")) - tk.MustExec("alter table ct1 add key (e) comment '" + invalidComment + "'") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1688|Comment for index 'e' is too long (max = 1024)")) - - tk.MustExec("drop table if exists ct, ct1") -} - -func (s *testSerialDBSuite) TestRebaseAutoID(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange"), IsNil) - }() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - - tk.MustExec("drop database if exists tidb;") - tk.MustExec("create database tidb;") - tk.MustExec("use tidb;") - tk.MustExec("create table tidb.test (a int auto_increment primary key, b int);") - tk.MustExec("insert tidb.test values (null, 1);") - tk.MustQuery("select * from tidb.test").Check(testkit.Rows("1 1")) - tk.MustExec("alter table tidb.test auto_increment = 6000;") - tk.MustExec("insert tidb.test values (null, 1);") - tk.MustQuery("select * from tidb.test").Check(testkit.Rows("1 1", "6000 1")) - tk.MustExec("alter table tidb.test auto_increment = 5;") - tk.MustExec("insert tidb.test values (null, 1);") - tk.MustQuery("select * from tidb.test").Check(testkit.Rows("1 1", "6000 1", "11000 1")) - - // Current range for table test is [11000, 15999]. - // Though it does not have a tuple "a = 15999", its global next auto increment id should be 16000. - // Anyway it is not compatible with MySQL. - tk.MustExec("alter table tidb.test auto_increment = 12000;") - tk.MustExec("insert tidb.test values (null, 1);") - tk.MustQuery("select * from tidb.test").Check(testkit.Rows("1 1", "6000 1", "11000 1", "16000 1")) - - tk.MustExec("create table tidb.test2 (a int);") - tk.MustGetErrCode("alter table tidb.test2 add column b int auto_increment key, auto_increment=10;", errno.ErrUnsupportedDDLOperation) -} - -func (s *testDBSuite5) TestCheckColumnDefaultValue(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists text_default_text;") - tk.MustGetErrCode("create table text_default_text(c1 text not null default '');", errno.ErrBlobCantHaveDefault) - tk.MustGetErrCode("create table text_default_text(c1 text not null default 'scds');", errno.ErrBlobCantHaveDefault) - - tk.MustExec("drop table if exists text_default_json;") - tk.MustGetErrCode("create table text_default_json(c1 json not null default '');", errno.ErrBlobCantHaveDefault) - tk.MustGetErrCode("create table text_default_json(c1 json not null default 'dfew555');", errno.ErrBlobCantHaveDefault) - - tk.MustExec("drop table if exists text_default_blob;") - tk.MustGetErrCode("create table text_default_blob(c1 blob not null default '');", errno.ErrBlobCantHaveDefault) - tk.MustGetErrCode("create table text_default_blob(c1 blob not null default 'scds54');", errno.ErrBlobCantHaveDefault) - - tk.MustExec("set sql_mode='';") - tk.MustExec("create table text_default_text(c1 text not null default '');") - tk.MustQuery(`show create table text_default_text`).Check(testutil.RowsWithSep("|", - "text_default_text CREATE TABLE `text_default_text` (\n"+ - " `c1` text NOT NULL\n"+ - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", - )) - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - tblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("text_default_text")) - c.Assert(err, IsNil) - c.Assert(tblInfo.Meta().Columns[0].DefaultValue, Equals, "") - - tk.MustExec("create table text_default_blob(c1 blob not null default '');") - tk.MustQuery(`show create table text_default_blob`).Check(testutil.RowsWithSep("|", - "text_default_blob CREATE TABLE `text_default_blob` (\n"+ - " `c1` blob NOT NULL\n"+ - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", - )) - is = domain.GetDomain(ctx).InfoSchema() - tblInfo, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("text_default_blob")) - c.Assert(err, IsNil) - c.Assert(tblInfo.Meta().Columns[0].DefaultValue, Equals, "") - - tk.MustExec("create table text_default_json(c1 json not null default '');") - tk.MustQuery(`show create table text_default_json`).Check(testutil.RowsWithSep("|", - "text_default_json CREATE TABLE `text_default_json` (\n"+ - " `c1` json NOT NULL DEFAULT 'null'\n"+ - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", - )) - is = domain.GetDomain(ctx).InfoSchema() - tblInfo, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("text_default_json")) - c.Assert(err, IsNil) - c.Assert(tblInfo.Meta().Columns[0].DefaultValue, Equals, `null`) -} - -func (s *testDBSuite1) TestCharacterSetInColumns(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database varchar_test;") - defer tk.MustExec("drop database varchar_test;") - tk.MustExec("use varchar_test") - tk.MustExec("create table t (c1 int, s1 varchar(10), s2 text)") - tk.MustQuery("select count(*) from information_schema.columns where table_schema = 'varchar_test' and character_set_name != 'utf8mb4'").Check(testkit.Rows("0")) - tk.MustQuery("select count(*) from information_schema.columns where table_schema = 'varchar_test' and character_set_name = 'utf8mb4'").Check(testkit.Rows("2")) - - tk.MustExec("create table t1(id int) charset=UTF8;") - tk.MustExec("create table t2(id int) charset=BINARY;") - tk.MustExec("create table t3(id int) charset=LATIN1;") - tk.MustExec("create table t4(id int) charset=ASCII;") - tk.MustExec("create table t5(id int) charset=UTF8MB4;") - - tk.MustExec("create table t11(id int) charset=utf8;") - tk.MustExec("create table t12(id int) charset=binary;") - tk.MustExec("create table t13(id int) charset=latin1;") - tk.MustExec("create table t14(id int) charset=ascii;") - tk.MustExec("create table t15(id int) charset=utf8mb4;") -} - -func (s *testDBSuite2) TestAddNotNullColumnWhileInsertOnDupUpdate(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("use " + s.schemaName) - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use " + s.schemaName) - closeCh := make(chan bool) - wg := new(sync.WaitGroup) - wg.Add(1) - tk1.MustExec("create table nn (a int primary key, b int)") - tk1.MustExec("insert nn values (1, 1)") - var tk2Err error - go func() { - defer wg.Done() - for { - select { - case <-closeCh: - return - default: - } - _, tk2Err = tk2.Exec("insert nn (a, b) values (1, 1) on duplicate key update a = 1, b = values(b) + 1") - if tk2Err != nil { - return - } - } - }() - tk1.MustExec("alter table nn add column c int not null default 3 after a") - close(closeCh) - wg.Wait() - c.Assert(tk2Err, IsNil) - tk1.MustQuery("select * from nn").Check(testkit.Rows("1 3 2")) -} - -func (s *testDBSuite3) TestColumnModifyingDefinition(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists test2;") - tk.MustExec("create table test2 (c1 int, c2 int, c3 int default 1, index (c1));") - tk.MustExec("alter table test2 change c2 a int not null;") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - t, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("test2")) - c.Assert(err, IsNil) - var c2 *table.Column - for _, col := range t.Cols() { - if col.Name.L == "a" { - c2 = col - } - } - c.Assert(mysql.HasNotNullFlag(c2.Flag), IsTrue) - - tk.MustExec("drop table if exists test2;") - tk.MustExec("create table test2 (c1 int, c2 int, c3 int default 1, index (c1));") - tk.MustExec("insert into test2(c2) values (null);") - _, err = tk.Exec("alter table test2 change c2 a int not null") - c.Assert(err.Error(), Equals, "[ddl:1265]Data truncated for column 'a' at row 1") - tk.MustGetErrCode("alter table test2 change c1 a1 bigint not null;", mysql.WarnDataTruncated) -} - -func (s *testDBSuite4) TestCheckTooBigFieldLength(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists tr_01;") - tk.MustExec("create table tr_01 (id int, name varchar(20000), purchased date ) default charset=utf8 collate=utf8_bin;") - - tk.MustExec("drop table if exists tr_02;") - tk.MustExec("create table tr_02 (id int, name varchar(16000), purchased date ) default charset=utf8mb4 collate=utf8mb4_bin;") - - tk.MustExec("drop table if exists tr_03;") - tk.MustExec("create table tr_03 (id int, name varchar(65534), purchased date ) default charset=latin1;") - - tk.MustExec("drop table if exists tr_04;") - tk.MustExec("create table tr_04 (a varchar(20000) ) default charset utf8;") - tk.MustGetErrCode("alter table tr_04 add column b varchar(20000) charset utf8mb4;", errno.ErrTooBigFieldlength) - tk.MustGetErrCode("alter table tr_04 convert to character set utf8mb4;", errno.ErrTooBigFieldlength) - tk.MustGetErrCode("create table tr (id int, name varchar(30000), purchased date ) default charset=utf8 collate=utf8_bin;", errno.ErrTooBigFieldlength) - tk.MustGetErrCode("create table tr (id int, name varchar(20000) charset utf8mb4, purchased date ) default charset=utf8 collate=utf8_bin;", errno.ErrTooBigFieldlength) - tk.MustGetErrCode("create table tr (id int, name varchar(65536), purchased date ) default charset=latin1;", errno.ErrTooBigFieldlength) - - tk.MustExec("drop table if exists tr_05;") - tk.MustExec("create table tr_05 (a varchar(16000) charset utf8);") - tk.MustExec("alter table tr_05 modify column a varchar(16000) charset utf8;") - tk.MustExec("alter table tr_05 modify column a varchar(16000) charset utf8mb4;") -} - -func (s *testDBSuite5) TestCheckConvertToCharacter(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - defer tk.MustExec("drop table t") - tk.MustExec("create table t(a varchar(10) charset binary);") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - t, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - tk.MustGetErrCode("alter table t modify column a varchar(10) charset utf8 collate utf8_bin", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t modify column a varchar(10) charset utf8mb4 collate utf8mb4_bin", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t modify column a varchar(10) charset latin1 collate latin1_bin", errno.ErrUnsupportedDDLOperation) - c.Assert(t.Cols()[0].Charset, Equals, "binary") -} - -func (s *testDBSuite5) TestModifyColumnRollBack(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "drop table if exists t1") - s.mustExec(tk, c, "create table t1 (c1 int, c2 int, c3 int default 1, index (c1));") - - var c2 *table.Column - var checkErr error - hook := &ddl.TestDDLCallback{Do: s.dom} - hook.OnJobUpdatedExported = func(job *model.Job) { - if checkErr != nil { - return - } - - t := s.testGetTable(c, "t1") - for _, col := range t.Cols() { - if col.Name.L == "c2" { - c2 = col - } - } - if mysql.HasPreventNullInsertFlag(c2.Flag) { - tk.MustGetErrCode("insert into t1(c2) values (null);", errno.ErrBadNull) - } - - hookCtx := mock.NewContext() - hookCtx.Store = s.store - err := hookCtx.NewTxn(context.Background()) - if err != nil { - checkErr = errors.Trace(err) - return - } - - jobIDs := []int64{job.ID} - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - // It only tests cancel one DDL job. - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return - } - - txn, err = hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } - err = txn.Commit(context.Background()) - if err != nil { - checkErr = errors.Trace(err) - } - } - - originalHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - done := make(chan error, 1) - go backgroundExec(s.store, "alter table t1 change c2 c2 bigint not null;", done) - - err := <-done - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - s.mustExec(tk, c, "insert into t1(c2) values (null);") - - t := s.testGetTable(c, "t1") - for _, col := range t.Cols() { - if col.Name.L == "c2" { - c2 = col - } - } - c.Assert(mysql.HasNotNullFlag(c2.Flag), IsFalse) - s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - s.mustExec(tk, c, "drop table t1") -} - -func (s *testSerialDBSuite) TestModifyColumnReorgInfo(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (c1 int, c2 int, c3 int, index idx(c2), index idx1(c1, c2));") - - sql := "alter table t1 change c2 c2 mediumint;" - // defaultBatchSize is equal to ddl.defaultBatchSize - base := defaultBatchSize * 8 - // add some rows - batchInsert(tk, "t1", 0, base) - // Make sure the count of regions more than backfill workers. - tk.MustQuery("split table t1 between (0) and (8192) regions 8;").Check(testkit.Rows("8 1")) - - tbl := s.testGetTable(c, "t1") - originalHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - - // Check insert null before job first update. - hook := &ddl.TestDDLCallback{Do: s.dom} - var checkErr error - var currJob *model.Job - var elements []*meta.Element - ctx := mock.NewContext() - ctx.Store = s.store - times := 0 - hook.OnJobRunBeforeExported = func(job *model.Job) { - if tbl.Meta().ID != job.TableID || checkErr != nil || job.SchemaState != model.StateWriteReorganization { - return - } - if job.Type == model.ActionModifyColumn { - if times == 0 { - times++ - return - } - currJob = job - var ( - newCol *model.ColumnInfo - oldColName *model.CIStr - modifyColumnTp byte - updatedAutoRandomBits uint64 - changingCol *model.ColumnInfo - changingIdxs []*model.IndexInfo - ) - pos := &ast.ColumnPosition{} - checkErr = job.DecodeArgs(&newCol, &oldColName, pos, &modifyColumnTp, &updatedAutoRandomBits, &changingCol, &changingIdxs) - elements = ddl.BuildElements(changingCol, changingIdxs) - } - if job.Type == model.ActionAddIndex { - if times == 1 { - times++ - return - } - tbl := s.testGetTable(c, "t1") - indexInfo := tbl.Meta().FindIndexByName("idx2") - elements = []*meta.Element{{ID: indexInfo.ID, TypeKey: meta.IndexElementKey}} - } - } - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr", `return("cantDecodeRecordErr")`), IsNil) - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - _, err := tk.Exec(sql) - c.Assert(err.Error(), Equals, "[ddl:8202]Cannot decode index value, because mock can't decode record error") - c.Assert(checkErr, IsNil) - // Check whether the reorg information is cleaned up when executing "modify column" failed. - checkReorgHandle := func(gotElements, expectedElements []*meta.Element) { - for i, e := range gotElements { - c.Assert(e, DeepEquals, expectedElements[i]) - } - err := ctx.NewTxn(context.Background()) - c.Assert(err, IsNil) - txn, err := ctx.Txn(true) - c.Assert(err, IsNil) - m := meta.NewMeta(txn) - e, start, end, physicalID, err := m.GetDDLReorgHandle(currJob) - c.Assert(meta.ErrDDLReorgElementNotExist.Equal(err), IsTrue) - c.Assert(e, IsNil) - c.Assert(start, IsNil) - c.Assert(end, IsNil) - c.Assert(physicalID, Equals, int64(0)) - } - expectedEles := []*meta.Element{ - {ID: 4, TypeKey: meta.ColumnElementKey}, - {ID: 3, TypeKey: meta.IndexElementKey}, - {ID: 4, TypeKey: meta.IndexElementKey}} - checkReorgHandle(elements, expectedEles) - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr"), IsNil) - tk.MustExec("admin check table t1") - - // Check whether the reorg information is cleaned up when executing "modify column" successfully. - // Test encountering a "notOwnerErr" error which caused the processing backfill job to exit halfway. - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr", `return("modifyColumnNotOwnerErr")`), IsNil) - tk.MustExec(sql) - expectedEles = []*meta.Element{ - {ID: 5, TypeKey: meta.ColumnElementKey}, - {ID: 5, TypeKey: meta.IndexElementKey}, - {ID: 6, TypeKey: meta.IndexElementKey}} - checkReorgHandle(elements, expectedEles) - tk.MustExec("admin check table t1") - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr"), IsNil) - - // Test encountering a "notOwnerErr" error which caused the processing backfill job to exit halfway. - // During the period, the old TiDB version(do not exist the element information) is upgraded to the new TiDB version. - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr", `return("addIdxNotOwnerErr")`), IsNil) - tk.MustExec("alter table t1 add index idx2(c1)") - expectedEles = []*meta.Element{ - {ID: 7, TypeKey: meta.IndexElementKey}} - checkReorgHandle(elements, expectedEles) - tk.MustExec("admin check table t1") - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr"), IsNil) -} - -func (s *testSerialDBSuite) TestModifyColumnNullToNotNullWithChangingVal2(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockInsertValueAfterCheckNull", `return("insert into test.tt values (NULL, NULL)")`), IsNil) - defer func() { - err := failpoint.Disable("github.com/pingcap/tidb/ddl/mockInsertValueAfterCheckNull") - c.Assert(err, IsNil) - }() - - tk.MustExec("drop table if exists tt;") - tk.MustExec(`create table tt (a bigint, b int, unique index idx(a));`) - tk.MustExec("insert into tt values (1,1),(2,2),(3,3);") - _, err := tk.Exec("alter table tt modify a int not null;") - c.Assert(err.Error(), Equals, "[ddl:1265]Data truncated for column 'a' at row 1") - tk.MustExec("drop table tt") -} - -func (s *testDBSuite1) TestModifyColumnNullToNotNull(c *C) { - sql1 := "alter table t1 change c2 c2 int not null;" - sql2 := "alter table t1 change c2 c2 int not null;" - testModifyColumnNullToNotNull(c, s.testDBSuite, false, sql1, sql2) -} - -func (s *testSerialDBSuite) TestModifyColumnNullToNotNullWithChangingVal(c *C) { - sql1 := "alter table t1 change c2 c2 tinyint not null;" - sql2 := "alter table t1 change c2 c2 tinyint not null;" - testModifyColumnNullToNotNull(c, s.testDBSuite, true, sql1, sql2) - c2 := getModifyColumn(c, s.s.(sessionctx.Context), s.schemaName, "t1", "c2", false) - c.Assert(c2.FieldType.Tp, Equals, mysql.TypeTiny) -} - -func (s *testSerialDBSuite) TestModifyColumnBetweenStringTypes(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - // varchar to varchar - tk.MustExec("drop table if exists tt;") - tk.MustExec("create table tt (a varchar(10));") - tk.MustExec("insert into tt values ('111'),('10000');") - tk.MustExec("alter table tt change a a varchar(5);") - mvc := getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(mvc.FieldType.Flen, Equals, 5) - tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) - tk.MustGetErrMsg("alter table tt change a a varchar(4);", "[types:1265]Data truncated for column 'a', value is '10000'") - tk.MustExec("alter table tt change a a varchar(100);") - tk.MustQuery("select length(a) from tt").Check(testkit.Rows("3", "5")) - - // char to char - tk.MustExec("drop table if exists tt;") - tk.MustExec("create table tt (a char(10));") - tk.MustExec("insert into tt values ('111'),('10000');") - tk.MustExec("alter table tt change a a char(5);") - mc := getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(mc.FieldType.Flen, Equals, 5) - tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) - tk.MustGetErrMsg("alter table tt change a a char(4);", "[types:1265]Data truncated for column 'a', value is '10000'") - tk.MustExec("alter table tt change a a char(100);") - tk.MustQuery("select length(a) from tt").Check(testkit.Rows("3", "5")) - - // binary to binary - tk.MustExec("drop table if exists tt;") - tk.MustExec("create table tt (a binary(10));") - tk.MustExec("insert into tt values ('111'),('10000');") - tk.MustGetErrMsg("alter table tt change a a binary(5);", "[types:1265]Data truncated for column 'a', value is '111\x00\x00\x00\x00\x00\x00\x00'") - mb := getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(mb.FieldType.Flen, Equals, 10) - tk.MustQuery("select * from tt").Check(testkit.Rows("111\x00\x00\x00\x00\x00\x00\x00", "10000\x00\x00\x00\x00\x00")) - tk.MustGetErrMsg("alter table tt change a a binary(4);", "[types:1265]Data truncated for column 'a', value is '111\x00\x00\x00\x00\x00\x00\x00'") - tk.MustExec("alter table tt change a a binary(12);") - tk.MustQuery("select * from tt").Check(testkit.Rows("111\x00\x00\x00\x00\x00\x00\x00\x00\x00", "10000\x00\x00\x00\x00\x00\x00\x00")) - tk.MustQuery("select length(a) from tt").Check(testkit.Rows("12", "12")) - - // varbinary to varbinary - tk.MustExec("drop table if exists tt;") - tk.MustExec("create table tt (a varbinary(10));") - tk.MustExec("insert into tt values ('111'),('10000');") - tk.MustExec("alter table tt change a a varbinary(5);") - mvb := getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(mvb.FieldType.Flen, Equals, 5) - tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) - tk.MustGetErrMsg("alter table tt change a a varbinary(4);", "[types:1265]Data truncated for column 'a', value is '10000'") - tk.MustExec("alter table tt change a a varbinary(12);") - tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) - tk.MustQuery("select length(a) from tt").Check(testkit.Rows("3", "5")) - - // varchar to char - tk.MustExec("drop table if exists tt;") - tk.MustExec("create table tt (a varchar(10));") - tk.MustExec("insert into tt values ('111'),('10000');") - - tk.MustExec("alter table tt change a a char(10);") - c2 := getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(c2.FieldType.Tp, Equals, mysql.TypeString) - c.Assert(c2.FieldType.Flen, Equals, 10) - tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) - tk.MustGetErrMsg("alter table tt change a a char(4);", "[types:1265]Data truncated for column 'a', value is '10000'") - - // char to text - tk.MustExec("alter table tt change a a text;") - c2 = getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(c2.FieldType.Tp, Equals, mysql.TypeBlob) - - // text to set - tk.MustGetErrMsg("alter table tt change a a set('111', '2222');", "[types:1265]Data truncated for column 'a', value is '10000'") - tk.MustExec("alter table tt change a a set('111', '10000');") - c2 = getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(c2.FieldType.Tp, Equals, mysql.TypeSet) - tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) - - // set to set - tk.MustExec("alter table tt change a a set('10000', '111');") - c2 = getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(c2.FieldType.Tp, Equals, mysql.TypeSet) - tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) - - // set to enum - tk.MustGetErrMsg("alter table tt change a a enum('111', '2222');", "[types:1265]Data truncated for column 'a', value is '10000'") - tk.MustExec("alter table tt change a a enum('111', '10000');") - c2 = getModifyColumn(c, s.s.(sessionctx.Context), "test", "tt", "a", false) - c.Assert(c2.FieldType.Tp, Equals, mysql.TypeEnum) - tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) - tk.MustExec("alter table tt change a a enum('10000', '111');") - tk.MustQuery("select * from tt where a = 1").Check(testkit.Rows("10000")) - tk.MustQuery("select * from tt where a = 2").Check(testkit.Rows("111")) - - // no-strict mode - tk.MustExec(`set @@sql_mode="";`) - tk.MustExec("alter table tt change a a enum('111', '2222');") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1265|Data truncated for column 'a', value is '10000'")) - - tk.MustExec("drop table tt;") -} - -func getModifyColumn(c *C, ctx sessionctx.Context, db, tbl, colName string, allColumn bool) *table.Column { - t := testGetTableByName(c, ctx, db, tbl) - colName = strings.ToLower(colName) - var cols []*table.Column - if allColumn { - cols = t.(*tables.TableCommon).Columns - } else { - cols = t.Cols() - } - for _, col := range cols { - if col.Name.L == colName { - return col - } - } - return nil -} - -func testModifyColumnNullToNotNull(c *C, s *testDBSuite, enableChangeColumnType bool, sql1, sql2 string) { - tk := testkit.NewTestKit(c, s.store) - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test_db") - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "drop table if exists t1") - s.mustExec(tk, c, "create table t1 (c1 int, c2 int);") - - tbl := s.testGetTable(c, "t1") - getModifyColumn(c, s.s.(sessionctx.Context), s.schemaName, "t1", "c2", false) - - originalHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originalHook) - - // Check insert null before job first update. - times := 0 - hook := &ddl.TestDDLCallback{Do: s.dom} - tk.MustExec("delete from t1") - var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { - if tbl.Meta().ID != job.TableID { - return - } - if times == 0 { - _, checkErr = tk2.Exec("insert into t1 values ();") - } - times++ - } - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - _, err := tk.Exec(sql1) - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - if enableChangeColumnType { - c.Assert(err.Error(), Equals, "[ddl:1265]Data truncated for column 'c2' at row 1") - // Check whether the reorg information is cleaned up. - } else { - c.Assert(err.Error(), Equals, "[ddl:1138]Invalid use of NULL value") - } - tk.MustQuery("select * from t1").Check(testkit.Rows(" ")) - - // Check insert error when column has PreventNullInsertFlag. - tk.MustExec("delete from t1") - hook.OnJobRunBeforeExported = func(job *model.Job) { - if tbl.Meta().ID != job.TableID { - return - } - if job.State != model.JobStateRunning { - return - } - // now c2 has PreventNullInsertFlag, an error is expected. - _, checkErr = tk2.Exec("insert into t1 values ();") - } - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - tk.MustExec(sql2) - c.Assert(checkErr.Error(), Equals, "[table:1048]Column 'c2' cannot be null") - - c2 := getModifyColumn(c, s.s.(sessionctx.Context), s.schemaName, "t1", "c2", false) - c.Assert(mysql.HasNotNullFlag(c2.Flag), IsTrue) - c.Assert(mysql.HasPreventNullInsertFlag(c2.Flag), IsFalse) - _, err = tk.Exec("insert into t1 values ();") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[table:1364]Field 'c2' doesn't have a default value") -} - -func (s *testDBSuite2) TestTransactionOnAddDropColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "drop table if exists t1") - s.mustExec(tk, c, "create table t1 (a int, b int);") - s.mustExec(tk, c, "create table t2 (a int, b int);") - s.mustExec(tk, c, "insert into t2 values (2,0)") - - transactions := [][]string{ - { - "begin", - "insert into t1 set a=1", - "update t1 set b=1 where a=1", - "commit", - }, - { - "begin", - "insert into t1 select a,b from t2", - "update t1 set b=2 where a=2", - "commit", - }, - } - - originHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originHook) - hook := &ddl.TestDDLCallback{Do: s.dom} - var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { - if checkErr != nil { - return - } - switch job.SchemaState { - case model.StateWriteOnly, model.StateWriteReorganization, model.StateDeleteOnly, model.StateDeleteReorganization: - default: - return - } - // do transaction. - for _, transaction := range transactions { - for _, sql := range transaction { - if _, checkErr = tk.Exec(sql); checkErr != nil { - checkErr = errors.Errorf("err: %s, sql: %s, job schema state: %s", checkErr.Error(), sql, job.SchemaState) - return - } - } - } - } - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - done := make(chan error, 1) - // test transaction on add column. - go backgroundExec(s.store, "alter table t1 add column c int not null after a", done) - err := <-done - c.Assert(err, IsNil) - c.Assert(checkErr, IsNil) - tk.MustQuery("select a,b from t1 order by a").Check(testkit.Rows("1 1", "1 1", "1 1", "2 2", "2 2", "2 2")) - s.mustExec(tk, c, "delete from t1") - - // test transaction on drop column. - go backgroundExec(s.store, "alter table t1 drop column c", done) - err = <-done - c.Assert(err, IsNil) - c.Assert(checkErr, IsNil) - tk.MustQuery("select a,b from t1 order by a").Check(testkit.Rows("1 1", "1 1", "1 1", "2 2", "2 2", "2 2")) -} - -func (s *testDBSuite3) TestIssue22307(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "drop table if exists t") - s.mustExec(tk, c, "create table t (a int, b int)") - s.mustExec(tk, c, "insert into t values(1, 1);") - - originHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originHook) - hook := &ddl.TestDDLCallback{Do: s.dom} - var checkErr1, checkErr2 error - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.SchemaState != model.StateWriteOnly { - return - } - _, checkErr1 = tk.Exec("update t set a = 3 where b = 1;") - _, checkErr2 = tk.Exec("update t set a = 3 order by b;") - } - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - done := make(chan error, 1) - // test transaction on add column. - go backgroundExec(s.store, "alter table t drop column b;", done) - err := <-done - c.Assert(err, IsNil) - c.Assert(checkErr1.Error(), Equals, "[planner:1054]Unknown column 'b' in 'where clause'") - c.Assert(checkErr2.Error(), Equals, "[planner:1054]Unknown column 'b' in 'order clause'") -} - -func (s *testDBSuite3) TestTransactionWithWriteOnlyColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "drop table if exists t1") - s.mustExec(tk, c, "create table t1 (a int key);") - - transactions := [][]string{ - { - "begin", - "insert into t1 set a=1", - "update t1 set a=2 where a=1", - "commit", - }, - } - - originHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originHook) - hook := &ddl.TestDDLCallback{Do: s.dom} - var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { - if checkErr != nil { - return - } - switch job.SchemaState { - case model.StateWriteOnly: - default: - return - } - // do transaction. - for _, transaction := range transactions { - for _, sql := range transaction { - if _, checkErr = tk.Exec(sql); checkErr != nil { - checkErr = errors.Errorf("err: %s, sql: %s, job schema state: %s", checkErr.Error(), sql, job.SchemaState) - return - } - } - } - } - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - done := make(chan error, 1) - // test transaction on add column. - go backgroundExec(s.store, "alter table t1 add column c int not null", done) - err := <-done - c.Assert(err, IsNil) - c.Assert(checkErr, IsNil) - tk.MustQuery("select a from t1").Check(testkit.Rows("2")) - s.mustExec(tk, c, "delete from t1") - - // test transaction on drop column. - go backgroundExec(s.store, "alter table t1 drop column c", done) - err = <-done - c.Assert(err, IsNil) - c.Assert(checkErr, IsNil) - tk.MustQuery("select a from t1").Check(testkit.Rows("2")) -} - -func (s *testDBSuite4) TestAddColumn2(c *C) { - tk := testkit.NewTestKit(c, s.store) - s.mustExec(tk, c, "use test_db") - s.mustExec(tk, c, "drop table if exists t1") - s.mustExec(tk, c, "create table t1 (a int key, b int);") - defer s.mustExec(tk, c, "drop table if exists t1, t2") - - originHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(originHook) - hook := &ddl.TestDDLCallback{} - var writeOnlyTable table.Table - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.SchemaState == model.StateWriteOnly { - writeOnlyTable, _ = s.dom.InfoSchema().TableByID(job.TableID) - } - } - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - done := make(chan error, 1) - // test transaction on add column. - go backgroundExec(s.store, "alter table t1 add column c int not null", done) - err := <-done - c.Assert(err, IsNil) - - s.mustExec(tk, c, "insert into t1 values (1,1,1)") - tk.MustQuery("select a,b,c from t1").Check(testkit.Rows("1 1 1")) - - // mock for outdated tidb update record. - c.Assert(writeOnlyTable, NotNil) - ctx := context.Background() - err = tk.Se.NewTxn(ctx) - c.Assert(err, IsNil) - oldRow, err := tables.RowWithCols(writeOnlyTable, tk.Se, kv.IntHandle(1), writeOnlyTable.WritableCols()) - c.Assert(err, IsNil) - c.Assert(len(oldRow), Equals, 3) - err = writeOnlyTable.RemoveRecord(tk.Se, kv.IntHandle(1), oldRow) - c.Assert(err, IsNil) - _, err = writeOnlyTable.AddRecord(tk.Se, types.MakeDatums(oldRow[0].GetInt64(), 2, oldRow[2].GetInt64()), table.IsUpdate) - c.Assert(err, IsNil) - tk.Se.StmtCommit() - err = tk.Se.CommitTxn(ctx) - c.Assert(err, IsNil) - - tk.MustQuery("select a,b,c from t1").Check(testkit.Rows("1 2 1")) - - // Test for _tidb_rowid - var re *testkit.Result - s.mustExec(tk, c, "create table t2 (a int);") - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.SchemaState != model.StateWriteOnly { - return - } - // allow write _tidb_rowid first - s.mustExec(tk, c, "set @@tidb_opt_write_row_id=1") - s.mustExec(tk, c, "begin") - s.mustExec(tk, c, "insert into t2 (a,_tidb_rowid) values (1,2);") - re = tk.MustQuery(" select a,_tidb_rowid from t2;") - s.mustExec(tk, c, "commit") - - } - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - - go backgroundExec(s.store, "alter table t2 add column b int not null default 3", done) - err = <-done - c.Assert(err, IsNil) - re.Check(testkit.Rows("1 2")) - tk.MustQuery("select a,b,_tidb_rowid from t2").Check(testkit.Rows("1 3 2")) -} - -func (s *testDBSuite4) TestIfNotExists(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - s.mustExec(tk, c, "drop table if exists t1") - s.mustExec(tk, c, "create table t1 (a int key);") - - // ADD COLUMN - sql := "alter table t1 add column b int" - s.mustExec(tk, c, sql) - tk.MustGetErrCode(sql, errno.ErrDupFieldName) - s.mustExec(tk, c, "alter table t1 add column if not exists b int") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1060|Duplicate column name 'b'")) - - // ADD INDEX - sql = "alter table t1 add index idx_b (b)" - s.mustExec(tk, c, sql) - tk.MustGetErrCode(sql, errno.ErrDupKeyName) - s.mustExec(tk, c, "alter table t1 add index if not exists idx_b (b)") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1061|index already exist idx_b")) - - // CREATE INDEX - sql = "create index idx_b on t1 (b)" - tk.MustGetErrCode(sql, errno.ErrDupKeyName) - s.mustExec(tk, c, "create index if not exists idx_b on t1 (b)") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1061|index already exist idx_b")) - - // ADD PARTITION - s.mustExec(tk, c, "drop table if exists t2") - s.mustExec(tk, c, "create table t2 (a int key) partition by range(a) (partition p0 values less than (10), partition p1 values less than (20))") - sql = "alter table t2 add partition (partition p2 values less than (30))" - s.mustExec(tk, c, sql) - tk.MustGetErrCode(sql, errno.ErrSameNamePartition) - s.mustExec(tk, c, "alter table t2 add partition if not exists (partition p2 values less than (30))") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1517|Duplicate partition name p2")) -} - -func (s *testDBSuite4) TestIfExists(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - s.mustExec(tk, c, "drop table if exists t1") - s.mustExec(tk, c, "create table t1 (a int key, b int);") - - // DROP COLUMN - sql := "alter table t1 drop column b" - s.mustExec(tk, c, sql) - tk.MustGetErrCode(sql, errno.ErrCantDropFieldOrKey) - s.mustExec(tk, c, "alter table t1 drop column if exists b") // only `a` exists now - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1091|Can't DROP 'b'; check that column/key exists")) - - // CHANGE COLUMN - sql = "alter table t1 change column b c int" - tk.MustGetErrCode(sql, errno.ErrBadField) - s.mustExec(tk, c, "alter table t1 change column if exists b c int") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1054|Unknown column 'b' in 't1'")) - s.mustExec(tk, c, "alter table t1 change column if exists a c int") // only `c` exists now - - // MODIFY COLUMN - sql = "alter table t1 modify column a bigint" - tk.MustGetErrCode(sql, errno.ErrBadField) - s.mustExec(tk, c, "alter table t1 modify column if exists a bigint") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1054|Unknown column 'a' in 't1'")) - s.mustExec(tk, c, "alter table t1 modify column if exists c bigint") // only `c` exists now - - // DROP INDEX - s.mustExec(tk, c, "alter table t1 add index idx_c (c)") - sql = "alter table t1 drop index idx_c" - s.mustExec(tk, c, sql) - tk.MustGetErrCode(sql, errno.ErrCantDropFieldOrKey) - s.mustExec(tk, c, "alter table t1 drop index if exists idx_c") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1091|index idx_c doesn't exist")) - - // DROP PARTITION - s.mustExec(tk, c, "drop table if exists t2") - s.mustExec(tk, c, "create table t2 (a int key) partition by range(a) (partition pNeg values less than (0), partition p0 values less than (10), partition p1 values less than (20))") - sql = "alter table t2 drop partition p1" - s.mustExec(tk, c, sql) - tk.MustGetErrCode(sql, errno.ErrDropPartitionNonExistent) - s.mustExec(tk, c, "alter table t2 drop partition if exists p1") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Note|1507|Error in list of partitions to DROP")) -} - -func testAddIndexForGeneratedColumn(tk *testkit.TestKit, s *testDBSuite5, c *C) { - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(y year NOT NULL DEFAULT '2155')") - defer s.mustExec(tk, c, "drop table t;") - for i := 0; i < 50; i++ { - s.mustExec(tk, c, "insert into t values (?)", i) - } - tk.MustExec("insert into t values()") - tk.MustExec("ALTER TABLE t ADD COLUMN y1 year as (y + 2)") - _, err := tk.Exec("ALTER TABLE t ADD INDEX idx_y(y1)") - c.Assert(err, IsNil) - - t := s.testGetTable(c, "t") - for _, idx := range t.Indices() { - c.Assert(strings.EqualFold(idx.Meta().Name.L, "idx_c2"), IsFalse) - } - // NOTE: this test case contains a bug, it should be uncommented after the bug is fixed. - // TODO: Fix bug https://github.com/pingcap/tidb/issues/12181 - // s.mustExec(c, "delete from t where y = 2155") - // s.mustExec(c, "alter table t add index idx_y(y1)") - // s.mustExec(c, "alter table t drop index idx_y") - - // Fix issue 9311. - tk.MustExec("drop table if exists gcai_table") - tk.MustExec("create table gcai_table (id int primary key);") - tk.MustExec("insert into gcai_table values(1);") - tk.MustExec("ALTER TABLE gcai_table ADD COLUMN d date DEFAULT '9999-12-31';") - tk.MustExec("ALTER TABLE gcai_table ADD COLUMN d1 date as (DATE_SUB(d, INTERVAL 31 DAY));") - tk.MustExec("ALTER TABLE gcai_table ADD INDEX idx(d1);") - tk.MustQuery("select * from gcai_table").Check(testkit.Rows("1 9999-12-31 9999-11-30")) - tk.MustQuery("select d1 from gcai_table use index(idx)").Check(testkit.Rows("9999-11-30")) - tk.MustExec("admin check table gcai_table") - // The column is PKIsHandle in generated column expression. - tk.MustExec("ALTER TABLE gcai_table ADD COLUMN id1 int as (id+5);") - tk.MustExec("ALTER TABLE gcai_table ADD INDEX idx1(id1);") - tk.MustQuery("select * from gcai_table").Check(testkit.Rows("1 9999-12-31 9999-11-30 6")) - tk.MustQuery("select id1 from gcai_table use index(idx1)").Check(testkit.Rows("6")) - tk.MustExec("admin check table gcai_table") -} - -func (s *testDBSuite5) TestAddIndexForGeneratedColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - testAddIndexForGeneratedColumn(tk, s, c) -} - -func (s *testDBSuite5) TestModifyGeneratedColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database if not exists test;") - tk.MustExec("use test") - modIdxColErrMsg := "[ddl:3106]'modifying an indexed column' is not supported for generated columns." - modStoredColErrMsg := "[ddl:3106]'modifying a stored column' is not supported for generated columns." - - // Modify column with single-col-index. - tk.MustExec("drop table if exists t1;") - tk.MustExec("create table t1 (a int, b int as (a+1), index idx(b));") - tk.MustExec("insert into t1 set a=1;") - _, err := tk.Exec("alter table t1 modify column b int as (a+2);") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, modIdxColErrMsg) - tk.MustExec("drop index idx on t1;") - tk.MustExec("alter table t1 modify b int as (a+2);") - tk.MustQuery("select * from t1").Check(testkit.Rows("1 3")) - - // Modify column with multi-col-index. - tk.MustExec("drop table t1;") - tk.MustExec("create table t1 (a int, b int as (a+1), index idx(a, b));") - tk.MustExec("insert into t1 set a=1;") - _, err = tk.Exec("alter table t1 modify column b int as (a+2);") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, modIdxColErrMsg) - tk.MustExec("drop index idx on t1;") - tk.MustExec("alter table t1 modify b int as (a+2);") - tk.MustQuery("select * from t1").Check(testkit.Rows("1 3")) - - // Modify column with stored status to a different expression. - tk.MustExec("drop table t1;") - tk.MustExec("create table t1 (a int, b int as (a+1) stored);") - tk.MustExec("insert into t1 set a=1;") - _, err = tk.Exec("alter table t1 modify column b int as (a+2) stored;") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, modStoredColErrMsg) - - // Modify column with stored status to the same expression. - tk.MustExec("drop table t1;") - tk.MustExec("create table t1 (a int, b int as (a+1) stored);") - tk.MustExec("insert into t1 set a=1;") - tk.MustExec("alter table t1 modify column b bigint as (a+1) stored;") - tk.MustExec("alter table t1 modify column b bigint as (a + 1) stored;") - tk.MustQuery("select * from t1").Check(testkit.Rows("1 2")) - - // Modify column with index to the same expression. - tk.MustExec("drop table t1;") - tk.MustExec("create table t1 (a int, b int as (a+1), index idx(b));") - tk.MustExec("insert into t1 set a=1;") - tk.MustExec("alter table t1 modify column b bigint as (a+1);") - tk.MustExec("alter table t1 modify column b bigint as (a + 1);") - tk.MustQuery("select * from t1").Check(testkit.Rows("1 2")) - - // Modify column from non-generated to stored generated. - tk.MustExec("drop table t1;") - tk.MustExec("create table t1 (a int, b int);") - _, err = tk.Exec("alter table t1 modify column b bigint as (a+1) stored;") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, modStoredColErrMsg) - - // Modify column from stored generated to non-generated. - tk.MustExec("drop table t1;") - tk.MustExec("create table t1 (a int, b int as (a+1) stored);") - tk.MustExec("insert into t1 set a=1;") - tk.MustExec("alter table t1 modify column b int;") - tk.MustQuery("select * from t1").Check(testkit.Rows("1 2")) -} - -func (s *testDBSuite5) TestDefaultSQLFunction(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database if not exists test;") - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1, t2, t3, t4;") - - // For issue #13189 - // Use `DEFAULT()` in `INSERT` / `INSERT ON DUPLICATE KEY UPDATE` statement - tk.MustExec("create table t1 (a int primary key, b int default 20, c int default 30, d int default 40);") - tk.MustExec("SET @@time_zone = '+00:00'") - defer tk.MustExec("SET @@time_zone = DEFAULT") - tk.MustQuery("SELECT @@time_zone").Check(testkit.Rows("+00:00")) - tk.MustExec("create table t2 (a int primary key, b timestamp DEFAULT CURRENT_TIMESTAMP, c timestamp DEFAULT '2000-01-01 00:00:00')") - tk.MustExec("insert into t1 set a = 1, b = default(c);") - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 30 30 40")) - tk.MustExec("insert into t1 set a = 2, b = default(c), c = default(d), d = default(b);") - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 30 30 40", "2 30 40 20")) - tk.MustExec("insert into t1 values (2, 3, 4, 5) on duplicate key update b = default(d), c = default(b);") - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 30 30 40", "2 40 20 20")) - tk.MustExec("delete from t1") - tk.MustExec("insert into t1 set a = default(b) + default(c) - default(d)") - tk.MustQuery("select * from t1;").Check(testkit.Rows("10 20 30 40")) - tk.MustExec("set @@timestamp = 1321009871") - defer tk.MustExec("set @@timestamp = DEFAULT") - tk.MustQuery("SELECT NOW()").Check(testkit.Rows("2011-11-11 11:11:11")) - tk.MustExec("insert into t2 set a = 1, b = default(c)") - tk.MustExec("insert into t2 set a = 2, c = default(b)") - tk.MustGetErrCode("insert into t2 set a = 3, b = default(a)", errno.ErrNoDefaultForField) - tk.MustExec("insert into t2 set a = 4, b = default(b), c = default(c)") - tk.MustExec("insert into t2 set a = 5, b = default, c = default") - tk.MustExec("insert into t2 set a = 6") - tk.MustQuery("select * from t2").Sort().Check(testkit.Rows( - "1 2000-01-01 00:00:00 2000-01-01 00:00:00", - "2 2011-11-11 11:11:11 2011-11-11 11:11:11", - "4 2011-11-11 11:11:11 2000-01-01 00:00:00", - "5 2011-11-11 11:11:11 2000-01-01 00:00:00", - "6 2011-11-11 11:11:11 2000-01-01 00:00:00")) - // Use `DEFAULT()` in `UPDATE` statement - tk.MustExec("delete from t1;") - tk.MustExec("insert into t1 value (1, 2, 3, 4);") - tk.MustExec("update t1 set a = 1, c = default(b);") - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 2 20 4")) - tk.MustExec("insert into t1 value (2, 2, 3, 4);") - tk.MustExec("update t1 set c = default(b), b = default(c) where a = 2;") - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 2 20 4", "2 30 20 4")) - tk.MustExec("delete from t1") - tk.MustExec("insert into t1 set a = 10") - tk.MustExec("update t1 set a = 10, b = default(c) + default(d)") - tk.MustQuery("select * from t1;").Check(testkit.Rows("10 70 30 40")) - tk.MustExec("set @@timestamp = 1671747742") - tk.MustExec("update t2 set b = default(c) WHERE a = 6") - tk.MustExec("update t2 set c = default(b) WHERE a = 5") - tk.MustGetErrCode("update t2 set b = default(a) WHERE a = 4", errno.ErrNoDefaultForField) - tk.MustExec("update t2 set b = default(b), c = default(c) WHERE a = 4") - // Non existing row! - tk.MustExec("update t2 set b = default(b), c = default(c) WHERE a = 3") - tk.MustExec("update t2 set b = default, c = default WHERE a = 2") - tk.MustExec("update t2 set b = default(b) WHERE a = 1") - tk.MustQuery("select * from t2;").Sort().Check(testkit.Rows( - "1 2022-12-22 22:22:22 2000-01-01 00:00:00", - "2 2022-12-22 22:22:22 2000-01-01 00:00:00", - "4 2022-12-22 22:22:22 2000-01-01 00:00:00", - "5 2011-11-11 11:11:11 2022-12-22 22:22:22", - "6 2000-01-01 00:00:00 2000-01-01 00:00:00")) - // Use `DEFAULT()` in `REPLACE` statement - tk.MustExec("delete from t1;") - tk.MustExec("insert into t1 value (1, 2, 3, 4);") - tk.MustExec("replace into t1 set a = 1, c = default(b);") - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 20 20 40")) - tk.MustExec("insert into t1 value (2, 2, 3, 4);") - tk.MustExec("replace into t1 set a = 2, d = default(b), c = default(d);") - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 20 20 40", "2 20 40 20")) - tk.MustExec("delete from t1") - tk.MustExec("insert into t1 set a = 10, c = 3") - tk.MustExec("replace into t1 set a = 10, b = default(c) + default(d)") - tk.MustQuery("select * from t1;").Check(testkit.Rows("10 70 30 40")) - tk.MustExec("replace into t1 set a = 20, d = default(c) + default(b)") - tk.MustQuery("select * from t1;").Check(testkit.Rows("10 70 30 40", "20 20 30 50")) - - // Use `DEFAULT()` in expression of generate columns, issue #12471 - tk.MustExec("DROP TABLE t2") - tk.MustExec("create table t2(a int default 9, b int as (1 + default(a)));") - tk.MustExec("insert into t2 values(1, default);") - tk.MustExec("insert into t2 values(2, default(b))") - tk.MustQuery("select * from t2").Sort().Check(testkit.Rows("1 10", "2 10")) - - // Use `DEFAULT()` with subquery, issue #13390 - tk.MustExec("create table t3(f1 int default 11);") - tk.MustExec("insert into t3 value ();") - tk.MustQuery("select default(f1) from (select * from t3) t1;").Check(testkit.Rows("11")) - tk.MustQuery("select default(f1) from (select * from (select * from t3) t1 ) t1;").Check(testkit.Rows("11")) - - tk.MustExec("create table t4(a int default 4);") - tk.MustExec("insert into t4 value (2);") - tk.MustQuery("select default(c) from (select b as c from (select a as b from t4) t3) t2;").Check(testkit.Rows("4")) - tk.MustGetErrCode("select default(a) from (select a from (select 1 as a) t4) t4;", errno.ErrNoDefaultForField) - - tk.MustExec("drop table t1, t2, t3, t4;") -} - -func (s *testDBSuite4) TestIssue9100(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("create table employ (a int, b int) partition by range (b) (partition p0 values less than (1));") - _, err := tk.Exec("alter table employ add unique index p_a (a);") - c.Assert(err.Error(), Equals, "[ddl:1503]A UNIQUE INDEX must include all columns in the table's partitioning function") - _, err = tk.Exec("alter table employ add primary key p_a (a);") - c.Assert(err.Error(), Equals, "[ddl:1503]A PRIMARY must include all columns in the table's partitioning function") - - tk.MustExec("create table issue9100t1 (col1 int not null, col2 date not null, col3 int not null, unique key (col1, col2)) partition by range( col1 ) (partition p1 values less than (11))") - tk.MustExec("alter table issue9100t1 add unique index p_col1 (col1)") - tk.MustExec("alter table issue9100t1 add primary key p_col1 (col1)") - - tk.MustExec("create table issue9100t2 (col1 int not null, col2 date not null, col3 int not null, unique key (col1, col3)) partition by range( col1 + col3 ) (partition p1 values less than (11))") - _, err = tk.Exec("alter table issue9100t2 add unique index p_col1 (col1)") - c.Assert(err.Error(), Equals, "[ddl:1503]A UNIQUE INDEX must include all columns in the table's partitioning function") - _, err = tk.Exec("alter table issue9100t2 add primary key p_col1 (col1)") - c.Assert(err.Error(), Equals, "[ddl:1503]A PRIMARY must include all columns in the table's partitioning function") -} - -func (s *testSerialDBSuite) TestProcessColumnFlags(c *C) { - // check `processColumnFlags()` - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("create table t(a year(4) comment 'xxx', b year, c bit)") - defer s.mustExec(tk, c, "drop table t;") - - check := func(n string, f func(uint) bool) { - t := testGetTableByName(c, tk.Se, "test_db", "t") - for _, col := range t.Cols() { - if strings.EqualFold(col.Name.L, n) { - c.Assert(f(col.Flag), IsTrue) - break - } - } - } - - yearcheck := func(f uint) bool { - return mysql.HasUnsignedFlag(f) && mysql.HasZerofillFlag(f) && !mysql.HasBinaryFlag(f) - } - - tk.MustExec("alter table t modify a year(4)") - check("a", yearcheck) - - tk.MustExec("alter table t modify a year(4) unsigned") - check("a", yearcheck) - - tk.MustExec("alter table t modify a year(4) zerofill") - - tk.MustExec("alter table t modify b year") - check("b", yearcheck) - - tk.MustExec("alter table t modify c bit") - check("c", func(f uint) bool { - return mysql.HasUnsignedFlag(f) && !mysql.HasBinaryFlag(f) - }) -} - -func (s *testSerialDBSuite) TestModifyColumnCharset(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("create table t_mcc(a varchar(8) charset utf8, b varchar(8) charset utf8)") - defer s.mustExec(tk, c, "drop table t_mcc;") - - result := tk.MustQuery(`show create table t_mcc`) - result.Check(testkit.Rows( - "t_mcc CREATE TABLE `t_mcc` (\n" + - " `a` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,\n" + - " `b` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - - tk.MustExec("alter table t_mcc modify column a varchar(8);") - t := s.testGetTable(c, "t_mcc") - t.Meta().Version = model.TableInfoVersion0 - // When the table version is TableInfoVersion0, the following statement don't change "b" charset. - // So the behavior is not compatible with MySQL. - tk.MustExec("alter table t_mcc modify column b varchar(8);") - result = tk.MustQuery(`show create table t_mcc`) - result.Check(testkit.Rows( - "t_mcc CREATE TABLE `t_mcc` (\n" + - " `a` varchar(8) DEFAULT NULL,\n" + - " `b` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - -} - -func (s *testDBSuite1) TestModifyColumnTime_TimeToYear(c *C) { - outOfRangeCode := uint16(1264) - tests := []testModifyColumnTimeCase{ - // time to year, it's reasonable to return current year and discard the time (even if MySQL may get data out of range error). - {"time", `"30 20:00:12"`, "year", "", outOfRangeCode}, - {"time", `"30 20:00"`, "year", "", outOfRangeCode}, - {"time", `"30 20"`, "year", "", outOfRangeCode}, - {"time", `"20:00:12"`, "year", "", outOfRangeCode}, - {"time", `"20:00"`, "year", "", outOfRangeCode}, - {"time", `"12"`, "year", "2012", 0}, - {"time", `"200012"`, "year", "", outOfRangeCode}, - {"time", `200012`, "year", "", outOfRangeCode}, - {"time", `0012`, "year", "2012", 0}, - {"time", `12`, "year", "2012", 0}, - {"time", `"30 20:00:12.498"`, "year", "", outOfRangeCode}, - {"time", `"20:00:12.498"`, "year", "", outOfRangeCode}, - {"time", `"200012.498"`, "year", "", outOfRangeCode}, - {"time", `200012.498`, "year", "", outOfRangeCode}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_TimeToDate(c *C) { - now := time.Now().UTC() - now = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC) - timeToDate1 := now.Format("2006-01-02") - timeToDate2 := now.AddDate(0, 0, 30).Format("2006-01-02") - tests := []testModifyColumnTimeCase{ - // time to date - {"time", `"30 20:00:12"`, "date", timeToDate2, 0}, - {"time", `"30 20:00"`, "date", timeToDate2, 0}, - {"time", `"30 20"`, "date", timeToDate2, 0}, - {"time", `"20:00:12"`, "date", timeToDate1, 0}, - {"time", `"20:00"`, "date", timeToDate1, 0}, - {"time", `"12"`, "date", timeToDate1, 0}, - {"time", `"200012"`, "date", timeToDate1, 0}, - {"time", `200012`, "date", timeToDate1, 0}, - {"time", `0012`, "date", timeToDate1, 0}, - {"time", `12`, "date", timeToDate1, 0}, - {"time", `"30 20:00:12.498"`, "date", timeToDate2, 0}, - {"time", `"20:00:12.498"`, "date", timeToDate1, 0}, - {"time", `"200012.498"`, "date", timeToDate1, 0}, - {"time", `200012.498`, "date", timeToDate1, 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_TimeToDatetime(c *C) { - now := time.Now().UTC() - now = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC) - timeToDatetime1 := now.Add(20 * time.Hour).Add(12 * time.Second).Format("2006-01-02 15:04:05") - timeToDatetime2 := now.Add(20 * time.Hour).Format("2006-01-02 15:04:05") - timeToDatetime3 := now.Add(12 * time.Second).Format("2006-01-02 15:04:05") - timeToDatetime4 := now.AddDate(0, 0, 30).Add(20 * time.Hour).Add(12 * time.Second).Format("2006-01-02 15:04:05") - timeToDatetime5 := now.AddDate(0, 0, 30).Add(20 * time.Hour).Format("2006-01-02 15:04:05") - tests := []testModifyColumnTimeCase{ - // time to datetime - {"time", `"30 20:00:12"`, "datetime", timeToDatetime4, 0}, - {"time", `"30 20:00"`, "datetime", timeToDatetime5, 0}, - {"time", `"30 20"`, "datetime", timeToDatetime5, 0}, - {"time", `"20:00:12"`, "datetime", timeToDatetime1, 0}, - {"time", `"20:00"`, "datetime", timeToDatetime2, 0}, - {"time", `"12"`, "datetime", timeToDatetime3, 0}, - {"time", `"200012"`, "datetime", timeToDatetime1, 0}, - {"time", `200012`, "datetime", timeToDatetime1, 0}, - {"time", `0012`, "datetime", timeToDatetime3, 0}, - {"time", `12`, "datetime", timeToDatetime3, 0}, - {"time", `"30 20:00:12.498"`, "datetime", timeToDatetime4, 0}, - {"time", `"20:00:12.498"`, "datetime", timeToDatetime1, 0}, - {"time", `"200012.498"`, "datetime", timeToDatetime1, 0}, - {"time", `200012.498`, "datetime", timeToDatetime1, 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_TimeToTimestamp(c *C) { - now := time.Now().UTC() - now = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC) - timeToTimestamp1 := now.Add(20 * time.Hour).Add(12 * time.Second).Format("2006-01-02 15:04:05") - timeToTimestamp2 := now.Add(20 * time.Hour).Format("2006-01-02 15:04:05") - timeToTimestamp3 := now.Add(12 * time.Second).Format("2006-01-02 15:04:05") - timeToTimestamp4 := now.AddDate(0, 0, 30).Add(20 * time.Hour).Add(12 * time.Second).Format("2006-01-02 15:04:05") - timeToTimestamp5 := now.AddDate(0, 0, 30).Add(20 * time.Hour).Format("2006-01-02 15:04:05") - tests := []testModifyColumnTimeCase{ - // time to timestamp - {"time", `"30 20:00:12"`, "timestamp", timeToTimestamp4, 0}, - {"time", `"30 20:00"`, "timestamp", timeToTimestamp5, 0}, - {"time", `"30 20"`, "timestamp", timeToTimestamp5, 0}, - {"time", `"20:00:12"`, "timestamp", timeToTimestamp1, 0}, - {"time", `"20:00"`, "timestamp", timeToTimestamp2, 0}, - {"time", `"12"`, "timestamp", timeToTimestamp3, 0}, - {"time", `"200012"`, "timestamp", timeToTimestamp1, 0}, - {"time", `200012`, "timestamp", timeToTimestamp1, 0}, - {"time", `0012`, "timestamp", timeToTimestamp3, 0}, - {"time", `12`, "timestamp", timeToTimestamp3, 0}, - {"time", `"30 20:00:12.498"`, "timestamp", timeToTimestamp4, 0}, - {"time", `"20:00:12.498"`, "timestamp", timeToTimestamp1, 0}, - {"time", `"200012.498"`, "timestamp", timeToTimestamp1, 0}, - {"time", `200012.498`, "timestamp", timeToTimestamp1, 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite7) TestModifyColumnTime_DateToTime(c *C) { - tests := []testModifyColumnTimeCase{ - // date to time - {"date", `"2019-01-02"`, "time", "00:00:00", 0}, - {"date", `"19-01-02"`, "time", "00:00:00", 0}, - {"date", `"20190102"`, "time", "00:00:00", 0}, - {"date", `"190102"`, "time", "00:00:00", 0}, - {"date", `20190102`, "time", "00:00:00", 0}, - {"date", `190102`, "time", "00:00:00", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_DateToYear(c *C) { - tests := []testModifyColumnTimeCase{ - // date to year - {"date", `"2019-01-02"`, "year", "2019", 0}, - {"date", `"19-01-02"`, "year", "2019", 0}, - {"date", `"20190102"`, "year", "2019", 0}, - {"date", `"190102"`, "year", "2019", 0}, - {"date", `20190102`, "year", "2019", 0}, - {"date", `190102`, "year", "2019", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_DateToDatetime(c *C) { - tests := []testModifyColumnTimeCase{ - // date to datetime - {"date", `"2019-01-02"`, "datetime", "2019-01-02 00:00:00", 0}, - {"date", `"19-01-02"`, "datetime", "2019-01-02 00:00:00", 0}, - {"date", `"20190102"`, "datetime", "2019-01-02 00:00:00", 0}, - {"date", `"190102"`, "datetime", "2019-01-02 00:00:00", 0}, - {"date", `20190102`, "datetime", "2019-01-02 00:00:00", 0}, - {"date", `190102`, "datetime", "2019-01-02 00:00:00", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_DateToTimestamp(c *C) { - tests := []testModifyColumnTimeCase{ - // date to timestamp - {"date", `"2019-01-02"`, "timestamp", "2019-01-02 00:00:00", 0}, - {"date", `"19-01-02"`, "timestamp", "2019-01-02 00:00:00", 0}, - {"date", `"20190102"`, "timestamp", "2019-01-02 00:00:00", 0}, - {"date", `"190102"`, "timestamp", "2019-01-02 00:00:00", 0}, - {"date", `20190102`, "timestamp", "2019-01-02 00:00:00", 0}, - {"date", `190102`, "timestamp", "2019-01-02 00:00:00", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_TimestampToYear(c *C) { - tests := []testModifyColumnTimeCase{ - // timestamp to year - {"timestamp", `"2006-01-02 15:04:05"`, "year", "2006", 0}, - {"timestamp", `"06-01-02 15:04:05"`, "year", "2006", 0}, - {"timestamp", `"20060102150405"`, "year", "2006", 0}, - {"timestamp", `"060102150405"`, "year", "2006", 0}, - {"timestamp", `20060102150405`, "year", "2006", 0}, - {"timestamp", `060102150405`, "year", "2006", 0}, - {"timestamp", `"2006-01-02 23:59:59.506"`, "year", "2006", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_TimestampToTime(c *C) { - tests := []testModifyColumnTimeCase{ - // timestamp to time - {"timestamp", `"2006-01-02 15:04:05"`, "time", "15:04:05", 0}, - {"timestamp", `"06-01-02 15:04:05"`, "time", "15:04:05", 0}, - {"timestamp", `"20060102150405"`, "time", "15:04:05", 0}, - {"timestamp", `"060102150405"`, "time", "15:04:05", 0}, - {"timestamp", `20060102150405`, "time", "15:04:05", 0}, - {"timestamp", `060102150405`, "time", "15:04:05", 0}, - {"timestamp", `"2006-01-02 23:59:59.506"`, "time", "00:00:00", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_TimestampToDate(c *C) { - tests := []testModifyColumnTimeCase{ - // timestamp to date - {"timestamp", `"2006-01-02 15:04:05"`, "date", "2006-01-02", 0}, - {"timestamp", `"06-01-02 15:04:05"`, "date", "2006-01-02", 0}, - {"timestamp", `"20060102150405"`, "date", "2006-01-02", 0}, - {"timestamp", `"060102150405"`, "date", "2006-01-02", 0}, - {"timestamp", `20060102150405`, "date", "2006-01-02", 0}, - {"timestamp", `060102150405`, "date", "2006-01-02", 0}, - {"timestamp", `"2006-01-02 23:59:59.506"`, "date", "2006-01-03", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_TimestampToDatetime(c *C) { - tests := []testModifyColumnTimeCase{ - // timestamp to datetime - {"timestamp", `"2006-01-02 15:04:05"`, "datetime", "2006-01-02 15:04:05", 0}, - {"timestamp", `"06-01-02 15:04:05"`, "datetime", "2006-01-02 15:04:05", 0}, - {"timestamp", `"20060102150405"`, "datetime", "2006-01-02 15:04:05", 0}, - {"timestamp", `"060102150405"`, "datetime", "2006-01-02 15:04:05", 0}, - {"timestamp", `20060102150405`, "datetime", "2006-01-02 15:04:05", 0}, - {"timestamp", `060102150405`, "datetime", "2006-01-02 15:04:05", 0}, - {"timestamp", `"2006-01-02 23:59:59.506"`, "datetime", "2006-01-03 00:00:00", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_DatetimeToYear(c *C) { - tests := []testModifyColumnTimeCase{ - // datetime to year - {"datetime", `"2006-01-02 15:04:05"`, "year", "2006", 0}, - {"datetime", `"06-01-02 15:04:05"`, "year", "2006", 0}, - {"datetime", `"20060102150405"`, "year", "2006", 0}, - {"datetime", `"060102150405"`, "year", "2006", 0}, - {"datetime", `20060102150405`, "year", "2006", 0}, - {"datetime", `060102150405`, "year", "2006", 0}, - {"datetime", `"2006-01-02 23:59:59.506"`, "year", "2006", 0}, - {"datetime", `"1000-01-02 23:59:59"`, "year", "", errno.ErrWarnDataOutOfRange}, - {"datetime", `"9999-01-02 23:59:59"`, "year", "", errno.ErrWarnDataOutOfRange}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_DatetimeToTime(c *C) { - tests := []testModifyColumnTimeCase{ - // datetime to time - {"datetime", `"2006-01-02 15:04:05"`, "time", "15:04:05", 0}, - {"datetime", `"06-01-02 15:04:05"`, "time", "15:04:05", 0}, - {"datetime", `"20060102150405"`, "time", "15:04:05", 0}, - {"datetime", `"060102150405"`, "time", "15:04:05", 0}, - {"datetime", `20060102150405`, "time", "15:04:05", 0}, - {"datetime", `060102150405`, "time", "15:04:05", 0}, - {"datetime", `"2006-01-02 23:59:59.506"`, "time", "00:00:00", 0}, - {"datetime", `"1000-01-02 23:59:59"`, "time", "23:59:59", 0}, - {"datetime", `"9999-01-02 23:59:59"`, "time", "23:59:59", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_DatetimeToDate(c *C) { - tests := []testModifyColumnTimeCase{ - // datetime to date - {"datetime", `"2006-01-02 15:04:05"`, "date", "2006-01-02", 0}, - {"datetime", `"06-01-02 15:04:05"`, "date", "2006-01-02", 0}, - {"datetime", `"20060102150405"`, "date", "2006-01-02", 0}, - {"datetime", `"060102150405"`, "date", "2006-01-02", 0}, - {"datetime", `20060102150405`, "date", "2006-01-02", 0}, - {"datetime", `060102150405`, "date", "2006-01-02", 0}, - {"datetime", `"2006-01-02 23:59:59.506"`, "date", "2006-01-03", 0}, - {"datetime", `"1000-01-02 23:59:59"`, "date", "1000-01-02", 0}, - {"datetime", `"9999-01-02 23:59:59"`, "date", "9999-01-02", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_DatetimeToTimestamp(c *C) { - tests := []testModifyColumnTimeCase{ - // datetime to timestamp - {"datetime", `"2006-01-02 15:04:05"`, "timestamp", "2006-01-02 15:04:05", 0}, - {"datetime", `"06-01-02 15:04:05"`, "timestamp", "2006-01-02 15:04:05", 0}, - {"datetime", `"20060102150405"`, "timestamp", "2006-01-02 15:04:05", 0}, - {"datetime", `"060102150405"`, "timestamp", "2006-01-02 15:04:05", 0}, - {"datetime", `20060102150405`, "timestamp", "2006-01-02 15:04:05", 0}, - {"datetime", `060102150405`, "timestamp", "2006-01-02 15:04:05", 0}, - {"datetime", `"2006-01-02 23:59:59.506"`, "timestamp", "2006-01-03 00:00:00", 0}, - {"datetime", `"1971-01-02 23:59:59"`, "timestamp", "1971-01-02 23:59:59", 0}, - {"datetime", `"2009-01-02 23:59:59"`, "timestamp", "2009-01-02 23:59:59", 0}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_YearToTime(c *C) { - tests := []testModifyColumnTimeCase{ - // year to time - // failed cases are not handled by TiDB - {"year", `"2019"`, "time", "00:20:19", 0}, - {"year", `2019`, "time", "00:20:19", 0}, - {"year", `"00"`, "time", "00:20:00", 0}, - {"year", `"69"`, "time", "", errno.ErrTruncatedWrongValue}, - {"year", `"70"`, "time", "", errno.ErrTruncatedWrongValue}, - {"year", `"99"`, "time", "", errno.ErrTruncatedWrongValue}, - {"year", `00`, "time", "00:00:00", 0}, - {"year", `69`, "time", "", errno.ErrTruncatedWrongValue}, - {"year", `70`, "time", "", errno.ErrTruncatedWrongValue}, - {"year", `99`, "time", "", errno.ErrTruncatedWrongValue}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_YearToDate(c *C) { - tests := []testModifyColumnTimeCase{ - // year to date - {"year", `"2019"`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `2019`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `"00"`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `"69"`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `"70"`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `"99"`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `00`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `69`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `70`, "date", "", errno.ErrTruncatedWrongValue}, - {"year", `99`, "date", "", errno.ErrTruncatedWrongValue}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_YearToDatetime(c *C) { - tests := []testModifyColumnTimeCase{ - // year to datetime - {"year", `"2019"`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `2019`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `"00"`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `"69"`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `"70"`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `"99"`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `00`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `69`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `70`, "datetime", "", errno.ErrTruncatedWrongValue}, - {"year", `99`, "datetime", "", errno.ErrTruncatedWrongValue}, - } - testModifyColumnTime(c, s.store, tests) -} - -func (s *testDBSuite1) TestModifyColumnTime_YearToTimestamp(c *C) { - tests := []testModifyColumnTimeCase{ - // year to timestamp - {"year", `"2019"`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `2019`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `"00"`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `"69"`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `"70"`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `"99"`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `00`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `69`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `70`, "timestamp", "", errno.ErrTruncatedWrongValue}, - {"year", `99`, "timestamp", "", errno.ErrTruncatedWrongValue}, - } - testModifyColumnTime(c, s.store, tests) -} - -type testModifyColumnTimeCase struct { - from string - value string - to string - expect string - err uint16 -} - -func testModifyColumnTime(c *C, store kv.Storage, tests []testModifyColumnTimeCase) { - limit := variable.GetDDLErrorCountLimit() - - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") - tk.MustExec("set @@global.tidb_ddl_error_count_limit = 3") - - // Set time zone to UTC. - originalTz := tk.Se.GetSessionVars().TimeZone - tk.Se.GetSessionVars().TimeZone = time.UTC - defer func() { - tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_error_count_limit = %v", limit)) - tk.Se.GetSessionVars().TimeZone = originalTz - }() - - for _, t := range tests { - tk.MustExec("drop table if exists t_mc") - tk.MustExec(fmt.Sprintf("create table t_mc(a %s)", t.from)) - tk.MustExec(fmt.Sprintf(`insert into t_mc (a) values (%s)`, t.value)) - _, err := tk.Exec(fmt.Sprintf(`alter table t_mc modify a %s`, t.to)) - if t.err != 0 { - c.Assert(err, NotNil, Commentf("%+v", t)) - c.Assert(err, ErrorMatches, fmt.Sprintf(".*[ddl:%d].*", t.err), Commentf("%+v", t)) - continue - } - c.Assert(err, IsNil, Commentf("%+v", t)) - - rs, err := tk.Exec("select a from t_mc") - c.Assert(err, IsNil, Commentf("%+v", t)) - - tk.ResultSetToResult(rs, Commentf("%+v", t)).Check(testkit.Rows(t.expect)) - } -} - -func (s *testSerialDBSuite) TestSetTableFlashReplica(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`), IsNil) - - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - s.mustExec(tk, c, "drop table if exists t_flash;") - tk.MustExec("create table t_flash(a int, b int)") - defer s.mustExec(tk, c, "drop table t_flash;") - - t := s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica, IsNil) - - tk.MustExec("alter table t_flash set tiflash replica 2 location labels 'a','b';") - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica, NotNil) - c.Assert(t.Meta().TiFlashReplica.Count, Equals, uint64(2)) - c.Assert(strings.Join(t.Meta().TiFlashReplica.LocationLabels, ","), Equals, "a,b") - - tk.MustExec("alter table t_flash set tiflash replica 0") - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica, IsNil) - - // Test set tiflash replica for partition table. - s.mustExec(tk, c, "drop table if exists t_flash;") - tk.MustExec("create table t_flash(a int, b int) partition by hash(a) partitions 3") - tk.MustExec("alter table t_flash set tiflash replica 2 location labels 'a','b';") - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica, NotNil) - c.Assert(t.Meta().TiFlashReplica.Count, Equals, uint64(2)) - c.Assert(strings.Join(t.Meta().TiFlashReplica.LocationLabels, ","), Equals, "a,b") - - // Use table ID as physical ID, mock for partition feature was not enabled. - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, t.Meta().ID, true) - c.Assert(err, IsNil) - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica, NotNil) - c.Assert(t.Meta().TiFlashReplica.Available, Equals, true) - c.Assert(len(t.Meta().TiFlashReplica.AvailablePartitionIDs), Equals, 0) - - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, t.Meta().ID, false) - c.Assert(err, IsNil) - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica.Available, Equals, false) - - // Mock for partition 0 replica was available. - partition := t.Meta().Partition - c.Assert(len(partition.Definitions), Equals, 3) - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, true) - c.Assert(err, IsNil) - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica.Available, Equals, false) - c.Assert(t.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[0].ID}) - - // Mock for partition 0 replica become unavailable. - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, false) - c.Assert(err, IsNil) - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica.Available, Equals, false) - c.Assert(t.Meta().TiFlashReplica.AvailablePartitionIDs, HasLen, 0) - - // Mock for partition 0, 1,2 replica was available. - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[0].ID, true) - c.Assert(err, IsNil) - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[1].ID, true) - c.Assert(err, IsNil) - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[2].ID, true) - c.Assert(err, IsNil) - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica.Available, Equals, true) - c.Assert(t.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[0].ID, partition.Definitions[1].ID, partition.Definitions[2].ID}) - - // Mock for partition 1 replica was unavailable. - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, partition.Definitions[1].ID, false) - c.Assert(err, IsNil) - t = s.testGetTable(c, "t_flash") - c.Assert(t.Meta().TiFlashReplica.Available, Equals, false) - c.Assert(t.Meta().TiFlashReplica.AvailablePartitionIDs, DeepEquals, []int64{partition.Definitions[0].ID, partition.Definitions[2].ID}) - - // Test for update table replica with unknown table ID. - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, math.MaxInt64, false) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[schema:1146]Table which ID = 9223372036854775807 does not exist.") - - // Test for FindTableByPartitionID. - is := domain.GetDomain(tk.Se).InfoSchema() - t, dbInfo, _ := is.FindTableByPartitionID(partition.Definitions[0].ID) - c.Assert(t, NotNil) - c.Assert(dbInfo, NotNil) - c.Assert(t.Meta().Name.L, Equals, "t_flash") - t, dbInfo, _ = is.FindTableByPartitionID(t.Meta().ID) - c.Assert(t, IsNil) - c.Assert(dbInfo, IsNil) - err = failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") - c.Assert(err, IsNil) - - // Test for set replica count more than the tiflash store count. - s.mustExec(tk, c, "drop table if exists t_flash;") - tk.MustExec("create table t_flash(a int, b int)") - _, err = tk.Exec("alter table t_flash set tiflash replica 2 location labels 'a','b';") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "the tiflash replica count: 2 should be less than the total tiflash server count: 0") -} - -func (s *testSerialDBSuite) TestForbitCacheTableForSystemTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - sysTables := make([]string, 0, 24) - memOrSysDB := []string{"MySQL", "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "METRICS_SCHEMA"} - for _, db := range memOrSysDB { - tk.MustExec("use " + db) - tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil) - rows := tk.MustQuery("show tables").Rows() - for i := 0; i < len(rows); i++ { - sysTables = append(sysTables, rows[i][0].(string)) - } - for _, one := range sysTables { - _, err := tk.Exec(fmt.Sprintf("alter table `%s` cache", one)) - if db == "MySQL" { - c.Assert(err.Error(), Equals, "[ddl:8200]ALTER table cache for tables in system database is currently unsupported") - } else { - c.Assert(err.Error(), Equals, fmt.Sprintf("[planner:1142]ALTER command denied to user 'root'@'%%' for table '%s'", strings.ToLower(one))) - } - - } - sysTables = sysTables[:0] - } -} - -func (s *testSerialDBSuite) TestSetTableFlashReplicaForSystemTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - sysTables := make([]string, 0, 24) - memOrSysDB := []string{"MySQL", "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "METRICS_SCHEMA"} - for _, db := range memOrSysDB { - tk.MustExec("use " + db) - tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil) - rows := tk.MustQuery("show tables").Rows() - for i := 0; i < len(rows); i++ { - sysTables = append(sysTables, rows[i][0].(string)) - } - for _, one := range sysTables { - _, err := tk.Exec(fmt.Sprintf("alter table `%s` set tiflash replica 1", one)) - if db == "MySQL" { - c.Assert(err.Error(), Equals, "[ddl:8200]ALTER table replica for tables in system database is currently unsupported") - } else { - c.Assert(err.Error(), Equals, fmt.Sprintf("[planner:1142]ALTER command denied to user 'root'@'%%' for table '%s'", strings.ToLower(one))) - } - - } - sysTables = sysTables[:0] - } -} - -func (s *testSerialDBSuite) TestSetTiFlashReplicaForTemporaryTable(c *C) { - // test for tiflash replica - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`), IsNil) - defer func() { - err := failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") - c.Assert(err, IsNil) - }() - - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("drop table if exists temp, temp2") - tk.MustExec("drop table if exists temp") - tk.MustExec("create global temporary table temp(id int) on commit delete rows") - tk.MustExec("create temporary table temp2(id int)") - tk.MustGetErrCode("alter table temp set tiflash replica 1", errno.ErrOptOnTemporaryTable) - tk.MustGetErrCode("alter table temp2 set tiflash replica 1", errno.ErrUnsupportedDDLOperation) - tk.MustExec("drop table temp, temp2") - - tk.MustExec("drop table if exists normal") - tk.MustExec("create table normal(id int)") - defer tk.MustExec("drop table normal") - tk.MustExec("alter table normal set tiflash replica 1") - tk.MustQuery("select REPLICA_COUNT from information_schema.tiflash_replica where table_schema='test' and table_name='normal'").Check(testkit.Rows("1")) - tk.MustExec("create global temporary table temp like normal on commit delete rows") - tk.MustQuery("select REPLICA_COUNT from information_schema.tiflash_replica where table_schema='test' and table_name='temp'").Check(testkit.Rows()) - tk.MustExec("drop table temp") - tk.MustExec("create temporary table temp like normal") - tk.MustQuery("select REPLICA_COUNT from information_schema.tiflash_replica where table_schema='test' and table_name='temp'").Check(testkit.Rows()) -} - -func (s *testSerialDBSuite) TestAlterShardRowIDBits(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange"), IsNil) - }() - - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test") - // Test alter shard_row_id_bits - tk.MustExec("drop table if exists t1") - defer tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int) shard_row_id_bits = 5") - tk.MustExec(fmt.Sprintf("alter table t1 auto_increment = %d;", 1<<56)) - tk.MustExec("insert into t1 set a=1;") - - // Test increase shard_row_id_bits failed by overflow global auto ID. - _, err := tk.Exec("alter table t1 SHARD_ROW_ID_BITS = 10;") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[autoid:1467]shard_row_id_bits 10 will cause next global auto ID 72057594037932936 overflow") - - // Test reduce shard_row_id_bits will be ok. - tk.MustExec("alter table t1 SHARD_ROW_ID_BITS = 3;") - checkShardRowID := func(maxShardRowIDBits, shardRowIDBits uint64) { - tbl := testGetTableByName(c, tk.Se, "test", "t1") - c.Assert(tbl.Meta().MaxShardRowIDBits == maxShardRowIDBits, IsTrue) - c.Assert(tbl.Meta().ShardRowIDBits == shardRowIDBits, IsTrue) - } - checkShardRowID(5, 3) - - // Test reduce shard_row_id_bits but calculate overflow should use the max record shard_row_id_bits. - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int) shard_row_id_bits = 10") - tk.MustExec("alter table t1 SHARD_ROW_ID_BITS = 5;") - checkShardRowID(10, 5) - tk.MustExec(fmt.Sprintf("alter table t1 auto_increment = %d;", 1<<56)) - _, err = tk.Exec("insert into t1 set a=1;") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[autoid:1467]Failed to read auto-increment value from storage engine") -} - -func (s *testSerialDBSuite) TestShardRowIDBitsOnTemporaryTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - // for global temporary table - tk.MustExec("drop table if exists shard_row_id_temporary") - _, err := tk.Exec("create global temporary table shard_row_id_temporary (a int) shard_row_id_bits = 5 on commit delete rows;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) - tk.MustExec("create global temporary table shard_row_id_temporary (a int) on commit delete rows;") - defer tk.MustExec("drop table if exists shard_row_id_temporary") - _, err = tk.Exec("alter table shard_row_id_temporary shard_row_id_bits = 4;") - c.Assert(err.Error(), Equals, ddl.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) - // for local temporary table - tk.MustExec("drop table if exists local_shard_row_id_temporary") - _, err = tk.Exec("create temporary table local_shard_row_id_temporary (a int) shard_row_id_bits = 5;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) - tk.MustExec("create temporary table local_shard_row_id_temporary (a int);") - defer tk.MustExec("drop table if exists local_shard_row_id_temporary") - _, err = tk.Exec("alter table local_shard_row_id_temporary shard_row_id_bits = 4;") - c.Assert(err.Error(), Equals, ddl.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("ALTER TABLE").Error()) -} - -// port from mysql -// https://github.com/mysql/mysql-server/blob/124c7ab1d6f914637521fd4463a993aa73403513/mysql-test/t/lock.test -func (s *testDBSuite2) TestLock(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - /* Testing of table locking */ - tk.MustExec("DROP TABLE IF EXISTS t1") - tk.MustExec("CREATE TABLE t1 ( `id` int(11) NOT NULL default '0', `id2` int(11) NOT NULL default '0', `id3` int(11) NOT NULL default '0', `dummy1` char(30) default NULL, PRIMARY KEY (`id`,`id2`), KEY `index_id3` (`id3`))") - tk.MustExec("insert into t1 (id,id2) values (1,1),(1,2),(1,3)") - tk.MustExec("LOCK TABLE t1 WRITE") - tk.MustExec("select dummy1,count(distinct id) from t1 group by dummy1") - tk.MustExec("update t1 set id=-1 where id=1") - tk.MustExec("LOCK TABLE t1 READ") - _, err := tk.Exec("update t1 set id=1 where id=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite), IsTrue) - tk.MustExec("unlock tables") - tk.MustExec("update t1 set id=1 where id=-1") - tk.MustExec("drop table t1") -} - -// port from mysql -// https://github.com/mysql/mysql-server/blob/4f1d7cf5fcb11a3f84cff27e37100d7295e7d5ca/mysql-test/t/tablelock.test -func (s *testDBSuite2) TestTableLock(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1,t2") - - /* Test of lock tables */ - tk.MustExec("create table t1 ( n int auto_increment primary key)") - tk.MustExec("lock tables t1 write") - tk.MustExec("insert into t1 values(NULL)") - tk.MustExec("unlock tables") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) - - tk.MustExec("lock tables t1 write") - tk.MustExec("insert into t1 values(NULL)") - tk.MustExec("unlock tables") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) - - tk.MustExec("drop table if exists t1") - - /* Test of locking and delete of files */ - tk.MustExec("drop table if exists t1,t2") - tk.MustExec("CREATE TABLE t1 (a int)") - tk.MustExec("CREATE TABLE t2 (a int)") - tk.MustExec("lock tables t1 write, t2 write") - tk.MustExec("drop table t1,t2") - - tk.MustExec("CREATE TABLE t1 (a int)") - tk.MustExec("CREATE TABLE t2 (a int)") - tk.MustExec("lock tables t1 write, t2 write") - tk.MustExec("drop table t2,t1") -} - -// port from mysql -// https://github.com/mysql/mysql-server/blob/4f1d7cf5fcb11a3f84cff27e37100d7295e7d5ca/mysql-test/t/lock_tables_lost_commit.test -func (s *testDBSuite2) TestTableLocksLostCommit(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk2 := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk2.MustExec("use test") - - tk.MustExec("DROP TABLE IF EXISTS t1") - tk.MustExec("CREATE TABLE t1(a INT)") - tk.MustExec("LOCK TABLES t1 WRITE") - tk.MustExec("INSERT INTO t1 VALUES(10)") - - _, err := tk2.Exec("SELECT * FROM t1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - - tk.Se.Close() - - tk2.MustExec("SELECT * FROM t1") - tk2.MustExec("DROP TABLE t1") - - tk.MustExec("unlock tables") -} - -// test write local lock -func (s *testDBSuite2) TestWriteLocal(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk2 := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk2.MustExec("use test") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 ( n int auto_increment primary key)") - - // Test: allow read - tk.MustExec("lock tables t1 write local") - tk.MustExec("insert into t1 values(NULL)") - tk2.MustQuery("select count(*) from t1") - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - - // Test: forbid write - tk.MustExec("lock tables t1 write local") - _, err := tk2.Exec("insert into t1 values(NULL)") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - - // Test mutex: lock write local first - tk.MustExec("lock tables t1 write local") - _, err = tk2.Exec("lock tables t1 write local") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("lock tables t1 write") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("lock tables t1 read") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - - // Test mutex: lock write first - tk.MustExec("lock tables t1 write") - _, err = tk2.Exec("lock tables t1 write local") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - - // Test mutex: lock read first - tk.MustExec("lock tables t1 read") - _, err = tk2.Exec("lock tables t1 write local") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") -} - -func (s *testSerialDBSuite) TestSkipSchemaChecker(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`), IsNil) - defer func() { - err := failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") - c.Assert(err, IsNil) - }() - - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - defer tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int)") - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - - // Test skip schema checker for ActionSetTiFlashReplica. - tk.MustExec("begin") - tk.MustExec("insert into t1 set a=1;") - tk2.MustExec("alter table t1 set tiflash replica 2 location labels 'a','b';") - tk.MustExec("commit") - - // Test skip schema checker for ActionUpdateTiFlashReplicaStatus. - tk.MustExec("begin") - tk.MustExec("insert into t1 set a=1;") - tb := testGetTableByName(c, tk.Se, "test", "t1") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) - tk.MustExec("commit") - - // Test can't skip schema checker. - tk.MustExec("begin") - tk.MustExec("insert into t1 set a=1;") - tk2.MustExec("alter table t1 add column b int;") - _, err = tk.Exec("commit") - c.Assert(terror.ErrorEqual(domain.ErrInfoSchemaChanged, err), IsTrue) -} - -// See issue: https://github.com/pingcap/tidb/issues/29752 -// Ref https://dev.mysql.com/doc/refman/8.0/en/rename-table.html -func (s *testDBSuite2) TestRenameTableWithLocked(c *C) { - defer config.RestoreFunc()() - config.UpdateGlobal(func(conf *config.Config) { - conf.EnableTableLock = true - }) - - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database renamedb") - tk.MustExec("create database renamedb2") - tk.MustExec("use renamedb") - tk.MustExec("DROP TABLE IF EXISTS t1;") - tk.MustExec("CREATE TABLE t1 (a int);") - - tk.MustExec("LOCK TABLES t1 WRITE;") - tk.MustGetErrCode("drop database renamedb2;", errno.ErrLockOrActiveTransaction) - tk.MustExec("RENAME TABLE t1 TO t2;") - tk.MustQuery("select * from renamedb.t2").Check(testkit.Rows()) - tk.MustExec("UNLOCK TABLES") - tk.MustExec("RENAME TABLE t2 TO t1;") - tk.MustQuery("select * from renamedb.t1").Check(testkit.Rows()) - - tk.MustExec("LOCK TABLES t1 READ;") - tk.MustGetErrCode("RENAME TABLE t1 TO t2;", errno.ErrTableNotLockedForWrite) - tk.MustExec("UNLOCK TABLES") - - tk.MustExec("drop database renamedb") -} - -func (s *testDBSuite2) TestLockTables(c *C) { - if israce.RaceEnabled { - c.Skip("skip race test") - } - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1,t2") - defer tk.MustExec("drop table if exists t1,t2") - tk.MustExec("create table t1 (a int)") - tk.MustExec("create table t2 (a int)") - - // Test lock 1 table. - tk.MustExec("lock tables t1 write") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockWrite) - tk.MustExec("lock tables t1 read") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockRead) - tk.MustExec("lock tables t1 write") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockWrite) - - // Test lock multi tables. - tk.MustExec("lock tables t1 write, t2 read") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockWrite) - checkTableLock(c, tk.Se, "test", "t2", model.TableLockRead) - tk.MustExec("lock tables t1 read, t2 write") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockRead) - checkTableLock(c, tk.Se, "test", "t2", model.TableLockWrite) - tk.MustExec("lock tables t2 write") - checkTableLock(c, tk.Se, "test", "t2", model.TableLockWrite) - checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) - tk.MustExec("lock tables t1 write") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockWrite) - checkTableLock(c, tk.Se, "test", "t2", model.TableLockNone) - - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - - // Test read lock. - tk.MustExec("lock tables t1 read") - tk.MustQuery("select * from t1") - tk2.MustQuery("select * from t1") - _, err := tk.Exec("insert into t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite), IsTrue) - _, err = tk.Exec("update t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite), IsTrue) - _, err = tk.Exec("delete from t1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite), IsTrue) - - _, err = tk2.Exec("insert into t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("update t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("delete from t1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk2.MustExec("lock tables t1 read") - _, err = tk2.Exec("insert into t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableNotLockedForWrite), IsTrue) - - // Test write lock. - _, err = tk.Exec("lock tables t1 write") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk2.MustExec("unlock tables") - tk.MustExec("lock tables t1 write") - tk.MustQuery("select * from t1") - tk.MustExec("delete from t1") - tk.MustExec("insert into t1 set a=1") - - _, err = tk2.Exec("select * from t1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("insert into t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("lock tables t1 write") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - - // Test write local lock. - tk.MustExec("lock tables t1 write local") - tk.MustQuery("select * from t1") - tk.MustExec("delete from t1") - tk.MustExec("insert into t1 set a=1") - - tk2.MustQuery("select * from t1") - _, err = tk2.Exec("delete from t1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("insert into t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("lock tables t1 write") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("lock tables t1 read") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - - // Test none unique table. - _, err = tk.Exec("lock tables t1 read, t1 write") - c.Assert(terror.ErrorEqual(err, infoschema.ErrNonuniqTable), IsTrue) - - // Test lock table by other session in transaction and commit without retry. - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - tk.MustExec("set @@session.tidb_disable_txn_auto_retry=1") - tk.MustExec("begin") - tk.MustExec("insert into t1 set a=1") - tk2.MustExec("lock tables t1 write") - _, err = tk.Exec("commit") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "previous statement: insert into t1 set a=1: [domain:8028]Information schema is changed during the execution of the statement(for example, table definition may be updated by other DDL ran in parallel). If you see this error often, try increasing `tidb_max_delta_schema_count`. [try again later]") - - // Test lock table by other session in transaction and commit with retry. - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - tk.MustExec("set @@session.tidb_disable_txn_auto_retry=0") - tk.MustExec("begin") - tk.MustExec("insert into t1 set a=1") - tk2.MustExec("lock tables t1 write") - _, err = tk.Exec("commit") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue, Commentf("err: %v\n", err)) - - // Test for lock the same table multiple times. - tk2.MustExec("lock tables t1 write") - tk2.MustExec("lock tables t1 write, t2 read") - - // Test lock tables and drop tables - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - tk.MustExec("lock tables t1 write, t2 write") - tk.MustExec("drop table t1") - tk2.MustExec("create table t1 (a int)") - tk.MustExec("lock tables t1 write, t2 read") - - // Test lock tables and drop database. - tk.MustExec("unlock tables") - tk.MustExec("create database test_lock") - tk.MustExec("create table test_lock.t3 (a int)") - tk.MustExec("lock tables t1 write, test_lock.t3 write") - tk2.MustExec("create table t3 (a int)") - tk.MustExec("lock tables t1 write, t3 write") - tk.MustExec("drop table t3") - - // Test lock tables and truncate tables. - tk.MustExec("unlock tables") - tk.MustExec("lock tables t1 write, t2 read") - tk.MustExec("truncate table t1") - tk.MustExec("insert into t1 set a=1") - _, err = tk2.Exec("insert into t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - - // Test for lock unsupported schema tables. - _, err = tk2.Exec("lock tables performance_schema.global_status write") - c.Assert(terror.ErrorEqual(err, infoschema.ErrAccessDenied), IsTrue) - _, err = tk2.Exec("lock tables information_schema.tables write") - c.Assert(terror.ErrorEqual(err, infoschema.ErrAccessDenied), IsTrue) - _, err = tk2.Exec("lock tables mysql.db write") - c.Assert(terror.ErrorEqual(err, infoschema.ErrAccessDenied), IsTrue) - - // Test create table/view when session is holding the table locks. - tk.MustExec("unlock tables") - tk.MustExec("lock tables t1 write, t2 read") - _, err = tk.Exec("create table t3 (a int)") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableNotLocked), IsTrue) - _, err = tk.Exec("create view v1 as select * from t1;") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableNotLocked), IsTrue) - - // Test for locking view was not supported. - tk.MustExec("unlock tables") - tk.MustExec("create view v1 as select * from t1;") - _, err = tk.Exec("lock tables v1 read") - c.Assert(terror.ErrorEqual(err, table.ErrUnsupportedOp), IsTrue) - - // Test for locking sequence was not supported. - tk.MustExec("unlock tables") - tk.MustExec("create sequence seq") - _, err = tk.Exec("lock tables seq read") - c.Assert(terror.ErrorEqual(err, table.ErrUnsupportedOp), IsTrue) - tk.MustExec("drop sequence seq") - - // Test for create/drop/alter database when session is holding the table locks. - tk.MustExec("unlock tables") - tk.MustExec("lock table t1 write") - _, err = tk.Exec("drop database test") - c.Assert(terror.ErrorEqual(err, table.ErrLockOrActiveTransaction), IsTrue) - _, err = tk.Exec("create database test_lock") - c.Assert(terror.ErrorEqual(err, table.ErrLockOrActiveTransaction), IsTrue) - _, err = tk.Exec("alter database test charset='utf8mb4'") - c.Assert(terror.ErrorEqual(err, table.ErrLockOrActiveTransaction), IsTrue) - // Test alter/drop database when other session is holding the table locks of the database. - tk2.MustExec("create database test_lock2") - _, err = tk2.Exec("drop database test") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("alter database test charset='utf8mb4'") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - - // Test for admin cleanup table locks. - tk.MustExec("unlock tables") - tk.MustExec("lock table t1 write, t2 write") - _, err = tk2.Exec("lock tables t1 write, t2 read") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk2.MustExec("admin cleanup table lock t1,t2") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) - checkTableLock(c, tk.Se, "test", "t2", model.TableLockNone) - // cleanup unlocked table. - tk2.MustExec("admin cleanup table lock t1,t2") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) - checkTableLock(c, tk.Se, "test", "t2", model.TableLockNone) - tk2.MustExec("lock tables t1 write, t2 read") - checkTableLock(c, tk2.Se, "test", "t1", model.TableLockWrite) - checkTableLock(c, tk2.Se, "test", "t2", model.TableLockRead) - - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") -} - -func (s *testDBSuite2) TestTablesLockDelayClean(c *C) { - if israce.RaceEnabled { - c.Skip("skip race test") - } - tk := testkit.NewTestKit(c, s.store) - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - tk.MustExec("use test") - tk.MustExec("drop table if exists t1,t2") - defer tk.MustExec("drop table if exists t1,t2") - tk.MustExec("create table t1 (a int)") - tk.MustExec("create table t2 (a int)") - - tk.MustExec("lock tables t1 write") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockWrite) - config.UpdateGlobal(func(conf *config.Config) { - conf.DelayCleanTableLock = 100 - }) - var wg sync.WaitGroup - wg.Add(1) - var startTime time.Time - go func() { - startTime = time.Now() - tk.Se.Close() - wg.Done() - }() - time.Sleep(50 * time.Millisecond) - checkTableLock(c, tk.Se, "test", "t1", model.TableLockWrite) - wg.Wait() - c.Assert(time.Since(startTime).Seconds() > 0.1, IsTrue) - checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) - config.UpdateGlobal(func(conf *config.Config) { - conf.DelayCleanTableLock = 0 - }) -} - -// TestConcurrentLockTables test concurrent lock/unlock tables. -func (s *testDBSuite4) TestConcurrentLockTables(c *C) { - if israce.RaceEnabled { - c.Skip("skip race test") - } - tk := testkit.NewTestKit(c, s.store) - tk2 := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - defer tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int)") - tk2.MustExec("use test") - - // Test concurrent lock tables read. - sql1 := "lock tables t1 read" - sql2 := "lock tables t1 read" - s.testParallelExecSQL(c, sql1, sql2, tk.Se, tk2.Se, func(c *C, err1, err2 error) { - c.Assert(err1, IsNil) - c.Assert(err2, IsNil) - }) - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - - // Test concurrent lock tables write. - sql1 = "lock tables t1 write" - sql2 = "lock tables t1 write" - s.testParallelExecSQL(c, sql1, sql2, tk.Se, tk2.Se, func(c *C, err1, err2 error) { - c.Assert(err1, IsNil) - c.Assert(terror.ErrorEqual(err2, infoschema.ErrTableLocked), IsTrue) - }) - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") - - // Test concurrent lock tables write local. - sql1 = "lock tables t1 write local" - sql2 = "lock tables t1 write local" - s.testParallelExecSQL(c, sql1, sql2, tk.Se, tk2.Se, func(c *C, err1, err2 error) { - c.Assert(err1, IsNil) - c.Assert(terror.ErrorEqual(err2, infoschema.ErrTableLocked), IsTrue) - }) - - tk.MustExec("unlock tables") - tk2.MustExec("unlock tables") -} - -func (s *testDBSuite4) TestLockTableReadOnly(c *C) { - if israce.RaceEnabled { - c.Skip("skip race test") - } - tk := testkit.NewTestKit(c, s.store) - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - - tk.MustExec("use test") - tk.MustExec("drop table if exists t1,t2") - defer func() { - tk.MustExec("alter table t1 read write") - tk.MustExec("alter table t2 read write") - tk.MustExec("drop table if exists t1,t2") - }() - tk.MustExec("create table t1 (a int key, b int)") - tk.MustExec("create table t2 (a int key)") - - tk.MustExec("alter table t1 read only") - tk.MustQuery("select * from t1") - tk2.MustQuery("select * from t1") - _, err := tk.Exec("insert into t1 set a=1, b=2") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk.Exec("update t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk.Exec("delete from t1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - - _, err = tk2.Exec("insert into t1 set a=1, b=2") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("update t1 set a=1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - _, err = tk2.Exec("delete from t1") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk2.MustExec("alter table t1 read only") - _, err = tk2.Exec("insert into t1 set a=1, b=2") - c.Assert(terror.ErrorEqual(err, infoschema.ErrTableLocked), IsTrue) - tk.MustExec("alter table t1 read write") - - tk.MustExec("lock tables t1 read") - c.Assert(terror.ErrorEqual(tk.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked), IsTrue) - c.Assert(terror.ErrorEqual(tk2.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked), IsTrue) - tk.MustExec("lock tables t1 write") - c.Assert(terror.ErrorEqual(tk.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked), IsTrue) - c.Assert(terror.ErrorEqual(tk2.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked), IsTrue) - tk.MustExec("lock tables t1 write local") - c.Assert(terror.ErrorEqual(tk.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked), IsTrue) - c.Assert(terror.ErrorEqual(tk2.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked), IsTrue) - tk.MustExec("unlock tables") - - tk.MustExec("alter table t1 read only") - c.Assert(terror.ErrorEqual(tk.ExecToErr("lock tables t1 read"), infoschema.ErrTableLocked), IsTrue) - c.Assert(terror.ErrorEqual(tk2.ExecToErr("lock tables t1 read"), infoschema.ErrTableLocked), IsTrue) - c.Assert(terror.ErrorEqual(tk.ExecToErr("lock tables t1 write"), infoschema.ErrTableLocked), IsTrue) - c.Assert(terror.ErrorEqual(tk2.ExecToErr("lock tables t1 write"), infoschema.ErrTableLocked), IsTrue) - c.Assert(terror.ErrorEqual(tk.ExecToErr("lock tables t1 write local"), infoschema.ErrTableLocked), IsTrue) - c.Assert(terror.ErrorEqual(tk2.ExecToErr("lock tables t1 write local"), infoschema.ErrTableLocked), IsTrue) - tk.MustExec("admin cleanup table lock t1") - tk2.MustExec("insert into t1 set a=1, b=2") - - tk.MustExec("set tidb_enable_amend_pessimistic_txn = 1") - tk.MustExec("begin pessimistic") - tk.MustQuery("select * from t1 where a = 1").Check(testkit.Rows("1 2")) - tk2.MustExec("update t1 set b = 3") - tk2.MustExec("alter table t1 read only") - tk2.MustQuery("select * from t1 where a = 1").Check(testkit.Rows("1 3")) - tk.MustQuery("select * from t1 where a = 1").Check(testkit.Rows("1 2")) - tk.MustExec("update t1 set b = 4") - c.Assert(terror.ErrorEqual(tk.ExecToErr("commit"), domain.ErrInfoSchemaChanged), IsTrue) - tk2.MustExec("alter table t1 read write") -} - -type checkRet func(c *C, err1, err2 error) - -func (s *testDBSuite4) testParallelExecSQL(c *C, sql1, sql2 string, se1, se2 session.Session, f checkRet) { - callback := &ddl.TestDDLCallback{} - times := 0 - callback.OnJobRunBeforeExported = func(job *model.Job) { - if times != 0 { - return - } - var qLen int - for { - err := kv.RunInNewTxn(context.Background(), s.store, false, func(ctx context.Context, txn kv.Transaction) error { - jobs, err1 := admin.GetDDLJobs(txn) - if err1 != nil { - return err1 - } - qLen = len(jobs) - return nil - }) - c.Assert(err, IsNil) - if qLen == 2 { - break - } - time.Sleep(5 * time.Millisecond) - } - times++ - } - d := s.dom.DDL() - originalCallback := d.GetHook() - defer d.(ddl.DDLForTest).SetHook(originalCallback) - d.(ddl.DDLForTest).SetHook(callback) - - var wg util.WaitGroupWrapper - var err1 error - var err2 error - ch := make(chan struct{}) - // Make sure the sql1 is put into the DDLJobQueue. - go func() { - var qLen int - for { - err := kv.RunInNewTxn(context.Background(), s.store, false, func(ctx context.Context, txn kv.Transaction) error { - jobs, err3 := admin.GetDDLJobs(txn) - if err3 != nil { - return err3 - } - qLen = len(jobs) - return nil - }) - c.Assert(err, IsNil) - if qLen == 1 { - // Make sure sql2 is executed after the sql1. - close(ch) - break - } - time.Sleep(5 * time.Millisecond) - } - }() - wg.Run(func() { - _, err1 = se1.Execute(context.Background(), sql1) - }) - wg.Run(func() { - <-ch - _, err2 = se2.Execute(context.Background(), sql2) - }) - - wg.Wait() - f(c, err1, err2) -} - -func checkTableLock(c *C, se session.Session, dbName, tableName string, lockTp model.TableLockType) { - tb := testGetTableByName(c, se, dbName, tableName) - dom := domain.GetDomain(se) - err := dom.Reload() - c.Assert(err, IsNil) - if lockTp != model.TableLockNone { - c.Assert(tb.Meta().Lock, NotNil) - c.Assert(tb.Meta().Lock.Tp, Equals, lockTp) - c.Assert(tb.Meta().Lock.State, Equals, model.TableLockStatePublic) - c.Assert(len(tb.Meta().Lock.Sessions) == 1, IsTrue) - c.Assert(tb.Meta().Lock.Sessions[0].ServerID, Equals, dom.DDL().GetID()) - c.Assert(tb.Meta().Lock.Sessions[0].SessionID, Equals, se.GetSessionVars().ConnectionID) - } else { - c.Assert(tb.Meta().Lock, IsNil) - } -} - -func (s *testDBSuite2) TestDDLWithInvalidTableInfo(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - defer tk.MustExec("drop table if exists t") - // Test create with invalid expression. - _, err := tk.Exec(`CREATE TABLE t ( - c0 int(11) , - c1 int(11), - c2 decimal(16,4) GENERATED ALWAYS AS ((case when (c0 = 0) then 0when (c0 > 0) then (c1 / c0) end)) - );`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 4 column 88 near \"then (c1 / c0) end))\n\t);\" ") - - tk.MustExec("create table t (a bigint, b int, c int generated always as (b+1)) partition by hash(a) partitions 4;") - // Test drop partition column. - _, err = tk.Exec("alter table t drop column a;") - c.Assert(err, NotNil) - // TODO: refine the error message to compatible with MySQL - c.Assert(err.Error(), Equals, "[planner:1054]Unknown column 'a' in 'expression'") - // Test modify column with invalid expression. - _, err = tk.Exec("alter table t modify column c int GENERATED ALWAYS AS ((case when (a = 0) then 0when (a > 0) then (b / a) end));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 97 near \"then (b / a) end));\" ") - // Test add column with invalid expression. - _, err = tk.Exec("alter table t add column d int GENERATED ALWAYS AS ((case when (a = 0) then 0when (a > 0) then (b / a) end));") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 94 near \"then (b / a) end));\" ") -} - -func (s *testDBSuite4) TestColumnCheck(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("drop table if exists column_check") - tk.MustExec("create table column_check (pk int primary key, a int check (a > 1))") - defer tk.MustExec("drop table if exists column_check") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|8231|CONSTRAINT CHECK is not supported")) -} - -func (s *testDBSuite5) TestAlterCheck(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("drop table if exists alter_check") - tk.MustExec("create table alter_check (pk int primary key)") - defer tk.MustExec("drop table if exists alter_check") - tk.MustExec("alter table alter_check alter check crcn ENFORCED") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|8231|ALTER CHECK is not supported")) -} - -func (s *testDBSuite6) TestDropCheck(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("drop table if exists drop_check") - tk.MustExec("create table drop_check (pk int primary key)") - defer tk.MustExec("drop table if exists drop_check") - tk.MustExec("alter table drop_check drop check crcn") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|8231|DROP CHECK is not supported")) -} - -func (s *testDBSuite7) TestAddConstraintCheck(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("drop table if exists add_constraint_check") - tk.MustExec("create table add_constraint_check (pk int primary key, a int)") - defer tk.MustExec("drop table if exists add_constraint_check") - tk.MustExec("alter table add_constraint_check add constraint crn check (a > 1)") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|8231|ADD CONSTRAINT CHECK is not supported")) -} - -func (s *testDBSuite7) TestCreateTableIngoreCheckConstraint(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("drop table if exists table_constraint_check") - tk.MustExec("CREATE TABLE admin_user (enable bool, CHECK (enable IN (0, 1)));") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|8231|CONSTRAINT CHECK is not supported")) - tk.MustQuery("show create table admin_user").Check(testutil.RowsWithSep("|", ""+ - "admin_user CREATE TABLE `admin_user` (\n"+ - " `enable` tinyint(1) DEFAULT NULL\n"+ - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) -} - -func (s *testDBSuite6) TestAlterOrderBy(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use " + s.schemaName) - tk.MustExec("create table ob (pk int primary key, c int default 1, c1 int default 1, KEY cl(c1))") - - // Test order by with primary key - tk.MustExec("alter table ob order by c") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1105|ORDER BY ignored as there is a user-defined clustered index in the table 'ob'")) - - // Test order by with no primary key - tk.MustExec("drop table if exists ob") - tk.MustExec("create table ob (c int default 1, c1 int default 1, KEY cl(c1))") - tk.MustExec("alter table ob order by c") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(0)) - tk.MustExec("drop table if exists ob") -} - -func (s *testSerialDBSuite) TestDDLJobErrorCount(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists ddl_error_table, new_ddl_error_table") - tk.MustExec("create table ddl_error_table(a int)") - is := s.dom.InfoSchema() - schemaName := model.NewCIStr("test") - tableName := model.NewCIStr("ddl_error_table") - schema, ok := is.SchemaByName(schemaName) - c.Assert(ok, IsTrue) - tbl, err := is.TableByName(schemaName, tableName) - c.Assert(err, IsNil) - - newTableName := model.NewCIStr("new_ddl_error_table") - job := &model.Job{ - SchemaID: schema.ID, - TableID: tbl.Meta().ID, - SchemaName: schema.Name.L, - Type: model.ActionRenameTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{schema.ID, newTableName}, - } - - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockErrEntrySizeTooLarge", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/mockErrEntrySizeTooLarge"), IsNil) - }() - - txn, err := s.store.Begin() - c.Assert(err, IsNil) - t := meta.NewMeta(txn) - job.ID, err = t.GenGlobalID() - c.Assert(err, IsNil) - job.Version = 1 - job.StartTS = txn.StartTS() - - err = t.EnQueueDDLJob(job) - c.Assert(err, IsNil) - err = txn.Commit(context.Background()) - c.Assert(err, IsNil) - - ticker := time.NewTicker(s.lease) - defer ticker.Stop() - for range ticker.C { - historyJob, err := getHistoryDDLJob(s.store, job.ID) - c.Assert(err, IsNil) - if historyJob == nil { - continue - } - c.Assert(historyJob.ErrorCount, Equals, int64(1), Commentf("%v", historyJob)) - kv.ErrEntryTooLarge.Equal(historyJob.Error) - break - } -} - -func (s *testDBSuite1) TestAlterTableWithValidation(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - defer tk.MustExec("drop table if exists t1") - - tk.MustExec("create table t1 (c1 int, c2 int as (c1 + 1));") - - // Test for alter table with validation. - tk.MustExec("alter table t1 with validation") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|8200|ALTER TABLE WITH VALIDATION is currently unsupported")) - - // Test for alter table without validation. - tk.MustExec("alter table t1 without validation") - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|8200|ALTER TABLE WITHOUT VALIDATION is currently unsupported")) -} - -func (s *testSerialDBSuite) TestCommitTxnWithIndexChange(c *C) { - // Prepare work. - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("set tidb_enable_amend_pessimistic_txn = 1;") - tk.MustExec("drop database if exists test_db") - tk.MustExec("create database test_db") - tk.MustExec("use test_db") - tk.MustExec("create table t1 (c1 int primary key, c2 int, c3 int, index ok2(c2))") - tk.MustExec("insert t1 values (1, 10, 100), (2, 20, 200)") - tk.MustExec("alter table t1 add index k2(c2)") - tk.MustExec("alter table t1 drop index k2") - tk.MustExec("alter table t1 add index k2(c2)") - tk.MustExec("alter table t1 drop index k2") - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test_db") - - // tkSQLs are the sql statements for the pessimistic transaction. - // tk2DDL are the ddl statements executed before the pessimistic transaction. - // idxDDL is the DDL statement executed between pessimistic transaction begin and commit. - // failCommit means the pessimistic transaction commit should fail not. - type caseUnit struct { - tkSQLs []string - tk2DDL []string - idxDDL string - checkSQLs []string - rowsExps [][]string - failCommit bool - stateEnd model.SchemaState - } - - cases := []caseUnit{ - // Test secondary index - {[]string{"insert into t1 values(3, 30, 300)", - "insert into t2 values(11, 11, 11)"}, - []string{"alter table t1 add index k2(c2)", - "alter table t1 drop index k2", - "alter table t1 add index kk2(c2, c1)", - "alter table t1 add index k2(c2)", - "alter table t1 drop index k2"}, - "alter table t1 add index k2(c2)", - []string{"select c3, c2 from t1 use index(k2) where c2 = 20", - "select c3, c2 from t1 use index(k2) where c2 = 10", - "select * from t1", - "select * from t2 where c1 = 11"}, - [][]string{{"200 20"}, - {"100 10"}, - {"1 10 100", "2 20 200", "3 30 300"}, - {"11 11 11"}}, - false, - model.StateNone}, - // Test secondary index - {[]string{"insert into t2 values(5, 50, 500)", - "insert into t2 values(11, 11, 11)", - "delete from t2 where c2 = 11", - "update t2 set c2 = 110 where c1 = 11"}, - // "update t2 set c1 = 10 where c3 = 100"}, - []string{"alter table t1 add index k2(c2)", - "alter table t1 drop index k2", - "alter table t1 add index kk2(c2, c1)", - "alter table t1 add index k2(c2)", - "alter table t1 drop index k2"}, - "alter table t1 add index k2(c2)", - []string{"select c3, c2 from t1 use index(k2) where c2 = 20", - "select c3, c2 from t1 use index(k2) where c2 = 10", - "select * from t1", - "select * from t2 where c1 = 11", - "select * from t2 where c3 = 100"}, - [][]string{{"200 20"}, - {"100 10"}, - {"1 10 100", "2 20 200"}, - {}, - {"1 10 100"}}, - false, - model.StateNone}, - // Test unique index - {[]string{"insert into t1 values(3, 30, 300)", - "insert into t1 values(4, 40, 400)", - "insert into t2 values(11, 11, 11)", - "insert into t2 values(12, 12, 11)"}, - []string{"alter table t1 add unique index uk3(c3)", - "alter table t1 drop index uk3", - "alter table t2 add unique index ukc1c3(c1, c3)", - "alter table t2 add unique index ukc3(c3)", - "alter table t2 drop index ukc1c3", - "alter table t2 drop index ukc3", - "alter table t2 add index kc3(c3)"}, - "alter table t1 add unique index uk3(c3)", - []string{"select c3, c2 from t1 use index(uk3) where c3 = 200", - "select c3, c2 from t1 use index(uk3) where c3 = 300", - "select c3, c2 from t1 use index(uk3) where c3 = 400", - "select * from t1", - "select * from t2"}, - [][]string{{"200 20"}, - {"300 30"}, - {"400 40"}, - {"1 10 100", "2 20 200", "3 30 300", "4 40 400"}, - {"1 10 100", "2 20 200", "11 11 11", "12 12 11"}}, - false, model.StateNone}, - // Test unique index fail to commit, this case needs the new index could be inserted - {[]string{"insert into t1 values(3, 30, 300)", - "insert into t1 values(4, 40, 300)", - "insert into t2 values(11, 11, 11)", - "insert into t2 values(12, 11, 12)"}, - //[]string{"alter table t1 add unique index uk3(c3)", "alter table t1 drop index uk3"}, - []string{}, - "alter table t1 add unique index uk3(c3)", - []string{"select c3, c2 from t1 use index(uk3) where c3 = 200", - "select c3, c2 from t1 use index(uk3) where c3 = 300", - "select c3, c2 from t1 where c1 = 4", - "select * from t1", - "select * from t2"}, - [][]string{{"200 20"}, - {}, - {}, - {"1 10 100", "2 20 200"}, - {"1 10 100", "2 20 200"}}, - true, - model.StateWriteOnly}, - } - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 10 100", "2 20 200")) - - // Test add index state change - do := s.dom.DDL() - startStates := []model.SchemaState{model.StateNone, model.StateDeleteOnly} - for _, startState := range startStates { - endStatMap := session.ConstOpAddIndex[startState] - var endStates []model.SchemaState - for st := range endStatMap { - endStates = append(endStates, st) - } - sort.Slice(endStates, func(i, j int) bool { return endStates[i] < endStates[j] }) - for _, endState := range endStates { - for _, curCase := range cases { - if endState < curCase.stateEnd { - break - } - tk2.MustExec("drop table if exists t1") - tk2.MustExec("drop table if exists t2") - tk2.MustExec("create table t1 (c1 int primary key, c2 int, c3 int, index ok2(c2))") - tk2.MustExec("create table t2 (c1 int primary key, c2 int, c3 int, index ok2(c2))") - tk2.MustExec("insert t1 values (1, 10, 100), (2, 20, 200)") - tk2.MustExec("insert t2 values (1, 10, 100), (2, 20, 200)") - tk2.MustQuery("select * from t1;").Check(testkit.Rows("1 10 100", "2 20 200")) - tk.MustQuery("select * from t1;").Check(testkit.Rows("1 10 100", "2 20 200")) - tk.MustQuery("select * from t2;").Check(testkit.Rows("1 10 100", "2 20 200")) - - for _, DDLSQL := range curCase.tk2DDL { - tk2.MustExec(DDLSQL) - } - hook := &ddl.TestDDLCallback{} - prepared := false - committed := false - hook.OnJobUpdatedExported = func(job *model.Job) { - if job.SchemaState == startState { - if !prepared { - tk.MustExec("begin pessimistic") - for _, tkSQL := range curCase.tkSQLs { - tk.MustExec(tkSQL) - } - prepared = true - } - } else if job.SchemaState == endState { - if !committed { - if curCase.failCommit { - _, err := tk.Exec("commit") - c.Assert(err, NotNil) - } else { - tk.MustExec("commit") - } - } - committed = true - } - } - originalCallback := do.GetHook() - do.(ddl.DDLForTest).SetHook(hook) - tk2.MustExec(curCase.idxDDL) - do.(ddl.DDLForTest).SetHook(originalCallback) - tk2.MustExec("admin check table t1") - for i, checkSQL := range curCase.checkSQLs { - if len(curCase.rowsExps[i]) > 0 { - tk2.MustQuery(checkSQL).Check(testkit.Rows(curCase.rowsExps[i]...)) - } else { - tk2.MustQuery(checkSQL).Check(nil) - } - } - } - } - } - tk.MustExec("admin check table t1") -} - -// TestAddIndexFailOnCaseWhenCanExit is used to close #19325. -func (s *testSerialDBSuite) TestAddIndexFailOnCaseWhenCanExit(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/MockCaseWhenParseFailure", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/MockCaseWhenParseFailure"), IsNil) - }() - tk := testkit.NewTestKit(c, s.store) - originalVal := variable.GetDDLErrorCountLimit() - tk.MustExec("set @@global.tidb_ddl_error_count_limit = 1") - defer tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_error_count_limit = %d", originalVal)) - - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int, b int)") - tk.MustExec("insert into t values(1, 1)") - _, err := tk.Exec("alter table t add index idx(b)") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:-1]DDL job rollback, error msg: job.ErrCount:1, mock unknown type: ast.whenClause.") - tk.MustExec("drop table if exists t") -} - -func init() { - // Make sure it will only be executed once. - domain.SchemaOutOfDateRetryInterval.Store(50 * time.Millisecond) - domain.SchemaOutOfDateRetryTimes.Store(50) -} - -func (s *testSerialDBSuite) TestCreateTableWithIntegerLengthWaring(c *C) { - // Inject the strict-integer-display-width variable in parser directly. - parsertypes.TiDBStrictIntegerDisplayWidth = true - defer func() { - parsertypes.TiDBStrictIntegerDisplayWidth = false - }() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - - tk.MustExec("create table t(a tinyint(1))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a smallint(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a mediumint(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a bigint(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a integer(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int1(1))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int2(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int3(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int4(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int8(2))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - - tk.MustExec("drop table if exists t") -} - -func (s *testSerialDBSuite) TestColumnTypeChangeGenUniqueChangingName(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - - hook := &ddl.TestDDLCallback{} - var checkErr error - assertChangingColName := "_col$_c2_0" - assertChangingIdxName := "_idx$_idx_0" - hook.OnJobUpdatedExported = func(job *model.Job) { - if job.SchemaState == model.StateDeleteOnly && job.Type == model.ActionModifyColumn { - var ( - newCol *model.ColumnInfo - oldColName *model.CIStr - modifyColumnTp byte - updatedAutoRandomBits uint64 - changingCol *model.ColumnInfo - changingIdxs []*model.IndexInfo - ) - pos := &ast.ColumnPosition{} - err := job.DecodeArgs(&newCol, &oldColName, pos, &modifyColumnTp, &updatedAutoRandomBits, &changingCol, &changingIdxs) - if err != nil { - checkErr = err - return - } - if changingCol.Name.L != assertChangingColName { - checkErr = errors.New("changing column name is incorrect") - } else if changingIdxs[0].Name.L != assertChangingIdxName { - checkErr = errors.New("changing index name is incorrect") - } - } - } - d := s.dom.DDL() - originHook := d.GetHook() - d.(ddl.DDLForTest).SetHook(hook) - defer d.(ddl.DDLForTest).SetHook(originHook) - - tk.MustExec("create table if not exists t(c1 varchar(256), c2 bigint, `_col$_c2` varchar(10), unique _idx$_idx(c1), unique idx(c2));") - tk.MustExec("alter table test.t change column c2 cC2 tinyint after `_col$_c2`") - c.Assert(checkErr, IsNil) - - t := testGetTableByName(c, tk.Se, "test", "t") - c.Assert(len(t.Meta().Columns), Equals, 3) - c.Assert(t.Meta().Columns[0].Name.O, Equals, "c1") - c.Assert(t.Meta().Columns[0].Offset, Equals, 0) - c.Assert(t.Meta().Columns[1].Name.O, Equals, "_col$_c2") - c.Assert(t.Meta().Columns[1].Offset, Equals, 1) - c.Assert(t.Meta().Columns[2].Name.O, Equals, "cC2") - c.Assert(t.Meta().Columns[2].Offset, Equals, 2) - - c.Assert(len(t.Meta().Indices), Equals, 2) - c.Assert(t.Meta().Indices[0].Name.O, Equals, "_idx$_idx") - c.Assert(t.Meta().Indices[1].Name.O, Equals, "idx") - - c.Assert(len(t.Meta().Indices[0].Columns), Equals, 1) - c.Assert(t.Meta().Indices[0].Columns[0].Name.O, Equals, "c1") - c.Assert(t.Meta().Indices[0].Columns[0].Offset, Equals, 0) - - c.Assert(len(t.Meta().Indices[1].Columns), Equals, 1) - c.Assert(t.Meta().Indices[1].Columns[0].Name.O, Equals, "cC2") - c.Assert(t.Meta().Indices[1].Columns[0].Offset, Equals, 2) - - assertChangingColName1 := "_col$__col$_c1_1" - assertChangingColName2 := "_col$__col$__col$_c1_0_1" - query1 := "alter table t modify column _col$_c1 tinyint" - query2 := "alter table t modify column _col$__col$_c1_0 tinyint" - hook.OnJobUpdatedExported = func(job *model.Job) { - if (job.Query == query1 || job.Query == query2) && job.SchemaState == model.StateDeleteOnly && job.Type == model.ActionModifyColumn { - var ( - newCol *model.ColumnInfo - oldColName *model.CIStr - modifyColumnTp byte - updatedAutoRandomBits uint64 - changingCol *model.ColumnInfo - changingIdxs []*model.IndexInfo - ) - pos := &ast.ColumnPosition{} - err := job.DecodeArgs(&newCol, &oldColName, pos, &modifyColumnTp, &updatedAutoRandomBits, &changingCol, &changingIdxs) - if err != nil { - checkErr = err - return - } - if job.Query == query1 && changingCol.Name.L != assertChangingColName1 { - checkErr = errors.New("changing column name is incorrect") - } - if job.Query == query2 && changingCol.Name.L != assertChangingColName2 { - checkErr = errors.New("changing column name is incorrect") - } - } - } - d.(ddl.DDLForTest).SetHook(hook) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table if not exists t(c1 bigint, _col$_c1 bigint, _col$__col$_c1_0 bigint, _col$__col$__col$_c1_0_0 bigint)") - tk.MustExec("alter table t modify column c1 tinyint") - tk.MustExec("alter table t modify column _col$_c1 tinyint") - c.Assert(checkErr, IsNil) - tk.MustExec("alter table t modify column _col$__col$_c1_0 tinyint") - c.Assert(checkErr, IsNil) - tk.MustExec("alter table t change column _col$__col$__col$_c1_0_0 _col$__col$__col$_c1_0_0 tinyint") - - t = testGetTableByName(c, tk.Se, "test", "t") - c.Assert(len(t.Meta().Columns), Equals, 4) - c.Assert(t.Meta().Columns[0].Name.O, Equals, "c1") - c.Assert(t.Meta().Columns[0].Tp, Equals, mysql.TypeTiny) - c.Assert(t.Meta().Columns[0].Offset, Equals, 0) - c.Assert(t.Meta().Columns[1].Name.O, Equals, "_col$_c1") - c.Assert(t.Meta().Columns[1].Tp, Equals, mysql.TypeTiny) - c.Assert(t.Meta().Columns[1].Offset, Equals, 1) - c.Assert(t.Meta().Columns[2].Name.O, Equals, "_col$__col$_c1_0") - c.Assert(t.Meta().Columns[2].Tp, Equals, mysql.TypeTiny) - c.Assert(t.Meta().Columns[2].Offset, Equals, 2) - c.Assert(t.Meta().Columns[3].Name.O, Equals, "_col$__col$__col$_c1_0_0") - c.Assert(t.Meta().Columns[3].Tp, Equals, mysql.TypeTiny) - c.Assert(t.Meta().Columns[3].Offset, Equals, 3) - - tk.MustExec("drop table if exists t") -} - -func (s *testSerialDBSuite) TestModifyColumnTypeWithWarnings(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - // Test normal warnings. - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a decimal(5,2))") - tk.MustExec("insert into t values(111.22),(111.22),(111.22),(111.22),(333.4)") - // 111.22 will be truncated the fraction .22 as .2 with truncated warning for each row. - tk.MustExec("alter table t modify column a decimal(4,1)") - // there should 4 rows of warnings corresponding to the origin rows. - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1292 Truncated incorrect DECIMAL value: '111.22'", - "Warning 1292 Truncated incorrect DECIMAL value: '111.22'", - "Warning 1292 Truncated incorrect DECIMAL value: '111.22'", - "Warning 1292 Truncated incorrect DECIMAL value: '111.22'")) - - // Test the strict warnings is treated as errors under the strict mode. - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a decimal(5,2))") - tk.MustExec("insert into t values(111.22),(111.22),(111.22),(33.4)") - // Since modify column a from decimal(5,2) to decimal(3,1), the first three rows with 111.22 will overflows the target types. - _, err := tk.Exec("alter table t modify column a decimal(3,1)") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[types:1690]DECIMAL value is out of range in '(3, 1)'") - - // Test the strict warnings is treated as warnings under the non-strict mode. - tk.MustExec("set @@sql_mode=\"\"") - tk.MustExec("alter table t modify column a decimal(3,1)") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1690 DECIMAL value is out of range in '(3, 1)'", - "Warning 1690 DECIMAL value is out of range in '(3, 1)'", - "Warning 1690 DECIMAL value is out of range in '(3, 1)'")) -} - -// TestModifyColumnTypeWhenInterception is to test modifying column type with warnings intercepted by -// reorg timeout, not owner error and so on. -func (s *testSerialDBSuite) TestModifyColumnTypeWhenInterception(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - // Test normal warnings. - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int primary key, b decimal(4,2))") - - count := defaultBatchSize * 4 - // Add some rows. - dml := "insert into t values" - for i := 1; i <= count; i++ { - dml += fmt.Sprintf("(%d, %f)", i, 11.22) - if i != count { - dml += "," - } - } - tk.MustExec(dml) - // Make the regions scale like: [1, 1024), [1024, 2048), [2048, 3072), [3072, 4096] - tk.MustQuery("split table t between(0) and (4096) regions 4") - - d := s.dom.DDL() - hook := &ddl.TestDDLCallback{} - var checkMiddleWarningCount bool - var checkMiddleAddedCount bool - // Since the `DefTiDBDDLReorgWorkerCount` is 4, every worker will be assigned with one region - // for the first time. Here we mock the insert failure/reorg timeout in region [2048, 3072) - // which will lead next handle be set to 2048 and partial warnings be stored into ddl job. - // Since the existence of reorg batch size, only the last reorg batch [2816, 3072) of kv - // range [2048, 3072) fail to commit, the rest of them all committed successfully. So the - // addedCount and warnings count in the job are all equal to `4096 - reorg batch size`. - // In the next round of this ddl job, the last reorg batch will be finished. - var middleWarningsCount = int64(defaultBatchSize*4 - defaultReorgBatchSize) - hook.OnJobUpdatedExported = func(job *model.Job) { - if job.SchemaState == model.StateWriteReorganization || job.SnapshotVer != 0 { - if len(job.ReorgMeta.WarningsCount) == len(job.ReorgMeta.Warnings) { - for _, v := range job.ReorgMeta.WarningsCount { - if v == middleWarningsCount { - checkMiddleWarningCount = true - } - } - } - if job.RowCount == middleWarningsCount { - checkMiddleAddedCount = true - } - } - } - originHook := d.GetHook() - d.(ddl.DDLForTest).SetHook(hook) - defer d.(ddl.DDLForTest).SetHook(originHook) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/MockReorgTimeoutInOneRegion", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/MockReorgTimeoutInOneRegion"), IsNil) - }() - tk.MustExec("alter table t modify column b decimal(3,1)") - c.Assert(checkMiddleWarningCount, Equals, true) - c.Assert(checkMiddleAddedCount, Equals, true) - res := tk.MustQuery("show warnings") - c.Assert(len(res.Rows()), Equals, count) -} - -func (s *testDBSuite4) TestGeneratedColumnWindowFunction(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("DROP TABLE IF EXISTS t") - tk.MustGetErrCode("CREATE TABLE t (a INT , b INT as (ROW_NUMBER() OVER (ORDER BY a)))", errno.ErrWindowInvalidWindowFuncUse) - tk.MustGetErrCode("CREATE TABLE t (a INT , index idx ((ROW_NUMBER() OVER (ORDER BY a))))", errno.ErrWindowInvalidWindowFuncUse) -} - -func (s *testDBSuite4) TestAnonymousIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("DROP TABLE IF EXISTS t") - tk.MustExec("create table t(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb int, b int);") - tk.MustExec("alter table t add index bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb(b);") - tk.MustExec("alter table t add index (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb);") - res := tk.MustQuery("show index from t where key_name='bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';") - c.Assert(len(res.Rows()), Equals, 1) - res = tk.MustQuery("show index from t where key_name='bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb_2';") - c.Assert(len(res.Rows()), Equals, 1) -} - -func (s *testDBSuite4) TestUnsupportedAlterTableOption(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("DROP TABLE IF EXISTS t") - tk.MustExec("create table t(a char(10) not null,b char(20)) shard_row_id_bits=6;") - tk.MustGetErrCode("alter table t pre_split_regions=6;", errno.ErrUnsupportedDDLOperation) -} - -func (s *testDBSuite4) TestCreateTableWithDecimalWithDoubleZero(c *C) { - tk := testkit.NewTestKit(c, s.store) - - checkType := func(db, table, field string) { - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - tableInfo, err := is.TableByName(model.NewCIStr(db), model.NewCIStr(table)) - c.Assert(err, IsNil) - tblInfo := tableInfo.Meta() - for _, col := range tblInfo.Columns { - if col.Name.L == field { - c.Assert(col.Flen, Equals, 10) - } - } - } - - tk.MustExec("use test") - tk.MustExec("drop table if exists tt") - tk.MustExec("create table tt(d decimal(0, 0))") - checkType("test", "tt", "d") - - tk.MustExec("drop table tt") - tk.MustExec("create table tt(a int)") - tk.MustExec("alter table tt add column d decimal(0, 0)") - checkType("test", "tt", "d") - - /* - Currently not support change column to decimal - tk.MustExec("drop table tt") - tk.MustExec("create table tt(d int)") - tk.MustExec("alter table tt change column d d decimal(0, 0)") - checkType("test", "tt", "d") - */ -} - -func (s *testDBSuite4) TestIssue22207(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("set @@session.tidb_enable_list_partition = ON") - tk.MustExec("set @@session.tidb_enable_exchange_partition = 1;") - tk.MustExec("drop table if exists t1;") - tk.MustExec("drop table if exists t2;") - tk.MustExec("create table t1(id char(10)) partition by list columns(id) (partition p0 values in ('a'), partition p1 values in ('b'));") - tk.MustExec("insert into t1 VALUES('a')") - tk.MustExec("create table t2(id char(10));") - tk.MustExec("ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;") - tk.MustQuery("select * from t2").Check(testkit.Rows("a")) - c.Assert(len(tk.MustQuery("select * from t1").Rows()), Equals, 0) - - tk.MustExec("drop table if exists t1;") - tk.MustExec("drop table if exists t2;") - tk.MustExec("create table t1 (id int) partition by list (id) (partition p0 values in (1,2,3), partition p1 values in (4,5,6));") - tk.MustExec("insert into t1 VALUES(1);") - tk.MustExec("insert into t1 VALUES(2);") - tk.MustExec("insert into t1 VALUES(3);") - tk.MustExec("create table t2(id int);") - tk.MustExec("ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;") - tk.MustQuery("select * from t2").Check(testkit.Rows("1", "2", "3")) - c.Assert(len(tk.MustQuery("select * from t1").Rows()), Equals, 0) - tk.MustExec("set @@session.tidb_enable_exchange_partition = 0;") -} - -func (s *testDBSuite5) TestIssue23473(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t_23473;") - tk.MustExec("create table t_23473 (k int primary key, v int)") - tk.MustExec("alter table t_23473 change column k k bigint") - t := testGetTableByName(c, tk.Se.(sessionctx.Context), "test", "t_23473") - col1Flag := t.Cols()[0].Flag - c.Assert(mysql.HasNoDefaultValueFlag(col1Flag), IsTrue) -} - -func (s *testSerialDBSuite) TestIssue22819(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("use test;") - tk1.MustExec("drop table if exists t1;") - defer func() { - tk1.MustExec("drop table if exists t1;") - }() - - tk1.MustExec("create table t1 (v int) partition by hash (v) partitions 2") - tk1.MustExec("insert into t1 values (1)") - - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test;") - tk1.MustExec("begin") - tk1.MustExec("update t1 set v = 2 where v = 1") - - tk2.MustExec("alter table t1 truncate partition p0") - - _, err := tk1.Exec("commit") - c.Assert(err, ErrorMatches, ".*8028.*Information schema is changed during the execution of the statement.*") -} - -func (s *testSerialSuite) TestTruncateAllPartitions(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("use test;") - tk1.MustExec("drop table if exists partition_table;") - defer func() { - tk1.MustExec("drop table if exists partition_table;") - }() - tk1.MustExec("create table partition_table (v int) partition by hash (v) partitions 10;") - tk1.MustExec("insert into partition_table values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);") - tk1.MustExec("alter table partition_table truncate partition all;") - tk1.MustQuery("select count(*) from partition_table;").Check(testkit.Rows("0")) -} - -func (s *testSerialSuite) TestIssue23872(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists test_create_table;") - defer tk.MustExec("drop table if exists test_create_table;") - tk.MustExec("create table test_create_table(id smallint,id1 int, primary key (id));") - rs, err := tk.Exec("select * from test_create_table;") - c.Assert(err, IsNil) - cols := rs.Fields() - err = rs.Close() - c.Assert(err, IsNil) - expectFlag := uint16(mysql.NotNullFlag | mysql.PriKeyFlag | mysql.NoDefaultValueFlag) - c.Assert(cols[0].Column.Flag, Equals, uint(expectFlag)) - tk.MustExec("create table t(a int default 1, primary key(a));") - defer tk.MustExec("drop table if exists t;") - rs1, err := tk.Exec("select * from t;") - c.Assert(err, IsNil) - cols1 := rs1.Fields() - err = rs1.Close() - c.Assert(err, IsNil) - expectFlag1 := uint16(mysql.NotNullFlag | mysql.PriKeyFlag) - c.Assert(cols1[0].Column.Flag, Equals, uint(expectFlag1)) -} - -// Close issue #23321. -// See https://github.com/pingcap/tidb/issues/23321 -func (s *testSerialDBSuite) TestJsonUnmarshalErrWhenPanicInCancellingPath(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - tk.MustExec("drop table if exists test_add_index_after_add_col") - tk.MustExec("create table test_add_index_after_add_col(a int, b int not null default '0');") - tk.MustExec("insert into test_add_index_after_add_col values(1, 2),(2,2);") - tk.MustExec("alter table test_add_index_after_add_col add column c int not null default '0';") - - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockExceedErrorLimit", `return(true)`), IsNil) - defer c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/mockExceedErrorLimit"), IsNil) - - _, err := tk.Exec("alter table test_add_index_after_add_col add unique index cc(c);") - c.Assert(err.Error(), Equals, "[kv:1062]Duplicate entry '0' for key 'cc'") -} - -// Close issue #24172. -// See https://github.com/pingcap/tidb/issues/24172 -func (s *testSerialDBSuite) TestCancelJobWriteConflict(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk1 := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(id int)") - - var cancelErr error - var rs []sqlexec.RecordSet - hook := &ddl.TestDDLCallback{} - d := s.dom.DDL() - originalHook := d.GetHook() - d.(ddl.DDLForTest).SetHook(hook) - defer d.(ddl.DDLForTest).SetHook(originalHook) - - // Test when cancelling cannot be retried and adding index succeeds. - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { - stmt := fmt.Sprintf("admin cancel ddl jobs %d", job.ID) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/kv/mockCommitErrorInNewTxn", `return("no_retry")`), IsNil) - defer func() { c.Assert(failpoint.Disable("github.com/pingcap/tidb/kv/mockCommitErrorInNewTxn"), IsNil) }() - rs, cancelErr = tk1.Se.Execute(context.Background(), stmt) - } - } - tk.MustExec("alter table t add index (id)") - c.Assert(cancelErr.Error(), Equals, "mock commit error") - - // Test when cancelling is retried only once and adding index is cancelled in the end. - var jobID int64 - hook.OnJobRunBeforeExported = func(job *model.Job) { - if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { - jobID = job.ID - stmt := fmt.Sprintf("admin cancel ddl jobs %d", job.ID) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/kv/mockCommitErrorInNewTxn", `return("retry_once")`), IsNil) - defer func() { c.Assert(failpoint.Disable("github.com/pingcap/tidb/kv/mockCommitErrorInNewTxn"), IsNil) }() - rs, cancelErr = tk1.Se.Execute(context.Background(), stmt) - } - } - tk.MustGetErrCode("alter table t add index (id)", errno.ErrCancelledDDLJob) - c.Assert(cancelErr, IsNil) - result := tk1.ResultSetToResultWithCtx(context.Background(), rs[0], Commentf("cancel ddl job fails")) - result.Check(testkit.Rows(fmt.Sprintf("%d successful", jobID))) -} - -// For Close issue #24288 -// see https://github.com/pingcap/tidb/issues/24288 -func (s *testDBSuite8) TestDdlMaxLimitOfIdentifier(c *C) { - tk := testkit.NewTestKit(c, s.store) - - // create/drop database test - longDbName := strings.Repeat("库", mysql.MaxDatabaseNameLength-1) - tk.MustExec(fmt.Sprintf("create database %s", longDbName)) - defer func() { - tk.MustExec(fmt.Sprintf("drop database %s", longDbName)) - }() - tk.MustExec(fmt.Sprintf("use %s", longDbName)) - - // create/drop table,index test - longTblName := strings.Repeat("表", mysql.MaxTableNameLength-1) - longColName := strings.Repeat("三", mysql.MaxColumnNameLength-1) - longIdxName := strings.Repeat("索", mysql.MaxIndexIdentifierLen-1) - tk.MustExec(fmt.Sprintf("create table %s(f1 int primary key,f2 int, %s varchar(50))", longTblName, longColName)) - tk.MustExec(fmt.Sprintf("create index %s on %s(%s)", longIdxName, longTblName, longColName)) - defer func() { - tk.MustExec(fmt.Sprintf("drop index %s on %s", longIdxName, longTblName)) - tk.MustExec(fmt.Sprintf("drop table %s", longTblName)) - }() - - // alter table - tk.MustExec(fmt.Sprintf("alter table %s change f2 %s int", longTblName, strings.Repeat("二", mysql.MaxColumnNameLength-1))) - -} - -func testDropIndexes(c *C, store kv.Storage, lease time.Duration, createSQL, dropIdxSQL string, idxNames []string) { - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists test_drop_indexes") - tk.MustExec(createSQL) - done := make(chan error, 1) + tk2.MustExec("drop table if exists t1") + tk2.MustExec("drop table if exists t2") + tk2.MustExec("create table t1 (c1 int primary key, c2 int, c3 int, index ok2(c2))") + tk2.MustExec("create table t2 (c1 int primary key, c2 int, c3 int, index ok2(c2))") + tk2.MustExec("insert t1 values (1, 10, 100), (2, 20, 200)") + tk2.MustExec("insert t2 values (1, 10, 100), (2, 20, 200)") + tk2.MustQuery("select * from t1;").Check(testkit.Rows("1 10 100", "2 20 200")) + tk.MustQuery("select * from t1;").Check(testkit.Rows("1 10 100", "2 20 200")) + tk.MustQuery("select * from t2;").Check(testkit.Rows("1 10 100", "2 20 200")) - num := 100 - // add some rows - for i := 0; i < num; i++ { - tk.MustExec("insert into test_drop_indexes values (?, ?, ?)", i, i, i) - } - ctx := tk.Se.(sessionctx.Context) - idxIDs := make([]int64, 0, 3) - for _, idxName := range idxNames { - idxIDs = append(idxIDs, testGetIndexID(c, ctx, "test_db", "test_drop_indexes", idxName)) - } - jobIDExt, resetHook := setupJobIDExtCallback(ctx) - defer resetHook() - testddlutil.SessionExecInGoroutine(store, dropIdxSQL, done) - - ticker := time.NewTicker(lease / 2) - defer ticker.Stop() -LOOP: - for { - select { - case err := <-done: - if err == nil { - break LOOP - } - c.Assert(err, IsNil, Commentf("err:%v", errors.ErrorStack(err))) - case <-ticker.C: - step := 5 - // delete some rows, and add some data - for i := num; i < num+step; i++ { - n := rand.Intn(num) - tk.MustExec("update test_drop_indexes set c2 = 1 where c1 = ?", n) - tk.MustExec("insert into test_drop_indexes values (?, ?, ?)", i, i, i) + for _, DDLSQL := range curCase.tk2DDL { + tk2.MustExec(DDLSQL) + } + hook := &ddl.TestDDLCallback{} + prepared := false + committed := false + hook.OnJobUpdatedExported = func(job *model.Job) { + if job.SchemaState == startState { + if !prepared { + tk.MustExec("begin pessimistic") + for _, tkSQL := range curCase.tkSQLs { + tk.MustExec(tkSQL) + } + prepared = true + } + } else if job.SchemaState == endState { + if !committed { + if curCase.failCommit { + err := tk.ExecToErr("commit") + require.Error(t, err) + } else { + tk.MustExec("commit") + } + } + committed = true + } + } + originalCallback := do.GetHook() + do.SetHook(hook) + tk2.MustExec(curCase.idxDDL) + do.SetHook(originalCallback) + tk2.MustExec("admin check table t1") + for i, checkSQL := range curCase.checkSQLs { + if len(curCase.rowsExps[i]) > 0 { + tk2.MustQuery(checkSQL).Check(testkit.Rows(curCase.rowsExps[i]...)) + } else { + tk2.MustQuery(checkSQL).Check(nil) + } + } } - num += step } } - for _, idxID := range idxIDs { - checkDelRangeAdded(tk, jobIDExt.jobID, idxID) - } + tk.MustExec("admin check table t1") } -func testCancelDropIndexes(c *C, store kv.Storage, d ddl.DDL) { - indexesName := []string{"idx_c1", "idx_c2"} - addIdxesSQL := "alter table t add index idx_c1 (c1);alter table t add index idx_c2 (c2);" - dropIdxesSQL := "alter table t drop index idx_c1;alter table t drop index idx_c2;" +// TestAddIndexFailOnCaseWhenCanExit is used to close #19325. +func TestAddIndexFailOnCaseWhenCanExit(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockCaseWhenParseFailure", `return(true)`)) + defer func() { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockCaseWhenParseFailure")) }() + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) + originalVal := variable.GetDDLErrorCountLimit() + tk.MustExec("set @@global.tidb_ddl_error_count_limit = 1") + defer tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_error_count_limit = %d", originalVal)) - tk := testkit.NewTestKit(c, store) - tk.MustExec("use test_db") + tk.MustExec("use test") tk.MustExec("drop table if exists t") - tk.MustExec("create table t(c1 int, c2 int)") - defer tk.MustExec("drop table t;") - for i := 0; i < 5; i++ { - tk.MustExec("insert into t values (?, ?)", i, i) - } - testCases := []struct { - needAddIndex bool - jobState model.JobState - JobSchemaState model.SchemaState - cancelSucc bool - }{ - // model.JobStateNone means the jobs is canceled before the first run. - // if we cancel successfully, we need to set needAddIndex to false in the next test case. Otherwise, set needAddIndex to true. - {true, model.JobStateNone, model.StateNone, true}, - {false, model.JobStateRunning, model.StateWriteOnly, false}, - {true, model.JobStateRunning, model.StateDeleteOnly, false}, - {true, model.JobStateRunning, model.StateDeleteReorganization, false}, - } - var checkErr error - hook := &ddl.TestDDLCallback{} - var jobID int64 - testCase := &testCases[0] - hook.OnJobRunBeforeExported = func(job *model.Job) { - if (job.Type == model.ActionDropIndex || job.Type == model.ActionDropPrimaryKey) && - job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { - jobID = job.ID - jobIDs := []int64{job.ID} - hookCtx := mock.NewContext() - hookCtx.Store = store - err := hookCtx.NewTxn(context.TODO()) - if err != nil { - checkErr = errors.Trace(err) - return - } - txn, err := hookCtx.Txn(true) - if err != nil { - checkErr = errors.Trace(err) - return - } + tk.MustExec("create table t(a int, b int)") + tk.MustExec("insert into t values(1, 1)") + tk.MustGetErrMsg("alter table t add index idx(b)", "[ddl:-1]DDL job rollback, error msg: job.ErrCount:1, mock unknown type: ast.whenClause.") + tk.MustExec("drop table if exists t") +} - errs, err := admin.CancelJobs(txn, jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return - } - if errs[0] != nil { - checkErr = errors.Trace(errs[0]) - return - } - checkErr = txn.Commit(context.Background()) - } - } - originalHook := d.GetHook() - d.(ddl.DDLForTest).SetHook(hook) - ctx := tk.Se.(sessionctx.Context) - for i := range testCases { - testCase = &testCases[i] - if testCase.needAddIndex { - tk.MustExec(addIdxesSQL) - } - rs, err := tk.Exec(dropIdxesSQL) - if rs != nil { - rs.Close() - } - t := testGetTableByName(c, ctx, "test_db", "t") +func TestCreateTableWithIntegerLengthWaring(t *testing.T) { + // Inject the strict-integer-display-width variable in parser directly. + parsertypes.TiDBStrictIntegerDisplayWidth = true + defer func() { parsertypes.TiDBStrictIntegerDisplayWidth = false }() + store, clean := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") - var indexInfos []*model.IndexInfo - for _, idxName := range indexesName { - indexInfo := t.Meta().FindIndexByName(idxName) - if indexInfo != nil { - indexInfos = append(indexInfos, indexInfo) - } - } + tk.MustExec("create table t(a tinyint(1))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - if testCase.cancelSucc { - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8214]Cancelled DDL job") - c.Assert(indexInfos, NotNil) - c.Assert(indexInfos[0].State, Equals, model.StatePublic) - } else { - err1 := admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID) - c.Assert(err, IsNil) - c.Assert(checkErr, NotNil) - c.Assert(checkErr.Error(), Equals, err1.Error()) - c.Assert(indexInfos, IsNil) - } - } - d.(ddl.DDLForTest).SetHook(originalHook) - tk.MustExec(addIdxesSQL) - tk.MustExec(dropIdxesSQL) -} + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a smallint(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) -func testDropIndexesIfExists(c *C, store kv.Storage) { - tk := testkit.NewTestKitWithInit(c, store) - tk.MustExec("use test_db;") - tk.MustExec("drop table if exists test_drop_indexes_if_exists;") - tk.MustExec("create table test_drop_indexes_if_exists (id int, c1 int, c2 int, primary key(id), key i1(c1), key i2(c2));") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - // Drop different indexes. - tk.MustGetErrMsg( - "alter table test_drop_indexes_if_exists drop index i1, drop index i3;", - "[ddl:1091]index i3 doesn't exist", - ) - if _, err := tk.Exec("alter table test_drop_indexes_if_exists drop index i1, drop index if exists i3;"); true { - c.Assert(err, IsNil) - } - tk.MustQuery("show warnings;").Check( - testutil.RowsWithSep("|", "Warning|1091|index i3 doesn't exist"), - ) + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a mediumint(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - // Verify the impact of deletion order when dropping duplicate indexes. - tk.MustGetErrMsg( - "alter table test_drop_indexes_if_exists drop index i2, drop index i2;", - "[ddl:1091]index i2 doesn't exist", - ) - tk.MustGetErrMsg( - "alter table test_drop_indexes_if_exists drop index if exists i2, drop index i2;", - "[ddl:1091]index i2 doesn't exist", - ) - if _, err := tk.Exec("alter table test_drop_indexes_if_exists drop index i2, drop index if exists i2;"); true { - c.Assert(err, IsNil) - } - tk.MustQuery("show warnings;").Check( - testutil.RowsWithSep("|", "Warning|1091|index i2 doesn't exist"), - ) -} + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a bigint(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) -func testDropIndexesFromPartitionedTable(c *C, store kv.Storage) { - tk := testkit.NewTestKitWithInit(c, store) - tk.MustExec("use test_db;") - tk.MustExec("drop table if exists test_drop_indexes_from_partitioned_table;") - tk.MustExec(` - create table test_drop_indexes_from_partitioned_table (id int, c1 int, c2 int, primary key(id), key i1(c1), key i2(c2)) - partition by range(id) (partition p0 values less than (6), partition p1 values less than maxvalue); - `) - for i := 0; i < 20; i++ { - tk.MustExec("insert into test_drop_indexes_from_partitioned_table values (?, ?, ?)", i, i, i) - } - if _, err := tk.Exec("alter table test_drop_indexes_from_partitioned_table drop index i1, drop index if exists i2;"); true { - c.Assert(err, IsNil) - } -} + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a integer(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) -func (s *testDBSuite5) TestDropIndexes(c *C) { - // drop multiple indexes - createSQL := "create table test_drop_indexes (id int, c1 int, c2 int, primary key(id), key i1(c1), key i2(c2));" - dropIdxSQL := "alter table test_drop_indexes drop index i1, drop index i2;" - idxNames := []string{"i1", "i2"} - testDropIndexes(c, s.store, s.lease, createSQL, dropIdxSQL, idxNames) - - createSQL = "create table test_drop_indexes (id int, c1 int, c2 int, primary key(id) nonclustered, unique key i1(c1), key i2(c2));" - dropIdxSQL = "alter table test_drop_indexes drop primary key, drop index i1;" - idxNames = []string{"primary", "i1"} - testDropIndexes(c, s.store, s.lease, createSQL, dropIdxSQL, idxNames) - - createSQL = "create table test_drop_indexes (uuid varchar(32), c1 int, c2 int, primary key(uuid), unique key i1(c1), key i2(c2));" - dropIdxSQL = "alter table test_drop_indexes drop primary key, drop index i1, drop index i2;" - idxNames = []string{"primary", "i1", "i2"} - testDropIndexes(c, s.store, s.lease, createSQL, dropIdxSQL, idxNames) - - testDropIndexesIfExists(c, s.store) - testDropIndexesFromPartitionedTable(c, s.store) - testCancelDropIndexes(c, s.store, s.dom.DDL()) -} + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int1(1))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) -// Close issue #24580. -// See https://github.com/pingcap/tidb/issues/24580 -func (s *testDBSuite8) TestIssue24580(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a char(250) default null);") - tk.MustExec("insert into t values();") + tk.MustExec("create table t(a int2(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - _, err := tk.Exec("alter table t modify a char not null;") - c.Assert(err.Error(), Equals, "[ddl:1265]Data truncated for column 'a' at row 1") tk.MustExec("drop table if exists t") -} + tk.MustExec("create table t(a int3(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) -// Close issue #27862 https://github.com/pingcap/tidb/issues/27862 -// Ref: https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html#data-types-storage-reqs-strings -// text(100) in utf8mb4 charset needs max 400 byte length, thus tinytext is not enough. -func (s *testDBSuite8) TestCreateTextAdjustLen(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a text(100));") - tk.MustQuery("show create table t").Check(testutil.RowsWithSep("|", ""+ - "t CREATE TABLE `t` (\n"+ - " `a` text DEFAULT NULL\n"+ - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("alter table t add b text(100);") - tk.MustExec("alter table t add c text;") - tk.MustExec("alter table t add d text(50);") - tk.MustExec("alter table t change column a a text(50);") - tk.MustQuery("show create table t").Check(testutil.RowsWithSep("|", ""+ - "t CREATE TABLE `t` (\n"+ - " `a` tinytext DEFAULT NULL,\n"+ - " `b` text DEFAULT NULL,\n"+ - " `c` text DEFAULT NULL,\n"+ - " `d` tinytext DEFAULT NULL\n"+ - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("create table t(a int4(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int8(2))") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use [parser:1681]Integer display width is deprecated and will be removed in a future release.")) - // Ref: https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html - // TINYBLOB, TINYTEXT L + 1 bytes, where L < 2^8 - // BLOB, TEXT L + 2 bytes, where L < 2^16 - // MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2^24 - // LONGBLOB, LONGTEXT L + 4 bytes, where L < 2^32 - tk.MustExec("alter table t change column d d text(100);") - tk.MustExec("alter table t change column c c text(30000);") - tk.MustExec("alter table t change column b b text(10000000);") - tk.MustQuery("show create table t").Check(testutil.RowsWithSep("|", ""+ - "t CREATE TABLE `t` (\n"+ - " `a` tinytext DEFAULT NULL,\n"+ - " `b` longtext DEFAULT NULL,\n"+ - " `c` mediumtext DEFAULT NULL,\n"+ - " `d` text DEFAULT NULL\n"+ - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) tk.MustExec("drop table if exists t") } -func (s *testDBSuite2) TestBatchCreateTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists tables_1") - tk.MustExec("drop table if exists tables_2") - tk.MustExec("drop table if exists tables_3") - - d := s.dom.DDL() - infos := []*model.TableInfo{} - infos = append(infos, &model.TableInfo{ - Name: model.NewCIStr("tables_1"), - }) - infos = append(infos, &model.TableInfo{ - Name: model.NewCIStr("tables_2"), - }) - infos = append(infos, &model.TableInfo{ - Name: model.NewCIStr("tables_3"), - }) +// Close issue #24172. +// See https://github.com/pingcap/tidb/issues/24172 +func TestCancelJobWriteConflict(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + defer clean() - // correct name - err := d.BatchCreateTableWithInfo(tk.Se, model.NewCIStr("test"), infos, ddl.OnExistError) - c.Check(err, IsNil) - - tk.MustQuery("show tables like '%tables_%'").Check(testkit.Rows("tables_1", "tables_2", "tables_3")) - job := tk.MustQuery("admin show ddl jobs").Rows()[0] - c.Assert(job[1], Equals, "test") - c.Assert(job[2], Equals, "tables_1,tables_2,tables_3") - c.Assert(job[3], Equals, "create tables") - c.Assert(job[4], Equals, "public") - // FIXME: we must change column type to give multiple id - // c.Assert(job[6], Matches, "[^,]+,[^,]+,[^,]+") - - // duplicated name - infos[1].Name = model.NewCIStr("tables_1") - err = d.BatchCreateTableWithInfo(tk.Se, model.NewCIStr("test"), infos, ddl.OnExistError) - c.Check(terror.ErrorEqual(err, infoschema.ErrTableExists), IsTrue) - - newinfo := &model.TableInfo{ - Name: model.NewCIStr("tables_4"), - } - { - colNum := 2 - cols := make([]*model.ColumnInfo, colNum) - viewCols := make([]model.CIStr, colNum) - var stmtBuffer bytes.Buffer - stmtBuffer.WriteString("SELECT ") - for i := range cols { - col := &model.ColumnInfo{ - Name: model.NewCIStr(fmt.Sprintf("c%d", i+1)), - Offset: i, - State: model.StatePublic, - } - cols[i] = col - viewCols[i] = col.Name - stmtBuffer.WriteString(cols[i].Name.L + ",") - } - stmtBuffer.WriteString("1 FROM t") - newinfo.Columns = cols - newinfo.View = &model.ViewInfo{Cols: viewCols, Security: model.SecurityDefiner, Algorithm: model.AlgorithmMerge, SelectStmt: stmtBuffer.String(), CheckOption: model.CheckOptionCascaded, Definer: &auth.UserIdentity{CurrentUser: true}} - } + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) - err = d.BatchCreateTableWithInfo(tk.Se, model.NewCIStr("test"), []*model.TableInfo{newinfo}, ddl.OnExistError) - c.Check(err, IsNil) -} + tk1.MustExec("use test") -func (s *testSerialDBSuite) TestAddGeneratedColumnAndInsert(c *C) { - // For issue #31735. - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test_db") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int, unique kye(a))") - tk.MustExec("insert into t1 value (1), (10)") + tk1.MustExec("create table t(id int)") - var checkErr error - tk1 := testkit.NewTestKit(c, s.store) - _, checkErr = tk1.Exec("use test_db") + var cancelErr error + var rs []sqlexec.RecordSet + hook := &ddl.TestDDLCallback{} + d := dom.DDL() + originalHook := d.GetHook() + d.SetHook(hook) + defer d.SetHook(originalHook) - d := s.dom.DDL() - hook := &ddl.TestDDLCallback{Do: s.dom} - ctx := mock.NewContext() - ctx.Store = s.store - times := 0 - hook.OnJobUpdatedExported = func(job *model.Job) { - if checkErr != nil { - return - } - switch job.SchemaState { - case model.StateDeleteOnly: - _, checkErr = tk1.Exec("insert into t1 values (1) on duplicate key update a=a+1") - if checkErr == nil { - _, checkErr = tk1.Exec("replace into t1 values (2)") - } - case model.StateWriteOnly: - _, checkErr = tk1.Exec("insert into t1 values (2) on duplicate key update a=a+1") - if checkErr == nil { - _, checkErr = tk1.Exec("replace into t1 values (3)") - } - case model.StateWriteReorganization: - if checkErr == nil && job.SchemaState == model.StateWriteReorganization && times == 0 { - _, checkErr = tk1.Exec("insert into t1 values (3) on duplicate key update a=a+1") - if checkErr == nil { - _, checkErr = tk1.Exec("replace into t1 values (4)") - } - times++ - } + // Test when cancelling cannot be retried and adding index succeeds. + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { + stmt := fmt.Sprintf("admin cancel ddl jobs %d", job.ID) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/kv/mockCommitErrorInNewTxn", `return("no_retry")`)) + defer func() { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/kv/mockCommitErrorInNewTxn")) }() + rs, cancelErr = tk2.Session().Execute(context.Background(), stmt) } } - d.(ddl.DDLForTest).SetHook(hook) - - tk.MustExec("alter table t1 add column gc int as ((a+1))") - tk.MustQuery("select * from t1 order by a").Check(testkit.Rows("4 5", "10 11")) - c.Assert(checkErr, IsNil) -} - -func (s *testDBSuite1) TestGetTimeZone(c *C) { - tk := testkit.NewTestKit(c, s.store) + tk1.MustExec("alter table t add index (id)") + require.EqualError(t, cancelErr, "mock commit error") - testCases := []struct { - tzSQL string - tzStr string - tzName string - offset int - err string - }{ - {"set time_zone = '+00:00'", "", "UTC", 0, ""}, - {"set time_zone = '-00:00'", "", "UTC", 0, ""}, - {"set time_zone = 'UTC'", "UTC", "UTC", 0, ""}, - {"set time_zone = '+05:00'", "", "UTC", 18000, ""}, - {"set time_zone = '-08:00'", "", "UTC", -28800, ""}, - {"set time_zone = '+08:00'", "", "UTC", 28800, ""}, - {"set time_zone = 'Asia/Shanghai'", "Asia/Shanghai", "Asia/Shanghai", 0, ""}, - {"set time_zone = 'SYSTEM'", "Asia/Shanghai", "Asia/Shanghai", 0, ""}, - {"set time_zone = DEFAULT", "Asia/Shanghai", "Asia/Shanghai", 0, ""}, - {"set time_zone = 'GMT'", "GMT", "GMT", 0, ""}, - {"set time_zone = 'GMT+1'", "GMT", "GMT", 0, "[variable:1298]Unknown or incorrect time zone: 'GMT+1'"}, - {"set time_zone = 'Etc/GMT+12'", "Etc/GMT+12", "Etc/GMT+12", 0, ""}, - {"set time_zone = 'Etc/GMT-12'", "Etc/GMT-12", "Etc/GMT-12", 0, ""}, - {"set time_zone = 'EST'", "EST", "EST", 0, ""}, - {"set time_zone = 'Australia/Lord_Howe'", "Australia/Lord_Howe", "Australia/Lord_Howe", 0, ""}, - } - for _, tc := range testCases { - err := tk.ExecToErr(tc.tzSQL) - if err != nil { - c.Assert(err.Error(), Equals, tc.err) - } else { - c.Assert(tc.err, Equals, "") + // Test when cancelling is retried only once and adding index is cancelled in the end. + var jobID int64 + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { + jobID = job.ID + stmt := fmt.Sprintf("admin cancel ddl jobs %d", job.ID) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/kv/mockCommitErrorInNewTxn", `return("retry_once")`)) + defer func() { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/kv/mockCommitErrorInNewTxn")) }() + rs, cancelErr = tk2.Session().Execute(context.Background(), stmt) } - c.Assert(tk.Se.GetSessionVars().TimeZone.String(), Equals, tc.tzStr, Commentf("sql: %s", tc.tzSQL)) - tz, offset := ddlutil.GetTimeZone(tk.Se) - c.Assert(tc.tzName, Equals, tz, Commentf("sql: %s, offset: %d", tc.tzSQL, offset)) - c.Assert(tc.offset, Equals, offset, Commentf("sql: %s", tc.tzSQL)) } -} - -// for issue #30328 -func (s *testDBSuite5) TestTooBigFieldLengthAutoConvert(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - err := tk.ExecToErr("create table i30328_1(a varbinary(70000), b varchar(70000000))") - c.Assert(types.ErrTooBigFieldLength.Equal(err), IsTrue) - - // save previous sql_mode and change - r := tk.MustQuery("select @@sql_mode") - defer func(sqlMode string) { - tk.MustExec("set @@sql_mode= '" + sqlMode + "'") - tk.MustExec("drop table if exists i30328_1") - tk.MustExec("drop table if exists i30328_2") - }(r.Rows()[0][0].(string)) - tk.MustExec("set @@sql_mode='NO_ENGINE_SUBSTITUTION'") - - tk.MustExec("create table i30328_1(a varbinary(70000), b varchar(70000000))") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1246 Converting column 'a' from VARBINARY to BLOB", "Warning 1246 Converting column 'b' from VARCHAR to TEXT")) - tk.MustExec("create table i30328_2(a varchar(200))") - tk.MustExec("alter table i30328_2 modify a varchar(70000000);") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1246 Converting column 'a' from VARCHAR to TEXT")) + tk1.MustGetErrCode("alter table t add index (id)", errno.ErrCancelledDDLJob) + require.NoError(t, cancelErr) + result := tk2.ResultSetToResultWithCtx(context.Background(), rs[0], "cancel ddl job fails") + result.Check(testkit.Rows(fmt.Sprintf("%d successful", jobID))) } diff --git a/ddl/ddl.go b/ddl/ddl.go index b66e9fd0c4b7c..273e0007b98bb 100644 --- a/ddl/ddl.go +++ b/ddl/ddl.go @@ -29,7 +29,6 @@ import ( "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/failpoint" - pumpcli "github.com/pingcap/tidb-tools/tidb-binlog/pump_client" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/infoschema" @@ -37,6 +36,7 @@ import ( "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/owner" + "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" @@ -45,6 +45,7 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics/handle" "github.com/pingcap/tidb/table" + pumpcli "github.com/pingcap/tidb/tidb-binlog/pump_client" goutil "github.com/pingcap/tidb/util" tidbutil "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/gcutil" @@ -96,7 +97,7 @@ var ( // DDL is responsible for updating schema in data store and maintaining in-memory InfoSchema cache. type DDL interface { CreateSchema(ctx sessionctx.Context, schema model.CIStr, charsetInfo *ast.CharsetOpt, placementPolicyRef *model.PolicyRefInfo) error - AlterSchema(ctx sessionctx.Context, stmt *ast.AlterDatabaseStmt) error + AlterSchema(sctx sessionctx.Context, stmt *ast.AlterDatabaseStmt) error DropSchema(ctx sessionctx.Context, schema model.CIStr) error CreateTable(ctx sessionctx.Context, stmt *ast.CreateTableStmt) error CreateView(ctx sessionctx.Context, stmt *ast.CreateViewStmt) error @@ -147,6 +148,12 @@ type DDL interface { info []*model.TableInfo, onExist OnExist) error + // CreatePlacementPolicyWithInfo creates a placement policy + // + // WARNING: the DDL owns the `policy` after calling this function, and will modify its fields + // in-place. If you want to keep using `policy`, please call Clone() first. + CreatePlacementPolicyWithInfo(ctx sessionctx.Context, policy *model.PolicyInfo, onExist OnExist) error + // Start campaigns the owner and starts workers. // ctxPool is used for the worker's delRangeManager and creates sessions. Start(ctxPool *pools.ResourcePool) error @@ -174,6 +181,8 @@ type DDL interface { GetHook() Callback // SetHook sets the hook. SetHook(h Callback) + // DoDDLJob does the DDL job, it's exported for test. + DoDDLJob(ctx sessionctx.Context, job *model.Job) error } type limitJobTask struct { @@ -488,6 +497,18 @@ func (d *ddl) genGlobalIDs(count int) ([]int64, error) { return ret, err } +func (d *ddl) genPlacementPolicyID() (int64, error) { + var ret int64 + err := kv.RunInNewTxn(context.Background(), d.store, true, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + var err error + ret, err = m.GenPlacementPolicyID() + return err + }) + + return ret, err +} + // SchemaSyncer implements DDL.SchemaSyncer interface. func (d *ddl) SchemaSyncer() util.SchemaSyncer { return d.schemaSyncer @@ -592,13 +613,85 @@ func recordLastDDLInfo(ctx sessionctx.Context, job *model.Job) { ctx.GetSessionVars().LastDDLInfo.SeqNum = job.SeqNum } -// doDDLJob will return +// DoDDLJob will return +func checkHistoryJobInTest(ctx sessionctx.Context, historyJob *model.Job) { + if !(flag.Lookup("test.v") != nil || flag.Lookup("check.v") != nil) { + return + } + + // Check binlog. + if historyJob.BinlogInfo.FinishedTS == 0 { + panic(fmt.Sprintf("job ID %d, BinlogInfo.FinishedTS is 0", historyJob.ID)) + } + + // Check DDL query. + switch historyJob.Type { + case model.ActionUpdateTiFlashReplicaStatus, model.ActionUnlockTable: + if historyJob.Query != "" { + panic(fmt.Sprintf("job ID %d, type %s, query %s", historyJob.ID, historyJob.Type.String(), historyJob.Query)) + } + return + default: + if historyJob.Query == "skip" { + // Skip the check if the test explicitly set the query. + return + } + } + p := parser.New() + p.SetSQLMode(ctx.GetSessionVars().SQLMode) + p.SetParserConfig(ctx.GetSessionVars().BuildParserConfig()) + stmt, _, err := p.ParseSQL(historyJob.Query) + if err != nil { + panic(fmt.Sprintf("job ID %d, parse ddl job failed, query %s, err %s", historyJob.ID, historyJob.Query, err.Error())) + } + if len(stmt) != 1 && historyJob.Type != model.ActionCreateTables { + panic(fmt.Sprintf("job ID %d, parse ddl job failed, query %s", historyJob.ID, historyJob.Query)) + } + for _, st := range stmt { + switch historyJob.Type { + case model.ActionCreatePlacementPolicy: + if _, ok := st.(*ast.CreatePlacementPolicyStmt); !ok { + panic(fmt.Sprintf("job ID %d, parse ddl job failed, query %s", historyJob.ID, historyJob.Query)) + } + case model.ActionCreateTable: + if _, ok := st.(*ast.CreateTableStmt); !ok { + panic(fmt.Sprintf("job ID %d, parse ddl job failed, query %s", historyJob.ID, historyJob.Query)) + } + case model.ActionCreateSchema: + if _, ok := st.(*ast.CreateDatabaseStmt); !ok { + panic(fmt.Sprintf("job ID %d, parse ddl job failed, query %s", historyJob.ID, historyJob.Query)) + } + case model.ActionCreateTables: + _, isCreateTable := st.(*ast.CreateTableStmt) + _, isCreateSeq := st.(*ast.CreateSequenceStmt) + _, isCreateView := st.(*ast.CreateViewStmt) + if !isCreateTable && !isCreateSeq && !isCreateView { + panic(fmt.Sprintf("job ID %d, parse ddl job failed, query %s", historyJob.ID, historyJob.Query)) + } + default: + if _, ok := st.(ast.DDLNode); !ok { + panic(fmt.Sprintf("job ID %d, parse ddl job failed, query %s", historyJob.ID, historyJob.Query)) + } + } + } +} + +func setDDLJobQuery(ctx sessionctx.Context, job *model.Job) { + switch job.Type { + case model.ActionUpdateTiFlashReplicaStatus, model.ActionUnlockTable: + job.Query = "" + default: + job.Query, _ = ctx.Value(sessionctx.QueryString).(string) + } +} + +// DoDDLJob will return // - nil: found in history DDL job and no job error // - context.Cancel: job has been sent to worker, but not found in history DDL job before cancel // - other: found in history DDL job and return that job error -func (d *ddl) doDDLJob(ctx sessionctx.Context, job *model.Job) error { +func (d *ddl) DoDDLJob(ctx sessionctx.Context, job *model.Job) error { // Get a global job ID and put the DDL job in the queue. - job.Query, _ = ctx.Value(sessionctx.QueryString).(string) + setDDLJobQuery(ctx, job) task := &limitJobTask{job, make(chan error)} d.limitJobCh <- task // worker should restart to continue handling tasks in limitJobCh, and send back through task.err @@ -641,7 +734,7 @@ func (d *ddl) doDDLJob(ctx sessionctx.Context, job *model.Job) error { i++ ticker = updateTickerInterval(ticker, 10*d.lease, job, i) case <-d.ctx.Done(): - logutil.BgLogger().Info("[ddl] doDDLJob will quit because context done") + logutil.BgLogger().Info("[ddl] DoDDLJob will quit because context done") return context.Canceled } @@ -655,6 +748,8 @@ func (d *ddl) doDDLJob(ctx sessionctx.Context, job *model.Job) error { continue } + checkHistoryJobInTest(ctx, historyJob) + // If a job is a history job, the state must be JobStateSynced or JobStateRollbackDone or JobStateCancelled. if historyJob.IsSynced() { // Judge whether there are some warnings when executing DDL under the certain SQL mode. diff --git a/ddl/ddl_algorithm.go b/ddl/ddl_algorithm.go index f0b4b3e0ae716..acc061c3c27b9 100644 --- a/ddl/ddl_algorithm.go +++ b/ddl/ddl_algorithm.go @@ -18,6 +18,7 @@ import ( "fmt" "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/util/dbterror" ) // AlterAlgorithm is used to store supported alter algorithm. @@ -60,7 +61,7 @@ func getProperAlgorithm(specify ast.AlgorithmType, algorithm *AlterAlgorithm) (a var err error if specify != r { - err = ErrAlterOperationNotSupported.GenWithStackByArgs(fmt.Sprintf("ALGORITHM=%s", specify), fmt.Sprintf("Cannot alter table by %s", specify), fmt.Sprintf("ALGORITHM=%s", algorithm.defAlgorithm)) + err = dbterror.ErrAlterOperationNotSupported.GenWithStackByArgs(fmt.Sprintf("ALGORITHM=%s", specify), fmt.Sprintf("Cannot alter table by %s", specify), fmt.Sprintf("ALGORITHM=%s", algorithm.defAlgorithm)) } return r, err } diff --git a/ddl/ddl_algorithm_test.go b/ddl/ddl_algorithm_test.go index be9c87af3a163..339582651de0e 100644 --- a/ddl/ddl_algorithm_test.go +++ b/ddl/ddl_algorithm_test.go @@ -19,6 +19,7 @@ import ( "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" ) @@ -99,7 +100,7 @@ Loop: for i, alm := range tc.supportedAlgorithm { algorithm, err = ddl.ResolveAlterAlgorithm(&tc.alterSpec, alm) if err != nil { - require.True(t, ddl.ErrAlterOperationNotSupported.Equal(err)) + require.True(t, dbterror.ErrAlterOperationNotSupported.Equal(err)) } require.Equal(t, tc.expectedAlgorithm[i], algorithm) } @@ -109,6 +110,6 @@ Loop: algorithm, err = ddl.ResolveAlterAlgorithm(&tc.alterSpec, alm) require.Equal(t, ast.AlgorithmTypeDefault, algorithm) require.Error(t, err) - require.True(t, ddl.ErrAlterOperationNotSupported.Equal(err)) + require.True(t, dbterror.ErrAlterOperationNotSupported.Equal(err)) } } diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index f4b4a8b7a92bf..5ffcbac725957 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -55,6 +55,7 @@ import ( "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/domainutil" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/mock" @@ -74,7 +75,11 @@ const ( longBlobMaxLength = 4294967295 // When setting the placement policy with "PLACEMENT POLICY `default`", // it means to remove placement policy from the specified object. - defaultPlacementPolicyName = "default" + defaultPlacementPolicyName = "default" + tiflashCheckPendingTablesWaitTime = 3000 * time.Millisecond + // Once tiflashCheckPendingTablesLimit is reached, we trigger a limiter detection. + tiflashCheckPendingTablesLimit = 100 + tiflashCheckPendingTablesRetry = 7 ) func (d *ddl) CreateSchema(ctx sessionctx.Context, schema model.CIStr, charsetInfo *ast.CharsetOpt, placementPolicyRef *model.PolicyRefInfo) (err error) { @@ -140,7 +145,7 @@ func (d *ddl) CreateSchemaWithInfo( Args: []interface{}{dbInfo}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -170,7 +175,7 @@ func (d *ddl) ModifySchemaCharsetAndCollate(ctx sessionctx.Context, stmt *ast.Al BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{toCharset, toCollate}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -200,18 +205,87 @@ func (d *ddl) ModifySchemaDefaultPlacement(ctx sessionctx.Context, stmt *ast.Alt BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{placementPolicyRef}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } -func (d *ddl) ModifySchemaSetTiFlashReplica(ctx sessionctx.Context, stmt *ast.AlterDatabaseStmt, tiflashReplica *ast.TiFlashReplicaSpec) error { +// getPendingTiFlashTableCount counts unavailable TiFlash replica by iterating all tables in infoCache. +func (d *ddl) getPendingTiFlashTableCount(sctx sessionctx.Context, originVersion int64, pendingCount uint32) (int64, uint32) { + is := d.GetInfoSchemaWithInterceptor(sctx) + dbInfos := is.AllSchemas() + // If there are no schema change since last time(can be weird). + if is.SchemaMetaVersion() == originVersion { + return originVersion, pendingCount + } + cnt := uint32(0) + for _, dbInfo := range dbInfos { + if util.IsMemOrSysDB(dbInfo.Name.L) { + continue + } + for _, tbl := range dbInfo.Tables { + if tbl.TiFlashReplica != nil && !tbl.TiFlashReplica.Available { + cnt += 1 + } + } + } + return is.SchemaMetaVersion(), cnt +} + +func isSessionDone(sctx sessionctx.Context) (bool, uint32) { + done := false + killed := atomic.LoadUint32(&sctx.GetSessionVars().Killed) + if killed == 1 { + done = true + } + failpoint.Inject("BatchAddTiFlashSendDone", func(val failpoint.Value) { + done = val.(bool) + }) + return done, killed +} + +func (d *ddl) waitPendingTableThreshold(sctx sessionctx.Context, schemaID int64, tableID int64, originVersion int64, pendingCount uint32, threshold uint32) (bool, int64, uint32, bool) { + configRetry := tiflashCheckPendingTablesRetry + configWaitTime := tiflashCheckPendingTablesWaitTime + failpoint.Inject("FastFailCheckTiFlashPendingTables", func(value failpoint.Value) { + configRetry = value.(int) + configWaitTime = time.Millisecond * 200 + }) + + for retry := 0; retry < configRetry; retry += 1 { + done, killed := isSessionDone(sctx) + if done { + logutil.BgLogger().Info("abort batch add TiFlash replica", zap.Int64("schemaID", schemaID), zap.Uint32("isKilled", killed)) + return true, originVersion, pendingCount, false + } + originVersion, pendingCount = d.getPendingTiFlashTableCount(sctx, originVersion, pendingCount) + delay := time.Duration(0) + if pendingCount >= threshold { + logutil.BgLogger().Info("too many unavailable tables, wait", zap.Uint32("threshold", threshold), zap.Uint32("currentPendingCount", pendingCount), zap.Int64("schemaID", schemaID), zap.Int64("tableID", tableID), zap.Duration("time", configWaitTime)) + delay = configWaitTime + } else { + // If there are not many unavailable tables, we don't need a force check. + return false, originVersion, pendingCount, false + } + time.Sleep(delay) + } + logutil.BgLogger().Info("too many unavailable tables, timeout", zap.Int64("schemaID", schemaID), zap.Int64("tableID", tableID)) + // If timeout here, we will trigger a ddl job, to force sync schema. However, it doesn't mean we remove limiter, + // so there is a force check immediately after that. + return false, originVersion, pendingCount, true +} + +func (d *ddl) ModifySchemaSetTiFlashReplica(sctx sessionctx.Context, stmt *ast.AlterDatabaseStmt, tiflashReplica *ast.TiFlashReplicaSpec) error { dbName := model.NewCIStr(stmt.Name) - is := d.GetInfoSchemaWithInterceptor(ctx) + is := d.GetInfoSchemaWithInterceptor(sctx) dbInfo, ok := is.SchemaByName(dbName) if !ok { return infoschema.ErrDatabaseNotExists.GenWithStackByArgs(dbName.O) } + if util.IsMemOrSysDB(dbInfo.Name.L) { + return errors.Trace(dbterror.ErrUnsupportedAlterReplicaForSysTable) + } + total := len(dbInfo.Tables) succ := 0 skip := 0 @@ -221,18 +295,66 @@ func (d *ddl) ModifySchemaSetTiFlashReplica(ctx sessionctx.Context, stmt *ast.Al if total == 0 { return infoschema.ErrEmptyDatabase.GenWithStack("Empty database '%v'", dbName.O) } - err := checkTiFlashReplicaCount(ctx, tiflashReplica.Count) + err := checkTiFlashReplicaCount(sctx, tiflashReplica.Count) if err != nil { return errors.Trace(err) } + var originVersion int64 = 0 + var pendingCount uint32 = 0 + forceCheck := false + + logutil.BgLogger().Info("start batch add TiFlash replicas", zap.Int("total", total), zap.Int64("schemaID", dbInfo.ID)) + threshold := uint32(sctx.GetSessionVars().BatchPendingTiFlashCount) + for _, tbl := range dbInfo.Tables { + done, killed := isSessionDone(sctx) + if done { + logutil.BgLogger().Info("abort batch add TiFlash replica", zap.Int64("schemaID", dbInfo.ID), zap.Uint32("isKilled", killed)) + return nil + } + tbReplicaInfo := tbl.TiFlashReplica if !shouldModifyTiFlashReplica(tbReplicaInfo, tiflashReplica) { - logutil.BgLogger().Info("skip processing schema table", zap.Int64("tableID", tbl.ID), zap.Int64("schemaID", dbInfo.ID), zap.String("tableName", tbl.Name.String()), zap.String("schemaName", dbInfo.Name.String())) + logutil.BgLogger().Info("skip repeated processing table", zap.Int64("tableID", tbl.ID), zap.Int64("schemaID", dbInfo.ID), zap.String("tableName", tbl.Name.String()), zap.String("schemaName", dbInfo.Name.String())) skip += 1 continue } + + // Ban setting replica count for tables in system database. + if tbl.TempTableType != model.TempTableNone { + logutil.BgLogger().Info("skip processing temporary table", zap.Int64("tableID", tbl.ID), zap.Int64("schemaID", dbInfo.ID), zap.String("tableName", tbl.Name.String()), zap.String("schemaName", dbInfo.Name.String())) + skip += 1 + continue + } + + charsetOk := true + // Ban setting replica count for tables which has charset not supported by TiFlash + for _, col := range tbl.Cols() { + _, ok := charset.TiFlashSupportedCharsets[col.Charset] + if !ok { + charsetOk = false + break + } + } + if !charsetOk { + logutil.BgLogger().Info("skip processing schema table, unsupported charset", zap.Int64("tableID", tbl.ID), zap.Int64("schemaID", dbInfo.ID), zap.String("tableName", tbl.Name.String()), zap.String("schemaName", dbInfo.Name.String())) + skip += 1 + continue + } + + // Alter `tiflashCheckPendingTablesLimit` tables are handled, we need to check if we have reached threshold. + if (succ+fail)%tiflashCheckPendingTablesLimit == 0 || forceCheck { + // We can execute one probing ddl to the latest schema, if we timeout in `pendingFunc`. + // However, we shall mark `forceCheck` to true, because we may still reach `threshold`. + finished := false + finished, originVersion, pendingCount, forceCheck = d.waitPendingTableThreshold(sctx, dbInfo.ID, tbl.ID, originVersion, pendingCount, threshold) + if finished { + logutil.BgLogger().Info("abort batch add TiFlash replica", zap.Int64("schemaID", dbInfo.ID)) + return nil + } + } + job := &model.Job{ SchemaID: dbInfo.ID, SchemaName: dbInfo.Name.L, @@ -241,7 +363,7 @@ func (d *ddl) ModifySchemaSetTiFlashReplica(ctx sessionctx.Context, stmt *ast.Al BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{*tiflashReplica}, } - err := d.doDDLJob(ctx, job) + err := d.DoDDLJob(sctx, job) err = d.callHookOnChanged(err) if err != nil { oneFail = tbl.ID @@ -256,7 +378,8 @@ func (d *ddl) ModifySchemaSetTiFlashReplica(ctx sessionctx.Context, stmt *ast.Al failStmt = fmt.Sprintf("(including table %v)", oneFail) } msg := fmt.Sprintf("In total %v tables: %v succeed, %v failed%v, %v skipped", total, succ, fail, failStmt, skip) - ctx.GetSessionVars().StmtCtx.SetMessage(msg) + sctx.GetSessionVars().StmtCtx.SetMessage(msg) + logutil.BgLogger().Info("finish batch add TiFlash replica", zap.Int64("schemaID", dbInfo.ID)) return nil } @@ -277,7 +400,7 @@ func (d *ddl) AlterTablePlacement(ctx sessionctx.Context, ident ast.Ident, place } if tb.Meta().TempTableType != model.TempTableNone { - return errors.Trace(ErrOptOnTemporaryTable.GenWithStackByArgs("placement")) + return errors.Trace(dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("placement")) } placementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, placementPolicyRef) @@ -294,7 +417,7 @@ func (d *ddl) AlterTablePlacement(ctx sessionctx.Context, ident ast.Ident, place Args: []interface{}{placementPolicyRef}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -318,7 +441,7 @@ func checkAndNormalizePlacementPolicy(ctx sessionctx.Context, placementPolicyRef return placementPolicyRef, nil } -func checkMultiSchemaSpecs(sctx sessionctx.Context, specs []*ast.DatabaseOption) error { +func checkMultiSchemaSpecs(_sctx sessionctx.Context, specs []*ast.DatabaseOption) error { hasSetTiFlashReplica := false if len(specs) == 1 { return nil @@ -326,7 +449,7 @@ func checkMultiSchemaSpecs(sctx sessionctx.Context, specs []*ast.DatabaseOption) for _, spec := range specs { if spec.Tp == ast.DatabaseSetTiFlashReplica { if hasSetTiFlashReplica { - return errRunMultiSchemaChanges + return dbterror.ErrRunMultiSchemaChanges } hasSetTiFlashReplica = true } @@ -334,7 +457,7 @@ func checkMultiSchemaSpecs(sctx sessionctx.Context, specs []*ast.DatabaseOption) return nil } -func (d *ddl) AlterSchema(ctx sessionctx.Context, stmt *ast.AlterDatabaseStmt) (err error) { +func (d *ddl) AlterSchema(sctx sessionctx.Context, stmt *ast.AlterDatabaseStmt) (err error) { // Resolve target charset and collation from options. var ( toCharset, toCollate string @@ -343,7 +466,7 @@ func (d *ddl) AlterSchema(ctx sessionctx.Context, stmt *ast.AlterDatabaseStmt) ( tiflashReplica *ast.TiFlashReplicaSpec ) - err = checkMultiSchemaSpecs(ctx, stmt.Options) + err = checkMultiSchemaSpecs(sctx, stmt.Options) if err != nil { return err } @@ -354,7 +477,7 @@ func (d *ddl) AlterSchema(ctx sessionctx.Context, stmt *ast.AlterDatabaseStmt) ( if toCharset == "" { toCharset = val.Value } else if toCharset != val.Value { - return ErrConflictingDeclarations.GenWithStackByArgs(toCharset, val.Value) + return dbterror.ErrConflictingDeclarations.GenWithStackByArgs(toCharset, val.Value) } isAlterCharsetAndCollate = true case ast.DatabaseOptionCollate: @@ -365,7 +488,7 @@ func (d *ddl) AlterSchema(ctx sessionctx.Context, stmt *ast.AlterDatabaseStmt) ( if toCharset == "" { toCharset = info.CharsetName } else if toCharset != info.CharsetName { - return ErrConflictingDeclarations.GenWithStackByArgs(toCharset, info.CharsetName) + return dbterror.ErrConflictingDeclarations.GenWithStackByArgs(toCharset, info.CharsetName) } toCollate = info.Name isAlterCharsetAndCollate = true @@ -379,17 +502,17 @@ func (d *ddl) AlterSchema(ctx sessionctx.Context, stmt *ast.AlterDatabaseStmt) ( } if isAlterCharsetAndCollate { - if err = d.ModifySchemaCharsetAndCollate(ctx, stmt, toCharset, toCollate); err != nil { + if err = d.ModifySchemaCharsetAndCollate(sctx, stmt, toCharset, toCollate); err != nil { return err } } if isAlterPlacement { - if err = d.ModifySchemaDefaultPlacement(ctx, stmt, placementPolicyRef); err != nil { + if err = d.ModifySchemaDefaultPlacement(sctx, stmt, placementPolicyRef); err != nil { return err } } if isTiFlashReplica { - if err = d.ModifySchemaSetTiFlashReplica(ctx, stmt, tiflashReplica); err != nil { + if err = d.ModifySchemaSetTiFlashReplica(sctx, stmt, tiflashReplica); err != nil { return err } } @@ -409,7 +532,7 @@ func (d *ddl) DropSchema(ctx sessionctx.Context, schema model.CIStr) (err error) BinlogInfo: &model.HistoryInfo{}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) if err != nil { return errors.Trace(err) @@ -431,21 +554,21 @@ func (d *ddl) DropSchema(ctx sessionctx.Context, schema model.CIStr) (err error) func checkTooLongSchema(schema model.CIStr) error { if utf8.RuneCountInString(schema.L) > mysql.MaxDatabaseNameLength { - return ErrTooLongIdent.GenWithStackByArgs(schema) + return dbterror.ErrTooLongIdent.GenWithStackByArgs(schema) } return nil } func checkTooLongTable(table model.CIStr) error { if utf8.RuneCountInString(table.L) > mysql.MaxTableNameLength { - return ErrTooLongIdent.GenWithStackByArgs(table) + return dbterror.ErrTooLongIdent.GenWithStackByArgs(table) } return nil } func checkTooLongIndex(index model.CIStr) error { if utf8.RuneCountInString(index.L) > mysql.MaxIndexIdentifierLen { - return ErrTooLongIdent.GenWithStackByArgs(index) + return dbterror.ErrTooLongIdent.GenWithStackByArgs(index) } return nil } @@ -637,7 +760,7 @@ func buildColumnAndConstraint( tblCollate string, ) (*table.Column, []*ast.Constraint, error) { if colName := colDef.Name.Name.L; colName == model.ExtraHandleName.L { - return nil, nil, ErrWrongColumnName.GenWithStackByArgs(colName) + return nil, nil, dbterror.ErrWrongColumnName.GenWithStackByArgs(colName) } // specifiedCollate refers to the last collate specified in colDef.Options. @@ -684,11 +807,11 @@ func checkColumnDefaultValue(ctx sessionctx.Context, col *table.Column, value in value = `null` } sc := ctx.GetSessionVars().StmtCtx - sc.AppendWarning(errBlobCantHaveDefault.GenWithStackByArgs(col.Name.O)) + sc.AppendWarning(dbterror.ErrBlobCantHaveDefault.GenWithStackByArgs(col.Name.O)) return hasDefaultValue, value, nil } // In strict SQL mode or default value is not an empty string. - return hasDefaultValue, value, errBlobCantHaveDefault.GenWithStackByArgs(col.Name.O) + return hasDefaultValue, value, dbterror.ErrBlobCantHaveDefault.GenWithStackByArgs(col.Name.O) } if value != nil && ctx.GetSessionVars().SQLMode.HasNoZeroDateMode() && ctx.GetSessionVars().SQLMode.HasStrictMode() && types.IsTypeTime(col.Tp) { @@ -709,7 +832,7 @@ func checkSequenceDefaultValue(col *table.Column) error { if mysql.IsIntegerType(col.Tp) { return nil } - return ErrColumnTypeUnsupportedNextValue.GenWithStackByArgs(col.ColumnInfo.Name.O) + return dbterror.ErrColumnTypeUnsupportedNextValue.GenWithStackByArgs(col.ColumnInfo.Name.O) } func convertTimestampDefaultValToUTC(ctx sessionctx.Context, defaultVal interface{}, col *table.Column) (interface{}, error) { @@ -872,10 +995,10 @@ func columnDefToCol(ctx sessionctx.Context, offset int, colDef *ast.ColumnDef, o // TODO: Support other time functions. if col.Tp == mysql.TypeTimestamp || col.Tp == mysql.TypeDatetime { if !expression.IsValidCurrentTimestampExpr(v.Expr, colDef.Tp) { - return nil, nil, ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) + return nil, nil, dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) } } else { - return nil, nil, ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) + return nil, nil, dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) } col.Flag |= mysql.OnUpdateNowFlag setOnUpdateNow = true @@ -899,9 +1022,9 @@ func columnDefToCol(ctx sessionctx.Context, offset int, colDef *ast.ColumnDef, o col.FieldType.Collate = v.StrValue } case ast.ColumnOptionFulltext: - ctx.GetSessionVars().StmtCtx.AppendWarning(ErrTableCantHandleFt.GenWithStackByArgs()) + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt.GenWithStackByArgs()) case ast.ColumnOptionCheck: - ctx.GetSessionVars().StmtCtx.AppendWarning(ErrUnsupportedConstraintCheck.GenWithStackByArgs("CONSTRAINT CHECK")) + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedConstraintCheck.GenWithStackByArgs("CONSTRAINT CHECK")) } } } @@ -928,14 +1051,14 @@ func getDefaultValue(ctx sessionctx.Context, col *table.Column, c *ast.ColumnOpt } } if defaultFsp != fsp { - return nil, false, ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + return nil, false, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) } } } vd, err := expression.GetTimeValue(ctx, c.Expr, tp, fsp) value := vd.GetValue() if err != nil { - return nil, false, ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + return nil, false, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) } // Value is nil means `default null`. @@ -981,7 +1104,7 @@ func getDefaultValue(ctx sessionctx.Context, col *table.Column, c *ast.ColumnOpt str, err := v.GetBinaryStringDecoded(nil, col.Charset) if err != nil { // Overwrite the decoding error with invalid default value error. - err = ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + err = dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) } return str, false, err } @@ -1036,7 +1159,7 @@ func getSetDefaultValue(v types.Datum, col *table.Column) (string, error) { maxLimit := int64(1< maxLimit { - return "", ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) } setVal, err := types.ParseSetValue(col.Elems, uint64(val)) if err != nil { @@ -1055,7 +1178,7 @@ func getSetDefaultValue(v types.Datum, col *table.Column) (string, error) { } setVal, err := types.ParseSetName(col.Elems, str, col.Collate) if err != nil { - return "", ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) } v.SetMysqlSet(setVal, col.Collate) @@ -1067,7 +1190,7 @@ func getEnumDefaultValue(v types.Datum, col *table.Column) (string, error) { if v.Kind() == types.KindInt64 { val := v.GetInt64() if val < 1 || val > int64(len(col.Elems)) { - return "", ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) } enumVal, err := types.ParseEnumValue(col.Elems, uint64(val)) if err != nil { @@ -1085,7 +1208,7 @@ func getEnumDefaultValue(v types.Datum, col *table.Column) (string, error) { str = strings.TrimRight(str, " ") enumVal, err := types.ParseEnumName(col.Elems, str, col.Collate) if err != nil { - return "", ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) } v.SetMysqlEnum(enumVal, col.Collate) @@ -1172,7 +1295,7 @@ func checkDefaultValue(ctx sessionctx.Context, c *table.Column, hasDefaultValue } // Primary key default null is invalid. if mysql.HasPriKeyFlag(c.Flag) { - return ErrPrimaryCantHaveNull + return dbterror.ErrPrimaryCantHaveNull } // Set not null but default null is invalid. @@ -1202,7 +1325,7 @@ func checkPriKeyConstraint(col *table.Column, hasDefaultValue, hasNullFlag bool, } // Primary key should not be null. if mysql.HasPriKeyFlag(col.Flag) && hasNullFlag { - return ErrPrimaryCantHaveNull + return dbterror.ErrPrimaryCantHaveNull } return nil } @@ -1225,7 +1348,7 @@ func checkColumnValueConstraint(col *table.Column, collation string) error { // where M is the element literal length and w is the number of bytes required for the maximum-length character in the character set. // See https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html for more details. if enumLengthLimit && (len(val) > 255 || len(val)*desc.Maxlen > 1020) { - return ErrTooLongValueForType.GenWithStackByArgs(col.Name) + return dbterror.ErrTooLongValueForType.GenWithStackByArgs(col.Name) } if _, ok := valueMap[val]; ok { tpStr := "ENUM" @@ -1300,7 +1423,7 @@ func checkGeneratedColumn(ctx sessionctx.Context, colDefs []*ast.ColumnDef) erro if !ctx.GetSessionVars().EnableAutoIncrementInGenerated { for colName, generated := range colName2Generation { if _, found := generated.dependences[autoIncrementColumn]; found { - return ErrGeneratedColumnRefAutoInc.GenWithStackByArgs(colName) + return dbterror.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs(colName) } } } @@ -1319,7 +1442,7 @@ func checkTooLongColumn(cols []*model.ColumnInfo) error { for _, col := range cols { colName := col.Name.O if utf8.RuneCountInString(colName) > mysql.MaxColumnNameLength { - return ErrTooLongIdent.GenWithStackByArgs(colName) + return dbterror.ErrTooLongIdent.GenWithStackByArgs(colName) } } return nil @@ -1327,14 +1450,14 @@ func checkTooLongColumn(cols []*model.ColumnInfo) error { func checkTooManyColumns(colDefs []*model.ColumnInfo) error { if uint32(len(colDefs)) > atomic.LoadUint32(&config.GetGlobalConfig().TableColumnCountLimit) { - return errTooManyFields + return dbterror.ErrTooManyFields } return nil } func checkTooManyIndexes(idxDefs []*model.IndexInfo) error { if len(idxDefs) > config.GetGlobalConfig().IndexLimit { - return errTooManyKeys.GenWithStackByArgs(config.GetGlobalConfig().IndexLimit) + return dbterror.ErrTooManyKeys.GenWithStackByArgs(config.GetGlobalConfig().IndexLimit) } return nil } @@ -1395,9 +1518,9 @@ func checkDuplicateConstraint(namesMap map[string]bool, name string, foreign boo nameLower := strings.ToLower(name) if namesMap[nameLower] { if foreign { - return ErrFkDupName.GenWithStackByArgs(name) + return dbterror.ErrFkDupName.GenWithStackByArgs(name) } - return ErrDupKeyName.GenWithStack("duplicate key name %s", name) + return dbterror.ErrDupKeyName.GenWithStack("duplicate key name %s", name) } namesMap[nameLower] = true return nil @@ -1475,7 +1598,7 @@ func checkInvisibleIndexOnPK(tblInfo *model.TableInfo) error { } pk := getPrimaryKey(tblInfo) if pk != nil && pk.Invisible { - return ErrPKIndexCantBeInvisible + return dbterror.ErrPKIndexCantBeInvisible } return nil } @@ -1533,18 +1656,18 @@ func setTableAutoRandomBits(ctx sessionctx.Context, tbInfo *model.TableInfo, col for _, col := range colDefs { if containsColumnOption(col, ast.ColumnOptionAutoRandom) { if col.Tp.Tp != mysql.TypeLonglong { - return ErrInvalidAutoRandom.GenWithStackByArgs( + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs( fmt.Sprintf(autoid.AutoRandomOnNonBigIntColumn, types.TypeStr(col.Tp.Tp))) } if !tbInfo.PKIsHandle || col.Name.Name.L != pkColName.L { errMsg := fmt.Sprintf(autoid.AutoRandomPKisNotHandleErrMsg, col.Name.Name.O) - return ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) } if containsColumnOption(col, ast.ColumnOptionAutoIncrement) { - return ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithAutoIncErrMsg) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithAutoIncErrMsg) } if containsColumnOption(col, ast.ColumnOptionDefaultValue) { - return ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) } autoRandBits, err := extractAutoRandomBitsFromColDef(col) @@ -1554,11 +1677,11 @@ func setTableAutoRandomBits(ctx sessionctx.Context, tbInfo *model.TableInfo, col layout := autoid.NewShardIDLayout(col.Tp, autoRandBits) if autoRandBits == 0 { - return ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomNonPositive) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomNonPositive) } else if autoRandBits > autoid.MaxAutoRandomBits { errMsg := fmt.Sprintf(autoid.AutoRandomOverflowErrMsg, autoid.MaxAutoRandomBits, autoRandBits, col.Name.Name.O) - return ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) } tbInfo.AutoRandomBits = autoRandBits @@ -1582,7 +1705,7 @@ func convertAutoRandomBitsToUnsigned(autoRandomBits int) (uint64, error) { if autoRandomBits == types.UnspecifiedLength { return autoid.DefaultAutoRandomBits, nil } else if autoRandomBits < 0 { - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomNonPositive) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomNonPositive) } return uint64(autoRandomBits), nil } @@ -1622,7 +1745,7 @@ func buildTableInfo( // Check clustered on non-primary key. if constr.Option != nil && constr.Option.PrimaryKeyTp != model.PrimaryKeyTypeDefault && constr.Tp != ast.ConstraintPrimaryKey { - return nil, errUnsupportedClusteredSecondaryKey + return nil, dbterror.ErrUnsupportedClusteredSecondaryKey } if constr.Tp == ast.ConstraintForeignKey { for _, fk := range tbInfo.ForeignKeys { @@ -1656,7 +1779,7 @@ func buildTableInfo( if tbInfo.HasClusteredIndex() { // Primary key cannot be invisible. if constr.Option != nil && constr.Option.Visibility == ast.IndexVisibilityInvisible { - return nil, ErrPKIndexCantBeInvisible + return nil, dbterror.ErrPKIndexCantBeInvisible } } if tbInfo.PKIsHandle { @@ -1665,11 +1788,11 @@ func buildTableInfo( } if constr.Tp == ast.ConstraintFulltext { - ctx.GetSessionVars().StmtCtx.AppendWarning(ErrTableCantHandleFt.GenWithStackByArgs()) + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt.GenWithStackByArgs()) continue } if constr.Tp == ast.ConstraintCheck { - ctx.GetSessionVars().StmtCtx.AppendWarning(ErrUnsupportedConstraintCheck.GenWithStackByArgs("CONSTRAINT CHECK")) + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedConstraintCheck.GenWithStackByArgs("CONSTRAINT CHECK")) continue } // build index info. @@ -1719,7 +1842,7 @@ func indexColumnsLen(cols []*model.ColumnInfo, idxCols []*model.IndexColumn) (co for _, idxCol := range idxCols { col := model.FindColumnInfo(cols, idxCol.Name.L) if col == nil { - err = errKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", idxCol.Name.L) + err = dbterror.ErrKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", idxCol.Name.L) return } var l int @@ -1858,7 +1981,7 @@ func checkTableInfoValid(tblInfo *model.TableInfo) error { func buildTableInfoWithLike(ctx sessionctx.Context, ident ast.Ident, referTblInfo *model.TableInfo, s *ast.CreateTableStmt) (*model.TableInfo, error) { // Check the referred table is a real table object. if referTblInfo.IsSequence() || referTblInfo.IsView() { - return nil, ErrWrongObject.GenWithStackByArgs(ident.Schema, referTblInfo.Name, "BASE TABLE") + return nil, dbterror.ErrWrongObject.GenWithStackByArgs(ident.Schema, referTblInfo.Name, "BASE TABLE") } tblInfo := *referTblInfo if err := setTemporaryType(ctx, &tblInfo, s); err != nil { @@ -2071,7 +2194,7 @@ func setTemporaryType(ctx sessionctx.Context, tbInfo *model.TableInfo, s *ast.Cr tbInfo.TempTableType = model.TempTableGlobal // "create global temporary table ... on commit preserve rows" if !s.OnCommitDelete { - return errors.Trace(errUnsupportedOnCommitPreserve) + return errors.Trace(dbterror.ErrUnsupportedOnCommitPreserve) } case ast.TemporaryLocal: tbInfo.TempTableType = model.TempTableLocal @@ -2117,7 +2240,7 @@ func (d *ddl) createTableWithInfoJob( break } // The object to replace isn't a view. - return nil, ErrWrongObject.GenWithStackByArgs(dbName, tbInfo.Name, "VIEW") + return nil, dbterror.ErrWrongObject.GenWithStackByArgs(dbName, tbInfo.Name, "VIEW") } return nil, err default: @@ -2202,7 +2325,7 @@ func (d *ddl) CreateTableWithInfo( return nil } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err != nil { // table exists, but if_not_exists flags is true, so we ignore this error. if onExist == OnExistIgnore && infoschema.ErrTableExists.Equal(err) { @@ -2295,7 +2418,7 @@ func (d *ddl) BatchCreateTableWithInfo(ctx sessionctx.Context, } jobs.Args = append(jobs.Args, args) - err = d.doDDLJob(ctx, jobs) + err = d.DoDDLJob(ctx, jobs) if err != nil { // table exists, but if_not_exists flags is true, so we ignore this error. if onExist == OnExistIgnore && infoschema.ErrTableExists.Equal(err) { @@ -2314,6 +2437,50 @@ func (d *ddl) BatchCreateTableWithInfo(ctx sessionctx.Context, return nil } +func (d *ddl) CreatePlacementPolicyWithInfo(ctx sessionctx.Context, policy *model.PolicyInfo, onExist OnExist) error { + if checkIgnorePlacementDDL(ctx) { + return nil + } + + policyName := policy.Name + if policyName.L == defaultPlacementPolicyName { + return errors.Trace(infoschema.ErrReservedSyntax.GenWithStackByArgs(policyName)) + } + + // Check policy existence. + _, ok := d.GetInfoSchemaWithInterceptor(ctx).PolicyByName(policyName) + if ok { + err := infoschema.ErrPlacementPolicyExists.GenWithStackByArgs(policyName) + switch onExist { + case OnExistIgnore: + ctx.GetSessionVars().StmtCtx.AppendNote(err) + return nil + case OnExistError: + return err + } + } + + if err := checkPolicyValidation(policy.PlacementSettings); err != nil { + return err + } + + policyID, err := d.genPlacementPolicyID() + if err != nil { + return err + } + policy.ID = policyID + + job := &model.Job{ + SchemaName: policy.Name.L, + Type: model.ActionCreatePlacementPolicy, + BinlogInfo: &model.HistoryInfo{}, + Args: []interface{}{policy, onExist == OnExistReplace}, + } + err = d.DoDDLJob(ctx, job) + err = d.callHookOnChanged(err) + return errors.Trace(err) +} + // preSplitAndScatter performs pre-split and scatter of the table's regions. // If `pi` is not nil, will only split region for `pi`, this is used when add partition. func (d *ddl) preSplitAndScatter(ctx sessionctx.Context, tbInfo *model.TableInfo, pi *model.PartitionInfo) { @@ -2372,7 +2539,7 @@ func (d *ddl) RecoverTable(ctx sessionctx.Context, recoverInfo *RecoverInfo) (er recoverInfo.SnapshotTS, recoverTableCheckFlagNone, recoverInfo.AutoIDs.RandomID, recoverInfo.OldSchemaName, recoverInfo.OldTableName}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -2455,7 +2622,7 @@ func checkColumnsPartitionType(tbInfo *model.TableInfo) error { for _, col := range tbInfo.Partition.Columns { colInfo := getColumnInfoByName(tbInfo, col.L) if colInfo == nil { - return errors.Trace(ErrFieldNotFoundPart) + return errors.Trace(dbterror.ErrFieldNotFoundPart) } // The permitted data types are shown in the following list: // All integer types @@ -2467,7 +2634,7 @@ func checkColumnsPartitionType(tbInfo *model.TableInfo) error { case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeDuration: case mysql.TypeVarchar, mysql.TypeString: default: - return ErrNotAllowedTypeInPartition.GenWithStackByArgs(col.O) + return dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(col.O) } } return nil @@ -2493,7 +2660,7 @@ func checkRangeColumnsPartitionValue(ctx sessionctx.Context, tbInfo *model.Table return err } if !succ { - return errors.Trace(ErrRangeNotIncreasing) + return errors.Trace(dbterror.ErrRangeNotIncreasing) } } return nil @@ -2559,7 +2726,7 @@ func parseAndEvalBoolExpr(ctx sessionctx.Context, l, r string, colInfo *model.Co func checkCharsetAndCollation(cs string, co string) error { if !charset.ValidCharsetAndCollation(cs, co) { - return ErrUnknownCharacterSet.GenWithStackByArgs(cs) + return dbterror.ErrUnknownCharacterSet.GenWithStackByArgs(cs) } if co != "" { if _, err := collate.GetCollationByName(co); err != nil { @@ -2633,7 +2800,7 @@ func handleTableOptions(options []*ast.TableOption, tbInfo *model.TableInfo) err tbInfo.Compression = op.StrValue case ast.TableOptionShardRowID: if op.UintValue > 0 && tbInfo.HasClusteredIndex() { - return errUnsupportedShardRowIDBits + return dbterror.ErrUnsupportedShardRowIDBits } tbInfo.ShardRowIDBits = op.UintValue if tbInfo.ShardRowIDBits > shardRowIDBitsMax { @@ -2642,7 +2809,7 @@ func handleTableOptions(options []*ast.TableOption, tbInfo *model.TableInfo) err tbInfo.MaxShardRowIDBits = tbInfo.ShardRowIDBits case ast.TableOptionPreSplitRegion: if tbInfo.TempTableType != model.TempTableNone { - return errors.Trace(ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions")) + return errors.Trace(dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions")) } tbInfo.PreSplitRegions = op.UintValue case ast.TableOptionCharset, ast.TableOptionCollate: @@ -2693,7 +2860,7 @@ func getCharsetAndCollateInColumnDef(def *ast.ColumnDef) (chs, coll string, err if chs == "" { chs = info.CharsetName } else if chs != info.CharsetName { - return "", "", ErrCollationCharsetMismatch.GenWithStackByArgs(info.Name, chs) + return "", "", dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs(info.Name, chs) } coll = info.Name } @@ -2718,7 +2885,7 @@ func getCharsetAndCollateInTableOption(startIdx int, options []*ast.TableOption) if len(chs) == 0 { chs = info.Name } else if chs != info.Name { - return "", "", ErrConflictingDeclarations.GenWithStackByArgs(chs, info.Name) + return "", "", dbterror.ErrConflictingDeclarations.GenWithStackByArgs(chs, info.Name) } if len(coll) == 0 { coll = info.DefaultCollation @@ -2731,7 +2898,7 @@ func getCharsetAndCollateInTableOption(startIdx int, options []*ast.TableOption) if len(chs) == 0 { chs = info.CharsetName } else if chs != info.CharsetName { - return "", "", ErrCollationCharsetMismatch.GenWithStackByArgs(info.Name, chs) + return "", "", dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs(info.Name, chs) } coll = info.Name } @@ -2802,14 +2969,14 @@ func isSameTypeMultiSpecs(specs []*ast.AlterTableSpec) bool { func checkMultiSpecs(sctx sessionctx.Context, specs []*ast.AlterTableSpec) error { if !sctx.GetSessionVars().EnableChangeMultiSchema { if len(specs) > 1 { - return errRunMultiSchemaChanges + return dbterror.ErrRunMultiSchemaChanges } if len(specs) == 1 && len(specs[0].NewColumns) > 1 && specs[0].Tp == ast.AlterTableAddColumns { - return errRunMultiSchemaChanges + return dbterror.ErrRunMultiSchemaChanges } } else { if len(specs) > 1 && !isSameTypeMultiSpecs(specs) { - return errRunMultiSchemaChanges + return dbterror.ErrRunMultiSchemaChanges } } return nil @@ -2822,8 +2989,20 @@ func (d *ddl) AlterTable(ctx context.Context, sctx sessionctx.Context, ident ast } is := d.infoCache.GetLatest() - if is.TableIsView(ident.Schema, ident.Name) || is.TableIsSequence(ident.Schema, ident.Name) { - return ErrWrongObject.GenWithStackByArgs(ident.Schema, ident.Name, "BASE TABLE") + tb, err := is.TableByName(ident.Schema, ident.Name) + if err != nil { + return errors.Trace(err) + } + if tb.Meta().IsView() || tb.Meta().IsSequence() { + return dbterror.ErrWrongObject.GenWithStackByArgs(ident.Schema, ident.Name, "BASE TABLE") + } + if tb.Meta().TableCacheStatusType != model.TableCacheStatusDisable { + if len(validSpecs) != 1 { + return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Alter Table") + } + if validSpecs[0].Tp != ast.AlterTableCache && validSpecs[0].Tp != ast.AlterTableNoCache { + return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Alter Table") + } } err = checkMultiSpecs(sctx, validSpecs) @@ -2840,7 +3019,7 @@ func (d *ddl) AlterTable(ctx context.Context, sctx sessionctx.Context, ident ast case ast.AlterTableDropPrimaryKey, ast.AlterTableDropIndex: err = d.DropIndexes(sctx, ident, validSpecs) default: - return errRunMultiSchemaChanges + return dbterror.ErrRunMultiSchemaChanges } if err != nil { return errors.Trace(err) @@ -2862,17 +3041,17 @@ func (d *ddl) AlterTable(ctx context.Context, sctx sessionctx.Context, ident ast case ast.AlterTableCoalescePartitions: err = d.CoalescePartitions(sctx, ident, spec) case ast.AlterTableReorganizePartition: - err = errors.Trace(errUnsupportedReorganizePartition) + err = errors.Trace(dbterror.ErrUnsupportedReorganizePartition) case ast.AlterTableCheckPartitions: - err = errors.Trace(errUnsupportedCheckPartition) + err = errors.Trace(dbterror.ErrUnsupportedCheckPartition) case ast.AlterTableRebuildPartition: - err = errors.Trace(errUnsupportedRebuildPartition) + err = errors.Trace(dbterror.ErrUnsupportedRebuildPartition) case ast.AlterTableOptimizePartition: - err = errors.Trace(errUnsupportedOptimizePartition) + err = errors.Trace(dbterror.ErrUnsupportedOptimizePartition) case ast.AlterTableRemovePartitioning: - err = errors.Trace(errUnsupportedRemovePartition) + err = errors.Trace(dbterror.ErrUnsupportedRemovePartition) case ast.AlterTableRepairPartition: - err = errors.Trace(errUnsupportedRepairPartition) + err = errors.Trace(dbterror.ErrUnsupportedRepairPartition) case ast.AlterTableDropColumn: err = d.DropColumn(sctx, ident, spec) case ast.AlterTableDropIndex: @@ -2921,9 +3100,9 @@ func (d *ddl) AlterTable(ctx context.Context, sctx sessionctx.Context, ident ast case ast.ConstraintPrimaryKey: err = d.CreatePrimaryKey(sctx, ident, model.NewCIStr(constr.Name), spec.Constraint.Keys, constr.Option) case ast.ConstraintFulltext: - sctx.GetSessionVars().StmtCtx.AppendWarning(ErrTableCantHandleFt) + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt) case ast.ConstraintCheck: - sctx.GetSessionVars().StmtCtx.AppendWarning(ErrUnsupportedConstraintCheck.GenWithStackByArgs("ADD CONSTRAINT CHECK")) + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedConstraintCheck.GenWithStackByArgs("ADD CONSTRAINT CHECK")) default: // Nothing to do now. } @@ -2987,7 +3166,7 @@ func (d *ddl) AlterTable(ctx context.Context, sctx sessionctx.Context, ident ast } case ast.TableOptionEngine: default: - err = errUnsupportedAlterTableOption + err = dbterror.ErrUnsupportedAlterTableOption } if err != nil { @@ -3005,13 +3184,13 @@ func (d *ddl) AlterTable(ctx context.Context, sctx sessionctx.Context, ident ast case ast.AlterTableIndexInvisible: err = d.AlterIndexVisibility(sctx, ident, spec.IndexName, spec.Visibility) case ast.AlterTableAlterCheck: - sctx.GetSessionVars().StmtCtx.AppendWarning(ErrUnsupportedConstraintCheck.GenWithStackByArgs("ALTER CHECK")) + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedConstraintCheck.GenWithStackByArgs("ALTER CHECK")) case ast.AlterTableDropCheck: - sctx.GetSessionVars().StmtCtx.AppendWarning(ErrUnsupportedConstraintCheck.GenWithStackByArgs("DROP CHECK")) + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedConstraintCheck.GenWithStackByArgs("DROP CHECK")) case ast.AlterTableWithValidation: - sctx.GetSessionVars().StmtCtx.AppendWarning(errUnsupportedAlterTableWithValidation) + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedAlterTableWithValidation) case ast.AlterTableWithoutValidation: - sctx.GetSessionVars().StmtCtx.AppendWarning(errUnsupportedAlterTableWithoutValidation) + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedAlterTableWithoutValidation) case ast.AlterTableAddStatistics: err = d.AlterTableAddStatistics(sctx, ident, spec.Statistics, spec.IfNotExists) case ast.AlterTableDropStatistics: @@ -3048,7 +3227,7 @@ func (d *ddl) RebaseAutoID(ctx sessionctx.Context, ident ast.Ident, newBase int6 case autoid.AutoRandomType: tbInfo := t.Meta() if tbInfo.AutoRandomBits == 0 { - return errors.Trace(ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomRebaseNotApplicable)) + return errors.Trace(dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomRebaseNotApplicable)) } var autoRandColTp types.FieldType for _, c := range tbInfo.Columns { @@ -3060,7 +3239,7 @@ func (d *ddl) RebaseAutoID(ctx sessionctx.Context, ident ast.Ident, newBase int6 layout := autoid.NewShardIDLayout(&autoRandColTp, tbInfo.AutoRandomBits) if layout.IncrementalMask()&newBase != newBase { errMsg := fmt.Sprintf(autoid.AutoRandomRebaseOverflow, newBase, layout.IncrementalBitsCapacity()) - return errors.Trace(ErrInvalidAutoRandom.GenWithStackByArgs(errMsg)) + return errors.Trace(dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg)) } actionType = model.ActionRebaseAutoRandomBase case autoid.RowIDAllocType: @@ -3081,7 +3260,7 @@ func (d *ddl) RebaseAutoID(ctx sessionctx.Context, ident ast.Ident, newBase int6 BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{newBase, force}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -3110,14 +3289,14 @@ func (d *ddl) ShardRowID(ctx sessionctx.Context, tableIdent ast.Ident, uVal uint return errors.Trace(err) } if t.Meta().TempTableType != model.TempTableNone { - return ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits") + return dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits") } if uVal == t.Meta().ShardRowIDBits { // Nothing need to do. return nil } if uVal > 0 && t.Meta().HasClusteredIndex() { - return errUnsupportedShardRowIDBits + return dbterror.ErrUnsupportedShardRowIDBits } err = verifyNoOverflowShardBits(d.sessPool, t, uVal) if err != nil { @@ -3131,7 +3310,7 @@ func (d *ddl) ShardRowID(ctx sessionctx.Context, tableIdent ast.Ident, uVal uint BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{uVal}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -3153,14 +3332,14 @@ func checkUnsupportedColumnConstraint(col *ast.ColumnDef, ti ast.Ident) error { for _, constraint := range col.Options { switch constraint.Tp { case ast.ColumnOptionAutoIncrement: - return errUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint AUTO_INCREMENT when altering '%s.%s'", col.Name, ti.Schema, ti.Name) + return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint AUTO_INCREMENT when altering '%s.%s'", col.Name, ti.Schema, ti.Name) case ast.ColumnOptionPrimaryKey: - return errUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint PRIMARY KEY when altering '%s.%s'", col.Name, ti.Schema, ti.Name) + return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint PRIMARY KEY when altering '%s.%s'", col.Name, ti.Schema, ti.Name) case ast.ColumnOptionUniqKey: - return errUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint UNIQUE KEY when altering '%s.%s'", col.Name, ti.Schema, ti.Name) + return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint UNIQUE KEY when altering '%s.%s'", col.Name, ti.Schema, ti.Name) case ast.ColumnOptionAutoRandom: errMsg := fmt.Sprintf(autoid.AutoRandomAlterAddColumn, col.Name, ti.Schema, ti.Name) - return ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) } } @@ -3188,7 +3367,7 @@ func checkAndCreateNewColumn(ctx sessionctx.Context, ti ast.Ident, schema *model return nil, errors.Trace(err) } if utf8.RuneCountInString(colName) > mysql.MaxColumnNameLength { - return nil, ErrTooLongIdent.GenWithStackByArgs(colName) + return nil, dbterror.ErrTooLongIdent.GenWithStackByArgs(colName) } // If new column is a generated column, do validation. @@ -3201,7 +3380,7 @@ func checkAndCreateNewColumn(ctx sessionctx.Context, ti ast.Ident, schema *model } if option.Stored { - return nil, ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Adding generated stored column through ALTER TABLE") + return nil, dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Adding generated stored column through ALTER TABLE") } _, dependColNames := findDependedColumnNames(specNewColumn) @@ -3234,7 +3413,7 @@ func checkAndCreateNewColumn(ctx sessionctx.Context, ti ast.Ident, schema *model return nil, errors.Trace(err) } if isSeqExpr { - return nil, errors.Trace(ErrAddColumnWithSequenceAsDefault.GenWithStackByArgs(specNewColumn.Name.Name.O)) + return nil, errors.Trace(dbterror.ErrAddColumnWithSequenceAsDefault.GenWithStackByArgs(specNewColumn.Name.Name.O)) } } } @@ -3297,7 +3476,7 @@ func (d *ddl) AddColumn(ctx sessionctx.Context, ti ast.Ident, spec *ast.AlterTab Args: []interface{}{col, spec.Position, 0}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) // column exists, but if_not_exists flags is true, so we ignore this error. if infoschema.ErrColumnExists.Equal(err) && spec.IfNotExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) @@ -3373,7 +3552,7 @@ func (d *ddl) AddColumns(ctx sessionctx.Context, ti ast.Ident, specs []*ast.Alte Args: []interface{}{columns, positions, offsets, ifNotExists}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err != nil { return errors.Trace(err) } @@ -3396,7 +3575,7 @@ func (d *ddl) AddTablePartitions(ctx sessionctx.Context, ident ast.Ident, spec * meta := t.Meta() pi := meta.GetPartitionInfo() if pi == nil { - return errors.Trace(ErrPartitionMgmtOnNonpartitioned) + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } partInfo, err := buildAddedPartitionInfo(ctx, meta, spec) @@ -3414,7 +3593,7 @@ func (d *ddl) AddTablePartitions(ctx sessionctx.Context, ident ast.Ident, spec * tmp.Definitions = append(pi.Definitions, tmp.Definitions...) clonedMeta.Partition = &tmp if err := checkPartitionDefinitionConstraints(ctx, clonedMeta); err != nil { - if ErrSameNamePartition.Equal(err) && spec.IfNotExists { + if dbterror.ErrSameNamePartition.Equal(err) && spec.IfNotExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil } @@ -3434,8 +3613,8 @@ func (d *ddl) AddTablePartitions(ctx sessionctx.Context, ident ast.Ident, spec * Args: []interface{}{partInfo}, } - err = d.doDDLJob(ctx, job) - if ErrSameNamePartition.Equal(err) && spec.IfNotExists { + err = d.DoDDLJob(ctx, job) + if dbterror.ErrSameNamePartition.Equal(err) && spec.IfNotExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil } @@ -3460,20 +3639,20 @@ func (d *ddl) CoalescePartitions(ctx sessionctx.Context, ident ast.Ident, spec * meta := t.Meta() if meta.GetPartitionInfo() == nil { - return errors.Trace(ErrPartitionMgmtOnNonpartitioned) + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } switch meta.Partition.Type { // We don't support coalesce partitions hash type partition now. case model.PartitionTypeHash: - return errors.Trace(ErrUnsupportedCoalescePartition) + return errors.Trace(dbterror.ErrUnsupportedCoalescePartition) // Key type partition cannot be constructed currently, ignoring it for now. case model.PartitionTypeKey: // Coalesce partition can only be used on hash/key partitions. default: - return errors.Trace(ErrCoalesceOnlyOnHashPartition) + return errors.Trace(dbterror.ErrCoalesceOnlyOnHashPartition) } return errors.Trace(err) @@ -3491,7 +3670,7 @@ func (d *ddl) TruncateTablePartition(ctx sessionctx.Context, ident ast.Ident, sp } meta := t.Meta() if meta.GetPartitionInfo() == nil { - return errors.Trace(ErrPartitionMgmtOnNonpartitioned) + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } var pids []int64 @@ -3529,7 +3708,7 @@ func (d *ddl) TruncateTablePartition(ctx sessionctx.Context, ident ast.Ident, sp Args: []interface{}{pids}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err != nil { return errors.Trace(err) } @@ -3549,7 +3728,7 @@ func (d *ddl) DropTablePartition(ctx sessionctx.Context, ident ast.Ident, spec * } meta := t.Meta() if meta.GetPartitionInfo() == nil { - return errors.Trace(ErrPartitionMgmtOnNonpartitioned) + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } partNames := make([]string, len(spec.PartitionNames)) @@ -3558,7 +3737,7 @@ func (d *ddl) DropTablePartition(ctx sessionctx.Context, ident ast.Ident, spec * } err = checkDropTablePartition(meta, partNames) if err != nil { - if ErrDropPartitionNonExistent.Equal(err) && spec.IfExists { + if dbterror.ErrDropPartitionNonExistent.Equal(err) && spec.IfExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil } @@ -3574,9 +3753,9 @@ func (d *ddl) DropTablePartition(ctx sessionctx.Context, ident ast.Ident, spec * Args: []interface{}{partNames}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err != nil { - if ErrDropPartitionNonExistent.Equal(err) && spec.IfExists { + if dbterror.ErrDropPartitionNonExistent.Equal(err) && spec.IfExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil } @@ -3637,34 +3816,34 @@ func checkTableDefCompatible(source *model.TableInfo, target *model.TableInfo) e source.ShardRowIDBits != target.ShardRowIDBits || source.MaxShardRowIDBits != target.MaxShardRowIDBits || !checkTiFlashReplicaCompatible(source.TiFlashReplica, target.TiFlashReplica) { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } if len(source.Cols()) != len(target.Cols()) { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } // Col compatible check for i, sourceCol := range source.Cols() { targetCol := target.Cols()[i] if isVirtualGeneratedColumn(sourceCol) != isVirtualGeneratedColumn(targetCol) { - return ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Exchanging partitions for non-generated columns") + return dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Exchanging partitions for non-generated columns") } // It should strictyle compare expressions for generated columns if sourceCol.Name.L != targetCol.Name.L || sourceCol.Hidden != targetCol.Hidden || !checkFieldTypeCompatible(&sourceCol.FieldType, &targetCol.FieldType) || sourceCol.GeneratedExprString != targetCol.GeneratedExprString { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } if sourceCol.State != model.StatePublic || targetCol.State != model.StatePublic { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } if sourceCol.ID != targetCol.ID { - return ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("column: %s", sourceCol.Name)) + return dbterror.ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("column: %s", sourceCol.Name)) } } if len(source.Indices) != len(target.Indices) { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } for _, sourceIdx := range source.Indices { var compatIdx *model.IndexInfo @@ -3675,27 +3854,27 @@ func checkTableDefCompatible(source *model.TableInfo, target *model.TableInfo) e } // No match index if compatIdx == nil { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } // Index type is not compatible if sourceIdx.Tp != compatIdx.Tp || sourceIdx.Unique != compatIdx.Unique || sourceIdx.Primary != compatIdx.Primary { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } // The index column if len(sourceIdx.Columns) != len(compatIdx.Columns) { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } for i, sourceIdxCol := range sourceIdx.Columns { compatIdxCol := compatIdx.Columns[i] if sourceIdxCol.Length != compatIdxCol.Length || sourceIdxCol.Name.L != compatIdxCol.Name.L { - return errors.Trace(ErrTablesDifferentMetadata) + return errors.Trace(dbterror.ErrTablesDifferentMetadata) } } if sourceIdx.ID != compatIdx.ID { - return ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("index: %s", sourceIdx.Name)) + return dbterror.ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("index: %s", sourceIdx.Name)) } } @@ -3704,17 +3883,17 @@ func checkTableDefCompatible(source *model.TableInfo, target *model.TableInfo) e func checkExchangePartition(pt *model.TableInfo, nt *model.TableInfo) error { if nt.IsView() || nt.IsSequence() { - return errors.Trace(ErrCheckNoSuchTable) + return errors.Trace(dbterror.ErrCheckNoSuchTable) } if pt.GetPartitionInfo() == nil { - return errors.Trace(ErrPartitionMgmtOnNonpartitioned) + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } if nt.GetPartitionInfo() != nil { - return errors.Trace(ErrPartitionExchangePartTable.GenWithStackByArgs(nt.Name)) + return errors.Trace(dbterror.ErrPartitionExchangePartTable.GenWithStackByArgs(nt.Name)) } if nt.ForeignKeys != nil { - return errors.Trace(ErrPartitionExchangeForeignKey.GenWithStackByArgs(nt.Name)) + return errors.Trace(dbterror.ErrPartitionExchangeForeignKey.GenWithStackByArgs(nt.Name)) } // NOTE: if nt is temporary table, it should be checked @@ -3723,7 +3902,7 @@ func checkExchangePartition(pt *model.TableInfo, nt *model.TableInfo) error { func (d *ddl) ExchangeTablePartition(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { if !ctx.GetSessionVars().TiDBEnableExchangePartition { - ctx.GetSessionVars().StmtCtx.AppendWarning(errExchangePartitionDisabled) + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrExchangePartitionDisabled) return nil } ptSchema, pt, err := d.getSchemaAndTableByIdent(ctx, ident) @@ -3769,7 +3948,7 @@ func (d *ddl) ExchangeTablePartition(ctx sessionctx.Context, ident ast.Ident, sp Args: []interface{}{defID, ptSchema.ID, ptMeta.ID, partName, spec.WithValidation}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err != nil { return errors.Trace(err) } @@ -3811,9 +3990,9 @@ func (d *ddl) DropColumn(ctx sessionctx.Context, ti ast.Ident, spec *ast.AlterTa Args: []interface{}{colName}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) // column not exists, but if_exists flags is true, so we ignore this error. - if ErrCantDropFieldOrKey.Equal(err) && spec.IfExists { + if dbterror.ErrCantDropFieldOrKey.Equal(err) && spec.IfExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil } @@ -3839,7 +4018,7 @@ func (d *ddl) DropColumns(ctx sessionctx.Context, ti ast.Ident, specs []*ast.Alt dupColumnNames[spec.OldColumnName.Name.L] = true continue } - return errors.Trace(ErrCantDropFieldOrKey.GenWithStack("column %s doesn't exist", spec.OldColumnName.Name.O)) + return errors.Trace(dbterror.ErrCantDropFieldOrKey.GenWithStack("column %s doesn't exist", spec.OldColumnName.Name.O)) } } @@ -3847,7 +4026,7 @@ func (d *ddl) DropColumns(ctx sessionctx.Context, ti ast.Ident, specs []*ast.Alt colNames := make([]model.CIStr, 0, len(specs)) for _, spec := range specs { if spec.IfExists && dupColumnNames[spec.OldColumnName.Name.L] { - err = ErrCantDropFieldOrKey.GenWithStack("column %s doesn't exist", spec.OldColumnName.Name.L) + err = dbterror.ErrCantDropFieldOrKey.GenWithStack("column %s doesn't exist", spec.OldColumnName.Name.L) ctx.GetSessionVars().StmtCtx.AppendNote(err) continue } @@ -3866,7 +4045,7 @@ func (d *ddl) DropColumns(ctx sessionctx.Context, ti ast.Ident, specs []*ast.Alt return nil } if len(tblInfo.Columns) == len(colNames) { - return ErrCantRemoveAllFields.GenWithStack("can't drop all columns in table %s", + return dbterror.ErrCantRemoveAllFields.GenWithStack("can't drop all columns in table %s", tblInfo.Name) } err = checkDropVisibleColumnCnt(t, len(colNames)) @@ -3888,7 +4067,7 @@ func (d *ddl) DropColumns(ctx sessionctx.Context, ti ast.Ident, specs []*ast.Alt Args: []interface{}{colNames, ifExists}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err != nil { return errors.Trace(err) } @@ -3902,7 +4081,7 @@ func checkIsDroppableColumn(ctx sessionctx.Context, t table.Table, spec *ast.Alt colName := spec.OldColumnName.Name col := table.FindCol(t.VisibleCols(), colName.L) if col == nil { - err = ErrCantDropFieldOrKey.GenWithStackByArgs(colName) + err = dbterror.ErrCantDropFieldOrKey.GenWithStackByArgs(colName) if spec.IfExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return false, nil @@ -3915,7 +4094,7 @@ func checkIsDroppableColumn(ctx sessionctx.Context, t table.Table, spec *ast.Alt } // We don't support dropping column with PK handle covered now. if col.IsPKHandleColumn(tblInfo) { - return false, errUnsupportedPKHandle + return false, dbterror.ErrUnsupportedPKHandle } return true, nil } @@ -3931,7 +4110,7 @@ func checkDropVisibleColumnCnt(t table.Table, columnCnt int) error { return nil } } - return ErrTableMustHaveColumns + return dbterror.ErrTableMustHaveColumns } // checkModifyCharsetAndCollation returns error when the charset or collation is not modifiable. @@ -3939,11 +4118,11 @@ func checkDropVisibleColumnCnt(t table.Table, columnCnt int) error { // index because index of a string column is collation-aware. func checkModifyCharsetAndCollation(toCharset, toCollate, origCharset, origCollate string, needRewriteCollationData bool) error { if !charset.ValidCharsetAndCollation(toCharset, toCollate) { - return ErrUnknownCharacterSet.GenWithStack("Unknown character set: '%s', collation: '%s'", toCharset, toCollate) + return dbterror.ErrUnknownCharacterSet.GenWithStack("Unknown character set: '%s', collation: '%s'", toCharset, toCollate) } if needRewriteCollationData && collate.NewCollationEnabled() && !collate.CompatibleCollate(origCollate, toCollate) { - return errUnsupportedModifyCollation.GenWithStackByArgs(origCollate, toCollate) + return dbterror.ErrUnsupportedModifyCollation.GenWithStackByArgs(origCollate, toCollate) } if (origCharset == charset.CharsetUTF8 && toCharset == charset.CharsetUTF8MB4) || @@ -3955,156 +4134,27 @@ func checkModifyCharsetAndCollation(toCharset, toCollate, origCharset, origColla if toCharset != origCharset { msg := fmt.Sprintf("charset from %s to %s", origCharset, toCharset) - return errUnsupportedModifyCharset.GenWithStackByArgs(msg) + return dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs(msg) } if toCollate != origCollate { msg := fmt.Sprintf("change collate from %s to %s", origCollate, toCollate) - return errUnsupportedModifyCharset.GenWithStackByArgs(msg) + return dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs(msg) } return nil } -// CheckModifyTypeCompatible checks whether changes column type to another is compatible and can be changed. -// If types are compatible and can be directly changed, nil err will be returned; otherwise the types are incompatible. -// There are two cases when types incompatible: -// 1. returned canReorg == true: types can be changed by reorg -// 2. returned canReorg == false: type change not supported yet -func CheckModifyTypeCompatible(origin *types.FieldType, to *types.FieldType) (canReorg bool, err error) { - // Deal with the same type. - if origin.Tp == to.Tp { - if origin.Tp == mysql.TypeEnum || origin.Tp == mysql.TypeSet { - typeVar := "set" - if origin.Tp == mysql.TypeEnum { - typeVar = "enum" - } - if len(to.Elems) < len(origin.Elems) { - msg := fmt.Sprintf("the number of %s column's elements is less than the original: %d", typeVar, len(origin.Elems)) - return true, errUnsupportedModifyColumn.GenWithStackByArgs(msg) - } - for index, originElem := range origin.Elems { - toElem := to.Elems[index] - if originElem != toElem { - msg := fmt.Sprintf("cannot modify %s column value %s to %s", typeVar, originElem, toElem) - return true, errUnsupportedModifyColumn.GenWithStackByArgs(msg) - } - } - } - - if origin.Tp == mysql.TypeNewDecimal { - // Floating-point and fixed-point types also can be UNSIGNED. As with integer types, this attribute prevents - // negative values from being stored in the column. Unlike the integer types, the upper range of column values - // remains the same. - if to.Flen != origin.Flen || to.Decimal != origin.Decimal || mysql.HasUnsignedFlag(to.Flag) != mysql.HasUnsignedFlag(origin.Flag) { - msg := fmt.Sprintf("decimal change from decimal(%d, %d) to decimal(%d, %d)", origin.Flen, origin.Decimal, to.Flen, to.Decimal) - return true, errUnsupportedModifyColumn.GenWithStackByArgs(msg) - } - } - - needReorg, reason := needReorgToChange(origin, to) - if !needReorg { - return false, nil - } - return true, errUnsupportedModifyColumn.GenWithStackByArgs(reason) - } - - // Deal with the different type. - if !checkTypeChangeSupported(origin, to) { - unsupportedMsg := fmt.Sprintf("change from original type %v to %v is currently unsupported yet", origin.CompactStr(), to.CompactStr()) - return false, errUnsupportedModifyColumn.GenWithStackByArgs(unsupportedMsg) - } - - // Check if different type can directly convert and no need to reorg. - stringToString := types.IsString(origin.Tp) && types.IsString(to.Tp) - integerToInteger := mysql.IsIntegerType(origin.Tp) && mysql.IsIntegerType(to.Tp) - if stringToString || integerToInteger { - needReorg, reason := needReorgToChange(origin, to) - if !needReorg { - return false, nil - } - return true, errUnsupportedModifyColumn.GenWithStackByArgs(reason) - } - - notCompatibleMsg := fmt.Sprintf("type %v not match origin %v", to.CompactStr(), origin.CompactStr()) - return true, errUnsupportedModifyColumn.GenWithStackByArgs(notCompatibleMsg) -} - -func needReorgToChange(origin *types.FieldType, to *types.FieldType) (needReorg bool, reasonMsg string) { - toFlen := to.Flen - originFlen := origin.Flen - if mysql.IsIntegerType(to.Tp) && mysql.IsIntegerType(origin.Tp) { - // For integers, we should ignore the potential display length represented by flen, using - // the default flen of the type. - originFlen, _ = mysql.GetDefaultFieldLengthAndDecimal(origin.Tp) - toFlen, _ = mysql.GetDefaultFieldLengthAndDecimal(to.Tp) - } - - if convertBetweenCharAndVarchar(origin.Tp, to.Tp) { - return true, "conversion between char and varchar string needs reorganization" - } - - if toFlen > 0 && toFlen != originFlen { - if toFlen < originFlen { - return true, fmt.Sprintf("length %d is less than origin %d", toFlen, originFlen) - } - - // Due to the behavior of padding \x00 at binary type, we need to reorg when binary length changed - isBinaryType := func(tp *types.FieldType) bool { return tp.Tp == mysql.TypeString && types.IsBinaryStr(tp) } - if isBinaryType(origin) && isBinaryType(to) { - return true, "can't change binary types of different length" - } - } - if to.Decimal > 0 && to.Decimal < origin.Decimal { - return true, fmt.Sprintf("decimal %d is less than origin %d", to.Decimal, origin.Decimal) - } - if mysql.HasUnsignedFlag(origin.Flag) != mysql.HasUnsignedFlag(to.Flag) { - return true, "can't change unsigned integer to signed or vice versa" - } - return false, "" -} - -func checkTypeChangeSupported(origin *types.FieldType, to *types.FieldType) bool { - if (types.IsTypeTime(origin.Tp) || origin.Tp == mysql.TypeDuration || origin.Tp == mysql.TypeYear || - types.IsString(origin.Tp) || origin.Tp == mysql.TypeJSON) && - to.Tp == mysql.TypeBit { - // TODO: Currently date/datetime/timestamp/time/year/string/json data type cast to bit are not compatible with mysql, should fix here after compatible. - return false - } - - if (types.IsTypeTime(origin.Tp) || origin.Tp == mysql.TypeDuration || origin.Tp == mysql.TypeYear || - origin.Tp == mysql.TypeNewDecimal || origin.Tp == mysql.TypeFloat || origin.Tp == mysql.TypeDouble || origin.Tp == mysql.TypeJSON || origin.Tp == mysql.TypeBit) && - (to.Tp == mysql.TypeEnum || to.Tp == mysql.TypeSet) { - // TODO: Currently date/datetime/timestamp/time/year/decimal/float/double/json/bit cast to enum/set are not support yet, should fix here after supported. - return false - } - - if (origin.Tp == mysql.TypeEnum || origin.Tp == mysql.TypeSet || origin.Tp == mysql.TypeBit || - origin.Tp == mysql.TypeNewDecimal || origin.Tp == mysql.TypeFloat || origin.Tp == mysql.TypeDouble) && - (types.IsTypeTime(to.Tp)) { - // TODO: Currently enum/set/bit/decimal/float/double cast to date/datetime/timestamp type are not support yet, should fix here after supported. - return false - } - - if (origin.Tp == mysql.TypeEnum || origin.Tp == mysql.TypeSet || origin.Tp == mysql.TypeBit) && - to.Tp == mysql.TypeDuration { - // TODO: Currently enum/set/bit cast to time are not support yet, should fix here after supported. - return false - } - - return true -} - // checkModifyTypes checks if the 'origin' type can be modified to 'to' type no matter directly change // or change by reorg. It returns error if the two types are incompatible and correlated change are not // supported. However, even the two types can be change, if the "origin" type contains primary key, error will be returned. func checkModifyTypes(ctx sessionctx.Context, origin *types.FieldType, to *types.FieldType, needRewriteCollationData bool) error { - canReorg, err := CheckModifyTypeCompatible(origin, to) + canReorg, err := types.CheckModifyTypeCompatible(origin, to) if err != nil { if !canReorg { - return errors.Trace(err) + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(err.Error())) } if mysql.HasPriKeyFlag(origin.Flag) { msg := "this column has primary key flag" - return errUnsupportedModifyColumn.GenWithStackByArgs(msg) + return dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg) } } @@ -4115,7 +4165,7 @@ func checkModifyTypes(ctx sessionctx.Context, origin *types.FieldType, to *types return errors.Trace(err) } // column type change can handle the charset change between these two types in the process of the reorg. - if errUnsupportedModifyCharset.Equal(err) && canReorg { + if dbterror.ErrUnsupportedModifyCharset.Equal(err) && canReorg { return nil } } @@ -4204,15 +4254,15 @@ func processColumnOptions(ctx sessionctx.Context, col *table.Column, options []* case ast.ColumnOptionAutoIncrement: col.Flag |= mysql.AutoIncrementFlag case ast.ColumnOptionPrimaryKey, ast.ColumnOptionUniqKey: - return errUnsupportedModifyColumn.GenWithStack("can't change column constraint - %v", opt.Tp) + return dbterror.ErrUnsupportedModifyColumn.GenWithStack("can't change column constraint - %v", opt.Tp) case ast.ColumnOptionOnUpdate: // TODO: Support other time functions. if col.Tp == mysql.TypeTimestamp || col.Tp == mysql.TypeDatetime { if !expression.IsValidCurrentTimestampExpr(opt.Expr, &col.FieldType) { - return ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) + return dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) } } else { - return ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) + return dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) } col.Flag |= mysql.OnUpdateNowFlag setOnUpdateNow = true @@ -4232,15 +4282,15 @@ func processColumnOptions(ctx sessionctx.Context, col *table.Column, options []* case ast.ColumnOptionCollate: col.Collate = opt.StrValue case ast.ColumnOptionReference: - return errors.Trace(errUnsupportedModifyColumn.GenWithStackByArgs("can't modify with references")) + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with references")) case ast.ColumnOptionFulltext: - return errors.Trace(errUnsupportedModifyColumn.GenWithStackByArgs("can't modify with full text")) + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with full text")) case ast.ColumnOptionCheck: - return errors.Trace(errUnsupportedModifyColumn.GenWithStackByArgs("can't modify with check")) + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with check")) // Ignore ColumnOptionAutoRandom. It will be handled later. case ast.ColumnOptionAutoRandom: default: - return errors.Trace(errUnsupportedModifyColumn.GenWithStackByArgs(fmt.Sprintf("unknown column option type: %d", opt.Tp))) + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(fmt.Sprintf("unknown column option type: %d", opt.Tp))) } } @@ -4290,7 +4340,7 @@ func (d *ddl) getModifiableColumnJob(ctx context.Context, sctx sessionctx.Contex } newColName := specNewColumn.Name.Name if newColName.L == model.ExtraHandleName.L { - return nil, ErrWrongColumnName.GenWithStackByArgs(newColName.L) + return nil, dbterror.ErrWrongColumnName.GenWithStackByArgs(newColName.L) } // If we want to rename the column name, we need to check whether it already exists. if newColName.L != originalColName.L { @@ -4304,7 +4354,7 @@ func (d *ddl) getModifiableColumnJob(ctx context.Context, sctx sessionctx.Contex // which will be done by `processColumnOptions` later. if specNewColumn.Tp == nil { // Make sure the column definition is simple field type. - return nil, errors.Trace(errUnsupportedModifyColumn) + return nil, errors.Trace(dbterror.ErrUnsupportedModifyColumn) } if err = checkColumnAttributes(specNewColumn.Name.OrigColName(), specNewColumn.Tp); err != nil { @@ -4361,7 +4411,7 @@ func (d *ddl) getModifiableColumnJob(ctx context.Context, sctx sessionctx.Contex // For now we strongly ban the all column type change for column with foreign key. // Actually MySQL support change column with foreign key from varchar(m) -> varchar(m+t) and t > 0. if newCol.Tp != col.Tp || newCol.Flen != col.Flen || newCol.Decimal != col.Decimal { - return nil, errFKIncompatibleColumns.GenWithStackByArgs(originalColName, fkInfo.Name) + return nil, dbterror.ErrFKIncompatibleColumns.GenWithStackByArgs(originalColName, fkInfo.Name) } } @@ -4380,7 +4430,7 @@ func (d *ddl) getModifiableColumnJob(ctx context.Context, sctx sessionctx.Contex if err = checkModifyTypes(sctx, &col.FieldType, &newCol.FieldType, isColumnWithIndex(col.Name.L, t.Meta().Indices)); err != nil { if strings.Contains(err.Error(), "Unsupported modifying collation") { colErrMsg := "Unsupported modifying collation of column '%s' from '%s' to '%s' when index is defined on it." - err = errUnsupportedModifyCollation.GenWithStack(colErrMsg, col.Name.L, col.Collate, newCol.Collate) + err = dbterror.ErrUnsupportedModifyCollation.GenWithStack(colErrMsg, col.Name.L, col.Collate, newCol.Collate) } return nil, errors.Trace(err) } @@ -4390,17 +4440,17 @@ func (d *ddl) getModifiableColumnJob(ctx context.Context, sctx sessionctx.Contex return nil, errors.Trace(err) } if t.Meta().Partition != nil { - return nil, errUnsupportedModifyColumn.GenWithStackByArgs("table is partition table") + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("table is partition table") } } // We don't support modifying column from not_auto_increment to auto_increment. if !mysql.HasAutoIncrementFlag(col.Flag) && mysql.HasAutoIncrementFlag(newCol.Flag) { - return nil, errUnsupportedModifyColumn.GenWithStackByArgs("can't set auto_increment") + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't set auto_increment") } // Disallow modifying column from auto_increment to not auto_increment if the session variable `AllowRemoveAutoInc` is false. if !sctx.GetSessionVars().AllowRemoveAutoInc && mysql.HasAutoIncrementFlag(col.Flag) && !mysql.HasAutoIncrementFlag(newCol.Flag) { - return nil, errUnsupportedModifyColumn.GenWithStackByArgs("can't remove auto_increment without @@tidb_allow_remove_auto_inc enabled") + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't remove auto_increment without @@tidb_allow_remove_auto_inc enabled") } // We support modifying the type definitions of 'null' to 'not null' now. @@ -4513,7 +4563,7 @@ func checkIndexInModifiableColumns(columns []*model.ColumnInfo, idxColumns []*mo for _, ic := range idxColumns { col := model.FindColumnInfo(columns, ic.Name.L) if col == nil { - return errKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", ic.Name) + return dbterror.ErrKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", ic.Name) } prefixLength := types.UnspecifiedLength @@ -4546,38 +4596,38 @@ func checkAutoRandom(tableInfo *model.TableInfo, originCol *table.Column, specNe if addingAutoRandom { convFromAutoInc := mysql.HasAutoIncrementFlag(originCol.Flag) && originCol.IsPKHandleColumn(tableInfo) if !convFromAutoInc { - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomAlterChangeFromAutoInc) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomAlterChangeFromAutoInc) } } if autoid.MaxAutoRandomBits < newRandBits { errMsg := fmt.Sprintf(autoid.AutoRandomOverflowErrMsg, autoid.MaxAutoRandomBits, newRandBits, specNewColumn.Name.Name.O) - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) } // increasing auto_random shard bits is allowed. case oldRandBits > newRandBits: if newRandBits == 0 { - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomAlterErrMsg) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomAlterErrMsg) } - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomDecreaseBitErrMsg) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomDecreaseBitErrMsg) } modifyingAutoRandCol := oldRandBits > 0 || newRandBits > 0 if modifyingAutoRandCol { // Disallow changing the column field type. if originCol.Tp != specNewColumn.Tp.Tp { - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomModifyColTypeErrMsg) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomModifyColTypeErrMsg) } if originCol.Tp != mysql.TypeLonglong { - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(fmt.Sprintf(autoid.AutoRandomOnNonBigIntColumn, types.TypeStr(originCol.Tp))) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(fmt.Sprintf(autoid.AutoRandomOnNonBigIntColumn, types.TypeStr(originCol.Tp))) } // Disallow changing from auto_random to auto_increment column. if containsColumnOption(specNewColumn, ast.ColumnOptionAutoIncrement) { - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithAutoIncErrMsg) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithAutoIncErrMsg) } // Disallow specifying a default value on auto_random column. if containsColumnOption(specNewColumn, ast.ColumnOptionDefaultValue) { - return 0, ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) } } return newRandBits, nil @@ -4589,16 +4639,16 @@ func checkAutoRandom(tableInfo *model.TableInfo, originCol *table.Column, specNe func (d *ddl) ChangeColumn(ctx context.Context, sctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { specNewColumn := spec.NewColumns[0] if len(specNewColumn.Name.Schema.O) != 0 && ident.Schema.L != specNewColumn.Name.Schema.L { - return ErrWrongDBName.GenWithStackByArgs(specNewColumn.Name.Schema.O) + return dbterror.ErrWrongDBName.GenWithStackByArgs(specNewColumn.Name.Schema.O) } if len(spec.OldColumnName.Schema.O) != 0 && ident.Schema.L != spec.OldColumnName.Schema.L { - return ErrWrongDBName.GenWithStackByArgs(spec.OldColumnName.Schema.O) + return dbterror.ErrWrongDBName.GenWithStackByArgs(spec.OldColumnName.Schema.O) } if len(specNewColumn.Name.Table.O) != 0 && ident.Name.L != specNewColumn.Name.Table.L { - return ErrWrongTableName.GenWithStackByArgs(specNewColumn.Name.Table.O) + return dbterror.ErrWrongTableName.GenWithStackByArgs(specNewColumn.Name.Table.O) } if len(spec.OldColumnName.Table.O) != 0 && ident.Name.L != spec.OldColumnName.Table.L { - return ErrWrongTableName.GenWithStackByArgs(spec.OldColumnName.Table.O) + return dbterror.ErrWrongTableName.GenWithStackByArgs(spec.OldColumnName.Table.O) } job, err := d.getModifiableColumnJob(ctx, sctx, ident, spec.OldColumnName.Name, spec) @@ -4610,7 +4660,7 @@ func (d *ddl) ChangeColumn(ctx context.Context, sctx sessionctx.Context, ident a return errors.Trace(err) } - err = d.doDDLJob(sctx, job) + err = d.DoDDLJob(sctx, job) // column not exists, but if_exists flags is true, so we ignore this error. if infoschema.ErrColumnNotExists.Equal(err) && spec.IfExists { sctx.GetSessionVars().StmtCtx.AppendNote(err) @@ -4628,7 +4678,7 @@ func (d *ddl) RenameColumn(ctx sessionctx.Context, ident ast.Ident, spec *ast.Al return nil } if newColName.L == model.ExtraHandleName.L { - return ErrWrongColumnName.GenWithStackByArgs(newColName.L) + return dbterror.ErrWrongColumnName.GenWithStackByArgs(newColName.L) } schema, tbl, err := d.getSchemaAndTableByIdent(ctx, ident) @@ -4648,7 +4698,7 @@ func (d *ddl) RenameColumn(ctx sessionctx.Context, ident ast.Ident, spec *ast.Al } if fkInfo := getColumnForeignKeyInfo(oldColName.L, tbl.Meta().ForeignKeys); fkInfo != nil { - return errFKIncompatibleColumns.GenWithStackByArgs(oldColName, fkInfo.Name) + return dbterror.ErrFKIncompatibleColumns.GenWithStackByArgs(oldColName, fkInfo.Name) } // Check generated expression. @@ -4660,9 +4710,9 @@ func (d *ddl) RenameColumn(ctx sessionctx.Context, ident ast.Ident, spec *ast.Al for _, name := range dependedColNames { if name.Name.L == oldColName.L { if col.Hidden { - return errDependentByFunctionalIndex.GenWithStackByArgs(oldColName.O) + return dbterror.ErrDependentByFunctionalIndex.GenWithStackByArgs(oldColName.O) } - return errDependentByGeneratedColumn.GenWithStackByArgs(oldColName.O) + return dbterror.ErrDependentByGeneratedColumn.GenWithStackByArgs(oldColName.O) } } } @@ -4683,9 +4733,9 @@ func (d *ddl) RenameColumn(ctx sessionctx.Context, ident ast.Ident, spec *ast.Al WarningsCount: make(map[errors.ErrorID]int64), Location: &model.TimeZoneLocation{Name: tzName, Offset: tzOffset}, }, - Args: []interface{}{&newCol, oldColName, spec.Position, 0}, + Args: []interface{}{&newCol, oldColName, spec.Position, 0, 0}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -4695,10 +4745,10 @@ func (d *ddl) RenameColumn(ctx sessionctx.Context, ident ast.Ident, spec *ast.Al func (d *ddl) ModifyColumn(ctx context.Context, sctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { specNewColumn := spec.NewColumns[0] if len(specNewColumn.Name.Schema.O) != 0 && ident.Schema.L != specNewColumn.Name.Schema.L { - return ErrWrongDBName.GenWithStackByArgs(specNewColumn.Name.Schema.O) + return dbterror.ErrWrongDBName.GenWithStackByArgs(specNewColumn.Name.Schema.O) } if len(specNewColumn.Name.Table.O) != 0 && ident.Name.L != specNewColumn.Name.Table.L { - return ErrWrongTableName.GenWithStackByArgs(specNewColumn.Name.Table.O) + return dbterror.ErrWrongTableName.GenWithStackByArgs(specNewColumn.Name.Table.O) } originalColName := specNewColumn.Name.Name @@ -4711,7 +4761,7 @@ func (d *ddl) ModifyColumn(ctx context.Context, sctx sessionctx.Context, ident a return errors.Trace(err) } - err = d.doDDLJob(sctx, job) + err = d.DoDDLJob(sctx, job) // column not exists, but if_exists flags is true, so we ignore this error. if infoschema.ErrColumnNotExists.Equal(err) && spec.IfExists { sctx.GetSessionVars().StmtCtx.AppendNote(err) @@ -4737,7 +4787,7 @@ func (d *ddl) AlterColumn(ctx sessionctx.Context, ident ast.Ident, spec *ast.Alt // Check whether alter column has existed. oldCol := table.FindCol(t.Cols(), colName.L) if oldCol == nil { - return ErrBadField.GenWithStackByArgs(colName, ident.Name) + return dbterror.ErrBadField.GenWithStackByArgs(colName, ident.Name) } col := table.ToColumn(oldCol.Clone()) @@ -4751,7 +4801,7 @@ func (d *ddl) AlterColumn(ctx sessionctx.Context, ident ast.Ident, spec *ast.Alt setNoDefaultValueFlag(col, false) } else { if IsAutoRandomColumnID(t.Meta(), col.ID) { - return ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) } hasDefaultValue, err := setDefaultValue(ctx, col, specNewColumn.Options[0]) if err != nil { @@ -4771,7 +4821,7 @@ func (d *ddl) AlterColumn(ctx sessionctx.Context, ident ast.Ident, spec *ast.Alt Args: []interface{}{col}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -4798,7 +4848,7 @@ func (d *ddl) AlterTableComment(ctx sessionctx.Context, ident ast.Ident, spec *a Args: []interface{}{spec.Comment}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -4819,7 +4869,7 @@ func (d *ddl) AlterTableAutoIDCache(ctx sessionctx.Context, ident ast.Ident, new Args: []interface{}{newCache}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -4828,7 +4878,7 @@ func (d *ddl) AlterTableAutoIDCache(ctx sessionctx.Context, ident ast.Ident, new func (d *ddl) AlterTableCharsetAndCollate(ctx sessionctx.Context, ident ast.Ident, toCharset, toCollate string, needsOverwriteCols bool) error { // use the last one. if toCharset == "" && toCollate == "" { - return ErrUnknownCharacterSet.GenWithStackByArgs(toCharset) + return dbterror.ErrUnknownCharacterSet.GenWithStackByArgs(toCharset) } is := d.infoCache.GetLatest() @@ -4870,7 +4920,7 @@ func (d *ddl) AlterTableCharsetAndCollate(ctx sessionctx.Context, ident ast.Iden BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{toCharset, toCollate, needsOverwriteCols}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -4896,16 +4946,16 @@ func (d *ddl) AlterTableSetTiFlashReplica(ctx sessionctx.Context, ident ast.Iden } // Ban setting replica count for tables in system database. if util.IsMemOrSysDB(schema.Name.L) { - return errors.Trace(errUnsupportedAlterReplicaForSysTable) + return errors.Trace(dbterror.ErrUnsupportedAlterReplicaForSysTable) } else if tb.Meta().TempTableType != model.TempTableNone { - return ErrOptOnTemporaryTable.GenWithStackByArgs("set tiflash replica") + return dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("set tiflash replica") } // Ban setting replica count for tables which has charset not supported by TiFlash for _, col := range tb.Cols() { _, ok := charset.TiFlashSupportedCharsets[col.Charset] if !ok { - return errAlterReplicaForUnsupportedCharsetTable.GenWithStackByArgs(col.Charset) + return dbterror.ErrAlterReplicaForUnsupportedCharsetTable.GenWithStackByArgs(col.Charset) } } @@ -4927,7 +4977,7 @@ func (d *ddl) AlterTableSetTiFlashReplica(ctx sessionctx.Context, ident ast.Iden BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{*replicaInfo}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5036,7 +5086,7 @@ func (d *ddl) UpdateTableReplicaInfo(ctx sessionctx.Context, physicalID int64, a BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{available, physicalID}, } - err := d.doDDLJob(ctx, job) + err := d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5100,7 +5150,7 @@ func checkAlterTableCharset(tblInfo *model.TableInfo, dbInfo *model.DBInfo, toCh if err = checkModifyCharsetAndCollation(toCharset, toCollate, col.Charset, col.Collate, isColumnWithIndex(col.Name.L, tblInfo.Indices)); err != nil { if strings.Contains(err.Error(), "Unsupported modifying collation") { colErrMsg := "Unsupported converting collation of column '%s' from '%s' to '%s' when index is defined on it." - err = errUnsupportedModifyCollation.GenWithStack(colErrMsg, col.Name.L, col.Collate, toCollate) + err = dbterror.ErrUnsupportedModifyCollation.GenWithStack(colErrMsg, col.Name.L, col.Collate, toCollate) } return doNothing, err } @@ -5123,7 +5173,7 @@ func (d *ddl) RenameIndex(ctx sessionctx.Context, ident ast.Ident, spec *ast.Alt return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) } if tb.Meta().TableCacheStatusType != model.TableCacheStatusDisable { - return errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("Rename Index")) + return errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Rename Index")) } duplicate, err := validateRenameIndex(spec.FromKey, spec.ToKey, tb.Meta()) if duplicate { @@ -5142,7 +5192,7 @@ func (d *ddl) RenameIndex(ctx sessionctx.Context, ident ast.Ident, spec *ast.Alt Args: []interface{}{spec.FromKey, spec.ToKey}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5160,6 +5210,9 @@ func (d *ddl) DropTable(ctx sessionctx.Context, ti ast.Ident) (err error) { if tb.Meta().IsSequence() { return infoschema.ErrTableNotExists.GenWithStackByArgs(ti.Schema, ti.Name) } + if tb.Meta().TableCacheStatusType != model.TableCacheStatusDisable { + return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Drop Table") + } job := &model.Job{ SchemaID: schema.ID, @@ -5169,7 +5222,7 @@ func (d *ddl) DropTable(ctx sessionctx.Context, ti ast.Ident) (err error) { BinlogInfo: &model.HistoryInfo{}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) if err != nil { return errors.Trace(err) @@ -5191,7 +5244,7 @@ func (d *ddl) DropView(ctx sessionctx.Context, ti ast.Ident) (err error) { } if !tb.Meta().IsView() { - return ErrWrongObject.GenWithStackByArgs(ti.Schema, ti.Name, "VIEW") + return dbterror.ErrWrongObject.GenWithStackByArgs(ti.Schema, ti.Name, "VIEW") } job := &model.Job{ @@ -5202,7 +5255,7 @@ func (d *ddl) DropView(ctx sessionctx.Context, ti ast.Ident) (err error) { BinlogInfo: &model.HistoryInfo{}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5215,6 +5268,10 @@ func (d *ddl) TruncateTable(ctx sessionctx.Context, ti ast.Ident) error { if tb.Meta().IsView() || tb.Meta().IsSequence() { return infoschema.ErrTableNotExists.GenWithStackByArgs(schema.Name.O, tb.Meta().Name.O) } + if tb.Meta().TableCacheStatusType != model.TableCacheStatusDisable { + return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Truncate Table") + } + genIDs, err := d.genGlobalIDs(1) if err != nil { return errors.Trace(err) @@ -5235,7 +5292,7 @@ func (d *ddl) TruncateTable(ctx sessionctx.Context, ti ast.Ident) error { // but the session was killed before return. ctx.AddTableLock([]model.TableLockTpInfo{{SchemaID: schema.ID, TableID: newTableID, Tp: tb.Meta().Lock.Tp}}) } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) if err != nil { if config.TableLockEnabled() { @@ -5268,6 +5325,12 @@ func (d *ddl) RenameTable(ctx sessionctx.Context, oldIdent, newIdent ast.Ident, return nil } + if tbl, ok := is.TableByID(tableID); ok { + if tbl.Meta().TableCacheStatusType != model.TableCacheStatusDisable { + return errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Rename Table")) + } + } + job := &model.Job{ SchemaID: schemas[1].ID, TableID: tableID, @@ -5277,7 +5340,7 @@ func (d *ddl) RenameTable(ctx sessionctx.Context, oldIdent, newIdent ast.Ident, Args: []interface{}{schemas[0].ID, newIdent.Name, schemas[0].Name}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5300,6 +5363,13 @@ func (d *ddl) RenameTables(ctx sessionctx.Context, oldIdents, newIdents []ast.Id if err != nil { return err } + + if t, ok := is.TableByID(tableID); ok { + if t.Meta().TableCacheStatusType != model.TableCacheStatusDisable { + return errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Rename Tables")) + } + } + tableIDs = append(tableIDs, tableID) tableNames = append(tableNames, &newIdents[i].Name) oldSchemaIDs = append(oldSchemaIDs, schemas[0].ID) @@ -5316,7 +5386,7 @@ func (d *ddl) RenameTables(ctx sessionctx.Context, oldIdents, newIdents []ast.Id Args: []interface{}{oldSchemaIDs, newSchemaIDs, tableNames, tableIDs, oldSchemaNames}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5347,7 +5417,7 @@ func extractTblInfos(is infoschema.InfoSchema, oldIdent, newIdent ast.Ident, isA } newSchema, ok := is.SchemaByName(newIdent.Schema) if !ok { - return nil, 0, ErrErrorOnRename.GenWithStackByArgs( + return nil, 0, dbterror.ErrErrorOnRename.GenWithStackByArgs( fmt.Sprintf("%s.%s", oldIdent.Schema, oldIdent.Name), fmt.Sprintf("%s.%s", newIdent.Schema, newIdent.Name), 168, @@ -5423,7 +5493,7 @@ func getAnonymousIndex(t table.Table, colName model.CIStr, idxName model.CIStr) func (d *ddl) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexName model.CIStr, indexPartSpecifications []*ast.IndexPartSpecification, indexOption *ast.IndexOption) error { if indexOption != nil && indexOption.PrimaryKeyTp == model.PrimaryKeyTypeClustered { - return ErrUnsupportedModifyPrimaryKey.GenWithStack("Adding clustered primary key is not supported. " + + return dbterror.ErrUnsupportedModifyPrimaryKey.GenWithStack("Adding clustered primary key is not supported. " + "Please consider adding NONCLUSTERED primary key instead") } schema, t, err := d.getSchemaAndTableByIdent(ctx, ti) @@ -5432,7 +5502,7 @@ func (d *ddl) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexName m } if err = checkTooLongIndex(indexName); err != nil { - return ErrTooLongIdent.GenWithStackByArgs(mysql.PrimaryKeyName) + return dbterror.ErrTooLongIdent.GenWithStackByArgs(mysql.PrimaryKeyName) } indexName = model.NewCIStr(mysql.PrimaryKeyName) @@ -5446,7 +5516,7 @@ func (d *ddl) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexName m // but expression index parts are implemented as virtual generated columns, not stored generated columns. for _, idxPart := range indexPartSpecifications { if idxPart.Expr != nil { - return ErrFunctionalIndexPrimaryKey + return dbterror.ErrFunctionalIndexPrimaryKey } } @@ -5473,7 +5543,7 @@ func (d *ddl) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexName m } if !ck { if !config.GetGlobalConfig().EnableGlobalIndex { - return ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("PRIMARY") + return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("PRIMARY") } // index columns does not contain all partition columns, must set global global = true @@ -5505,7 +5575,7 @@ func (d *ddl) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexName m Priority: ctx.GetSessionVars().DDLReorgPriority, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5527,7 +5597,7 @@ func buildHiddenColumnInfo(ctx sessionctx.Context, indexPartSpecifications []*as // The index part is an expression, prepare a hidden column for it. if utf8.RuneCountInString(idxPart.Column.Name.L) > mysql.MaxColumnNameLength { // TODO: Refine the error message. - return nil, ErrTooLongIdent.GenWithStackByArgs("hidden column") + return nil, dbterror.ErrTooLongIdent.GenWithStackByArgs("hidden column") } // TODO: refine the error message. if err := checkIllegalFn4Generated(indexName.L, typeIndex, idxPart.Expr); err != nil { @@ -5549,7 +5619,7 @@ func buildHiddenColumnInfo(ctx sessionctx.Context, indexPartSpecifications []*as return nil, err } if _, ok := expr.(*expression.Column); ok { - return nil, ErrFunctionalIndexOnField + return nil, dbterror.ErrFunctionalIndexOnField } colInfo := &model.ColumnInfo{ @@ -5594,7 +5664,7 @@ func (d *ddl) CreateIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast.Inde indexPartSpecifications []*ast.IndexPartSpecification, indexOption *ast.IndexOption, ifNotExists bool) error { // not support Spatial and FullText index if keyType == ast.IndexKeyTypeFullText || keyType == ast.IndexKeyTypeSpatial { - return errUnsupportedIndexType.GenWithStack("FULLTEXT and SPATIAL index is not supported") + return dbterror.ErrUnsupportedIndexType.GenWithStack("FULLTEXT and SPATIAL index is not supported") } unique := keyType == ast.IndexKeyTypeUnique schema, t, err := d.getSchemaAndTableByIdent(ctx, ti) @@ -5603,7 +5673,7 @@ func (d *ddl) CreateIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast.Inde } if t.Meta().TableCacheStatusType != model.TableCacheStatusDisable { - return errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("Create Index")) + return errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Create Index")) } // Deal with anonymous index. if len(indexName.L) == 0 { @@ -5617,11 +5687,11 @@ func (d *ddl) CreateIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast.Inde if indexInfo := t.Meta().FindIndexByName(indexName.L); indexInfo != nil { if indexInfo.State != model.StatePublic { // NOTE: explicit error message. See issue #18363. - err = ErrDupKeyName.GenWithStack("index already exist %s; "+ + err = dbterror.ErrDupKeyName.GenWithStack("index already exist %s; "+ "a background job is trying to add the same index, "+ "please check by `ADMIN SHOW DDL JOBS`", indexName) } else { - err = ErrDupKeyName.GenWithStack("index already exist %s", indexName) + err = dbterror.ErrDupKeyName.GenWithStack("index already exist %s", indexName) } if ifNotExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) @@ -5667,7 +5737,7 @@ func (d *ddl) CreateIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast.Inde } if !ck { if !config.GetGlobalConfig().EnableGlobalIndex { - return ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("UNIQUE INDEX") + return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("UNIQUE INDEX") } // index columns does not contain all partition columns, must set global global = true @@ -5695,9 +5765,9 @@ func (d *ddl) CreateIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast.Inde Priority: ctx.GetSessionVars().DDLReorgPriority, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) // key exists, but if_not_exists flags is true, so we ignore this error. - if ErrDupKeyName.Equal(err) && ifNotExists { + if dbterror.ErrDupKeyName.Equal(err) && ifNotExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil } @@ -5742,11 +5812,11 @@ func buildFKInfo(fkName model.CIStr, keys []*ast.IndexPartSpecification, refer * // Check wrong reference options of foreign key on stored generated columns switch refer.OnUpdate.ReferOpt { case ast.ReferOptionCascade, ast.ReferOptionSetNull, ast.ReferOptionSetDefault: - return nil, errWrongFKOptionForGeneratedColumn.GenWithStackByArgs("ON UPDATE " + refer.OnUpdate.ReferOpt.String()) + return nil, dbterror.ErrWrongFKOptionForGeneratedColumn.GenWithStackByArgs("ON UPDATE " + refer.OnUpdate.ReferOpt.String()) } switch refer.OnDelete.ReferOpt { case ast.ReferOptionSetNull, ast.ReferOptionSetDefault: - return nil, errWrongFKOptionForGeneratedColumn.GenWithStackByArgs("ON DELETE " + refer.OnDelete.ReferOpt.String()) + return nil, dbterror.ErrWrongFKOptionForGeneratedColumn.GenWithStackByArgs("ON DELETE " + refer.OnDelete.ReferOpt.String()) } continue } @@ -5763,7 +5833,7 @@ func buildFKInfo(fkName model.CIStr, keys []*ast.IndexPartSpecification, refer * } } if table.FindCol(cols, key.Column.Name.O) == nil { - return nil, errKeyColumnDoesNotExits.GenWithStackByArgs(key.Column.Name) + return nil, dbterror.ErrKeyColumnDoesNotExits.GenWithStackByArgs(key.Column.Name) } fkInfo.Cols[i] = key.Column.Name } @@ -5797,7 +5867,7 @@ func (d *ddl) CreateForeignKey(ctx sessionctx.Context, ti ast.Ident, fkName mode // Check the uniqueness of the FK. for _, fk := range t.Meta().ForeignKeys { if fk.Name.L == fkName.L { - return ErrFkDupName.GenWithStackByArgs(fkName.O) + return dbterror.ErrFkDupName.GenWithStackByArgs(fkName.O) } } @@ -5815,7 +5885,7 @@ func (d *ddl) CreateForeignKey(ctx sessionctx.Context, ti ast.Ident, fkName mode Args: []interface{}{fkInfo}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5841,7 +5911,7 @@ func (d *ddl) DropForeignKey(ctx sessionctx.Context, ti ast.Ident, fkName model. Args: []interface{}{fkName}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5857,7 +5927,7 @@ func (d *ddl) DropIndex(ctx sessionctx.Context, ti ast.Ident, indexName model.CI return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ti.Schema, ti.Name)) } if t.Meta().TableCacheStatusType != model.TableCacheStatusDisable { - return errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("Drop Index")) + return errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Drop Index")) } indexInfo := t.Meta().FindIndexByName(indexName.L) @@ -5868,7 +5938,7 @@ func (d *ddl) DropIndex(ctx sessionctx.Context, ti ast.Ident, indexName model.CI } if indexInfo == nil { - err = ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName) + err = dbterror.ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName) if ifExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil @@ -5896,9 +5966,9 @@ func (d *ddl) DropIndex(ctx sessionctx.Context, ti ast.Ident, indexName model.CI Args: []interface{}{indexName}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) // index not exists, but if_exists flags is true, so we ignore this error. - if ErrCantDropFieldOrKey.Equal(err) && ifExists { + if dbterror.ErrCantDropFieldOrKey.Equal(err) && ifExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil } @@ -5913,7 +5983,7 @@ func (d *ddl) DropIndexes(ctx sessionctx.Context, ti ast.Ident, specs []*ast.Alt } if t.Meta().TableCacheStatusType != model.TableCacheStatusDisable { - return errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("Drop Indexes")) + return errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Drop Indexes")) } indexNames := make([]model.CIStr, 0, len(specs)) ifExists := make([]bool, 0, len(specs)) @@ -5949,7 +6019,7 @@ func (d *ddl) DropIndexes(ctx sessionctx.Context, ti ast.Ident, specs []*ast.Alt Args: []interface{}{indexNames, ifExists}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -5964,13 +6034,13 @@ func checkIsDropPrimaryKey(indexName model.CIStr, indexInfo *model.IndexInfo, t if isPK { // If the table's PKIsHandle is true, we can't find the index from the table. So we check the value of PKIsHandle. if indexInfo == nil && !t.Meta().PKIsHandle { - return isPK, ErrCantDropFieldOrKey.GenWithStackByArgs("PRIMARY") + return isPK, dbterror.ErrCantDropFieldOrKey.GenWithStackByArgs("PRIMARY") } if t.Meta().PKIsHandle { - return isPK, ErrUnsupportedModifyPrimaryKey.GenWithStack("Unsupported drop primary key when the table's pkIsHandle is true") + return isPK, dbterror.ErrUnsupportedModifyPrimaryKey.GenWithStack("Unsupported drop primary key when the table's pkIsHandle is true") } if t.Meta().IsCommonHandle { - return isPK, ErrUnsupportedModifyPrimaryKey.GenWithStack("Unsupported drop primary key when the table is using clustered index") + return isPK, dbterror.ErrUnsupportedModifyPrimaryKey.GenWithStack("Unsupported drop primary key when the table is using clustered index") } } @@ -5980,13 +6050,13 @@ func checkIsDropPrimaryKey(indexName model.CIStr, indexInfo *model.IndexInfo, t func isDroppableColumn(multiSchemaChange bool, tblInfo *model.TableInfo, colName model.CIStr) error { if ok, dep, isHidden := hasDependentByGeneratedColumn(tblInfo, colName); ok { if isHidden { - return errDependentByFunctionalIndex.GenWithStackByArgs(dep) + return dbterror.ErrDependentByFunctionalIndex.GenWithStackByArgs(dep) } - return errDependentByGeneratedColumn.GenWithStackByArgs(dep) + return dbterror.ErrDependentByGeneratedColumn.GenWithStackByArgs(dep) } if len(tblInfo.Columns) == 1 { - return ErrCantRemoveAllFields.GenWithStack("can't drop only column %s in table %s", + return dbterror.ErrCantRemoveAllFields.GenWithStack("can't drop only column %s in table %s", colName, tblInfo.Name) } // We only support dropping column with single-value none Primary Key index covered now. @@ -5996,7 +6066,7 @@ func isDroppableColumn(multiSchemaChange bool, tblInfo *model.TableInfo, colName } // Check the column with foreign key. if fkInfo := getColumnForeignKeyInfo(colName.L, tblInfo.ForeignKeys); fkInfo != nil { - return errFkColumnCannotDrop.GenWithStackByArgs(colName, fkInfo.Name) + return dbterror.ErrFkColumnCannotDrop.GenWithStackByArgs(colName, fkInfo.Name) } return nil } @@ -6011,7 +6081,7 @@ func validateCommentLength(vars *variable.SessionVars, indexName string, indexOp maxLen := MaxCommentLength if len(indexOption.Comment) > maxLen { - err := errTooLongIndexComment.GenWithStackByArgs(indexName, maxLen) + err := dbterror.ErrTooLongIndexComment.GenWithStackByArgs(indexName, maxLen) if vars.StrictSQLMode { return "", err } @@ -6030,7 +6100,7 @@ func buildAddedPartitionInfo(ctx sessionctx.Context, meta *model.TableInfo, spec } default: // we don't support ADD PARTITION for all other partition types yet. - return nil, errors.Trace(ErrUnsupportedAddPartition) + return nil, errors.Trace(dbterror.ErrUnsupportedAddPartition) } part := &model.PartitionInfo{ @@ -6072,30 +6142,30 @@ func checkColumnsTypeAndValuesMatch(ctx sessionctx.Context, meta *model.TableInf case types.KindString, types.KindBytes: break default: - return ErrWrongTypeColumnValue.GenWithStackByArgs() + return dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() } case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: switch vkind { case types.KindInt64, types.KindUint64, types.KindNull: default: - return ErrWrongTypeColumnValue.GenWithStackByArgs() + return dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() } case mysql.TypeFloat, mysql.TypeDouble: switch vkind { case types.KindFloat32, types.KindFloat64, types.KindNull: default: - return ErrWrongTypeColumnValue.GenWithStackByArgs() + return dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() } case mysql.TypeString, mysql.TypeVarString: switch vkind { case types.KindString, types.KindBytes, types.KindNull, types.KindBinaryLiteral: default: - return ErrWrongTypeColumnValue.GenWithStackByArgs() + return dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() } } _, err = val.ConvertTo(ctx.GetSessionVars().StmtCtx, &colType) if err != nil { - return ErrWrongTypeColumnValue.GenWithStackByArgs() + return dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() } } return nil @@ -6123,6 +6193,7 @@ func (d *ddl) LockTables(ctx sessionctx.Context, stmt *ast.LockTablesStmt) error if t.Meta().IsView() || t.Meta().IsSequence() { return table.ErrUnsupportedOp.GenWithStackByArgs() } + err = checkTableLocked(t.Meta(), tl.Type, sessionInfo) if err != nil { return err @@ -6149,7 +6220,7 @@ func (d *ddl) LockTables(ctx sessionctx.Context, stmt *ast.LockTablesStmt) error } // AddTableLock here is avoiding this job was executed successfully but the session was killed before return. ctx.AddTableLock(lockTables) - err := d.doDDLJob(ctx, job) + err := d.DoDDLJob(ctx, job) if err == nil { ctx.ReleaseTableLocks(unlockTables) ctx.AddTableLock(lockTables) @@ -6178,7 +6249,7 @@ func (d *ddl) UnlockTables(ctx sessionctx.Context, unlockTables []model.TableLoc Args: []interface{}{arg}, } - err := d.doDDLJob(ctx, job) + err := d.DoDDLJob(ctx, job) if err == nil { ctx.ReleaseAllTableLocks() } @@ -6208,7 +6279,7 @@ func (d *ddl) CleanDeadTableLock(unlockTables []model.TableLockTpInfo, se model. return err } defer d.sessPool.put(ctx) - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -6269,7 +6340,7 @@ func (d *ddl) CleanupTableLock(ctx sessionctx.Context, tables []*ast.TableName) BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{arg}, } - err := d.doDDLJob(ctx, job) + err := d.DoDDLJob(ctx, job) if err == nil { ctx.ReleaseTableLocks(cleanupTables) } @@ -6290,15 +6361,15 @@ func (d *ddl) RepairTable(ctx sessionctx.Context, table *ast.TableName, createSt // Existence of DB and table has been checked in the preprocessor. oldTableInfo, ok := (ctx.Value(domainutil.RepairedTable)).(*model.TableInfo) if !ok || oldTableInfo == nil { - return ErrRepairTableFail.GenWithStack("Failed to get the repaired table") + return dbterror.ErrRepairTableFail.GenWithStack("Failed to get the repaired table") } oldDBInfo, ok := (ctx.Value(domainutil.RepairedDatabase)).(*model.DBInfo) if !ok || oldDBInfo == nil { - return ErrRepairTableFail.GenWithStack("Failed to get the repaired database") + return dbterror.ErrRepairTableFail.GenWithStack("Failed to get the repaired database") } // By now only support same DB repair. if createStmt.Table.Schema.L != oldDBInfo.Name.L { - return ErrRepairTableFail.GenWithStack("Repaired table should in same database with the old one") + return dbterror.ErrRepairTableFail.GenWithStack("Repaired table should in same database with the old one") } // It is necessary to specify the table.ID and partition.ID manually. @@ -6317,10 +6388,10 @@ func (d *ddl) RepairTable(ctx sessionctx.Context, table *ast.TableName, createSt for i, newOne := range newTableInfo.Columns { old := getColumnInfoByName(oldTableInfo, newOne.Name.L) if old == nil { - return ErrRepairTableFail.GenWithStackByArgs("Column " + newOne.Name.L + " has lost") + return dbterror.ErrRepairTableFail.GenWithStackByArgs("Column " + newOne.Name.L + " has lost") } if newOne.Tp != old.Tp { - return ErrRepairTableFail.GenWithStackByArgs("Column " + newOne.Name.L + " type should be the same") + return dbterror.ErrRepairTableFail.GenWithStackByArgs("Column " + newOne.Name.L + " type should be the same") } if newOne.Flen != old.Flen { logutil.BgLogger().Warn("[ddl] admin repair table : Column " + newOne.Name.L + " flen is not equal to the old one") @@ -6331,10 +6402,10 @@ func (d *ddl) RepairTable(ctx sessionctx.Context, table *ast.TableName, createSt for i, newOne := range newTableInfo.Indices { old := getIndexInfoByNameAndColumn(oldTableInfo, newOne) if old == nil { - return ErrRepairTableFail.GenWithStackByArgs("Index " + newOne.Name.L + " has lost") + return dbterror.ErrRepairTableFail.GenWithStackByArgs("Index " + newOne.Name.L + " has lost") } if newOne.Tp != old.Tp { - return ErrRepairTableFail.GenWithStackByArgs("Index " + newOne.Name.L + " type should be the same") + return dbterror.ErrRepairTableFail.GenWithStackByArgs("Index " + newOne.Name.L + " type should be the same") } newTableInfo.Indices[i].ID = old.ID } @@ -6354,7 +6425,7 @@ func (d *ddl) RepairTable(ctx sessionctx.Context, table *ast.TableName, createSt BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{newTableInfo}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err == nil { // Remove the old TableInfo from repairInfo before domain reload. domainutil.RepairInfo.RemoveFromRepairInfo(oldDBInfo.Name.L, oldTableInfo.Name.L) @@ -6413,7 +6484,7 @@ func (d *ddl) AlterSequence(ctx sessionctx.Context, stmt *ast.AlterSequenceStmt) return err } if !tbl.Meta().IsSequence() { - return ErrWrongObject.GenWithStackByArgs(ident.Schema, ident.Name, "SEQUENCE") + return dbterror.ErrWrongObject.GenWithStackByArgs(ident.Schema, ident.Name, "SEQUENCE") } // Validate the new sequence option value in old sequenceInfo. @@ -6433,7 +6504,7 @@ func (d *ddl) AlterSequence(ctx sessionctx.Context, stmt *ast.AlterSequenceStmt) Args: []interface{}{ident, stmt.SeqOptions}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -6445,7 +6516,7 @@ func (d *ddl) DropSequence(ctx sessionctx.Context, ti ast.Ident, ifExists bool) } if !tbl.Meta().IsSequence() { - err = ErrWrongObject.GenWithStackByArgs(ti.Schema, ti.Name, "SEQUENCE") + err = dbterror.ErrWrongObject.GenWithStackByArgs(ti.Schema, ti.Name, "SEQUENCE") if ifExists { ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil @@ -6461,7 +6532,7 @@ func (d *ddl) DropSequence(ctx sessionctx.Context, ti ast.Ident, ifExists bool) BinlogInfo: &model.HistoryInfo{}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -6494,7 +6565,7 @@ func (d *ddl) AlterIndexVisibility(ctx sessionctx.Context, ident ast.Ident, inde Args: []interface{}{indexName, invisible}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -6509,7 +6580,7 @@ func (d *ddl) AlterTableAttributes(ctx sessionctx.Context, ident ast.Ident, spec rule := label.NewRule() err = rule.ApplyAttributesSpec(spec.AttributesSpec) if err != nil { - return ErrInvalidAttributesSpec.GenWithStackByArgs(err) + return dbterror.ErrInvalidAttributesSpec.GenWithStackByArgs(err) } ids := getIDs([]*model.TableInfo{meta}) rule.Reset(schema.Name.L, meta.Name.L, "", ids...) @@ -6523,7 +6594,7 @@ func (d *ddl) AlterTableAttributes(ctx sessionctx.Context, ident ast.Ident, spec Args: []interface{}{rule}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err != nil { return errors.Trace(err) } @@ -6540,7 +6611,7 @@ func (d *ddl) AlterTablePartitionAttributes(ctx sessionctx.Context, ident ast.Id meta := tb.Meta() if meta.Partition == nil { - return errors.Trace(ErrPartitionMgmtOnNonpartitioned) + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } partitionID, err := tables.FindPartitionByName(meta, spec.PartitionNames[0].L) @@ -6551,7 +6622,7 @@ func (d *ddl) AlterTablePartitionAttributes(ctx sessionctx.Context, ident ast.Id rule := label.NewRule() err = rule.ApplyAttributesSpec(spec.AttributesSpec) if err != nil { - return ErrInvalidAttributesSpec.GenWithStackByArgs(err) + return dbterror.ErrInvalidAttributesSpec.GenWithStackByArgs(err) } rule.Reset(schema.Name.L, meta.Name.L, spec.PartitionNames[0].L, partitionID) @@ -6564,7 +6635,7 @@ func (d *ddl) AlterTablePartitionAttributes(ctx sessionctx.Context, ident ast.Id Args: []interface{}{partitionID, rule}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) if err != nil { return errors.Trace(err) } @@ -6606,7 +6677,7 @@ func (d *ddl) AlterTablePartitionPlacement(ctx sessionctx.Context, tableIdent as tblInfo := tb.Meta() if tblInfo.Partition == nil { - return errors.Trace(ErrPartitionMgmtOnNonpartitioned) + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } partitionID, err := tables.FindPartitionByName(tblInfo, spec.PartitionNames[0].L) @@ -6632,7 +6703,7 @@ func (d *ddl) AlterTablePartitionPlacement(ctx sessionctx.Context, tableIdent as Args: []interface{}{partitionID, policyRefInfo}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -6760,41 +6831,27 @@ func (d *ddl) CreatePlacementPolicy(ctx sessionctx.Context, stmt *ast.CreatePlac if checkIgnorePlacementDDL(ctx) { return nil } - policyName := stmt.PolicyName - if policyName.L == defaultPlacementPolicyName { - return errors.Trace(infoschema.ErrReservedSyntax.GenWithStackByArgs(policyName)) - } - is := d.GetInfoSchemaWithInterceptor(ctx) - // Check policy existence. - _, ok := is.PolicyByName(policyName) - if ok { - err = infoschema.ErrPlacementPolicyExists.GenWithStackByArgs(policyName) - if stmt.IfNotExists { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return nil - } - return err + + if stmt.OrReplace && stmt.IfNotExists { + return dbterror.ErrWrongUsage.GenWithStackByArgs("OR REPLACE", "IF NOT EXISTS") } - // Auto fill the policyID when it is inserted. + policyInfo, err := buildPolicyInfo(stmt.PolicyName, stmt.PlacementOptions) if err != nil { return errors.Trace(err) } - err = checkPolicyValidation(policyInfo.PlacementSettings) - if err != nil { - return err + var onExists OnExist + switch { + case stmt.IfNotExists: + onExists = OnExistIgnore + case stmt.OrReplace: + onExists = OnExistReplace + default: + onExists = OnExistError } - job := &model.Job{ - SchemaName: policyInfo.Name.L, - Type: model.ActionCreatePlacementPolicy, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{policyInfo}, - } - err = d.doDDLJob(ctx, job) - err = d.callHookOnChanged(err) - return errors.Trace(err) + return d.CreatePlacementPolicyWithInfo(ctx, policyInfo, onExists) } func (d *ddl) DropPlacementPolicy(ctx sessionctx.Context, stmt *ast.DropPlacementPolicyStmt) (err error) { @@ -6825,7 +6882,7 @@ func (d *ddl) DropPlacementPolicy(ctx sessionctx.Context, stmt *ast.DropPlacemen BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{policyName}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -6859,7 +6916,7 @@ func (d *ddl) AlterPlacementPolicy(ctx sessionctx.Context, stmt *ast.AlterPlacem BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{newPolicyInfo}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) err = d.callHookOnChanged(err) return errors.Trace(err) } @@ -6876,13 +6933,13 @@ func (d *ddl) AlterTableCache(ctx sessionctx.Context, ti ast.Ident) (err error) // forbit cache table in system database. if util.IsMemOrSysDB(schema.Name.L) { - return errors.Trace(errUnsupportedAlterCacheForSysTable) + return errors.Trace(dbterror.ErrUnsupportedAlterCacheForSysTable) } else if t.Meta().TempTableType != model.TempTableNone { - return ErrOptOnTemporaryTable.GenWithStackByArgs("alter temporary table cache") + return dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("alter temporary table cache") } if t.Meta().Partition != nil { - return ErrOptOnCacheTable.GenWithStackByArgs("partition mode") + return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("partition mode") } succ, err := checkCacheTableSize(d.store, t.Meta().ID) @@ -6890,17 +6947,19 @@ func (d *ddl) AlterTableCache(ctx sessionctx.Context, ti ast.Ident) (err error) return errors.Trace(err) } if !succ { - return ErrOptOnCacheTable.GenWithStackByArgs("table too large") + return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("table too large") } + ddlQuery, _ := ctx.Value(sessionctx.QueryString).(string) // Initialize the cached table meta lock info in `mysql.table_cache_meta`. // The operation shouldn't fail in most cases, and if it does, return the error directly. // This DML and the following DDL is not atomic, that's not a problem. _, err = ctx.(sqlexec.SQLExecutor).ExecuteInternal(context.Background(), - "insert ignore into mysql.table_cache_meta values (%?, 'NONE', 0, 0)", t.Meta().ID) + "replace into mysql.table_cache_meta values (%?, 'NONE', 0, 0)", t.Meta().ID) if err != nil { return errors.Trace(err) } + ctx.SetValue(sessionctx.QueryString, ddlQuery) job := &model.Job{ SchemaID: schema.ID, @@ -6911,7 +6970,7 @@ func (d *ddl) AlterTableCache(ctx sessionctx.Context, ti ast.Ident) (err error) Args: []interface{}{}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) return d.callHookOnChanged(err) } @@ -6967,7 +7026,7 @@ func (d *ddl) AlterTableNoCache(ctx sessionctx.Context, ti ast.Ident) (err error Args: []interface{}{}, } - err = d.doDDLJob(ctx, job) + err = d.DoDDLJob(ctx, job) return d.callHookOnChanged(err) } @@ -6982,9 +7041,9 @@ func checkTooBigFieldLengthAndTryAutoConvert(tp *types.FieldType, colName string return err } if tp.Charset == charset.CharsetBin { - sessVars.StmtCtx.AppendWarning(ErrAutoConvert.GenWithStackByArgs(colName, "VARBINARY", "BLOB")) + sessVars.StmtCtx.AppendWarning(dbterror.ErrAutoConvert.GenWithStackByArgs(colName, "VARBINARY", "BLOB")) } else { - sessVars.StmtCtx.AppendWarning(ErrAutoConvert.GenWithStackByArgs(colName, "VARCHAR", "TEXT")) + sessVars.StmtCtx.AppendWarning(dbterror.ErrAutoConvert.GenWithStackByArgs(colName, "VARCHAR", "TEXT")) } } } diff --git a/ddl/ddl_error_test.go b/ddl/ddl_error_test.go new file mode 100644 index 0000000000000..b771ea273014d --- /dev/null +++ b/ddl/ddl_error_test.go @@ -0,0 +1,188 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "testing" + + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/testkit" + "github.com/stretchr/testify/require" +) + +// This test file contains tests that test the expected or unexpected DDL error. +// For expected error, we use SQL to check it. +// For unexpected error, we mock a SQL job to check it. + +func TestTableError(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, testLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("create table testDrop(a int)") + // Schema ID is wrong, so dropping table is failed. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId", `return(-1)`)) + _, err := tk.Exec("drop table testDrop") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId")) + + // Table ID is wrong, so dropping table is failed. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockModifyJobTableId", `return(-1)`)) + _, err = tk.Exec("drop table testDrop") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockModifyJobTableId")) + + // Args is wrong, so creating table is failed. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockModifyJobArg", `return(true)`)) + _, err = tk.Exec("create table test.t1(a int)") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockModifyJobArg")) + + // Table exists, so creating table is failed. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId", `return(-1)`)) + _, err = tk.Exec("create table test.t1(a int)") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId")) + // Table exists, so creating table is failed. + tk.MustExec("create table test.t2(a int)") + tk.MustGetErrCode("create table test.t2(a int)", errno.ErrTableExists) +} + +func TestViewError(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, testLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (a int)") + + // Args is wrong, so creating view is failed. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockModifyJobArg", `return(true)`)) + _, err := tk.Exec("create view v as select * from t") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockModifyJobArg")) +} + +func TestForeignKeyError(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, testLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (a int)") + tk.MustExec("create table t1 (a int, FOREIGN KEY fk(a) REFERENCES t(a))") + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId", `return(-1)`)) + _, err := tk.Exec("alter table t1 add foreign key idx(a) REFERENCES t(a)") + require.Error(t, err) + _, err = tk.Exec("alter table t1 drop index fk") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId")) +} + +func TestIndexError(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, testLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (a int)") + tk.MustExec("alter table t add index a(a)") + + // Schema ID is wrong. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId", `return(-1)`)) + _, err := tk.Exec("alter table t add index idx(a)") + require.Error(t, err) + _, err = tk.Exec("alter table t1 drop a") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId")) + + // for adding index + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockModifyJobArg", `return(true)`)) + _, err = tk.Exec("alter table t add index idx(a)") + require.Error(t, err) + _, err = tk.Exec("alter table t drop index a") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockModifyJobArg")) +} + +func TestColumnError(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, testLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (a int, aa int, ab int)") + tk.MustExec("alter table t add index a(a)") + + // Invalid schema ID. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId", `return(-1)`)) + _, err := tk.Exec("alter table t add column ta int") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa") + require.Error(t, err) + _, err = tk.Exec("alter table t add column ta int, add column tb int") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa, drop column ab") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId")) + + // Invalid table ID. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockModifyJobTableId", `return(-1)`)) + _, err = tk.Exec("alter table t add column ta int") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa") + require.Error(t, err) + _, err = tk.Exec("alter table t add column ta int, add column tb int") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa, drop column ab") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockModifyJobTableId")) + + // Invalid argument. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockModifyJobArg", `return(true)`)) + _, err = tk.Exec("alter table t add column ta int") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa") + require.Error(t, err) + _, err = tk.Exec("alter table t add column ta int, add column tb int") + require.Error(t, err) + _, err = tk.Exec("alter table t drop column aa, drop column ab") + require.Error(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockModifyJobArg")) + + tk.MustGetErrCode("alter table t add column c int after c5", errno.ErrBadField) + tk.MustGetErrCode("alter table t drop column c5", errno.ErrCantDropFieldOrKey) + tk.MustGetErrCode("alter table t add column c int after c5, add column d int", errno.ErrBadField) + tk.MustGetErrCode("alter table t drop column ab, drop column c5", errno.ErrCantDropFieldOrKey) +} + +func TestCreateDatabaseError(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId", `return(-1)`)) + tk.MustExec("create database db1;") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockModifyJobSchemaId")) +} diff --git a/ddl/ddl_test.go b/ddl/ddl_test.go index 9ab42c7c55187..6389137b30109 100644 --- a/ddl/ddl_test.go +++ b/ddl/ddl_test.go @@ -19,24 +19,23 @@ import ( "testing" "time" - . "github.com/pingcap/check" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" + "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/parser/charset" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/mock" - "github.com/pingcap/tidb/util/testleak" "github.com/stretchr/testify/require" ) type DDLForTest interface { - // SetHook sets the hook. - SetHook(h Callback) // SetInterceptor sets the interceptor. SetInterceptor(h Interceptor) } @@ -59,15 +58,6 @@ func GetMaxRowID(store kv.Storage, priority int, t table.Table, startHandle, end return getRangeEndKey(store, priority, t, startHandle, endHandle) } -func TestT(t *testing.T) { - CustomVerboseFlag = true - *CustomParallelSuiteFlag = true - - testleak.BeforeTest() - TestingT(t) - testleak.AfterTestT(t)() -} - func testNewDDLAndStart(ctx context.Context, options ...Option) (*ddl, error) { // init infoCache and a stub infoSchema ic := infoschema.NewCache(2) @@ -101,17 +91,6 @@ func getSchemaVer(t *testing.T, ctx sessionctx.Context) int64 { return ver } -func getSchemaVerT(t *testing.T, ctx sessionctx.Context) int64 { - err := ctx.NewTxn(context.Background()) - require.NoError(t, err) - txn, err := ctx.Txn(true) - require.NoError(t, err) - m := meta.NewMeta(txn) - ver, err := m.GetSchemaVersion() - require.NoError(t, err) - return ver -} - type historyJobArgs struct { ver int64 db *model.DBInfo @@ -129,16 +108,6 @@ func checkEqualTable(t *testing.T, t1, t2 *model.TableInfo) { require.Equal(t, t1.AutoIncID, t2.AutoIncID) } -func checkEqualTableT(t *testing.T, t1, t2 *model.TableInfo) { - require.Equal(t, t1.ID, t2.ID) - require.Equal(t, t1.Name, t2.Name) - require.Equal(t, t1.Charset, t2.Charset) - require.Equal(t, t1.Collate, t2.Collate) - require.EqualValues(t, t1.PKIsHandle, t2.PKIsHandle) - require.EqualValues(t, t1.Comment, t2.Comment) - require.EqualValues(t, t1.AutoIncID, t2.AutoIncID) -} - func checkHistoryJob(t *testing.T, job *model.Job) { require.Equal(t, job.State, model.JobStateSynced) } @@ -166,29 +135,6 @@ func checkHistoryJobArgs(t *testing.T, ctx sessionctx.Context, id int64, args *h } } -func checkHistoryJobArgsT(t *testing.T, ctx sessionctx.Context, id int64, args *historyJobArgs) { - txn, err := ctx.Txn(true) - require.NoError(t, err) - tt := meta.NewMeta(txn) - historyJob, err := tt.GetHistoryDDLJob(id) - require.NoError(t, err) - require.Greater(t, historyJob.BinlogInfo.FinishedTS, uint64(0)) - - if args.tbl != nil { - require.Equal(t, args.ver, historyJob.BinlogInfo.SchemaVersion) - checkEqualTableT(t, historyJob.BinlogInfo.TableInfo, args.tbl) - return - } - - // for handling schema job - require.Equal(t, args.ver, historyJob.BinlogInfo.SchemaVersion) - require.EqualValues(t, args.db, historyJob.BinlogInfo.DBInfo) - // only for creating schema job - if args.db != nil && len(args.tblIDs) == 0 { - return - } -} - func buildCreateIdxJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, unique bool, indexName string, colName string) *model.Job { return &model.Job{ SchemaID: dbInfo.ID, @@ -205,7 +151,8 @@ func buildCreateIdxJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, unique bo func testCreatePrimaryKey(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, colName string) *model.Job { job := buildCreateIdxJob(dbInfo, tblInfo, true, "primary", colName) job.Type = model.ActionAddPrimaryKey - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) v := getSchemaVer(t, ctx) checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) @@ -214,7 +161,8 @@ func testCreatePrimaryKey(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo * func testCreateIndex(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, unique bool, indexName string, colName string) *model.Job { job := buildCreateIdxJob(dbInfo, tblInfo, unique, indexName, colName) - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) v := getSchemaVer(t, ctx) checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) @@ -229,7 +177,9 @@ func testAddColumn(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.D Args: args, BinlogInfo: &model.HistoryInfo{}, } - err := d.doDDLJob(ctx, job) + + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) v := getSchemaVer(t, ctx) checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) @@ -244,7 +194,9 @@ func testAddColumns(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model. Args: args, BinlogInfo: &model.HistoryInfo{}, } - err := d.doDDLJob(ctx, job) + + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) v := getSchemaVer(t, ctx) checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) @@ -267,23 +219,15 @@ func buildDropIdxJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, indexName s func testDropIndex(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, indexName string) *model.Job { job := buildDropIdxJob(dbInfo, tblInfo, indexName) - err := d.doDDLJob(ctx, job) + + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) v := getSchemaVer(t, ctx) checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) return job } -func buildRebaseAutoIDJobJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, newBaseID int64) *model.Job { - return &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionRebaseAutoID, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{newBaseID}, - } -} - func TestGetIntervalFromPolicy(t *testing.T) { policy := []time.Duration{ 1 * time.Second, @@ -310,3 +254,257 @@ func TestGetIntervalFromPolicy(t *testing.T) { require.Equal(t, val, 2*time.Second) require.False(t, changed) } + +func colDefStrToFieldType(t *testing.T, str string, ctx sessionctx.Context) *types.FieldType { + sqlA := "alter table t modify column a " + str + stmt, err := parser.New().ParseOneStmt(sqlA, "", "") + require.NoError(t, err) + colDef := stmt.(*ast.AlterTableStmt).Specs[0].NewColumns[0] + chs, coll := charset.GetDefaultCharsetAndCollate() + col, _, err := buildColumnAndConstraint(ctx, 0, colDef, nil, chs, coll) + require.NoError(t, err) + return &col.FieldType +} + +func TestModifyColumn(t *testing.T) { + ctx := mock.NewContext() + tests := []struct { + origin string + to string + err error + }{ + {"int", "bigint", nil}, + {"int", "int unsigned", nil}, + {"varchar(10)", "text", nil}, + {"varbinary(10)", "blob", nil}, + {"text", "blob", dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs("charset from utf8mb4 to binary")}, + {"varchar(10)", "varchar(8)", nil}, + {"varchar(10)", "varchar(11)", nil}, + {"varchar(10) character set utf8 collate utf8_bin", "varchar(10) character set utf8", nil}, + {"decimal(2,1)", "decimal(3,2)", nil}, + {"decimal(2,1)", "decimal(2,2)", nil}, + {"decimal(2,1)", "decimal(2,1)", nil}, + {"decimal(2,1)", "int", nil}, + {"decimal", "int", nil}, + {"decimal(2,1)", "bigint", nil}, + {"int", "varchar(10) character set gbk", dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs("charset from binary to gbk")}, + {"varchar(10) character set gbk", "int", dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs("charset from gbk to binary")}, + {"varchar(10) character set gbk", "varchar(10) character set utf8", dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs("charset from gbk to utf8")}, + {"varchar(10) character set gbk", "char(10) character set utf8", dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs("charset from gbk to utf8")}, + {"varchar(10) character set utf8", "char(10) character set gbk", dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs("charset from utf8 to gbk")}, + {"varchar(10) character set utf8", "varchar(10) character set gbk", dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs("charset from utf8 to gbk")}, + {"varchar(10) character set gbk", "varchar(255) character set gbk", nil}, + } + for _, tt := range tests { + ftA := colDefStrToFieldType(t, tt.origin, ctx) + ftB := colDefStrToFieldType(t, tt.to, ctx) + err := checkModifyTypes(ctx, ftA, ftB, false) + if err == nil { + require.NoErrorf(t, tt.err, "origin:%v, to:%v", tt.origin, tt.to) + } else { + require.EqualError(t, err, tt.err.Error()) + } + } +} + +func TestFieldCase(t *testing.T) { + var fields = []string{"field", "Field"} + colObjects := make([]*model.ColumnInfo, len(fields)) + for i, name := range fields { + colObjects[i] = &model.ColumnInfo{ + Name: model.NewCIStr(name), + } + } + err := checkDuplicateColumn(colObjects) + require.EqualError(t, err, infoschema.ErrColumnExists.GenWithStackByArgs("Field").Error()) +} + +func TestIgnorableSpec(t *testing.T) { + specs := []ast.AlterTableType{ + ast.AlterTableOption, + ast.AlterTableAddColumns, + ast.AlterTableAddConstraint, + ast.AlterTableDropColumn, + ast.AlterTableDropPrimaryKey, + ast.AlterTableDropIndex, + ast.AlterTableDropForeignKey, + ast.AlterTableModifyColumn, + ast.AlterTableChangeColumn, + ast.AlterTableRenameTable, + ast.AlterTableAlterColumn, + } + for _, spec := range specs { + require.False(t, isIgnorableSpec(spec)) + } + + ignorableSpecs := []ast.AlterTableType{ + ast.AlterTableLock, + ast.AlterTableAlgorithm, + } + for _, spec := range ignorableSpecs { + require.True(t, isIgnorableSpec(spec)) + } +} + +func TestBuildJobDependence(t *testing.T) { + store := createMockStore(t) + defer func() { + require.NoError(t, store.Close()) + }() + // Add some non-add-index jobs. + job1 := &model.Job{ID: 1, TableID: 1, Type: model.ActionAddColumn} + job2 := &model.Job{ID: 2, TableID: 1, Type: model.ActionCreateTable} + job3 := &model.Job{ID: 3, TableID: 2, Type: model.ActionDropColumn} + job6 := &model.Job{ID: 6, TableID: 1, Type: model.ActionDropTable} + job7 := &model.Job{ID: 7, TableID: 2, Type: model.ActionModifyColumn} + job9 := &model.Job{ID: 9, SchemaID: 111, Type: model.ActionDropSchema} + job11 := &model.Job{ID: 11, TableID: 2, Type: model.ActionRenameTable, Args: []interface{}{int64(111), "old db name"}} + err := kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + require.NoError(t, m.EnQueueDDLJob(job1)) + require.NoError(t, m.EnQueueDDLJob(job2)) + require.NoError(t, m.EnQueueDDLJob(job3)) + require.NoError(t, m.EnQueueDDLJob(job6)) + require.NoError(t, m.EnQueueDDLJob(job7)) + require.NoError(t, m.EnQueueDDLJob(job9)) + require.NoError(t, m.EnQueueDDLJob(job11)) + return nil + }) + require.NoError(t, err) + job4 := &model.Job{ID: 4, TableID: 1, Type: model.ActionAddIndex} + err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + err := buildJobDependence(m, job4) + require.NoError(t, err) + require.Equal(t, job4.DependencyID, int64(2)) + return nil + }) + require.NoError(t, err) + job5 := &model.Job{ID: 5, TableID: 2, Type: model.ActionAddIndex} + err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + err := buildJobDependence(m, job5) + require.NoError(t, err) + require.Equal(t, job5.DependencyID, int64(3)) + return nil + }) + require.NoError(t, err) + job8 := &model.Job{ID: 8, TableID: 3, Type: model.ActionAddIndex} + err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + err := buildJobDependence(m, job8) + require.NoError(t, err) + require.Equal(t, job8.DependencyID, int64(0)) + return nil + }) + require.NoError(t, err) + job10 := &model.Job{ID: 10, SchemaID: 111, TableID: 3, Type: model.ActionAddIndex} + err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + err := buildJobDependence(m, job10) + require.NoError(t, err) + require.Equal(t, job10.DependencyID, int64(9)) + return nil + }) + require.NoError(t, err) + job12 := &model.Job{ID: 12, SchemaID: 112, TableID: 2, Type: model.ActionAddIndex} + err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + err := buildJobDependence(m, job12) + require.NoError(t, err) + require.Equal(t, job12.DependencyID, int64(11)) + return nil + }) + require.NoError(t, err) +} + +func TestNotifyDDLJob(t *testing.T) { + store := createMockStore(t) + defer func() { + require.NoError(t, store.Close()) + }() + + getFirstNotificationAfterStartDDL := func(d *ddl) { + select { + case <-d.workers[addIdxWorker].ddlJobCh: + default: + // The notification may be received by the worker. + } + select { + case <-d.workers[generalWorker].ddlJobCh: + default: + // The notification may be received by the worker. + } + } + + d, err := testNewDDLAndStart( + context.Background(), + WithStore(store), + WithLease(testLease), + ) + require.NoError(t, err) + defer func() { + require.NoError(t, d.Stop()) + }() + getFirstNotificationAfterStartDDL(d) + // Ensure that the notification is not handled in workers `start` function. + d.cancel() + for _, worker := range d.workers { + worker.close() + } + + job := &model.Job{ + SchemaID: 1, + TableID: 2, + Type: model.ActionCreateTable, + BinlogInfo: &model.HistoryInfo{}, + Args: []interface{}{}, + } + // Test the notification mechanism of the owner and the server receiving the DDL request on the same TiDB. + // This DDL request is a general DDL job. + d.asyncNotifyWorker(job) + select { + case <-d.workers[generalWorker].ddlJobCh: + default: + require.FailNow(t, "do not get the general job notification") + } + // Test the notification mechanism of the owner and the server receiving the DDL request on the same TiDB. + // This DDL request is a add index DDL job. + job.Type = model.ActionAddIndex + d.asyncNotifyWorker(job) + select { + case <-d.workers[addIdxWorker].ddlJobCh: + default: + require.FailNow(t, "do not get the add index job notification") + } + + // Test the notification mechanism that the owner and the server receiving the DDL request are not on the same TiDB. + // And the etcd client is nil. + d1, err := testNewDDLAndStart( + context.Background(), + WithStore(store), + WithLease(testLease), + ) + require.NoError(t, err) + defer func() { + require.NoError(t, d1.Stop()) + }() + getFirstNotificationAfterStartDDL(d1) + // Ensure that the notification is not handled by worker's "start". + d1.cancel() + for _, worker := range d1.workers { + worker.close() + } + d1.ownerManager.RetireOwner() + d1.asyncNotifyWorker(job) + job.Type = model.ActionCreateTable + d1.asyncNotifyWorker(job) + testCheckOwner(t, d1, false) + select { + case <-d1.workers[addIdxWorker].ddlJobCh: + require.FailNow(t, "should not get the add index job notification") + case <-d1.workers[generalWorker].ddlJobCh: + require.FailNow(t, "should not get the general job notification") + default: + } +} diff --git a/ddl/ddl_tiflash_api.go b/ddl/ddl_tiflash_api.go index 0678ea304f066..5638cc4bbb39d 100644 --- a/ddl/ddl_tiflash_api.go +++ b/ddl/ddl_tiflash_api.go @@ -57,22 +57,156 @@ type TiFlashReplicaStatus struct { IsPartition bool } +// TiFlashTick is type for backoff threshold. +type TiFlashTick float64 + +// PollTiFlashBackoffElement records backoff for each TiFlash Table. +// `Counter` increases every `Tick`, if it reached `Threshold`, it will be reset to 0 while `Threshold` grows. +// `TotalCounter` records total `Tick`s this element has since created. +type PollTiFlashBackoffElement struct { + Counter int + Threshold TiFlashTick + TotalCounter int +} + +// NewPollTiFlashBackoffElement initialize backoff element for a TiFlash table. +func NewPollTiFlashBackoffElement() *PollTiFlashBackoffElement { + return &PollTiFlashBackoffElement{ + Counter: 0, + Threshold: PollTiFlashBackoffMinTick, + TotalCounter: 0, + } +} + +// PollTiFlashBackoffContext is a collection of all backoff states. +type PollTiFlashBackoffContext struct { + MinThreshold TiFlashTick + MaxThreshold TiFlashTick + // Capacity limits tables a backoff pool can handle, in order to limit handling of big tables. + Capacity int + Rate TiFlashTick + elements map[int64]*PollTiFlashBackoffElement +} + +// NewPollTiFlashBackoffContext creates an instance of PollTiFlashBackoffContext. +func NewPollTiFlashBackoffContext(MinThreshold, MaxThreshold TiFlashTick, Capacity int, Rate TiFlashTick) (*PollTiFlashBackoffContext, error) { + if MaxThreshold < MinThreshold { + return nil, fmt.Errorf("`MaxThreshold` should always be larger than `MinThreshold`") + } + if MinThreshold < 1 { + return nil, fmt.Errorf("`MinThreshold` should not be less than 1") + } + if Capacity < 0 { + return nil, fmt.Errorf("negative `Capacity`") + } + if Rate <= 1 { + return nil, fmt.Errorf("`Rate` should always be larger than 1") + } + return &PollTiFlashBackoffContext{ + MinThreshold: MinThreshold, + MaxThreshold: MaxThreshold, + Capacity: Capacity, + elements: make(map[int64]*PollTiFlashBackoffElement), + Rate: Rate, + }, nil +} + // TiFlashManagementContext is the context for TiFlash Replica Management type TiFlashManagementContext struct { TiFlashStores map[int64]helper.StoreStat HandlePdCounter uint64 UpdateTiFlashStoreCounter uint64 UpdateMap map[int64]bool + Backoff *PollTiFlashBackoffContext +} + +// Tick will first check increase Counter. +// It returns: +// 1. A bool indicates whether threshold is grown during this tick. +// 2. A bool indicates whether this ID exists. +// 3. A int indicates how many ticks ID has counted till now. +func (b *PollTiFlashBackoffContext) Tick(ID int64) (bool, bool, int) { + e, ok := b.Get(ID) + if !ok { + return false, false, 0 + } + grew := e.MaybeGrow(b) + e.Counter += 1 + e.TotalCounter += 1 + return grew, true, e.TotalCounter +} + +// NeedGrow returns if we need to grow. +// It is exported for testing. +func (e *PollTiFlashBackoffElement) NeedGrow() bool { + return e.Counter >= int(e.Threshold) +} + +func (e *PollTiFlashBackoffElement) doGrow(b *PollTiFlashBackoffContext) { + if e.Threshold < b.MinThreshold { + e.Threshold = b.MinThreshold + } + if e.Threshold*b.Rate > b.MaxThreshold { + e.Threshold = b.MaxThreshold + } else { + e.Threshold *= b.Rate + } + e.Counter = 0 +} + +// MaybeGrow grows threshold and reset counter when needed. +func (e *PollTiFlashBackoffElement) MaybeGrow(b *PollTiFlashBackoffContext) bool { + if !e.NeedGrow() { + return false + } + e.doGrow(b) + return true +} + +// Remove will reset table from backoff. +func (b *PollTiFlashBackoffContext) Remove(ID int64) bool { + _, ok := b.elements[ID] + delete(b.elements, ID) + return ok +} + +// Get returns pointer to inner PollTiFlashBackoffElement. +// Only exported for test. +func (b *PollTiFlashBackoffContext) Get(ID int64) (*PollTiFlashBackoffElement, bool) { + res, ok := b.elements[ID] + return res, ok +} + +// Put will record table into backoff pool, if there is enough room, or returns false. +func (b *PollTiFlashBackoffContext) Put(ID int64) bool { + _, ok := b.elements[ID] + if ok { + return true + } else if b.Len() < b.Capacity { + b.elements[ID] = NewPollTiFlashBackoffElement() + return true + } + return false +} + +// Len gets size of PollTiFlashBackoffContext. +func (b *PollTiFlashBackoffContext) Len() int { + return len(b.elements) } // NewTiFlashManagementContext creates an instance for TiFlashManagementContext. -func NewTiFlashManagementContext() *TiFlashManagementContext { +func NewTiFlashManagementContext() (*TiFlashManagementContext, error) { + c, err := NewPollTiFlashBackoffContext(PollTiFlashBackoffMinTick, PollTiFlashBackoffMaxTick, PollTiFlashBackoffCapacity, PollTiFlashBackoffRate) + if err != nil { + return nil, err + } return &TiFlashManagementContext{ HandlePdCounter: 0, UpdateTiFlashStoreCounter: 0, TiFlashStores: make(map[int64]helper.StoreStat), UpdateMap: make(map[int64]bool), - } + Backoff: c, + }, nil } var ( @@ -82,6 +216,14 @@ var ( PullTiFlashPdTick = atomicutil.NewUint64(30 * 5) // UpdateTiFlashStoreTick indicates the number of intervals before we fully update TiFlash stores. UpdateTiFlashStoreTick = atomicutil.NewUint64(5) + // PollTiFlashBackoffMaxTick is the max tick before we try to update TiFlash replica availability for one table. + PollTiFlashBackoffMaxTick TiFlashTick = 10 + // PollTiFlashBackoffMinTick is the min tick before we try to update TiFlash replica availability for one table. + PollTiFlashBackoffMinTick TiFlashTick = 1 + // PollTiFlashBackoffCapacity is the cache size of backoff struct. + PollTiFlashBackoffCapacity int = 1000 + // PollTiFlashBackoffRate is growth rate of exponential backoff threshold. + PollTiFlashBackoffRate TiFlashTick = 1.5 ) func getTiflashHTTPAddr(host string, statusAddr string) (string, error) { @@ -227,7 +369,6 @@ func (d *ddl) pollTiFlashReplicaStatus(ctx sessionctx.Context, pollTiFlashContex for _, store := range pollTiFlashContext.TiFlashStores { s := store if err := d.UpdateTiFlashHTTPAddress(&s); err != nil { - logutil.BgLogger().Error("Update TiFlash status address failed", zap.Error(err)) } } @@ -258,6 +399,11 @@ func (d *ddl) pollTiFlashReplicaStatus(ctx sessionctx.Context, pollTiFlashContex // We only check unavailable tables here, so doesn't include blocked add partition case. if !available { allReplicaReady = false + enabled, inqueue, _ := pollTiFlashContext.Backoff.Tick(tb.ID) + if inqueue && !enabled { + logutil.BgLogger().Info("Escape checking available status due to backoff", zap.Int64("tableId", tb.ID)) + continue + } // We don't need to set accelerate schedule for this table, since it is already done in DDL, when // 1. Add partition @@ -287,17 +433,22 @@ func (d *ddl) pollTiFlashReplicaStatus(ctx sessionctx.Context, pollTiFlashContex if !avail { logutil.BgLogger().Info("Tiflash replica is not available", zap.Int64("tableID", tb.ID), zap.Uint64("region need", uint64(regionCount)), zap.Uint64("region have", uint64(flashRegionCount))) + pollTiFlashContext.Backoff.Put(tb.ID) err := infosync.UpdateTiFlashTableSyncProgress(context.Background(), tb.ID, float64(flashRegionCount)/float64(regionCount)) if err != nil { return false, err } } else { logutil.BgLogger().Info("Tiflash replica is available", zap.Int64("tableID", tb.ID), zap.Uint64("region need", uint64(regionCount))) + pollTiFlashContext.Backoff.Remove(tb.ID) err := infosync.DeleteTiFlashTableSyncProgress(tb.ID) if err != nil { return false, err } } + failpoint.Inject("skipUpdateTableReplicaInfoInLoop", func() { + failpoint.Continue() + }) // Will call `onUpdateFlashReplicaStatus` to update `TiFlashReplica`. if err := d.UpdateTableReplicaInfo(ctx, tb.ID, avail); err != nil { if infoschema.ErrTableNotExists.Equal(err) && tb.IsPartition { @@ -418,7 +569,10 @@ func HandlePlacementRuleRoutine(ctx sessionctx.Context, d *ddl, tableList []TiFl } func (d *ddl) PollTiFlashRoutine() { - pollTiflashContext := NewTiFlashManagementContext() + pollTiflashContext, err := NewTiFlashManagementContext() + if err != nil { + logutil.BgLogger().Fatal("TiFlashManagement init failed", zap.Error(err)) + } for { select { case <-d.ctx.Done(): diff --git a/ddl/ddl_tiflash_test.go b/ddl/ddl_tiflash_test.go index a92223f78c1ad..a760b9228fb6e 100644 --- a/ddl/ddl_tiflash_test.go +++ b/ddl/ddl_tiflash_test.go @@ -22,6 +22,8 @@ import ( "context" "fmt" "math" + "sync" + "sync/atomic" "testing" "time" @@ -29,6 +31,7 @@ import ( "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/ddl/placement" + ddlutil "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/domain/infosync" "github.com/pingcap/tidb/kv" @@ -38,8 +41,11 @@ import ( "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/mockstore/unistore" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/logutil" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/testutils" + "go.uber.org/zap" ) type tiflashContext struct { @@ -153,15 +159,15 @@ func (s *tiflashContext) CheckFlashback(tk *testkit.TestKit, t *testing.T) { } func TempDisableEmulatorGC() func() { - ori := ddl.IsEmulatorGCEnable() + ori := ddlutil.IsEmulatorGCEnable() f := func() { if ori { - ddl.EmulatorGCEnable() + ddlutil.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + ddlutil.EmulatorGCDisable() } } - ddl.EmulatorGCDisable() + ddlutil.EmulatorGCDisable() return f } @@ -196,8 +202,9 @@ func TestTiFlashNoRedundantPDRules(t *testing.T) { require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed", `return`)) defer func() { - failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed")) }() + fCancelPD := s.SetPdLoop(10000) defer fCancelPD() @@ -447,6 +454,13 @@ func CheckTableAvailable(dom *domain.Domain, t *testing.T, count uint64, labels CheckTableAvailableWithTableName(dom, t, count, labels, "test", "ddltiflash") } +func CheckTableNoReplica(dom *domain.Domain, t *testing.T, db string, table string) { + tb, err := dom.InfoSchema().TableByName(model.NewCIStr(db), model.NewCIStr(table)) + require.NoError(t, err) + replica := tb.Meta().TiFlashReplica + require.Nil(t, replica) +} + // Truncate table shall not block. func TestTiFlashTruncateTable(t *testing.T) { s, teardown := createTiFlashContext(t) @@ -596,16 +610,124 @@ func TestSetPlacementRuleFail(t *testing.T) { require.False(t, res) } -func TestAlterDatabaseErrorGrammar(t *testing.T) { - store, err := mockstore.NewMockStore() +// Test standalone backoffer +func TestTiFlashBackoffer(t *testing.T) { + var maxTick ddl.TiFlashTick = 10 + var rate ddl.TiFlashTick = 1.5 + c := 2 + backoff, err := ddl.NewPollTiFlashBackoffContext(1, maxTick, c, rate) require.NoError(t, err) - defer func() { - require.NoError(t, store.Close()) - }() - session.SetSchemaLease(0) - dom, err := session.BootstrapSession(store) + mustGet := func(ID int64) *ddl.PollTiFlashBackoffElement { + e, ok := backoff.Get(ID) + require.True(t, ok) + return e + } + mustNotGrow := func(ID int64) { + e := mustGet(ID) + ori := e.Threshold + oriTotal := e.TotalCounter + c := e.Counter + growed, ok, total := backoff.Tick(ID) + require.True(t, ok) + require.False(t, growed) + require.Equal(t, ori, e.Threshold) + require.Equal(t, c+1, e.Counter) + require.Equal(t, oriTotal+1, total) + } + mustGrow := func(ID int64) { + e := mustGet(ID) + ori := e.Threshold + oriTotal := e.TotalCounter + growed, ok, total := backoff.Tick(ID) + require.True(t, ok) + require.True(t, growed) + require.Equal(t, e.Threshold, rate*ori) + require.Equal(t, 1, e.Counter) + require.Equal(t, oriTotal+1, total) + } + // Test grow + ok := backoff.Put(1) + require.True(t, ok) + require.False(t, mustGet(1).NeedGrow()) + mustNotGrow(1) // 0;1 -> 1;1 + mustGrow(1) // 1;1 -> 0;1.5 -> 1;1.5 + mustGrow(1) // 1;1.5 -> 0;2.25 -> 1;2.25 + mustNotGrow(1) // 1;2.25 -> 2;2.25 + mustGrow(1) // 2;2.25 -> 0;3.375 -> 1;3.375 + mustNotGrow(1) // 1;3.375 -> 2;3.375 + mustNotGrow(1) // 2;3.375 -> 3;3.375 + mustGrow(1) // 3;3.375 -> 0;5.0625 + require.Equal(t, 8, mustGet(1).TotalCounter) + + // Test converge + backoff.Put(2) + for i := 0; i < 20; i++ { + backoff.Tick(2) + } + require.Equal(t, maxTick, mustGet(2).Threshold) + require.Equal(t, 20, mustGet(2).TotalCounter) + + // Test context + ok = backoff.Put(3) + require.False(t, ok) + _, ok, _ = backoff.Tick(3) + require.False(t, ok) + + require.True(t, backoff.Remove(1)) + require.False(t, backoff.Remove(1)) + require.Equal(t, 1, backoff.Len()) + + // Test error context + _, err = ddl.NewPollTiFlashBackoffContext(0.5, 1, 1, 1) + require.Error(t, err) + _, err = ddl.NewPollTiFlashBackoffContext(10, 1, 1, 1) + require.Error(t, err) + _, err = ddl.NewPollTiFlashBackoffContext(1, 10, 0, 1) + require.Error(t, err) + _, err = ddl.NewPollTiFlashBackoffContext(1, 10, 1, 0.5) + require.Error(t, err) + _, err = ddl.NewPollTiFlashBackoffContext(1, 10, 1, -1) + require.Error(t, err) +} + +// Test backoffer in TiFlash. +func TestTiFlashBackoff(t *testing.T) { + s, teardown := createTiFlashContext(t) + defer teardown() + tk := testkit.NewTestKit(t, s.store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists ddltiflash") + tk.MustExec("create table ddltiflash(z int)") + + // Not available for all tables + ddl.DisableTiFlashPoll(s.dom.DDL()) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/PollTiFlashReplicaStatusReplacePrevAvailableValue", `return(false)`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/PollTiFlashReplicaStatusReplaceCurAvailableValue", `return(false)`)) + ddl.EnableTiFlashPoll(s.dom.DDL()) + tk.MustExec("alter table ddltiflash set tiflash replica 1") + + // 1, 1.5, 2.25, 3.375, 5.5625 + // (1), 1, 1, 2, 3, 5 + time.Sleep(ddl.PollTiFlashInterval * 5) + tb, err := s.dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("ddltiflash")) + require.NoError(t, err) + require.NotNil(t, tb) + require.False(t, tb.Meta().TiFlashReplica.Available) + + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/PollTiFlashReplicaStatusReplacePrevAvailableValue")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/PollTiFlashReplicaStatusReplaceCurAvailableValue")) + + time.Sleep(ddl.PollTiFlashInterval * 3) + tb, err = s.dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("ddltiflash")) require.NoError(t, err) - defer dom.Close() + require.NotNil(t, tb) + require.True(t, tb.Meta().TiFlashReplica.Available) +} + +func TestAlterDatabaseErrorGrammar(t *testing.T) { + store, tear := testkit.CreateMockStore(t) + defer tear() tk := testkit.NewTestKit(t, store) tk.MustGetErrMsg("ALTER DATABASE t SET TIFLASH REPLICA 1 SET TIFLASH REPLICA 2 LOCATION LABELS 'a','b'", "[ddl:8200]Unsupported multi schema change") @@ -649,3 +771,176 @@ func TestAlterDatabaseBasic(t *testing.T) { // There is less TiFlash store tk.MustGetErrMsg("alter database tiflash_ddl set tiflash replica 3", "the tiflash replica count: 3 should be less than the total tiflash server count: 2") } + +func checkBatchPandingNum(t *testing.T, tkx *testkit.TestKit, level string, value string, ok bool) { + l := len(tkx.MustQuery(fmt.Sprintf("show %v variables where Variable_name='tidb_batch_pending_tiflash_count' and Value='%v'", level, value)).Rows()) + if ok { + require.Equal(t, 1, l) + } else { + require.Equal(t, 0, l) + } +} + +func TestTiFlashBatchAddVariables(t *testing.T) { + store, tear := testkit.CreateMockStore(t) + defer tear() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("set SESSION tidb_batch_pending_tiflash_count=5") + tk.MustExec("set GLOBAL tidb_batch_pending_tiflash_count=6") + + checkBatchPandingNum(t, tk, "session", "5", true) + checkBatchPandingNum(t, tk, "global", "6", true) + checkBatchPandingNum(t, tk, "global", "1.5", false) + + tk.MustGetErrMsg("set GLOBAL tidb_batch_pending_tiflash_count=1.5", "[variable:1232]Incorrect argument type to variable 'tidb_batch_pending_tiflash_count'") + checkBatchPandingNum(t, tk, "global", "6", true) + + tk2 := testkit.NewTestKit(t, store) + checkBatchPandingNum(t, tk2, "session", "6", true) +} + +func execWithTimeout(t *testing.T, tk *testkit.TestKit, to time.Duration, sql string) (bool, error) { + ctx, cancel := context.WithTimeout(context.Background(), to) + defer cancel() + doneCh := make(chan error, 1) + + go func() { + _, err := tk.Exec(sql) + doneCh <- err + }() + + select { + case e := <-doneCh: + // Exit normally + return false, e + case <-ctx.Done(): + // Exceed given timeout + logutil.BgLogger().Info("execWithTimeout meet timeout", zap.String("sql", sql)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/BatchAddTiFlashSendDone", "return(true)")) + } + + e := <-doneCh + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/BatchAddTiFlashSendDone")) + return true, e +} + +func TestTiFlashBatchRateLimiter(t *testing.T) { + s, teardown := createTiFlashContext(t) + defer teardown() + tk := testkit.NewTestKit(t, s.store) + + threshold := 2 + tk.MustExec("create database tiflash_ddl_limit") + tk.MustExec(fmt.Sprintf("set SESSION tidb_batch_pending_tiflash_count=%v", threshold)) + for i := 0; i < threshold; i++ { + tk.MustExec(fmt.Sprintf("create table tiflash_ddl_limit.t%v(z int)", i)) + } + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/PollTiFlashReplicaStatusReplaceCurAvailableValue", `return(false)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/PollTiFlashReplicaStatusReplaceCurAvailableValue")) + }() + + tk.MustExec("alter database tiflash_ddl_limit set tiflash replica 1") + tk.MustExec(fmt.Sprintf("create table tiflash_ddl_limit.t%v(z int)", threshold)) + // The following statement shall fail, because it reaches limit + timeOut, err := execWithTimeout(t, tk, time.Second*1, "alter database tiflash_ddl_limit set tiflash replica 1") + require.NoError(t, err) + require.True(t, timeOut) + + // There must be one table with no TiFlashReplica. + check := func(expected int, total int) { + cnt := 0 + for i := 0; i < total; i++ { + tb, err := s.dom.InfoSchema().TableByName(model.NewCIStr("tiflash_ddl_limit"), model.NewCIStr(fmt.Sprintf("t%v", i))) + require.NoError(t, err) + if tb.Meta().TiFlashReplica != nil { + cnt += 1 + } + } + require.Equal(t, expected, cnt) + } + check(2, 3) + + // If we exec in another session, it will not trigger limit. Since DefTiDBBatchPendingTiFlashCount is more than 3. + tk2 := testkit.NewTestKit(t, s.store) + tk2.MustExec("alter database tiflash_ddl_limit set tiflash replica 1") + check(3, 3) + + loop := 3 + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/FastFailCheckTiFlashPendingTables", fmt.Sprintf("return(%v)", loop))) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/FastFailCheckTiFlashPendingTables")) + }() + // We will force trigger its DDL to update schema cache. + tk.MustExec(fmt.Sprintf("create table tiflash_ddl_limit.t%v(z int)", threshold+1)) + timeOut, err = execWithTimeout(t, tk, time.Millisecond*time.Duration(200*(loop+1)), "alter database tiflash_ddl_limit set tiflash replica 1") + require.NoError(t, err) + require.False(t, timeOut) + check(4, 4) + + // However, forceCheck is true, so we will still enter try loop. + tk.MustExec(fmt.Sprintf("create table tiflash_ddl_limit.t%v(z int)", threshold+2)) + timeOut, err = execWithTimeout(t, tk, time.Millisecond*200, "alter database tiflash_ddl_limit set tiflash replica 1") + require.NoError(t, err) + require.True(t, timeOut) + check(4, 5) + + // Retrigger, but close session before the whole job ends. + var wg util.WaitGroupWrapper + var mu sync.Mutex + wg.Run(func() { + time.Sleep(time.Millisecond * 20) + mu.Lock() + defer mu.Unlock() + tk.Session().Close() + logutil.BgLogger().Info("session closed") + }) + mu.Lock() + timeOut, err = execWithTimeout(t, tk, time.Second*2, "alter database tiflash_ddl_limit set tiflash replica 1") + mu.Unlock() + require.NoError(t, err) + require.False(t, timeOut) + check(5, 5) + wg.Wait() +} + +func TestTiFlashBatchKill(t *testing.T) { + s, teardown := createTiFlashContext(t) + defer teardown() + tk := testkit.NewTestKit(t, s.store) + + tk.MustExec("create database tiflash_ddl_limit") + tk.MustExec("set SESSION tidb_batch_pending_tiflash_count=0") + tk.MustExec("create table tiflash_ddl_limit.t0(z int)") + + var wg util.WaitGroupWrapper + wg.Run(func() { + time.Sleep(time.Millisecond * 100) + sessVars := tk.Session().GetSessionVars() + atomic.StoreUint32(&sessVars.Killed, 1) + }) + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/FastFailCheckTiFlashPendingTables", `return(2)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/FastFailCheckTiFlashPendingTables")) + }() + timeOut, err := execWithTimeout(t, tk, time.Second*2000, "alter database tiflash_ddl_limit set tiflash replica 1") + require.Error(t, err, "[executor:1317]Query execution was interrupted") + require.False(t, timeOut) + wg.Wait() +} + +func TestTiFlashBatchUnsupported(t *testing.T) { + s, teardown := createTiFlashContext(t) + defer teardown() + tk := testkit.NewTestKit(t, s.store) + + tk.MustExec("create database tiflash_ddl_view") + tk.MustExec("create table tiflash_ddl_view.t(z int)") + tk.MustExec("insert into tiflash_ddl_view.t values (1)") + tk.MustExec("CREATE VIEW tiflash_ddl_view.v AS select * from tiflash_ddl_view.t") + tk.MustExec("alter database tiflash_ddl_view set tiflash replica 1") + require.Equal(t, "In total 2 tables: 1 succeed, 0 failed, 1 skipped", tk.Session().GetSessionVars().StmtCtx.GetMessage()) + tk.MustGetErrCode("alter database information_schema set tiflash replica 1", 8200) +} diff --git a/ddl/ddl_worker.go b/ddl/ddl_worker.go index ae0348efd2372..4ea8ae4765fce 100644 --- a/ddl/ddl_worker.go +++ b/ddl/ddl_worker.go @@ -25,7 +25,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/kvrpcpb" - pumpcli "github.com/pingcap/tidb-tools/tidb-binlog/pump_client" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" @@ -36,12 +35,15 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/binloginfo" "github.com/pingcap/tidb/sessionctx/variable" + pumpcli "github.com/pingcap/tidb/tidb-binlog/pump_client" tidbutil "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/admin" "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/resourcegrouptag" "github.com/pingcap/tidb/util/topsql" topsqlstate "github.com/pingcap/tidb/util/topsql/state" + "github.com/tikv/client-go/v2/tikvrpc" clientv3 "go.etcd.io/etcd/client/v3" "go.uber.org/zap" ) @@ -301,6 +303,13 @@ func (d *ddl) addBatchDDLJobs(tasks []*limitJobTask) { if mayNeedReorg(job) { jobListKey = meta.AddIndexJobListKey } + failpoint.Inject("MockModifyJobArg", func(val failpoint.Value) { + if val.(bool) { + if len(job.Args) > 0 { + job.Args[0] = 1 + } + } + }) if err = t.EnQueueDDLJob(job, jobListKey); err != nil { return errors.Trace(err) } @@ -340,9 +349,22 @@ func (d *ddl) getHistoryDDLJob(id int64) (*model.Job, error) { return job, errors.Trace(err) } +func injectFailPointForGetJob(job *model.Job) { + if job == nil { + return + } + failpoint.Inject("mockModifyJobSchemaId", func(val failpoint.Value) { + job.SchemaID = int64(val.(int)) + }) + failpoint.Inject("MockModifyJobTableId", func(val failpoint.Value) { + job.TableID = int64(val.(int)) + }) +} + // getFirstDDLJob gets the first DDL job form DDL queue. func (w *worker) getFirstDDLJob(t *meta.Meta) (*model.Job, error) { job, err := t.GetDDLJobByIdx(0) + injectFailPointForGetJob(job) return job, errors.Trace(err) } @@ -388,7 +410,7 @@ func (w *worker) deleteRange(ctx context.Context, job *model.Job) error { if job.Version <= currentVersion { err = w.delRangeManager.addDelRangeJob(ctx, job) } else { - err = errInvalidDDLJobVersion.GenWithStackByArgs(job.Version, currentVersion) + err = dbterror.ErrInvalidDDLJobVersion.GenWithStackByArgs(job.Version, currentVersion) } return errors.Trace(err) } @@ -509,6 +531,19 @@ func (w *worker) setDDLLabelForTopSQL(job *model.Job) { w.ddlJobCtx = topsql.AttachSQLInfo(context.Background(), w.cacheNormalizedSQL, w.cacheDigest, "", nil, false) } +func (w *worker) setResourceGroupTaggerForTopSQL(txn kv.Transaction) { + if !topsqlstate.TopSQLEnabled() || w.cacheDigest == nil { + return + } + + digest := w.cacheDigest + tagger := func(req *tikvrpc.Request) { + req.ResourceGroupTag = resourcegrouptag.EncodeResourceGroupTag(digest, nil, + resourcegrouptag.GetResourceGroupLabelByKey(resourcegrouptag.GetFirstKeyFromRequest(req))) + } + txn.SetOption(kv.ResourceGroupTagger, tikvrpc.ResourceGroupTagger(tagger)) +} + // handleDDLJobQueue handles DDL jobs in DDL Job queue. func (w *worker) handleDDLJobQueue(d *ddlCtx) error { once := true @@ -544,6 +579,7 @@ func (w *worker) handleDDLJobQueue(d *ddlCtx) error { } w.setDDLLabelForTopSQL(job) + w.setResourceGroupTaggerForTopSQL(txn) if isDone, err1 := isDependencyJobDone(t, job); err1 != nil || !isDone { return errors.Trace(err1) } @@ -876,7 +912,7 @@ func (w *worker) runDDLJob(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, case model.ActionDropPlacementPolicy: ver, err = onDropPlacementPolicy(d, t, job) case model.ActionAlterPlacementPolicy: - ver, err = onAlterPlacementPolicy(d, t, job) + ver, err = onAlterPlacementPolicy(t, job) case model.ActionAlterTablePartitionPlacement: ver, err = onAlterTablePartitionPlacement(t, job) case model.ActionAlterTablePlacement: @@ -888,7 +924,7 @@ func (w *worker) runDDLJob(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, default: // Invalid job, cancel it. job.State = model.JobStateCancelled - err = errInvalidDDLJob.GenWithStack("invalid ddl job type: %v", job.Type) + err = dbterror.ErrInvalidDDLJob.GenWithStack("invalid ddl job type: %v", job.Type) } // Save errors in job if any, so that others can know errors happened. diff --git a/ddl/ddl_worker_test.go b/ddl/ddl_worker_test.go index 2f290c14313ea..f233c7c8f6635 100644 --- a/ddl/ddl_worker_test.go +++ b/ddl/ddl_worker_test.go @@ -1,333 +1,52 @@ -// Copyright 2015 PingCAP, Inc. +//// Copyright 2015 PingCAP, Inc. +//// +//// 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. // -// 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 ddl +package ddl_test import ( "context" + "strconv" "sync" "testing" "time" "github.com/pingcap/errors" "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/parser/ast" - "github.com/pingcap/tidb/parser/charset" "github.com/pingcap/tidb/parser/model" - "github.com/pingcap/tidb/parser/mysql" - "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/admin" - "github.com/pingcap/tidb/util/mock" - "github.com/pingcap/tidb/util/sqlexec" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/util" "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" ) -type testDDLSerialSuiteToVerify struct { - suite.Suite -} - -func TestDDLSerialSuite(t *testing.T) { - suite.Run(t, new(testDDLSerialSuiteToVerify)) -} - const testLease = 5 * time.Millisecond -func (s *testDDLSerialSuiteToVerify) SetupSuite() { - SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) - - // We hope that this test is serially executed. So put it here. - s.testRunWorker() -} - func TestCheckOwner(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() + _, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) + defer clean() - d1, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d1.Stop()) - }() time.Sleep(testLease) - testCheckOwner(t, d1, true) - - require.Equal(t, d1.GetLease(), testLease) -} - -func TestNotifyDDLJob(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - - getFirstNotificationAfterStartDDL := func(d *ddl) { - select { - case <-d.workers[addIdxWorker].ddlJobCh: - default: - // The notification may be received by the worker. - } - select { - case <-d.workers[generalWorker].ddlJobCh: - default: - // The notification may be received by the worker. - } - } - - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - getFirstNotificationAfterStartDDL(d) - // Ensure that the notification is not handled in workers `start` function. - d.cancel() - for _, worker := range d.workers { - worker.close() - } - - job := &model.Job{ - SchemaID: 1, - TableID: 2, - Type: model.ActionCreateTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{}, - } - // Test the notification mechanism of the owner and the server receiving the DDL request on the same TiDB. - // This DDL request is a general DDL job. - d.asyncNotifyWorker(job) - select { - case <-d.workers[generalWorker].ddlJobCh: - default: - require.FailNow(t, "do not get the general job notification") - } - // Test the notification mechanism of the owner and the server receiving the DDL request on the same TiDB. - // This DDL request is a add index DDL job. - job.Type = model.ActionAddIndex - d.asyncNotifyWorker(job) - select { - case <-d.workers[addIdxWorker].ddlJobCh: - default: - require.FailNow(t, "do not get the add index job notification") - } - - // Test the notification mechanism that the owner and the server receiving the DDL request are not on the same TiDB. - // And the etcd client is nil. - d1, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d1.Stop()) - }() - getFirstNotificationAfterStartDDL(d1) - // Ensure that the notification is not handled by worker's "start". - d1.cancel() - for _, worker := range d1.workers { - worker.close() - } - d1.ownerManager.RetireOwner() - d1.asyncNotifyWorker(job) - job.Type = model.ActionCreateTable - d1.asyncNotifyWorker(job) - testCheckOwner(t, d1, false) - select { - case <-d1.workers[addIdxWorker].ddlJobCh: - require.FailNow(t, "should not get the add index job notification") - case <-d1.workers[generalWorker].ddlJobCh: - require.FailNow(t, "should not get the general job notification") - default: - } -} - -// testRunWorker tests no job is handled when the value of RunWorker is false. -func (s *testDDLSerialSuiteToVerify) testRunWorker() { - store := createMockStore(s.T()) - defer func() { - require.NoError(s.T(), store.Close()) - }() - - RunWorker = false - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - testCheckOwner(s.T(), d, false) - defer func() { - require.NoError(s.T(), d.Stop()) - }() - - // Make sure the DDL worker is nil. - worker := d.generalWorker() - require.Nil(s.T(), worker) - // Make sure the DDL job can be done and exit that goroutine. - RunWorker = true - d1, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - testCheckOwner(s.T(), d1, true) - defer func() { - err := d1.Stop() - require.NoError(s.T(), err) - }() - worker = d1.generalWorker() - require.NotNil(s.T(), worker) -} - -func TestSchemaError(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - ctx := testNewContext(d) - - doDDLJobErr(t, 1, 0, model.ActionCreateSchema, []interface{}{1}, ctx, d) -} - -func TestTableError(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - ctx := testNewContext(d) - - // Schema ID is wrong, so dropping table is failed. - doDDLJobErr(t, -1, 1, model.ActionDropTable, nil, ctx, d) - // Table ID is wrong, so dropping table is failed. - dbInfo, err := testSchemaInfo(d, "test_ddl") - require.NoError(t, err) - testCreateSchema(t, testNewContext(d), d, dbInfo) - job := doDDLJobErr(t, dbInfo.ID, -1, model.ActionDropTable, nil, ctx, d) - - // Table ID or schema ID is wrong, so getting table is failed. - tblInfo, err := testTableInfo(d, "t", 3) - require.NoError(t, err) - testCreateTable(t, ctx, d, dbInfo, tblInfo) - err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - job.SchemaID = -1 - job.TableID = -1 - m := meta.NewMeta(txn) - _, err1 := getTableInfoAndCancelFaultJob(m, job, job.SchemaID) - require.Error(t, err1) - job.SchemaID = dbInfo.ID - _, err1 = getTableInfoAndCancelFaultJob(m, job, job.SchemaID) - require.Error(t, err1) - return nil - }) - require.NoError(t, err) - - // Args is wrong, so creating table is failed. - doDDLJobErr(t, 1, 1, model.ActionCreateTable, []interface{}{1}, ctx, d) - // Schema ID is wrong, so creating table is failed. - doDDLJobErr(t, -1, tblInfo.ID, model.ActionCreateTable, []interface{}{tblInfo}, ctx, d) - // Table exists, so creating table is failed. - tblInfo.ID++ - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionCreateTable, []interface{}{tblInfo}, ctx, d) - -} - -func TestViewError(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - ctx := testNewContext(d) - dbInfo, err := testSchemaInfo(d, "test_ddl") - require.NoError(t, err) - testCreateSchema(t, testNewContext(d), d, dbInfo) - - // Table ID or schema ID is wrong, so getting table is failed. - tblInfo := testViewInfo(t, d, "t", 3) - testCreateView(t, ctx, d, dbInfo, tblInfo) - - // Args is wrong, so creating view is failed. - doDDLJobErr(t, 1, 1, model.ActionCreateView, []interface{}{1}, ctx, d) - // Schema ID is wrong and orReplace is false, so creating view is failed. - doDDLJobErr(t, -1, tblInfo.ID, model.ActionCreateView, []interface{}{tblInfo, false}, ctx, d) - // View exists and orReplace is false, so creating view is failed. - tblInfo.ID++ - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionCreateView, []interface{}{tblInfo, false}, ctx, d) - + require.Equal(t, dom.DDL().OwnerManager().IsOwner(), true) + require.Equal(t, dom.DDL().GetLease(), testLease) } func TestInvalidDDLJob(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - ctx := testNewContext(d) + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) + defer clean() job := &model.Job{ SchemaID: 0, @@ -336,1183 +55,34 @@ func TestInvalidDDLJob(t *testing.T) { BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{}, } - err = d.doDDLJob(ctx, job) + ctx := testNewContext(store) + ctx.SetValue(sessionctx.QueryString, "skip") + err := dom.DDL().DoDDLJob(ctx, job) require.Equal(t, err.Error(), "[ddl:8204]invalid ddl job type: none") } -func TestForeignKeyError(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - ctx := testNewContext(d) - - doDDLJobErr(t, -1, 1, model.ActionAddForeignKey, nil, ctx, d) - doDDLJobErr(t, -1, 1, model.ActionDropForeignKey, nil, ctx, d) - - dbInfo, err := testSchemaInfo(d, "test_ddl") - require.NoError(t, err) - tblInfo, err := testTableInfo(d, "t", 3) - require.NoError(t, err) - testCreateSchema(t, ctx, d, dbInfo) - testCreateTable(t, ctx, d, dbInfo, tblInfo) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionDropForeignKey, []interface{}{model.NewCIStr("c1_foreign_key")}, ctx, d) -} - -func TestIndexError(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - ctx := testNewContext(d) - - // Schema ID is wrong. - doDDLJobErr(t, -1, 1, model.ActionAddIndex, nil, ctx, d) - doDDLJobErr(t, -1, 1, model.ActionDropIndex, nil, ctx, d) - - dbInfo, err := testSchemaInfo(d, "test_ddl") - require.NoError(t, err) - tblInfo, err := testTableInfo(d, "t", 3) - require.NoError(t, err) - testCreateSchema(t, ctx, d, dbInfo) - testCreateTable(t, ctx, d, dbInfo, tblInfo) - - // for adding index - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionAddIndex, []interface{}{1}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionAddIndex, - []interface{}{false, model.NewCIStr("t"), 1, - []*ast.IndexPartSpecification{{Column: &ast.ColumnName{Name: model.NewCIStr("c")}, Length: 256}}}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionAddIndex, - []interface{}{false, model.NewCIStr("c1_index"), 1, - []*ast.IndexPartSpecification{{Column: &ast.ColumnName{Name: model.NewCIStr("c")}, Length: 256}}}, ctx, d) - testCreateIndex(t, ctx, d, dbInfo, tblInfo, false, "c1_index", "c1") - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionAddIndex, - []interface{}{false, model.NewCIStr("c1_index"), 1, - []*ast.IndexPartSpecification{{Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, Length: 256}}}, ctx, d) - - // for dropping index - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionDropIndex, []interface{}{1}, ctx, d) - testDropIndex(t, ctx, d, dbInfo, tblInfo, "c1_index") - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionDropIndex, []interface{}{model.NewCIStr("c1_index")}, ctx, d) -} - -func TestColumnError(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - ctx := testNewContext(d) - - dbInfo, err := testSchemaInfo(d, "test_ddl") - require.NoError(t, err) - tblInfo, err := testTableInfo(d, "t", 3) - require.NoError(t, err) - testCreateSchema(t, ctx, d, dbInfo) - testCreateTable(t, ctx, d, dbInfo, tblInfo) - col := &model.ColumnInfo{ - Name: model.NewCIStr("c4"), - Offset: len(tblInfo.Columns), - DefaultValue: 0, - } - col.ID = allocateColumnID(tblInfo) - col.FieldType = *types.NewFieldType(mysql.TypeLong) - pos := &ast.ColumnPosition{Tp: ast.ColumnPositionAfter, RelativeColumn: &ast.ColumnName{Name: model.NewCIStr("c5")}} - - cols := &[]*model.ColumnInfo{col} - positions := &[]*ast.ColumnPosition{pos} - - // for adding column - doDDLJobErr(t, -1, tblInfo.ID, model.ActionAddColumn, []interface{}{col, pos, 0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, -1, model.ActionAddColumn, []interface{}{col, pos, 0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionAddColumn, []interface{}{0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionAddColumn, []interface{}{col, pos, 0}, ctx, d) - - // for dropping column - doDDLJobErr(t, -1, tblInfo.ID, model.ActionDropColumn, []interface{}{col, pos, 0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, -1, model.ActionDropColumn, []interface{}{col, pos, 0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionDropColumn, []interface{}{0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionDropColumn, []interface{}{model.NewCIStr("c5")}, ctx, d) +func TestAddBatchJobError(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) + defer clean() + ctx := testNewContext(store) - // for adding columns - doDDLJobErr(t, -1, tblInfo.ID, model.ActionAddColumns, []interface{}{cols, positions, 0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, -1, model.ActionAddColumns, []interface{}{cols, positions, 0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionAddColumns, []interface{}{0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionAddColumns, []interface{}{cols, positions, 0}, ctx, d) - - // for dropping columns - doDDLJobErr(t, -1, tblInfo.ID, model.ActionDropColumns, []interface{}{col, pos, 0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, -1, model.ActionDropColumns, []interface{}{col, pos, 0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionDropColumns, []interface{}{0}, ctx, d) - doDDLJobErr(t, dbInfo.ID, tblInfo.ID, model.ActionDropColumns, []interface{}{[]model.CIStr{model.NewCIStr("c5"), model.NewCIStr("c6")}, make([]bool, 2)}, ctx, d) -} - -func (s *testDDLSerialSuiteToVerify) TestAddBatchJobError() { - store := createMockStore(s.T()) - defer func() { - require.NoError(s.T(), store.Close()) - }() - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - require.NoError(s.T(), d.Stop()) - }() - ctx := testNewContext(d) - require.Nil(s.T(), failpoint.Enable("github.com/pingcap/tidb/ddl/mockAddBatchDDLJobsErr", `return(true)`)) + require.Nil(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockAddBatchDDLJobsErr", `return(true)`)) // Test the job runner should not hang forever. job := &model.Job{SchemaID: 1, TableID: 1} - err = d.doDDLJob(ctx, job) - require.Error(s.T(), err) - require.Equal(s.T(), err.Error(), "mockAddBatchDDLJobsErr") - require.Nil(s.T(), failpoint.Disable("github.com/pingcap/tidb/ddl/mockAddBatchDDLJobsErr")) -} - -func testCheckOwner(t *testing.T, d *ddl, expectedVal bool) { - require.Equal(t, d.isOwner(), expectedVal) -} - -func testCheckJobDone(test *testing.T, d *ddl, job *model.Job, isAdd bool) { - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) - historyJob, err := t.GetHistoryDDLJob(job.ID) - require.NoError(test, err) - checkHistoryJob(test, historyJob) - if isAdd { - require.Equal(test, historyJob.SchemaState, model.StatePublic) - } else { - require.Equal(test, historyJob.SchemaState, model.StateNone) - } - - return nil - }) - require.NoError(test, err) + ctx.SetValue(sessionctx.QueryString, "skip") + err := dom.DDL().DoDDLJob(ctx, job) + require.Error(t, err) + require.Equal(t, err.Error(), "mockAddBatchDDLJobsErr") + require.Nil(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockAddBatchDDLJobsErr")) } -func testCheckJobDoneT(t *testing.T, d *ddl, job *model.Job, isAdd bool) { - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { - tt := meta.NewMeta(txn) - historyJob, err := tt.GetHistoryDDLJob(job.ID) - require.NoError(t, err) - require.Equal(t, model.JobStateSynced, historyJob.State) - if isAdd { - require.Equal(t, model.StatePublic, historyJob.SchemaState) - } else { - require.Equal(t, model.StateNone, historyJob.SchemaState) - } - - return nil - }) - require.NoError(t, err) -} - -func testCheckJobCancelledT(t *testing.T, d *ddl, job *model.Job, state *model.SchemaState) { - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { - tt := meta.NewMeta(txn) - historyJob, err := tt.GetHistoryDDLJob(job.ID) - require.NoError(t, err) - require.True(t, historyJob.IsCancelled() || historyJob.IsRollbackDone(), "history job %s", historyJob) - if state != nil { - require.Equal(t, *state, historyJob.SchemaState) - } - return nil - }) - require.NoError(t, err) -} - -func testCheckJobCancelled(test *testing.T, d *ddl, job *model.Job, state *model.SchemaState) { - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) - historyJob, err := t.GetHistoryDDLJob(job.ID) - require.NoError(test, err) - require.True(test, historyJob.IsCancelled() || historyJob.IsRollbackDone(), "history job %s", historyJob) - if state != nil { - require.Equal(test, historyJob.SchemaState, *state) - } - return nil - }) - require.NoError(test, err) -} - -func doDDLJobErrWithSchemaState(ctx sessionctx.Context, d *ddl, t *testing.T, schemaID, tableID int64, tp model.ActionType, - args []interface{}, state *model.SchemaState) *model.Job { - job := &model.Job{ - SchemaID: schemaID, - TableID: tableID, - Type: tp, - Args: args, - BinlogInfo: &model.HistoryInfo{}, - } - err := d.doDDLJob(ctx, job) - // TODO: Add the detail error check. - require.Error(t, err, "err:%v", err) - testCheckJobCancelled(t, d, job, state) - - return job -} - -func doDDLJobErrWithSchemaStateT(ctx sessionctx.Context, d *ddl, t *testing.T, schemaID, tableID int64, tp model.ActionType, - args []interface{}, state *model.SchemaState) *model.Job { - job := &model.Job{ - SchemaID: schemaID, - TableID: tableID, - Type: tp, - Args: args, - BinlogInfo: &model.HistoryInfo{}, - } - err := d.doDDLJob(ctx, job) - // TODO: Add the detail error check. - require.Error(t, err, "err:%v", err) - testCheckJobCancelledT(t, d, job, state) - - return job -} - -func doDDLJobSuccess(ctx sessionctx.Context, d *ddl, t *testing.T, schemaID, tableID int64, tp model.ActionType, - args []interface{}) { - job := &model.Job{ - SchemaID: schemaID, - TableID: tableID, - Type: tp, - Args: args, - BinlogInfo: &model.HistoryInfo{}, - } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) -} - -func doDDLJobErr(t *testing.T, schemaID, tableID int64, tp model.ActionType, args []interface{}, - ctx sessionctx.Context, d *ddl) *model.Job { - return doDDLJobErrWithSchemaState(ctx, d, t, schemaID, tableID, tp, args, nil) -} - -func doDDLJobErrT(t *testing.T, schemaID, tableID int64, tp model.ActionType, args []interface{}, - ctx sessionctx.Context, d *ddl) *model.Job { - return doDDLJobErrWithSchemaStateT(ctx, d, t, schemaID, tableID, tp, args, nil) -} - -func checkCancelState(txn kv.Transaction, job *model.Job, test *testCancelJob) error { - var checkErr error - addIndexFirstReorg := (test.act == model.ActionAddIndex || test.act == model.ActionAddPrimaryKey) && - job.SchemaState == model.StateWriteReorganization && job.SnapshotVer == 0 - // If the action is adding index and the state is writing reorganization, it wants to test the case of cancelling the job when backfilling indexes. - // When the job satisfies this case of addIndexFirstReorg, the worker hasn't started to backfill indexes. - if test.cancelState == job.SchemaState && !addIndexFirstReorg && !job.IsRollingback() { - errs, err := admin.CancelJobs(txn, test.jobIDs) - if err != nil { - checkErr = errors.Trace(err) - return checkErr - } - // It only tests cancel one DDL job. - if !terror.ErrorEqual(errs[0], test.cancelRetErrs[0]) { - checkErr = errors.Trace(errs[0]) - return checkErr - } - } - return checkErr -} - -type testCancelJob struct { - jobIDs []int64 - cancelRetErrs []error // cancelRetErrs is the first return value of CancelJobs. - act model.ActionType // act is the job action. - cancelState model.SchemaState -} - -func buildCancelJobTests(firstID int64) []testCancelJob { - noErrs := []error{nil} - tests := []testCancelJob{ - {act: model.ActionAddIndex, jobIDs: []int64{firstID + 1}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, - {act: model.ActionAddIndex, jobIDs: []int64{firstID + 2}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, - {act: model.ActionAddIndex, jobIDs: []int64{firstID + 3}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, - {act: model.ActionAddIndex, jobIDs: []int64{firstID + 4}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 4)}, cancelState: model.StatePublic}, - - // Test cancel drop index job , see TestCancelDropIndex. - {act: model.ActionAddColumn, jobIDs: []int64{firstID + 5}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, - {act: model.ActionAddColumn, jobIDs: []int64{firstID + 6}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, - {act: model.ActionAddColumn, jobIDs: []int64{firstID + 7}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, - {act: model.ActionAddColumn, jobIDs: []int64{firstID + 8}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 8)}, cancelState: model.StatePublic}, - - // Test create table, watch out, table id will alloc a globalID. - {act: model.ActionCreateTable, jobIDs: []int64{firstID + 10}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - // Test create database, watch out, database id will alloc a globalID. - {act: model.ActionCreateSchema, jobIDs: []int64{firstID + 12}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - - {act: model.ActionDropColumn, jobIDs: []int64{firstID + 13}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 13)}, cancelState: model.StateDeleteOnly}, - {act: model.ActionDropColumn, jobIDs: []int64{firstID + 14}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 14)}, cancelState: model.StateWriteOnly}, - {act: model.ActionDropColumn, jobIDs: []int64{firstID + 15}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 15)}, cancelState: model.StateWriteReorganization}, - {act: model.ActionRebaseAutoID, jobIDs: []int64{firstID + 16}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionShardRowID, jobIDs: []int64{firstID + 17}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - - {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 18}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 19}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, - - {act: model.ActionAddForeignKey, jobIDs: []int64{firstID + 20}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionAddForeignKey, jobIDs: []int64{firstID + 21}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 21)}, cancelState: model.StatePublic}, - {act: model.ActionDropForeignKey, jobIDs: []int64{firstID + 22}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionDropForeignKey, jobIDs: []int64{firstID + 23}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 23)}, cancelState: model.StatePublic}, - - {act: model.ActionRenameTable, jobIDs: []int64{firstID + 24}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionRenameTable, jobIDs: []int64{firstID + 25}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 25)}, cancelState: model.StatePublic}, - - {act: model.ActionModifyTableCharsetAndCollate, jobIDs: []int64{firstID + 26}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionModifyTableCharsetAndCollate, jobIDs: []int64{firstID + 27}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 27)}, cancelState: model.StatePublic}, - {act: model.ActionTruncateTablePartition, jobIDs: []int64{firstID + 28}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionTruncateTablePartition, jobIDs: []int64{firstID + 29}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 29)}, cancelState: model.StatePublic}, - {act: model.ActionModifySchemaCharsetAndCollate, jobIDs: []int64{firstID + 31}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionModifySchemaCharsetAndCollate, jobIDs: []int64{firstID + 32}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 32)}, cancelState: model.StatePublic}, - - {act: model.ActionAddPrimaryKey, jobIDs: []int64{firstID + 33}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, - {act: model.ActionAddPrimaryKey, jobIDs: []int64{firstID + 34}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, - {act: model.ActionAddPrimaryKey, jobIDs: []int64{firstID + 35}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, - {act: model.ActionAddPrimaryKey, jobIDs: []int64{firstID + 36}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 36)}, cancelState: model.StatePublic}, - {act: model.ActionDropPrimaryKey, jobIDs: []int64{firstID + 37}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, - {act: model.ActionDropPrimaryKey, jobIDs: []int64{firstID + 38}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 38)}, cancelState: model.StateDeleteOnly}, - - {act: model.ActionAddColumns, jobIDs: []int64{firstID + 39}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, - {act: model.ActionAddColumns, jobIDs: []int64{firstID + 40}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, - {act: model.ActionAddColumns, jobIDs: []int64{firstID + 41}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, - {act: model.ActionAddColumns, jobIDs: []int64{firstID + 42}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 42)}, cancelState: model.StatePublic}, - - {act: model.ActionDropColumns, jobIDs: []int64{firstID + 43}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 43)}, cancelState: model.StateDeleteOnly}, - {act: model.ActionDropColumns, jobIDs: []int64{firstID + 44}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 44)}, cancelState: model.StateWriteOnly}, - {act: model.ActionDropColumns, jobIDs: []int64{firstID + 45}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 45)}, cancelState: model.StateWriteReorganization}, - - {act: model.ActionAlterIndexVisibility, jobIDs: []int64{firstID + 47}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionAlterIndexVisibility, jobIDs: []int64{firstID + 48}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 48)}, cancelState: model.StatePublic}, - - {act: model.ActionExchangeTablePartition, jobIDs: []int64{firstID + 54}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionExchangeTablePartition, jobIDs: []int64{firstID + 55}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 55)}, cancelState: model.StatePublic}, - - {act: model.ActionAddTablePartition, jobIDs: []int64{firstID + 60}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionAddTablePartition, jobIDs: []int64{firstID + 61}, cancelRetErrs: noErrs, cancelState: model.StateReplicaOnly}, - {act: model.ActionAddTablePartition, jobIDs: []int64{firstID + 62}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob}, cancelState: model.StatePublic}, - - // modify column has two different types, normal-type and reorg-type. The latter has 5 states and it can be cancelled except the public state. - {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 65}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 66}, cancelRetErrs: noErrs, cancelState: model.StateDeleteOnly}, - {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 67}, cancelRetErrs: noErrs, cancelState: model.StateWriteOnly}, - {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 68}, cancelRetErrs: noErrs, cancelState: model.StateWriteReorganization}, - {act: model.ActionModifyColumn, jobIDs: []int64{firstID + 69}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob}, cancelState: model.StatePublic}, - - // for drop indexes - {act: model.ActionDropIndexes, jobIDs: []int64{firstID + 72}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 72)}, cancelState: model.StateWriteOnly}, - {act: model.ActionDropIndexes, jobIDs: []int64{firstID + 73}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 73)}, cancelState: model.StateDeleteOnly}, - {act: model.ActionDropIndexes, jobIDs: []int64{firstID + 74}, cancelRetErrs: []error{admin.ErrCannotCancelDDLJob.GenWithStackByArgs(firstID + 74)}, cancelState: model.StateWriteReorganization}, - - // for alter db placement - {act: model.ActionModifySchemaDefaultPlacement, jobIDs: []int64{firstID + 75}, cancelRetErrs: noErrs, cancelState: model.StateNone}, - {act: model.ActionModifySchemaDefaultPlacement, jobIDs: []int64{firstID + 76}, cancelRetErrs: []error{admin.ErrCancelFinishedDDLJob.GenWithStackByArgs(firstID + 76)}, cancelState: model.StatePublic}, - } - - return tests -} - -func (s *testDDLSerialSuiteToVerify) checkDropIdx(t *testing.T, d *ddl, schemaID int64, tableID int64, idxName string, success bool) { - checkIdxExist(t, d, schemaID, tableID, idxName, !success) -} - -func (s *testDDLSerialSuiteToVerify) checkAddIdx(t *testing.T, d *ddl, schemaID int64, tableID int64, idxName string, success bool) { - checkIdxExist(t, d, schemaID, tableID, idxName, success) -} - -func checkIdxExist(t *testing.T, d *ddl, schemaID int64, tableID int64, idxName string, expectedExist bool) { - changedTable := testGetTable(t, d, schemaID, tableID) - var found bool - for _, idxInfo := range changedTable.Meta().Indices { - if idxInfo.Name.O == idxName { - found = true - break - } - } - require.Equal(t, found, expectedExist) -} - -func (s *testDDLSerialSuiteToVerify) checkAddColumns(d *ddl, schemaID int64, tableID int64, colNames []string, success bool) { - changedTable := testGetTable(s.T(), d, schemaID, tableID) - found := !checkColumnsNotFound(changedTable, colNames) - require.Equal(s.T(), found, success) -} - -func (s *testDDLSerialSuiteToVerify) checkCancelDropColumns(d *ddl, schemaID int64, tableID int64, colNames []string, success bool) { - changedTable := testGetTable(s.T(), d, schemaID, tableID) - notFound := checkColumnsNotFound(changedTable, colNames) - require.Equal(s.T(), notFound, success) -} - -func checkColumnsNotFound(t table.Table, colNames []string) bool { - notFound := true - for _, colName := range colNames { - for _, colInfo := range t.Meta().Columns { - if colInfo.Name.O == colName { - notFound = false - } - } - } - return notFound -} - -func checkIdxVisibility(changedTable table.Table, idxName string, expected bool) bool { - for _, idxInfo := range changedTable.Meta().Indices { - if idxInfo.Name.O == idxName && idxInfo.Invisible == expected { - return true - } - } - return false -} - -func (s *testDDLSerialSuiteToVerify) TestCancelJob() { - store := createMockStore(s.T()) - defer func() { - require.NoError(s.T(), store.Close()) - }() - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - require.NoError(s.T(), d.Stop()) - }() - dbInfo, err := testSchemaInfo(d, "test_cancel_job") - require.NoError(s.T(), err) - testCreateSchema(s.T(), testNewContext(d), d, dbInfo) - // create a partition table. - partitionTblInfo := testTableInfoWithPartition(s.T(), d, "t_partition", 5) - // Skip using sessPool. Make sure adding primary key can be successful. - partitionTblInfo.Columns[0].Flag |= mysql.NotNullFlag - // create table t (c1 int, c2 int, c3 int, c4 int, c5 int); - tblInfo, err := testTableInfo(d, "t", 5) - require.NoError(s.T(), err) - ctx := testNewContext(d) - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - err = ctx.GetSessionVars().SetSystemVar("tidb_enable_exchange_partition", "1") - require.NoError(s.T(), err) - defer func() { - err := ctx.GetSessionVars().SetSystemVar("tidb_enable_exchange_partition", "0") - require.NoError(s.T(), err) - }() - testCreateTable(s.T(), ctx, d, dbInfo, partitionTblInfo) - tableAutoID := int64(100) - shardRowIDBits := uint64(5) - tblInfo.AutoIncID = tableAutoID - tblInfo.ShardRowIDBits = shardRowIDBits - job := testCreateTable(s.T(), ctx, d, dbInfo, tblInfo) - // insert t values (1, 2, 3, 4, 5); - originTable := testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - row := types.MakeDatums(1, 2, 3, 4, 5) - _, err = originTable.AddRecord(ctx, row) - require.NoError(s.T(), err) - txn, err := ctx.Txn(true) - require.NoError(s.T(), err) - err = txn.Commit(context.Background()) - require.NoError(s.T(), err) - - tc := &TestDDLCallback{} - // set up hook - firstJobID := job.ID - tests := buildCancelJobTests(firstJobID) - var checkErr error - var mu sync.Mutex - var test *testCancelJob - updateTest := func(t *testCancelJob) { - mu.Lock() - test = t - mu.Unlock() - } - hookCancelFunc := func(job *model.Job) { - if job.State == model.JobStateSynced || job.State == model.JobStateCancelled || job.State == model.JobStateCancelling { - return - } - // This hook only valid for the related test job. - // This is use to avoid parallel test fail. - mu.Lock() - if len(test.jobIDs) > 0 && test.jobIDs[0] != job.ID { - mu.Unlock() - return - } - mu.Unlock() - if checkErr != nil { - return - } - - hookCtx := mock.NewContext() - hookCtx.Store = store - err1 := hookCtx.NewTxn(context.Background()) - if err1 != nil { - checkErr = errors.Trace(err1) - return - } - txn, err1 = hookCtx.Txn(true) - if err1 != nil { - checkErr = errors.Trace(err1) - return - } - mu.Lock() - checkErr = checkCancelState(txn, job, test) - mu.Unlock() - if checkErr != nil { - return - } - err1 = txn.Commit(context.Background()) - if err1 != nil { - checkErr = errors.Trace(err1) - return - } - } - tc.onJobUpdated = hookCancelFunc - tc.onJobRunBefore = hookCancelFunc - d.SetHook(tc) - - // for adding index - updateTest(&tests[0]) - idxOrigName := "idx" - validArgs := []interface{}{false, model.NewCIStr(idxOrigName), - []*ast.IndexPartSpecification{{ - Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, - Length: -1, - }}, nil} - - // When the job satisfies this test case, the option will be rollback, so the job's schema state is none. - cancelState := model.StateNone - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddIndex, validArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) - updateTest(&tests[1]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddIndex, validArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) - updateTest(&tests[2]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddIndex, validArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) - updateTest(&tests[3]) - testCreateIndex(s.T(), ctx, d, dbInfo, tblInfo, false, "idx", "c2") - require.NoError(s.T(), checkErr) - txn, err = ctx.Txn(true) - require.NoError(s.T(), err) - require.Nil(s.T(), txn.Commit(context.Background())) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, true) - - // for add column - updateTest(&tests[4]) - addingColName := "colA" - newColumnDef := &ast.ColumnDef{ - Name: &ast.ColumnName{Name: model.NewCIStr(addingColName)}, - Tp: &types.FieldType{Tp: mysql.TypeLonglong}, - Options: []*ast.ColumnOption{}, - } - chs, coll := charset.GetDefaultCharsetAndCollate() - col, _, err := buildColumnAndConstraint(ctx, 2, newColumnDef, nil, chs, coll) - require.NoError(s.T(), err) - - addColumnArgs := []interface{}{col, &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, 0} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumn, addColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, []string{addingColName}, false) - - updateTest(&tests[5]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumn, addColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, []string{addingColName}, false) - - updateTest(&tests[6]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumn, addColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, []string{addingColName}, false) - - updateTest(&tests[7]) - testAddColumn(s.T(), ctx, d, dbInfo, tblInfo, addColumnArgs) - require.NoError(s.T(), checkErr) - s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, []string{addingColName}, true) - - // for create table - tblInfo1, err := testTableInfo(d, "t1", 2) - require.NoError(s.T(), err) - updateTest(&tests[8]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo1.ID, model.ActionCreateTable, []interface{}{tblInfo1}, &cancelState) - require.NoError(s.T(), checkErr) - testCheckTableState(s.T(), d, dbInfo, tblInfo1, model.StateNone) - - // for create database - dbInfo1, err := testSchemaInfo(d, "test_cancel_job1") - require.NoError(s.T(), err) - updateTest(&tests[9]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo1.ID, 0, model.ActionCreateSchema, []interface{}{dbInfo1}, &cancelState) - require.NoError(s.T(), checkErr) - testCheckSchemaState(s.T(), d, dbInfo1, model.StateNone) - - // for drop column. - updateTest(&tests[10]) - dropColName := "c3" - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, false) - testDropColumn(s.T(), ctx, d, dbInfo, tblInfo, dropColName, false) - require.NoError(s.T(), checkErr) - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, true) - - updateTest(&tests[11]) - dropColName = "c4" - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, false) - testDropColumn(s.T(), ctx, d, dbInfo, tblInfo, dropColName, false) - require.NoError(s.T(), checkErr) - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, true) - - updateTest(&tests[12]) - dropColName = "c5" - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, false) - testDropColumn(s.T(), ctx, d, dbInfo, tblInfo, dropColName, false) - require.NoError(s.T(), checkErr) - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, []string{dropColName}, true) - - // cancel rebase auto id - updateTest(&tests[13]) - rebaseIDArgs := []interface{}{int64(200)} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionRebaseAutoID, rebaseIDArgs, &cancelState) - require.NoError(s.T(), checkErr) - changedTable := testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), changedTable.Meta().AutoIncID, tableAutoID) - - // cancel shard bits - updateTest(&tests[14]) - shardRowIDArgs := []interface{}{uint64(7)} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionShardRowID, shardRowIDArgs, &cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), changedTable.Meta().ShardRowIDBits, shardRowIDBits) - - // modify none-state column - col.DefaultValue = "1" - updateTest(&tests[15]) - modifyColumnArgs := []interface{}{col, col.Name, &ast.ColumnPosition{}, byte(0), uint64(0)} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, modifyColumnArgs, &test.cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - changedCol := model.FindColumnInfo(changedTable.Meta().Columns, col.Name.L) - require.Nil(s.T(), changedCol.DefaultValue) - - // modify delete-only-state column, - col.FieldType.Tp = mysql.TypeTiny - col.FieldType.Flen-- - updateTest(&tests[16]) - modifyColumnArgs = []interface{}{col, col.Name, &ast.ColumnPosition{}, byte(0), uint64(0)} - cancelState = model.StateNone - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, modifyColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - changedCol = model.FindColumnInfo(changedTable.Meta().Columns, col.Name.L) - require.Equal(s.T(), changedCol.FieldType.Tp, mysql.TypeLonglong) - require.Equal(s.T(), changedCol.FieldType.Flen, col.FieldType.Flen+1) - col.FieldType.Flen++ - - // Test add foreign key failed cause by canceled. - updateTest(&tests[17]) - addForeignKeyArgs := []interface{}{model.FKInfo{Name: model.NewCIStr("fk1")}} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, addForeignKeyArgs, &test.cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), len(changedTable.Meta().ForeignKeys), 0) - - // Test add foreign key successful. - updateTest(&tests[18]) - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, addForeignKeyArgs) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), len(changedTable.Meta().ForeignKeys), 1) - require.Equal(s.T(), changedTable.Meta().ForeignKeys[0].Name, addForeignKeyArgs[0].(model.FKInfo).Name) - - // Test drop foreign key failed cause by canceled. - updateTest(&tests[19]) - dropForeignKeyArgs := []interface{}{addForeignKeyArgs[0].(model.FKInfo).Name} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, dropForeignKeyArgs, &test.cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), len(changedTable.Meta().ForeignKeys), 1) - require.Equal(s.T(), changedTable.Meta().ForeignKeys[0].Name, dropForeignKeyArgs[0].(model.CIStr)) - - // Test drop foreign key successful. - updateTest(&tests[20]) - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, dropForeignKeyArgs) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), len(changedTable.Meta().ForeignKeys), 0) - - // test rename table failed caused by canceled. - test = &tests[21] - renameTableArgs := []interface{}{dbInfo.ID, model.NewCIStr("t2"), dbInfo.Name} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, renameTableArgs, &test.cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), changedTable.Meta().Name.L, "t") - - // test rename table successful. - test = &tests[22] - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, renameTableArgs) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), changedTable.Meta().Name.L, "t2") - - // test modify table charset failed caused by canceled. - test = &tests[23] - modifyTableCharsetArgs := []interface{}{"utf8mb4", "utf8mb4_bin"} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, modifyTableCharsetArgs, &test.cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), changedTable.Meta().Charset, "utf8") - require.Equal(s.T(), changedTable.Meta().Collate, "utf8_bin") - - // test modify table charset successfully. - test = &tests[24] - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, modifyTableCharsetArgs) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.Equal(s.T(), changedTable.Meta().Charset, "utf8mb4") - require.Equal(s.T(), changedTable.Meta().Collate, "utf8mb4_bin") - - // test truncate table partition failed caused by canceled. - test = &tests[25] - truncateTblPartitionArgs := []interface{}{[]int64{partitionTblInfo.Partition.Definitions[0].ID}} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, partitionTblInfo.ID, test.act, truncateTblPartitionArgs, &test.cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, partitionTblInfo.ID) - require.True(s.T(), changedTable.Meta().Partition.Definitions[0].ID == partitionTblInfo.Partition.Definitions[0].ID) - - // test truncate table partition charset successfully. - test = &tests[26] - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, partitionTblInfo.ID, test.act, truncateTblPartitionArgs) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, partitionTblInfo.ID) - require.False(s.T(), changedTable.Meta().Partition.Definitions[0].ID == partitionTblInfo.Partition.Definitions[0].ID) - - // test modify schema charset failed caused by canceled. - test = &tests[27] - charsetAndCollate := []interface{}{"utf8mb4", "utf8mb4_bin"} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, charsetAndCollate, &test.cancelState) - require.NoError(s.T(), checkErr) - dbInfo, err = testGetSchemaInfoWithError(d, dbInfo.ID) - require.NoError(s.T(), err) - require.Equal(s.T(), dbInfo.Charset, "") - require.Equal(s.T(), dbInfo.Collate, "") - - // test modify table charset successfully. - test = &tests[28] - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, charsetAndCollate) - require.NoError(s.T(), checkErr) - dbInfo, err = testGetSchemaInfoWithError(d, dbInfo.ID) - require.NoError(s.T(), err) - require.Equal(s.T(), dbInfo.Charset, "utf8mb4") - require.Equal(s.T(), dbInfo.Collate, "utf8mb4_bin") - - // for adding primary key - tblInfo = changedTable.Meta() - updateTest(&tests[29]) - idxOrigName = "primary" - validArgs = []interface{}{false, model.NewCIStr(idxOrigName), - []*ast.IndexPartSpecification{{ - Column: &ast.ColumnName{Name: model.NewCIStr("c1")}, - Length: -1, - }}, nil} - cancelState = model.StateNone - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddPrimaryKey, validArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) - updateTest(&tests[30]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddPrimaryKey, validArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) - updateTest(&tests[31]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddPrimaryKey, validArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) - updateTest(&tests[32]) - testCreatePrimaryKey(s.T(), ctx, d, dbInfo, tblInfo, "c1") - require.NoError(s.T(), checkErr) - txn, err = ctx.Txn(true) - require.NoError(s.T(), err) - require.Nil(s.T(), txn.Commit(context.Background())) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, true) - - // for dropping primary key - updateTest(&tests[33]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionDropPrimaryKey, validArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkDropIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, false) - updateTest(&tests[34]) - testDropIndex(s.T(), ctx, d, dbInfo, tblInfo, idxOrigName) - require.NoError(s.T(), checkErr) - s.checkDropIdx(s.T(), d, dbInfo.ID, tblInfo.ID, idxOrigName, true) - - // for add columns - updateTest(&tests[35]) - addingColNames := []string{"colA", "colB", "colC", "colD", "colE", "colF"} - cols := make([]*table.Column, len(addingColNames)) - for i, addingColName := range addingColNames { - newColumnDef := &ast.ColumnDef{ - Name: &ast.ColumnName{Name: model.NewCIStr(addingColName)}, - Tp: &types.FieldType{Tp: mysql.TypeLonglong}, - Options: []*ast.ColumnOption{}, - } - col, _, err := buildColumnAndConstraint(ctx, 0, newColumnDef, nil, mysql.DefaultCharset, "") - require.NoError(s.T(), err) - cols[i] = col - } - offsets := make([]int, len(cols)) - positions := make([]*ast.ColumnPosition, len(cols)) - for i := range positions { - positions[i] = &ast.ColumnPosition{Tp: ast.ColumnPositionNone} - } - ifNotExists := make([]bool, len(cols)) - - addColumnArgs = []interface{}{cols, positions, offsets, ifNotExists} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumns, addColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, addingColNames, false) - - updateTest(&tests[36]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumns, addColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, addingColNames, false) - - updateTest(&tests[37]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, model.ActionAddColumns, addColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, addingColNames, false) - - updateTest(&tests[38]) - testAddColumns(s.T(), ctx, d, dbInfo, tblInfo, addColumnArgs) - require.NoError(s.T(), checkErr) - s.checkAddColumns(d, dbInfo.ID, tblInfo.ID, addingColNames, true) - - // for drop columns - updateTest(&tests[39]) - dropColNames := []string{"colA", "colB"} - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, false) - testDropColumns(s.T(), ctx, d, dbInfo, tblInfo, dropColNames, false) - require.NoError(s.T(), checkErr) - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, true) - - updateTest(&tests[40]) - dropColNames = []string{"colC", "colD"} - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, false) - testDropColumns(s.T(), ctx, d, dbInfo, tblInfo, dropColNames, false) - require.NoError(s.T(), checkErr) - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, true) - - updateTest(&tests[41]) - dropColNames = []string{"colE", "colF"} - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, false) - testDropColumns(s.T(), ctx, d, dbInfo, tblInfo, dropColNames, false) - require.NoError(s.T(), checkErr) - s.checkCancelDropColumns(d, dbInfo.ID, tblInfo.ID, dropColNames, true) - - // test alter index visibility failed caused by canceled. - indexName := "idx_c3" - testCreateIndex(s.T(), ctx, d, dbInfo, tblInfo, false, indexName, "c3") - require.NoError(s.T(), checkErr) - txn, err = ctx.Txn(true) - require.NoError(s.T(), err) - require.Nil(s.T(), txn.Commit(context.Background())) - s.checkAddIdx(s.T(), d, dbInfo.ID, tblInfo.ID, indexName, true) - - updateTest(&tests[42]) - alterIndexVisibility := []interface{}{model.NewCIStr(indexName), true} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, alterIndexVisibility, &test.cancelState) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.True(s.T(), checkIdxVisibility(changedTable, indexName, false)) - - // cancel alter index visibility successfully - updateTest(&tests[43]) - alterIndexVisibility = []interface{}{model.NewCIStr(indexName), true} - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tblInfo.ID, test.act, alterIndexVisibility) - require.NoError(s.T(), checkErr) - changedTable = testGetTable(s.T(), d, dbInfo.ID, tblInfo.ID) - require.True(s.T(), checkIdxVisibility(changedTable, indexName, true)) - - // test exchange partition failed caused by canceled - pt := testTableInfoWithPartition(s.T(), d, "pt", 5) - nt, err := testTableInfo(d, "nt", 5) - require.NoError(s.T(), err) - testCreateTable(s.T(), ctx, d, dbInfo, pt) - testCreateTable(s.T(), ctx, d, dbInfo, nt) - - updateTest(&tests[44]) - defID := pt.Partition.Definitions[0].ID - exchangeTablePartition := []interface{}{defID, dbInfo.ID, pt.ID, "p0", true} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, nt.ID, test.act, exchangeTablePartition, &test.cancelState) - require.NoError(s.T(), checkErr) - changedNtTable := testGetTable(s.T(), d, dbInfo.ID, nt.ID) - changedPtTable := testGetTable(s.T(), d, dbInfo.ID, pt.ID) - require.True(s.T(), changedNtTable.Meta().ID == nt.ID) - require.True(s.T(), changedPtTable.Meta().Partition.Definitions[0].ID == pt.Partition.Definitions[0].ID) - - // cancel exchange partition successfully - updateTest(&tests[45]) - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, nt.ID, test.act, exchangeTablePartition) - require.NoError(s.T(), checkErr) - changedNtTable = testGetTable(s.T(), d, dbInfo.ID, pt.Partition.Definitions[0].ID) - changedPtTable = testGetTable(s.T(), d, dbInfo.ID, pt.ID) - require.False(s.T(), changedNtTable.Meta().ID == nt.ID) - require.True(s.T(), changedPtTable.Meta().Partition.Definitions[0].ID == nt.ID) - - // Cancel add table partition. - baseTableInfo := testTableInfoWithPartitionLessThan(s.T(), d, "empty_table", 5, "1000") - testCreateTable(s.T(), ctx, d, dbInfo, baseTableInfo) - - cancelState = model.StateNone - updateTest(&tests[46]) - addedPartInfo := testAddedNewTablePartitionInfo(s.T(), d, baseTableInfo, "p1", "maxvalue") - addPartitionArgs := []interface{}{addedPartInfo} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, addPartitionArgs, &cancelState) - require.NoError(s.T(), checkErr) - baseTable := testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) - require.Equal(s.T(), len(baseTable.Meta().Partition.Definitions), 1) - - updateTest(&tests[47]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, addPartitionArgs, &cancelState) - require.NoError(s.T(), checkErr) - baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) - require.Equal(s.T(), len(baseTable.Meta().Partition.Definitions), 1) - - updateTest(&tests[48]) - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, addPartitionArgs) - require.NoError(s.T(), checkErr) - baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) - require.Equal(s.T(), len(baseTable.Meta().Partition.Definitions), 2) - require.Equal(s.T(), baseTable.Meta().Partition.Definitions[1].ID, addedPartInfo.Definitions[0].ID) - require.Equal(s.T(), baseTable.Meta().Partition.Definitions[1].LessThan[0], addedPartInfo.Definitions[0].LessThan[0]) - - // Cancel modify column which should reorg the data. - require.Nil(s.T(), failpoint.Enable("github.com/pingcap/tidb/ddl/skipMockContextDoExec", `return(true)`)) - baseTableInfo = testTableInfoWith2IndexOnFirstColumn(s.T(), d, "modify-table", 2) - // This will cost 2 global id, one for table id, the other for the job id. - testCreateTable(s.T(), ctx, d, dbInfo, baseTableInfo) - - cancelState = model.StateNone - newCol := baseTableInfo.Columns[0].Clone() - // change type from long to tinyint. - newCol.FieldType = *types.NewFieldType(mysql.TypeTiny) - // change from null to not null - newCol.FieldType.Flag |= mysql.NotNullFlag - newCol.FieldType.Flen = 2 - - originColName := baseTableInfo.Columns[0].Name - pos := &ast.ColumnPosition{Tp: ast.ColumnPositionNone} - - updateTest(&tests[49]) - modifyColumnArgs = []interface{}{&newCol, originColName, pos, mysql.TypeNull, 0} - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeLong) - require.Equal(s.T(), mysql.HasNotNullFlag(baseTable.Meta().Columns[0].FieldType.Flag), false) - - updateTest(&tests[50]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeLong) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Flag&mysql.NotNullFlag, uint(0)) - - updateTest(&tests[51]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeLong) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Flag&mysql.NotNullFlag, uint(0)) - - updateTest(&tests[52]) - doDDLJobErrWithSchemaState(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs, &cancelState) - require.NoError(s.T(), checkErr) - baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeLong) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Flag&mysql.NotNullFlag, uint(0)) - - updateTest(&tests[53]) - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, baseTableInfo.ID, test.act, modifyColumnArgs) - require.NoError(s.T(), checkErr) - baseTable = testGetTable(s.T(), d, dbInfo.ID, baseTableInfo.ID) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Tp, mysql.TypeTiny) - require.Equal(s.T(), baseTable.Meta().Columns[0].FieldType.Flag&mysql.NotNullFlag, uint(1)) - require.Nil(s.T(), failpoint.Disable("github.com/pingcap/tidb/ddl/skipMockContextDoExec")) - - // for drop indexes - updateTest(&tests[54]) - ifExists := make([]bool, 2) - idxNames := []model.CIStr{model.NewCIStr("i1"), model.NewCIStr("i2")} - dropIndexesArgs := []interface{}{idxNames, ifExists} - tableInfo := createTestTableForDropIndexes(s.T(), ctx, d, dbInfo, "test-drop-indexes", 6) - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tableInfo.ID, test.act, dropIndexesArgs) - s.checkDropIndexes(d, dbInfo.ID, tableInfo.ID, idxNames, true) - - updateTest(&tests[55]) - idxNames = []model.CIStr{model.NewCIStr("i3"), model.NewCIStr("i4")} - dropIndexesArgs = []interface{}{idxNames, ifExists} - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tableInfo.ID, test.act, dropIndexesArgs) - s.checkDropIndexes(d, dbInfo.ID, tableInfo.ID, idxNames, true) - - updateTest(&tests[56]) - idxNames = []model.CIStr{model.NewCIStr("i5"), model.NewCIStr("i6")} - dropIndexesArgs = []interface{}{idxNames, ifExists} - doDDLJobSuccess(ctx, d, s.T(), dbInfo.ID, tableInfo.ID, test.act, dropIndexesArgs) - s.checkDropIndexes(d, dbInfo.ID, tableInfo.ID, idxNames, true) -} - -func TestIgnorableSpec(t *testing.T) { - specs := []ast.AlterTableType{ - ast.AlterTableOption, - ast.AlterTableAddColumns, - ast.AlterTableAddConstraint, - ast.AlterTableDropColumn, - ast.AlterTableDropPrimaryKey, - ast.AlterTableDropIndex, - ast.AlterTableDropForeignKey, - ast.AlterTableModifyColumn, - ast.AlterTableChangeColumn, - ast.AlterTableRenameTable, - ast.AlterTableAlterColumn, - } - for _, spec := range specs { - require.False(t, isIgnorableSpec(spec)) - } - - ignorableSpecs := []ast.AlterTableType{ - ast.AlterTableLock, - ast.AlterTableAlgorithm, - } - for _, spec := range ignorableSpecs { - require.True(t, isIgnorableSpec(spec)) - } -} - -func TestBuildJobDependence(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - // Add some non-add-index jobs. - job1 := &model.Job{ID: 1, TableID: 1, Type: model.ActionAddColumn} - job2 := &model.Job{ID: 2, TableID: 1, Type: model.ActionCreateTable} - job3 := &model.Job{ID: 3, TableID: 2, Type: model.ActionDropColumn} - job6 := &model.Job{ID: 6, TableID: 1, Type: model.ActionDropTable} - job7 := &model.Job{ID: 7, TableID: 2, Type: model.ActionModifyColumn} - job9 := &model.Job{ID: 9, SchemaID: 111, Type: model.ActionDropSchema} - job11 := &model.Job{ID: 11, TableID: 2, Type: model.ActionRenameTable, Args: []interface{}{int64(111), "old db name"}} - err := kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - require.NoError(t, m.EnQueueDDLJob(job1)) - require.NoError(t, m.EnQueueDDLJob(job2)) - require.NoError(t, m.EnQueueDDLJob(job3)) - require.NoError(t, m.EnQueueDDLJob(job6)) - require.NoError(t, m.EnQueueDDLJob(job7)) - require.NoError(t, m.EnQueueDDLJob(job9)) - require.NoError(t, m.EnQueueDDLJob(job11)) - return nil - }) - require.NoError(t, err) - job4 := &model.Job{ID: 4, TableID: 1, Type: model.ActionAddIndex} - err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - err := buildJobDependence(m, job4) - require.NoError(t, err) - require.Equal(t, job4.DependencyID, int64(2)) - return nil - }) - require.NoError(t, err) - job5 := &model.Job{ID: 5, TableID: 2, Type: model.ActionAddIndex} - err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - err := buildJobDependence(m, job5) - require.NoError(t, err) - require.Equal(t, job5.DependencyID, int64(3)) - return nil - }) - require.NoError(t, err) - job8 := &model.Job{ID: 8, TableID: 3, Type: model.ActionAddIndex} - err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - err := buildJobDependence(m, job8) - require.NoError(t, err) - require.Equal(t, job8.DependencyID, int64(0)) - return nil - }) - require.NoError(t, err) - job10 := &model.Job{ID: 10, SchemaID: 111, TableID: 3, Type: model.ActionAddIndex} - err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - err := buildJobDependence(m, job10) - require.NoError(t, err) - require.Equal(t, job10.DependencyID, int64(9)) - return nil - }) - require.NoError(t, err) - job12 := &model.Job{ID: 12, SchemaID: 112, TableID: 2, Type: model.ActionAddIndex} - err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - err := buildJobDependence(m, job12) - require.NoError(t, err) - require.Equal(t, job12.DependencyID, int64(11)) - return nil - }) - require.NoError(t, err) -} +func TestParallelDDL(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) + defer clean() -func addDDLJob(t *testing.T, d *ddl, job *model.Job) { - task := &limitJobTask{job, make(chan error)} - d.limitJobCh <- task - err := <-task.err - require.NoError(t, err) -} + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") -func TestParallelDDL(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - defer func() { - require.NoError(t, d.Stop()) - }() - ctx := testNewContext(d) - err = ctx.NewTxn(context.Background()) - require.NoError(t, err) /* build structure: DBs -> { @@ -1524,63 +94,24 @@ func TestParallelDDL(t *testing.T) { db1.t2 (c1 int primary key, c2 int, c3 int) db2.t3 (c1 int, c2 int, c3 int, c4 int) } - Data -> { - t1: (10, 10), (20, 20) - t2: (1, 1, 1), (2, 2, 2), (3, 3, 3) - t3: (11, 22, 33, 44) - } */ - // create database test_parallel_ddl_1; - dbInfo1, err := testSchemaInfo(d, "test_parallel_ddl_1") - require.NoError(t, err) - testCreateSchema(t, ctx, d, dbInfo1) - // create table t1 (c1 int, c2 int); - tblInfo1, err := testTableInfo(d, "t1", 2) - require.NoError(t, err) - testCreateTable(t, ctx, d, dbInfo1, tblInfo1) - // insert t1 values (10, 10), (20, 20) - tbl1 := testGetTable(t, d, dbInfo1.ID, tblInfo1.ID) - _, err = tbl1.AddRecord(ctx, types.MakeDatums(1, 1)) - require.NoError(t, err) - _, err = tbl1.AddRecord(ctx, types.MakeDatums(2, 2)) - require.NoError(t, err) - // create table t2 (c1 int primary key, c2 int, c3 int); - tblInfo2, err := testTableInfo(d, "t2", 3) - require.NoError(t, err) - tblInfo2.Columns[0].Flag = mysql.PriKeyFlag | mysql.NotNullFlag - tblInfo2.PKIsHandle = true - testCreateTable(t, ctx, d, dbInfo1, tblInfo2) - // insert t2 values (1, 1), (2, 2), (3, 3) - tbl2 := testGetTable(t, d, dbInfo1.ID, tblInfo2.ID) - _, err = tbl2.AddRecord(ctx, types.MakeDatums(1, 1, 1)) - require.NoError(t, err) - _, err = tbl2.AddRecord(ctx, types.MakeDatums(2, 2, 2)) - require.NoError(t, err) - _, err = tbl2.AddRecord(ctx, types.MakeDatums(3, 3, 3)) - require.NoError(t, err) - // create database test_parallel_ddl_2; - dbInfo2, err := testSchemaInfo(d, "test_parallel_ddl_2") - require.NoError(t, err) - testCreateSchema(t, ctx, d, dbInfo2) - // create table t3 (c1 int, c2 int, c3 int, c4 int); - tblInfo3, err := testTableInfo(d, "t3", 4) - require.NoError(t, err) - testCreateTable(t, ctx, d, dbInfo2, tblInfo3) - // insert t3 values (11, 22, 33, 44) - tbl3 := testGetTable(t, d, dbInfo2.ID, tblInfo3.ID) - _, err = tbl3.AddRecord(ctx, types.MakeDatums(11, 22, 33, 44)) - require.NoError(t, err) + tk.MustExec("create database test_parallel_ddl_1") + tk.MustExec("create database test_parallel_ddl_2") + tk.MustExec("create table test_parallel_ddl_1.t1(c1 int, c2 int, key db1_idx2(c2))") + tk.MustExec("create table test_parallel_ddl_1.t2(c1 int primary key, c2 int, c3 int)") + tk.MustExec("create table test_parallel_ddl_2.t3(c1 int, c2 int, c3 int, c4 int)") // set hook to execute jobs after all jobs are in queue. jobCnt := int64(11) - tc := &TestDDLCallback{} + tc := &ddl.TestDDLCallback{Do: dom} once := sync.Once{} var checkErr error - tc.onJobRunBefore = func(job *model.Job) { + tc.OnJobRunBeforeExported = func(job *model.Job) { // TODO: extract a unified function for other tests. once.Do(func() { qLen1 := int64(0) qLen2 := int64(0) + var err error for { checkErr = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { m := meta.NewMeta(txn) @@ -1607,7 +138,7 @@ func TestParallelDDL(t *testing.T) { } }) } - d.SetHook(tc) + dom.DDL().SetHook(tc) /* prepare jobs: @@ -1624,112 +155,113 @@ func TestParallelDDL(t *testing.T) { / 10 / 2 / null / drop schema / / 11 / 2 / 2 / add index / */ - job1 := buildCreateIdxJob(dbInfo1, tblInfo1, false, "db1_idx1", "c1") - addDDLJob(t, d, job1) - job2 := buildCreateColumnJob(dbInfo1, tblInfo1, "c3", &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, nil) - addDDLJob(t, d, job2) - job3 := buildCreateIdxJob(dbInfo1, tblInfo1, false, "db1_idx2", "c3") - addDDLJob(t, d, job3) - job4 := buildDropColumnJob(dbInfo1, tblInfo2, "c3") - addDDLJob(t, d, job4) - job5 := buildDropIdxJob(dbInfo1, tblInfo1, "db1_idx1") - addDDLJob(t, d, job5) - job6 := buildCreateIdxJob(dbInfo1, tblInfo2, false, "db2_idx1", "c2") - addDDLJob(t, d, job6) - job7 := buildDropColumnJob(dbInfo2, tblInfo3, "c4") - addDDLJob(t, d, job7) - job8 := buildRebaseAutoIDJobJob(dbInfo2, tblInfo3, 1024) - addDDLJob(t, d, job8) - job9 := buildCreateIdxJob(dbInfo1, tblInfo1, false, "db1_idx3", "c2") - addDDLJob(t, d, job9) - job10 := buildDropSchemaJob(dbInfo2) - addDDLJob(t, d, job10) - job11 := buildCreateIdxJob(dbInfo2, tblInfo3, false, "db3_idx1", "c2") - addDDLJob(t, d, job11) - // TODO: add rename table job - - // check results. - isChecked := false - for !isChecked { - err := kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - lastJob, err := m.GetHistoryDDLJob(job11.ID) - require.NoError(t, err) - // all jobs are finished. - if lastJob != nil { - finishedJobs, err := m.GetAllHistoryDDLJobs() - require.NoError(t, err) - // get the last 12 jobs completed. - finishedJobs = finishedJobs[len(finishedJobs)-11:] - // check some jobs are ordered because of the dependence. - require.Equal(t, finishedJobs[0].ID, job1.ID, "%v", finishedJobs) - require.Equal(t, finishedJobs[1].ID, job2.ID, "%v", finishedJobs) - require.Equal(t, finishedJobs[2].ID, job3.ID, "%v", finishedJobs) - require.Equal(t, finishedJobs[4].ID, job5.ID, "%v", finishedJobs) - require.Equal(t, finishedJobs[10].ID, job11.ID, "%v", finishedJobs) - // check the jobs are ordered in the backfill-job queue or general-job queue. - backfillJobID := int64(0) - generalJobID := int64(0) - for _, job := range finishedJobs { - // check jobs' order. - if mayNeedReorg(job) { - require.Greater(t, job.ID, backfillJobID) - backfillJobID = job.ID - } else { - require.Greater(t, job.ID, generalJobID) - generalJobID = job.ID - } - // check jobs' state. - if job.ID == lastJob.ID { - require.Equal(t, job.State, model.JobStateCancelled, "job: %v", job) - } else { - require.Equal(t, job.State, model.JobStateSynced, "job: %v", job) - } - } - - isChecked = true - } - return nil - }) - require.NoError(t, err) - time.Sleep(10 * time.Millisecond) - } + var wg util.WaitGroupWrapper - require.NoError(t, checkErr) - tc = &TestDDLCallback{} - d.SetHook(tc) -} - -func TestDDLPackageExecuteSQL(t *testing.T) { - store := createMockStore(t) - defer func() { - require.NoError(t, store.Close()) - }() + seqIDs := make([]int, 11) - d, err := testNewDDLAndStart( - context.Background(), - WithStore(store), - WithLease(testLease), - ) - require.NoError(t, err) - testCheckOwner(t, d, true) - defer func() { - require.NoError(t, d.Stop()) - }() - worker := d.generalWorker() - require.NotNil(t, worker) - - // In test environment, worker.ctxPool will be nil, and get will return mock.Context. - // We just test that can use it to call sqlexec.SQLExecutor.Execute. - sess, err := worker.sessPool.get() - require.NoError(t, err) - defer worker.sessPool.put(sess) - se := sess.(sqlexec.SQLExecutor) - _, _ = se.Execute(context.Background(), "create table t(a int);") -} + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_1.t1 add index db1_idx1(c1)") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[0], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_1.t1 add column c3 int") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[1], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_1.t1 add index db1_idxx(c1)") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[2], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_1.t2 drop column c3") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[3], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_1.t1 drop index db1_idx2") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[4], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_1.t2 add index db1_idx2(c2)") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[5], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_2.t3 drop column c4") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[6], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_2.t3 auto_id_cache 1024") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[7], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("alter table test_parallel_ddl_1.t1 add index db1_idx3(c2)") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[8], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + tk.MustExec("drop database test_parallel_ddl_2") + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[9], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) + time.Sleep(5 * time.Millisecond) + wg.Run(func() { + tk := testkit.NewTestKit(t, store) + _, err := tk.Exec("alter table test_parallel_ddl_2.t3 add index db3_idx1(c2)") + require.Error(t, err) + rs := tk.MustQuery("select json_extract(@@tidb_last_ddl_info, '$.seq_num')") + seqIDs[10], _ = strconv.Atoi(rs.Rows()[0][0].(string)) + }) -func (s *testDDLSerialSuiteToVerify) checkDropIndexes(d *ddl, schemaID int64, tableID int64, idxNames []model.CIStr, success bool) { - for _, idxName := range idxNames { - checkIdxExist(s.T(), d, schemaID, tableID, idxName.O, !success) - } + wg.Wait() + + // Table 1 order. + require.Less(t, seqIDs[0], seqIDs[1]) + require.Less(t, seqIDs[1], seqIDs[2]) + require.Less(t, seqIDs[2], seqIDs[4]) + require.Less(t, seqIDs[4], seqIDs[8]) + + // Table 2 order. + require.Less(t, seqIDs[3], seqIDs[10]) + + // Table 3 order. + require.Less(t, seqIDs[6], seqIDs[7]) + require.Less(t, seqIDs[7], seqIDs[9]) + require.Less(t, seqIDs[9], seqIDs[10]) + + // General job order. + require.Less(t, seqIDs[1], seqIDs[3]) + require.Less(t, seqIDs[3], seqIDs[4]) + require.Less(t, seqIDs[4], seqIDs[6]) + require.Less(t, seqIDs[6], seqIDs[7]) + require.Less(t, seqIDs[7], seqIDs[9]) + + // Reorg job order. + require.Less(t, seqIDs[2], seqIDs[5]) + require.Less(t, seqIDs[5], seqIDs[8]) + require.Less(t, seqIDs[8], seqIDs[10]) } diff --git a/ddl/delete_range.go b/ddl/delete_range.go index f26fd4ccd7444..2182c2919ec30 100644 --- a/ddl/delete_range.go +++ b/ddl/delete_range.go @@ -20,7 +20,6 @@ import ( "math" "strings" "sync" - "sync/atomic" "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/kvrpcpb" @@ -45,9 +44,6 @@ const ( ) var ( - // enableEmulatorGC means whether to enable emulator GC. The default is enable. - // In some unit tests, we want to stop emulator GC, then wen can set enableEmulatorGC to 0. - emulatorGCEnable = int32(1) // batchInsertDeleteRangeSize is the maximum size for each batch insert statement in the delete-range. batchInsertDeleteRangeSize = 256 ) @@ -146,28 +142,13 @@ func (dr *delRange) startEmulator() { case <-dr.quitCh: return } - if IsEmulatorGCEnable() { + if util.IsEmulatorGCEnable() { err := dr.doDelRangeWork() terror.Log(errors.Trace(err)) } } } -// EmulatorGCEnable enables emulator gc. It exports for testing. -func EmulatorGCEnable() { - atomic.StoreInt32(&emulatorGCEnable, 1) -} - -// EmulatorGCDisable disables emulator gc. It exports for testing. -func EmulatorGCDisable() { - atomic.StoreInt32(&emulatorGCEnable, 0) -} - -// IsEmulatorGCEnable indicates whether emulator GC enabled. It exports for testing. -func IsEmulatorGCEnable() bool { - return atomic.LoadInt32(&emulatorGCEnable) == 1 -} - func (dr *delRange) doDelRangeWork() error { ctx, err := dr.sessPool.get() if err != nil { diff --git a/ddl/error.go b/ddl/error.go deleted file mode 100644 index ea79db6bf8591..0000000000000 --- a/ddl/error.go +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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 ddl - -import ( - "fmt" - - mysql "github.com/pingcap/tidb/errno" - parser_mysql "github.com/pingcap/tidb/parser/mysql" - "github.com/pingcap/tidb/util/dbterror" -) - -var ( - // errWorkerClosed means we have already closed the DDL worker. - errInvalidWorker = dbterror.ClassDDL.NewStd(mysql.ErrInvalidDDLWorker) - // errNotOwner means we are not owner and can't handle DDL jobs. - errNotOwner = dbterror.ClassDDL.NewStd(mysql.ErrNotOwner) - errCantDecodeRecord = dbterror.ClassDDL.NewStd(mysql.ErrCantDecodeRecord) - errInvalidDDLJob = dbterror.ClassDDL.NewStd(mysql.ErrInvalidDDLJob) - errCancelledDDLJob = dbterror.ClassDDL.NewStd(mysql.ErrCancelledDDLJob) - errRunMultiSchemaChanges = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "multi schema change"), nil)) - errWaitReorgTimeout = dbterror.ClassDDL.NewStdErr(mysql.ErrLockWaitTimeout, mysql.MySQLErrName[mysql.ErrWaitReorgTimeout]) - errInvalidStoreVer = dbterror.ClassDDL.NewStd(mysql.ErrInvalidStoreVersion) - // ErrRepairTableFail is used to repair tableInfo in repair mode. - ErrRepairTableFail = dbterror.ClassDDL.NewStd(mysql.ErrRepairTable) - - // We don't support dropping column with index covered now. - errCantDropColWithIndex = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "drop column with index"), nil)) - errUnsupportedAddColumn = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "add column"), nil)) - errUnsupportedModifyColumn = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "modify column: %s"), nil)) - errUnsupportedModifyCharset = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "modify %s"), nil)) - errUnsupportedModifyCollation = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "modifying collation from %s to %s"), nil)) - errUnsupportedPKHandle = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "drop integer primary key"), nil)) - errUnsupportedCharset = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "charset %s and collate %s"), nil)) - errUnsupportedShardRowIDBits = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "shard_row_id_bits for table with primary key as row id"), nil)) - errUnsupportedAlterTableWithValidation = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("ALTER TABLE WITH VALIDATION is currently unsupported", nil)) - errUnsupportedAlterTableWithoutValidation = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("ALTER TABLE WITHOUT VALIDATION is currently unsupported", nil)) - errUnsupportedAlterTableOption = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("This type of ALTER TABLE is currently unsupported", nil)) - errUnsupportedAlterReplicaForSysTable = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("ALTER table replica for tables in system database is currently unsupported", nil)) - errUnsupportedAlterCacheForSysTable = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("ALTER table cache for tables in system database is currently unsupported", nil)) - errBlobKeyWithoutLength = dbterror.ClassDDL.NewStd(mysql.ErrBlobKeyWithoutLength) - errKeyPart0 = dbterror.ClassDDL.NewStd(mysql.ErrKeyPart0) - errIncorrectPrefixKey = dbterror.ClassDDL.NewStd(mysql.ErrWrongSubKey) - errTooLongKey = dbterror.ClassDDL.NewStd(mysql.ErrTooLongKey) - errKeyColumnDoesNotExits = dbterror.ClassDDL.NewStd(mysql.ErrKeyColumnDoesNotExits) - errInvalidDDLJobVersion = dbterror.ClassDDL.NewStd(mysql.ErrInvalidDDLJobVersion) - errInvalidUseOfNull = dbterror.ClassDDL.NewStd(mysql.ErrInvalidUseOfNull) - errTooManyFields = dbterror.ClassDDL.NewStd(mysql.ErrTooManyFields) - errTooManyKeys = dbterror.ClassDDL.NewStd(mysql.ErrTooManyKeys) - errInvalidSplitRegionRanges = dbterror.ClassDDL.NewStd(mysql.ErrInvalidSplitRegionRanges) - errReorgPanic = dbterror.ClassDDL.NewStd(mysql.ErrReorgPanic) - errFkColumnCannotDrop = dbterror.ClassDDL.NewStd(mysql.ErrFkColumnCannotDrop) - errFKIncompatibleColumns = dbterror.ClassDDL.NewStd(mysql.ErrFKIncompatibleColumns) - - errAlterReplicaForUnsupportedCharsetTable = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "ALTER table replica for table contain %s charset"), nil)) - - errOnlyOnRangeListPartition = dbterror.ClassDDL.NewStd(mysql.ErrOnlyOnRangeListPartition) - // errWrongKeyColumn is for table column cannot be indexed. - errWrongKeyColumn = dbterror.ClassDDL.NewStd(mysql.ErrWrongKeyColumn) - // errWrongKeyColumnFunctionalIndex is for expression cannot be indexed. - errWrongKeyColumnFunctionalIndex = dbterror.ClassDDL.NewStd(mysql.ErrWrongKeyColumnFunctionalIndex) - // errWrongFKOptionForGeneratedColumn is for wrong foreign key reference option on generated columns. - errWrongFKOptionForGeneratedColumn = dbterror.ClassDDL.NewStd(mysql.ErrWrongFKOptionForGeneratedColumn) - // ErrUnsupportedOnGeneratedColumn is for unsupported actions on generated columns. - ErrUnsupportedOnGeneratedColumn = dbterror.ClassDDL.NewStd(mysql.ErrUnsupportedOnGeneratedColumn) - // errGeneratedColumnNonPrior forbids to refer generated column non prior to it. - errGeneratedColumnNonPrior = dbterror.ClassDDL.NewStd(mysql.ErrGeneratedColumnNonPrior) - // errDependentByGeneratedColumn forbids to delete columns which are dependent by generated columns. - errDependentByGeneratedColumn = dbterror.ClassDDL.NewStd(mysql.ErrDependentByGeneratedColumn) - // errJSONUsedAsKey forbids to use JSON as key or index. - errJSONUsedAsKey = dbterror.ClassDDL.NewStd(mysql.ErrJSONUsedAsKey) - // errBlobCantHaveDefault forbids to give not null default value to TEXT/BLOB/JSON. - errBlobCantHaveDefault = dbterror.ClassDDL.NewStd(mysql.ErrBlobCantHaveDefault) - errTooLongIndexComment = dbterror.ClassDDL.NewStd(mysql.ErrTooLongIndexComment) - // ErrInvalidDefaultValue returns for invalid default value for columns. - ErrInvalidDefaultValue = dbterror.ClassDDL.NewStd(mysql.ErrInvalidDefault) - // ErrGeneratedColumnRefAutoInc forbids to refer generated columns to auto-increment columns . - ErrGeneratedColumnRefAutoInc = dbterror.ClassDDL.NewStd(mysql.ErrGeneratedColumnRefAutoInc) - // ErrExpressionIndexCanNotRefer forbids to refer expression index to auto-increment column. - ErrExpressionIndexCanNotRefer = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexRefAutoIncrement) - // ErrUnsupportedAddPartition returns for does not support add partitions. - ErrUnsupportedAddPartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "add partitions"), nil)) - // ErrUnsupportedCoalescePartition returns for does not support coalesce partitions. - ErrUnsupportedCoalescePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "coalesce partitions"), nil)) - errUnsupportedReorganizePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "reorganize partition"), nil)) - errUnsupportedCheckPartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "check partition"), nil)) - errUnsupportedOptimizePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "optimize partition"), nil)) - errUnsupportedRebuildPartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "rebuild partition"), nil)) - errUnsupportedRemovePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "remove partitioning"), nil)) - errUnsupportedRepairPartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "repair partition"), nil)) - // ErrGeneratedColumnFunctionIsNotAllowed returns for unsupported functions for generated columns. - ErrGeneratedColumnFunctionIsNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrGeneratedColumnFunctionIsNotAllowed) - // ErrGeneratedColumnRowValueIsNotAllowed returns for generated columns referring to row values. - ErrGeneratedColumnRowValueIsNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrGeneratedColumnRowValueIsNotAllowed) - // ErrUnsupportedPartitionByRangeColumns returns for does unsupported partition by range columns. - ErrUnsupportedPartitionByRangeColumns = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "partition by range columns"), nil)) - // ErrFunctionalIndexFunctionIsNotAllowed returns for unsupported functions for functional index. - ErrFunctionalIndexFunctionIsNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexFunctionIsNotAllowed) - // ErrFunctionalIndexRowValueIsNotAllowed returns for functional index referring to row values. - ErrFunctionalIndexRowValueIsNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexRowValueIsNotAllowed) - errUnsupportedCreatePartition = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "partition type, treat as normal table"), nil)) - errTablePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Partitions are ignored because Table Partition is disabled, please set 'tidb_enable_table_partition' if you need to need to enable it", nil)) - errUnsupportedIndexType = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "index type"), nil)) - errWindowInvalidWindowFuncUse = dbterror.ClassDDL.NewStd(mysql.ErrWindowInvalidWindowFuncUse) - - // ErrDupKeyName returns for duplicated key name. - ErrDupKeyName = dbterror.ClassDDL.NewStd(mysql.ErrDupKeyName) - // ErrFkDupName returns for duplicated FK name. - ErrFkDupName = dbterror.ClassDDL.NewStd(mysql.ErrFkDupName) - // ErrInvalidDDLState returns for invalid ddl model object state. - ErrInvalidDDLState = dbterror.ClassDDL.NewStdErr(mysql.ErrInvalidDDLState, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrInvalidDDLState].Raw), nil)) - // ErrUnsupportedModifyPrimaryKey returns an error when add or drop the primary key. - // It's exported for testing. - ErrUnsupportedModifyPrimaryKey = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "%s primary key"), nil)) - // ErrPKIndexCantBeInvisible return an error when primary key is invisible index - ErrPKIndexCantBeInvisible = dbterror.ClassDDL.NewStd(mysql.ErrPKIndexCantBeInvisible) - - // ErrColumnBadNull returns for a bad null value. - ErrColumnBadNull = dbterror.ClassDDL.NewStd(mysql.ErrBadNull) - // ErrBadField forbids to refer to unknown column. - ErrBadField = dbterror.ClassDDL.NewStd(mysql.ErrBadField) - // ErrCantRemoveAllFields returns for deleting all columns. - ErrCantRemoveAllFields = dbterror.ClassDDL.NewStd(mysql.ErrCantRemoveAllFields) - // ErrCantDropFieldOrKey returns for dropping a non-existent field or key. - ErrCantDropFieldOrKey = dbterror.ClassDDL.NewStd(mysql.ErrCantDropFieldOrKey) - // ErrInvalidOnUpdate returns for invalid ON UPDATE clause. - ErrInvalidOnUpdate = dbterror.ClassDDL.NewStd(mysql.ErrInvalidOnUpdate) - // ErrTooLongIdent returns for too long name of database/table/column/index. - ErrTooLongIdent = dbterror.ClassDDL.NewStd(mysql.ErrTooLongIdent) - // ErrWrongDBName returns for wrong database name. - ErrWrongDBName = dbterror.ClassDDL.NewStd(mysql.ErrWrongDBName) - // ErrWrongTableName returns for wrong table name. - ErrWrongTableName = dbterror.ClassDDL.NewStd(mysql.ErrWrongTableName) - // ErrWrongColumnName returns for wrong column name. - ErrWrongColumnName = dbterror.ClassDDL.NewStd(mysql.ErrWrongColumnName) - // ErrWrongPartitionName returns for wrong partition name. - ErrWrongPartitionName = dbterror.ClassDDL.NewStd(mysql.ErrWrongPartitionName) - // ErrWrongUsage returns for wrong ddl syntax usage. - ErrWrongUsage = dbterror.ClassDDL.NewStd(mysql.ErrWrongUsage) - // ErrInvalidGroupFuncUse returns for using invalid group functions. - ErrInvalidGroupFuncUse = dbterror.ClassDDL.NewStd(mysql.ErrInvalidGroupFuncUse) - // ErrTableMustHaveColumns returns for missing column when creating a table. - ErrTableMustHaveColumns = dbterror.ClassDDL.NewStd(mysql.ErrTableMustHaveColumns) - // ErrWrongNameForIndex returns for wrong index name. - ErrWrongNameForIndex = dbterror.ClassDDL.NewStd(mysql.ErrWrongNameForIndex) - // ErrUnknownCharacterSet returns unknown character set. - ErrUnknownCharacterSet = dbterror.ClassDDL.NewStd(mysql.ErrUnknownCharacterSet) - // ErrUnknownCollation returns unknown collation. - ErrUnknownCollation = dbterror.ClassDDL.NewStd(mysql.ErrUnknownCollation) - // ErrCollationCharsetMismatch returns when collation not match the charset. - ErrCollationCharsetMismatch = dbterror.ClassDDL.NewStd(mysql.ErrCollationCharsetMismatch) - // ErrConflictingDeclarations return conflict declarations. - ErrConflictingDeclarations = dbterror.ClassDDL.NewStdErr(mysql.ErrConflictingDeclarations, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrConflictingDeclarations].Raw, "CHARACTER SET ", "%s", "CHARACTER SET ", "%s"), nil)) - // ErrPrimaryCantHaveNull returns All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead - ErrPrimaryCantHaveNull = dbterror.ClassDDL.NewStd(mysql.ErrPrimaryCantHaveNull) - // ErrErrorOnRename returns error for wrong database name in alter table rename - ErrErrorOnRename = dbterror.ClassDDL.NewStd(mysql.ErrErrorOnRename) - // ErrViewSelectClause returns error for create view with select into clause - ErrViewSelectClause = dbterror.ClassDDL.NewStd(mysql.ErrViewSelectClause) - - // ErrNotAllowedTypeInPartition returns not allowed type error when creating table partition with unsupported expression type. - ErrNotAllowedTypeInPartition = dbterror.ClassDDL.NewStd(mysql.ErrFieldTypeNotAllowedAsPartitionField) - // ErrPartitionMgmtOnNonpartitioned returns it's not a partition table. - ErrPartitionMgmtOnNonpartitioned = dbterror.ClassDDL.NewStd(mysql.ErrPartitionMgmtOnNonpartitioned) - // ErrDropPartitionNonExistent returns error in list of partition. - ErrDropPartitionNonExistent = dbterror.ClassDDL.NewStd(mysql.ErrDropPartitionNonExistent) - // ErrSameNamePartition returns duplicate partition name. - ErrSameNamePartition = dbterror.ClassDDL.NewStd(mysql.ErrSameNamePartition) - // ErrSameNamePartitionField returns duplicate partition field. - ErrSameNamePartitionField = dbterror.ClassDDL.NewStd(mysql.ErrSameNamePartitionField) - // ErrRangeNotIncreasing returns values less than value must be strictly increasing for each partition. - ErrRangeNotIncreasing = dbterror.ClassDDL.NewStd(mysql.ErrRangeNotIncreasing) - // ErrPartitionMaxvalue returns maxvalue can only be used in last partition definition. - ErrPartitionMaxvalue = dbterror.ClassDDL.NewStd(mysql.ErrPartitionMaxvalue) - // ErrDropLastPartition returns cannot remove all partitions, use drop table instead. - ErrDropLastPartition = dbterror.ClassDDL.NewStd(mysql.ErrDropLastPartition) - // ErrTooManyPartitions returns too many partitions were defined. - ErrTooManyPartitions = dbterror.ClassDDL.NewStd(mysql.ErrTooManyPartitions) - // ErrPartitionConstDomain returns partition constant is out of partition function domain. - ErrPartitionConstDomain = dbterror.ClassDDL.NewStd(mysql.ErrPartitionConstDomain) - // ErrPartitionFunctionIsNotAllowed returns this partition function is not allowed. - ErrPartitionFunctionIsNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrPartitionFunctionIsNotAllowed) - // ErrPartitionFuncNotAllowed returns partition function returns the wrong type. - ErrPartitionFuncNotAllowed = dbterror.ClassDDL.NewStd(mysql.ErrPartitionFuncNotAllowed) - // ErrUniqueKeyNeedAllFieldsInPf returns must include all columns in the table's partitioning function. - ErrUniqueKeyNeedAllFieldsInPf = dbterror.ClassDDL.NewStd(mysql.ErrUniqueKeyNeedAllFieldsInPf) - // ErrWrongExprInPartitionFunc Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed. - ErrWrongExprInPartitionFunc = dbterror.ClassDDL.NewStd(mysql.ErrWrongExprInPartitionFunc) - // ErrWarnDataTruncated returns data truncated error. - ErrWarnDataTruncated = dbterror.ClassDDL.NewStd(mysql.WarnDataTruncated) - // ErrCoalesceOnlyOnHashPartition returns coalesce partition can only be used on hash/key partitions. - ErrCoalesceOnlyOnHashPartition = dbterror.ClassDDL.NewStd(mysql.ErrCoalesceOnlyOnHashPartition) - // ErrViewWrongList returns create view must include all columns in the select clause - ErrViewWrongList = dbterror.ClassDDL.NewStd(mysql.ErrViewWrongList) - // ErrAlterOperationNotSupported returns when alter operations is not supported. - ErrAlterOperationNotSupported = dbterror.ClassDDL.NewStd(mysql.ErrAlterOperationNotSupportedReason) - // ErrWrongObject returns for wrong object. - ErrWrongObject = dbterror.ClassDDL.NewStd(mysql.ErrWrongObject) - // ErrTableCantHandleFt returns FULLTEXT keys are not supported by table type - ErrTableCantHandleFt = dbterror.ClassDDL.NewStd(mysql.ErrTableCantHandleFt) - // ErrFieldNotFoundPart returns an error when 'partition by columns' are not found in table columns. - ErrFieldNotFoundPart = dbterror.ClassDDL.NewStd(mysql.ErrFieldNotFoundPart) - // ErrWrongTypeColumnValue returns 'Partition column values of incorrect type' - ErrWrongTypeColumnValue = dbterror.ClassDDL.NewStd(mysql.ErrWrongTypeColumnValue) - // ErrValuesIsNotIntType returns 'VALUES value for partition '%-.64s' must have type INT' - ErrValuesIsNotIntType = dbterror.ClassDDL.NewStd(mysql.ErrValuesIsNotIntType) - // ErrFunctionalIndexPrimaryKey returns 'The primary key cannot be a functional index' - ErrFunctionalIndexPrimaryKey = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexPrimaryKey) - // ErrFunctionalIndexOnField returns 'Functional index on a column is not supported. Consider using a regular index instead' - ErrFunctionalIndexOnField = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexOnField) - // ErrInvalidAutoRandom returns when auto_random is used incorrectly. - ErrInvalidAutoRandom = dbterror.ClassDDL.NewStd(mysql.ErrInvalidAutoRandom) - // ErrUnsupportedConstraintCheck returns when use ADD CONSTRAINT CHECK - ErrUnsupportedConstraintCheck = dbterror.ClassDDL.NewStd(mysql.ErrUnsupportedConstraintCheck) - // ErrDerivedMustHaveAlias returns when a sub select statement does not have a table alias. - ErrDerivedMustHaveAlias = dbterror.ClassDDL.NewStd(mysql.ErrDerivedMustHaveAlias) - - // ErrSequenceRunOut returns when the sequence has been run out. - ErrSequenceRunOut = dbterror.ClassDDL.NewStd(mysql.ErrSequenceRunOut) - // ErrSequenceInvalidData returns when sequence values are conflicting. - ErrSequenceInvalidData = dbterror.ClassDDL.NewStd(mysql.ErrSequenceInvalidData) - // ErrSequenceAccessFail returns when sequences are not able to access. - ErrSequenceAccessFail = dbterror.ClassDDL.NewStd(mysql.ErrSequenceAccessFail) - // ErrNotSequence returns when object is not a sequence. - ErrNotSequence = dbterror.ClassDDL.NewStd(mysql.ErrNotSequence) - // ErrUnknownSequence returns when drop / alter unknown sequence. - ErrUnknownSequence = dbterror.ClassDDL.NewStd(mysql.ErrUnknownSequence) - // ErrSequenceUnsupportedTableOption returns when unsupported table option exists in sequence. - ErrSequenceUnsupportedTableOption = dbterror.ClassDDL.NewStd(mysql.ErrSequenceUnsupportedTableOption) - // ErrColumnTypeUnsupportedNextValue is returned when sequence next value is assigned to unsupported column type. - ErrColumnTypeUnsupportedNextValue = dbterror.ClassDDL.NewStd(mysql.ErrColumnTypeUnsupportedNextValue) - // ErrAddColumnWithSequenceAsDefault is returned when the new added column with sequence's nextval as it's default value. - ErrAddColumnWithSequenceAsDefault = dbterror.ClassDDL.NewStd(mysql.ErrAddColumnWithSequenceAsDefault) - // ErrUnsupportedExpressionIndex is returned when create an expression index without allow-expression-index. - ErrUnsupportedExpressionIndex = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "creating expression index containing unsafe functions without allow-expression-index in config"), nil)) - // ErrPartitionExchangePartTable is returned when exchange table partition with another table is partitioned. - ErrPartitionExchangePartTable = dbterror.ClassDDL.NewStd(mysql.ErrPartitionExchangePartTable) - // ErrTablesDifferentMetadata is returned when exchanges tables is not compatible. - ErrTablesDifferentMetadata = dbterror.ClassDDL.NewStd(mysql.ErrTablesDifferentMetadata) - // ErrRowDoesNotMatchPartition is returned when the row record of exchange table does not match the partition rule. - ErrRowDoesNotMatchPartition = dbterror.ClassDDL.NewStd(mysql.ErrRowDoesNotMatchPartition) - // ErrPartitionExchangeForeignKey is returned when exchanged normal table has foreign keys. - ErrPartitionExchangeForeignKey = dbterror.ClassDDL.NewStd(mysql.ErrPartitionExchangeForeignKey) - // ErrCheckNoSuchTable is returned when exchanged normal table is view or sequence. - ErrCheckNoSuchTable = dbterror.ClassDDL.NewStd(mysql.ErrCheckNoSuchTable) - errUnsupportedPartitionType = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "partition type of table %s when exchanging partition"), nil)) - // ErrPartitionExchangeDifferentOption is returned when attribute does not match between partition table and normal table. - ErrPartitionExchangeDifferentOption = dbterror.ClassDDL.NewStd(mysql.ErrPartitionExchangeDifferentOption) - // ErrTableOptionUnionUnsupported is returned when create/alter table with union option. - ErrTableOptionUnionUnsupported = dbterror.ClassDDL.NewStd(mysql.ErrTableOptionUnionUnsupported) - // ErrTableOptionInsertMethodUnsupported is returned when create/alter table with insert method option. - ErrTableOptionInsertMethodUnsupported = dbterror.ClassDDL.NewStd(mysql.ErrTableOptionInsertMethodUnsupported) - - // ErrInvalidPlacementPolicyCheck is returned when txn_scope and commit data changing do not meet the placement policy - ErrInvalidPlacementPolicyCheck = dbterror.ClassDDL.NewStd(mysql.ErrPlacementPolicyCheck) - - // ErrPlacementPolicyWithDirectOption is returned when create/alter table with both placement policy and placement options existed. - ErrPlacementPolicyWithDirectOption = dbterror.ClassDDL.NewStd(mysql.ErrPlacementPolicyWithDirectOption) - - // ErrPlacementPolicyInUse is returned when placement policy is in use in drop/alter. - ErrPlacementPolicyInUse = dbterror.ClassDDL.NewStd(mysql.ErrPlacementPolicyInUse) - - // ErrMultipleDefConstInListPart returns multiple definition of same constant in list partitioning. - ErrMultipleDefConstInListPart = dbterror.ClassDDL.NewStd(mysql.ErrMultipleDefConstInListPart) - - // ErrTruncatedWrongValue is returned when data has been truncated during conversion. - ErrTruncatedWrongValue = dbterror.ClassDDL.NewStd(mysql.ErrTruncatedWrongValue) - - // ErrWarnDataOutOfRange is returned when the value in a numeric column that is outside the permissible range of the column data type. - // See https://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html for details - ErrWarnDataOutOfRange = dbterror.ClassDDL.NewStd(mysql.ErrWarnDataOutOfRange) - - // ErrTooLongValueForType is returned when the individual enum element length is too long. - ErrTooLongValueForType = dbterror.ClassDDL.NewStd(mysql.ErrTooLongValueForType) - - // ErrUnknownEngine is returned when the table engine is unknown. - ErrUnknownEngine = dbterror.ClassDDL.NewStd(mysql.ErrUnknownStorageEngine) - - errExchangePartitionDisabled = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Exchange Partition is disabled, please set 'tidb_enable_exchange_partition' if you need to need to enable it", nil)) - - // ErrPartitionNoTemporary returns when partition at temporary mode - ErrPartitionNoTemporary = dbterror.ClassDDL.NewStd(mysql.ErrPartitionNoTemporary) - - // ErrOptOnTemporaryTable returns when exec unsupported opt at temporary mode - ErrOptOnTemporaryTable = dbterror.ClassDDL.NewStd(mysql.ErrOptOnTemporaryTable) - // ErrOptOnCacheTable returns when exec unsupported opt at cache mode - ErrOptOnCacheTable = dbterror.ClassDDL.NewStd(mysql.ErrOptOnCacheTable) - errUnsupportedOnCommitPreserve = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support ON COMMIT PRESERVE ROWS for now", nil)) - errUnsupportedClusteredSecondaryKey = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("CLUSTERED/NONCLUSTERED keyword is only supported for primary key", nil)) - - // ErrUnsupportedLocalTempTableDDL returns when ddl operation unsupported for local temporary table - ErrUnsupportedLocalTempTableDDL = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("TiDB doesn't support %s for local temporary table", nil)) - // ErrInvalidAttributesSpec is returned when meeting invalid attributes. - ErrInvalidAttributesSpec = dbterror.ClassDDL.NewStd(mysql.ErrInvalidAttributesSpec) - // errFunctionalIndexOnJSONOrGeometryFunction returns when creating expression index and the type of the expression is JSON. - errFunctionalIndexOnJSONOrGeometryFunction = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexOnJSONOrGeometryFunction) - // errDependentByFunctionalIndex returns when the dropped column depends by expression index. - errDependentByFunctionalIndex = dbterror.ClassDDL.NewStd(mysql.ErrDependentByFunctionalIndex) - // errFunctionalIndexOnBlob when the expression of expression index returns blob or text. - errFunctionalIndexOnBlob = dbterror.ClassDDL.NewStd(mysql.ErrFunctionalIndexOnBlob) - // ErrIncompatibleTiFlashAndPlacement when placement and tiflash replica options are set at the same time - ErrIncompatibleTiFlashAndPlacement = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Placement and tiflash replica options cannot be set at the same time", nil)) - - // ErrAutoConvert when auto convert happens - ErrAutoConvert = dbterror.ClassDDL.NewStd(mysql.ErrAutoConvert) -) diff --git a/ddl/export_test.go b/ddl/export_test.go new file mode 100644 index 0000000000000..708b3474515c5 --- /dev/null +++ b/ddl/export_test.go @@ -0,0 +1,19 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl + +func SetBatchInsertDeleteRangeSize(i int) { + batchInsertDeleteRangeSize = i +} diff --git a/ddl/fail_test.go b/ddl/fail_test.go index 80673afa11b3a..741fa739ca289 100644 --- a/ddl/fail_test.go +++ b/ddl/fail_test.go @@ -11,68 +11,57 @@ // 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 ddl +// +package ddl_test import ( - "context" + "strconv" + "testing" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/parser/model" - "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/testkit" "github.com/stretchr/testify/require" ) -func (s *testColumnChangeSuiteToVerify) TestFailBeforeDecodeArgs() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - err := d.Stop() - require.NoError(s.T(), err) - }() - // create table t_fail (c1 int, c2 int); - tblInfo, err := testTableInfo(d, "t_fail", 2) - require.NoError(s.T(), err) - ctx := testNewContext(d) - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - // insert t_fail values (1, 2); - originTable := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - row := types.MakeDatums(1, 2) - _, err = originTable.AddRecord(ctx, row) - require.NoError(s.T(), err) - txn, err := ctx.Txn(true) - require.NoError(s.T(), err) - err = txn.Commit(context.Background()) - require.NoError(s.T(), err) +func TestFailBeforeDecodeArgs(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) + defer clean() + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int);") + tk.MustExec("insert t1 values (1, 2);") + + var tableID int64 + rs := tk.MustQuery("select TIDB_TABLE_ID from information_schema.tables where table_name='t1' and table_schema='test';") + tableIDi, _ := strconv.Atoi(rs.Rows()[0][0].(string)) + tableID = int64(tableIDi) + + d := dom.DDL() + tc := &ddl.TestDDLCallback{Do: dom} - tc := &TestDDLCallback{} first := true stateCnt := 0 - tc.onJobRunBefore = func(job *model.Job) { + tc.OnJobRunBeforeExported = func(job *model.Job) { // It can be other schema states except failed schema state. // This schema state can only appear once. if job.SchemaState == model.StateWriteOnly { stateCnt++ } else if job.SchemaState == model.StateWriteReorganization { if first { - require.NoError(s.T(), failpoint.Enable("github.com/pingcap/tidb/ddl/errorBeforeDecodeArgs", `return(true)`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/errorBeforeDecodeArgs", `return(true)`)) first = false } else { - require.NoError(s.T(), failpoint.Disable("github.com/pingcap/tidb/ddl/errorBeforeDecodeArgs")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/errorBeforeDecodeArgs")) } } } d.SetHook(tc) defaultValue := int64(3) - job := testCreateColumn(s.T(), ctx, d, s.dbInfo, tblInfo, "c3", &ast.ColumnPosition{Tp: ast.ColumnPositionNone}, defaultValue) + jobID := testCreateColumn(tk, t, testNewContext(store), tableID, "c3", "", defaultValue, dom) // Make sure the schema state only appears once. - require.Equal(s.T(), 1, stateCnt) - testCheckJobDone(s.T(), d, job, true) + require.Equal(t, 1, stateCnt) + testCheckJobDone(t, store, jobID, true) } diff --git a/ddl/failtest/fail_db_test.go b/ddl/failtest/fail_db_test.go index 57596043a6c8c..7b299664d176d 100644 --- a/ddl/failtest/fail_db_test.go +++ b/ddl/failtest/fail_db_test.go @@ -389,7 +389,7 @@ func TestAddIndexWorkerNum(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/checkBackfillWorkerNum")) }() - testutil.SessionExecInGoroutine(s.store, "create index c3_index on test_add_index (c3)", done) + testutil.SessionExecInGoroutine(s.store, "test_db", "create index c3_index on test_add_index (c3)", done) checkNum := 0 running := true diff --git a/ddl/failtest/main_test.go b/ddl/failtest/main_test.go index 91f147bd7725a..f3ce7d61fe808 100644 --- a/ddl/failtest/main_test.go +++ b/ddl/failtest/main_test.go @@ -35,6 +35,7 @@ func TestMain(m *testing.M) { ddl.SetWaitTimeWhenErrorOccurred(time.Microsecond) opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/ddl/foreign_key.go b/ddl/foreign_key.go index 6883390ce5671..f7b1ba5a1086b 100644 --- a/ddl/foreign_key.go +++ b/ddl/foreign_key.go @@ -19,11 +19,12 @@ import ( "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/util/dbterror" ) func onCreateForeignKey(t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return ver, errors.Trace(err) } @@ -51,13 +52,13 @@ func onCreateForeignKey(t *meta.Meta, job *model.Job) (ver int64, _ error) { job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) return ver, nil default: - return ver, ErrInvalidDDLState.GenWithStack("foreign key", fkInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStack("foreign key", fkInfo.State) } } func onDropForeignKey(t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return ver, errors.Trace(err) } @@ -107,7 +108,7 @@ func onDropForeignKey(t *meta.Meta, job *model.Job) (ver int64, _ error) { job.FinishTableJob(model.JobStateDone, model.StateNone, ver, tblInfo) return ver, nil default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("foreign key", fkInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("foreign key", fkInfo.State) } } diff --git a/ddl/foreign_key_test.go b/ddl/foreign_key_test.go index 46a150984f9dc..43f8b7d065429 100644 --- a/ddl/foreign_key_test.go +++ b/ddl/foreign_key_test.go @@ -19,8 +19,11 @@ import ( "strings" "sync" "testing" + "time" "github.com/pingcap/errors" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/sessionctx" @@ -28,6 +31,8 @@ import ( "github.com/stretchr/testify/require" ) +const testLease = 5 * time.Millisecond + func testCreateForeignKey(t *testing.T, d *ddl, ctx sessionctx.Context, dbInfo *model.DBInfo, tblInfo *model.TableInfo, fkName string, keys []string, refTable string, refKeys []string, onDelete ast.ReferOptionType, onUpdate ast.ReferOptionType) *model.Job { FKName := model.NewCIStr(fkName) Keys := make([]model.CIStr, len(keys)) @@ -60,7 +65,8 @@ func testCreateForeignKey(t *testing.T, d *ddl, ctx sessionctx.Context, dbInfo * } err := ctx.NewTxn(context.Background()) require.NoError(t, err) - err = d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err = d.DoDDLJob(ctx, job) require.NoError(t, err) return job } @@ -73,10 +79,11 @@ func testDropForeignKey(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *mo BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{model.NewCIStr(foreignKeyName)}, } - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) return job } @@ -114,14 +121,14 @@ func TestForeignKey(t *testing.T) { dbInfo, err := testSchemaInfo(d, "test_foreign") require.NoError(t, err) ctx := testNewContext(d) - testCreateSchemaT(t, ctx, d, dbInfo) + testCreateSchema(t, ctx, d, dbInfo) tblInfo, err := testTableInfo(d, "t", 3) require.NoError(t, err) err = ctx.NewTxn(context.Background()) require.NoError(t, err) - testCreateTableT(t, ctx, d, dbInfo, tblInfo) + testCreateTable(t, ctx, d, dbInfo, tblInfo) txn, err := ctx.Txn(true) require.NoError(t, err) @@ -157,7 +164,7 @@ func TestForeignKey(t *testing.T) { d.SetHook(tc) job := testCreateForeignKey(t, d, ctx, dbInfo, tblInfo, "c1_fk", []string{"c1"}, "t2", []string{"c1"}, ast.ReferOptionCascade, ast.ReferOptionSetNull) - testCheckJobDoneT(t, d, job, true) + testCheckJobDone(t, d, job, true) txn, err = ctx.Txn(true) require.NoError(t, err) err = txn.Commit(context.Background()) @@ -168,8 +175,8 @@ func TestForeignKey(t *testing.T) { mu.Unlock() require.NoError(t, hErr) require.True(t, ok) - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) mu.Lock() checkOK = false @@ -198,7 +205,7 @@ func TestForeignKey(t *testing.T) { d.SetHook(tc2) job = testDropForeignKey(t, ctx, d, dbInfo, tblInfo, "c1_fk") - testCheckJobDoneT(t, d, job, false) + testCheckJobDone(t, d, job, false) mu.Lock() hErr = hookErr ok = checkOK @@ -209,11 +216,27 @@ func TestForeignKey(t *testing.T) { err = ctx.NewTxn(context.Background()) require.NoError(t, err) - job = testDropTableT(t, ctx, d, dbInfo, tblInfo) - testCheckJobDoneT(t, d, job, false) + job = testDropTable(t, ctx, d, dbInfo, tblInfo) + testCheckJobDone(t, d, job, false) txn, err = ctx.Txn(true) require.NoError(t, err) err = txn.Commit(context.Background()) require.NoError(t, err) } + +func testCheckJobDone(t *testing.T, d *ddl, job *model.Job, isAdd bool) { + require.NoError(t, kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + historyJob, err := m.GetHistoryDDLJob(job.ID) + require.NoError(t, err) + checkHistoryJob(t, historyJob) + if isAdd { + require.Equal(t, historyJob.SchemaState, model.StatePublic) + } else { + require.Equal(t, historyJob.SchemaState, model.StateNone) + } + + return nil + })) +} diff --git a/ddl/generated_column.go b/ddl/generated_column.go index 232828a0c107e..4bcf7ca5e5913 100644 --- a/ddl/generated_column.go +++ b/ddl/generated_column.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/util/dbterror" ) // columnGenerationInDDL is a struct for validating generated columns in DDL. @@ -44,11 +45,11 @@ func verifyColumnGeneration(colName2Generation map[string]columnGenerationInDDL, if attr.generated && attribute.position <= attr.position { // A generated column definition can refer to other // generated columns occurring earlier in the table. - err := errGeneratedColumnNonPrior.GenWithStackByArgs() + err := dbterror.ErrGeneratedColumnNonPrior.GenWithStackByArgs() return errors.Trace(err) } } else { - err := ErrBadField.GenWithStackByArgs(depCol, "generated column function") + err := dbterror.ErrBadField.GenWithStackByArgs(depCol, "generated column function") return errors.Trace(err) } } @@ -68,7 +69,7 @@ func verifyColumnGenerationSingle(dependColNames map[string]struct{}, cols []*ta if _, ok := dependColNames[col.Name.L]; ok { if col.IsGenerated() && col.Offset >= pos { // Generated column can refer only to generated columns defined prior to it. - return errGeneratedColumnNonPrior.GenWithStackByArgs() + return dbterror.ErrGeneratedColumnNonPrior.GenWithStackByArgs() } } } @@ -85,7 +86,7 @@ func checkDependedColExist(dependCols map[string]struct{}, cols []*table.Column) } if len(dependCols) != 0 { for arbitraryCol := range dependCols { - return ErrBadField.GenWithStackByArgs(arbitraryCol, "generated column function") + return dbterror.ErrBadField.GenWithStackByArgs(arbitraryCol, "generated column function") } } return nil @@ -111,7 +112,7 @@ func findPositionRelativeColumn(cols []*table.Column, pos *ast.ColumnPosition) ( } } if col == nil { - return -1, ErrBadField.GenWithStackByArgs(pos.RelativeColumn, "generated column function") + return -1, dbterror.ErrBadField.GenWithStackByArgs(pos.RelativeColumn, "generated column function") } // Inserted position is after the mentioned column. position = col.Offset + 1 @@ -159,11 +160,11 @@ func isGeneratedRelatedColumn(tblInfo *model.TableInfo, newCol, col *model.Colum if newCol.IsGenerated() || col.IsGenerated() { // TODO: Make it compatible with MySQL error. msg := fmt.Sprintf("newCol IsGenerated %v, oldCol IsGenerated %v", newCol.IsGenerated(), col.IsGenerated()) - return errUnsupportedModifyColumn.GenWithStackByArgs(msg) + return dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg) } if ok, dep, _ := hasDependentByGeneratedColumn(tblInfo, col.Name); ok { msg := fmt.Sprintf("oldCol is a dependent column '%s' for generated column", dep) - return errUnsupportedModifyColumn.GenWithStackByArgs(msg) + return dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg) } return nil } @@ -196,7 +197,7 @@ func checkModifyGeneratedColumn(sctx sessionctx.Context, tbl table.Table, oldCol oldColIsStored := !oldCol.IsGenerated() || oldCol.GeneratedStored newColIsStored := !newCol.IsGenerated() || newCol.GeneratedStored if oldColIsStored != newColIsStored { - return ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Changing the STORED status") + return dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Changing the STORED status") } // rule 2. @@ -329,30 +330,30 @@ func checkIllegalFn4Generated(name string, genType int, expr ast.ExprNode) error if c.hasIllegalFunc { switch genType { case typeColumn: - return ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs(name) + return dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs(name) case typeIndex: - return ErrFunctionalIndexFunctionIsNotAllowed.GenWithStackByArgs(name) + return dbterror.ErrFunctionalIndexFunctionIsNotAllowed.GenWithStackByArgs(name) } } if c.hasAggFunc { - return ErrInvalidGroupFuncUse + return dbterror.ErrInvalidGroupFuncUse } if c.hasRowVal { switch genType { case typeColumn: - return ErrGeneratedColumnRowValueIsNotAllowed.GenWithStackByArgs(name) + return dbterror.ErrGeneratedColumnRowValueIsNotAllowed.GenWithStackByArgs(name) case typeIndex: - return ErrFunctionalIndexRowValueIsNotAllowed.GenWithStackByArgs(name) + return dbterror.ErrFunctionalIndexRowValueIsNotAllowed.GenWithStackByArgs(name) } } if c.hasWindowFunc { - return errWindowInvalidWindowFuncUse.GenWithStackByArgs(name) + return dbterror.ErrWindowInvalidWindowFuncUse.GenWithStackByArgs(name) } if c.otherErr != nil { return c.otherErr } if genType == typeIndex && c.hasNotGAFunc4ExprIdx && !config.GetGlobalConfig().Experimental.AllowsExpressionIndex { - return ErrUnsupportedExpressionIndex + return dbterror.ErrUnsupportedExpressionIndex } return nil } @@ -363,13 +364,13 @@ func checkIndexOrStored(tbl table.Table, oldCol, newCol *table.Column) error { } if newCol.GeneratedStored { - return ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("modifying a stored column") + return dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("modifying a stored column") } for _, idx := range tbl.Indices() { for _, col := range idx.Meta().Columns { if col.Name.L == newCol.Name.L { - return ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("modifying an indexed column") + return dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("modifying an indexed column") } } } @@ -382,7 +383,7 @@ func checkAutoIncrementRef(name string, dependencies map[string]struct{}, tbInfo exists, autoIncrementColumn := infoschema.HasAutoIncrementColumn(tbInfo) if exists { if _, found := dependencies[autoIncrementColumn]; found { - return ErrGeneratedColumnRefAutoInc.GenWithStackByArgs(name) + return dbterror.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs(name) } } return nil @@ -393,7 +394,7 @@ func checkExpressionIndexAutoIncrement(name string, dependencies map[string]stru exists, autoIncrementColumn := infoschema.HasAutoIncrementColumn(tbInfo) if exists { if _, found := dependencies[autoIncrementColumn]; found { - return ErrExpressionIndexCanNotRefer.GenWithStackByArgs(name) + return dbterror.ErrExpressionIndexCanNotRefer.GenWithStackByArgs(name) } } return nil diff --git a/ddl/index.go b/ddl/index.go index 3381607d8cefa..376e4442ef89f 100644 --- a/ddl/index.go +++ b/ddl/index.go @@ -39,6 +39,7 @@ import ( "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" decoder "github.com/pingcap/tidb/util/rowDecoder" "github.com/prometheus/client_golang/prometheus" @@ -62,7 +63,7 @@ func buildIndexColumns(columns []*model.ColumnInfo, indexPartSpecifications []*a for _, ip := range indexPartSpecifications { col = model.FindColumnInfo(columns, ip.Column.Name.L) if col == nil { - return nil, errKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", ip.Column.Name) + return nil, dbterror.ErrKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", ip.Column.Name) } if err := checkIndexColumn(col, ip.Length); err != nil { @@ -77,7 +78,7 @@ func buildIndexColumns(columns []*model.ColumnInfo, indexPartSpecifications []*a // The sum of all lengths must be shorter than the max length for prefix. if sumLength > config.GetGlobalConfig().MaxIndexLength { - return nil, errTooLongKey.GenWithStackByArgs(config.GetGlobalConfig().MaxIndexLength) + return nil, dbterror.ErrTooLongKey.GenWithStackByArgs(config.GetGlobalConfig().MaxIndexLength) } idxParts = append(idxParts, &model.IndexColumn{ @@ -95,14 +96,14 @@ func checkPKOnGeneratedColumn(tblInfo *model.TableInfo, indexPartSpecifications for _, colName := range indexPartSpecifications { lastCol = getColumnInfoByName(tblInfo, colName.Column.Name.L) if lastCol == nil { - return nil, errKeyColumnDoesNotExits.GenWithStackByArgs(colName.Column.Name) + return nil, dbterror.ErrKeyColumnDoesNotExits.GenWithStackByArgs(colName.Column.Name) } // Virtual columns cannot be used in primary key. if lastCol.IsGenerated() && !lastCol.GeneratedStored { if lastCol.Hidden { - return nil, ErrFunctionalIndexPrimaryKey + return nil, dbterror.ErrFunctionalIndexPrimaryKey } - return nil, ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Defining a virtual generated column as primary key") + return nil, dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Defining a virtual generated column as primary key") } } @@ -115,7 +116,7 @@ func checkIndexPrefixLength(columns []*model.ColumnInfo, idxColumns []*model.Ind return err } if idxLen > config.GetGlobalConfig().MaxIndexLength { - return errTooLongKey.GenWithStackByArgs(config.GetGlobalConfig().MaxIndexLength) + return dbterror.ErrTooLongKey.GenWithStackByArgs(config.GetGlobalConfig().MaxIndexLength) } return nil } @@ -123,46 +124,46 @@ func checkIndexPrefixLength(columns []*model.ColumnInfo, idxColumns []*model.Ind func checkIndexColumn(col *model.ColumnInfo, indexColumnLen int) error { if col.Flen == 0 && (types.IsTypeChar(col.FieldType.Tp) || types.IsTypeVarchar(col.FieldType.Tp)) { if col.Hidden { - return errors.Trace(errWrongKeyColumnFunctionalIndex.GenWithStackByArgs(col.GeneratedExprString)) + return errors.Trace(dbterror.ErrWrongKeyColumnFunctionalIndex.GenWithStackByArgs(col.GeneratedExprString)) } - return errors.Trace(errWrongKeyColumn.GenWithStackByArgs(col.Name)) + return errors.Trace(dbterror.ErrWrongKeyColumn.GenWithStackByArgs(col.Name)) } // JSON column cannot index. if col.FieldType.Tp == mysql.TypeJSON { if col.Hidden { - return errFunctionalIndexOnJSONOrGeometryFunction + return dbterror.ErrFunctionalIndexOnJSONOrGeometryFunction } - return errors.Trace(errJSONUsedAsKey.GenWithStackByArgs(col.Name.O)) + return errors.Trace(dbterror.ErrJSONUsedAsKey.GenWithStackByArgs(col.Name.O)) } // Length must be specified and non-zero for BLOB and TEXT column indexes. if types.IsTypeBlob(col.FieldType.Tp) { if indexColumnLen == types.UnspecifiedLength { if col.Hidden { - return errFunctionalIndexOnBlob + return dbterror.ErrFunctionalIndexOnBlob } - return errors.Trace(errBlobKeyWithoutLength.GenWithStackByArgs(col.Name.O)) + return errors.Trace(dbterror.ErrBlobKeyWithoutLength.GenWithStackByArgs(col.Name.O)) } if indexColumnLen == types.ErrorLength { - return errors.Trace(errKeyPart0.GenWithStackByArgs(col.Name.O)) + return errors.Trace(dbterror.ErrKeyPart0.GenWithStackByArgs(col.Name.O)) } } // Length can only be specified for specifiable types. if indexColumnLen != types.UnspecifiedLength && !types.IsTypePrefixable(col.FieldType.Tp) { - return errors.Trace(errIncorrectPrefixKey) + return errors.Trace(dbterror.ErrIncorrectPrefixKey) } // Key length must be shorter or equal to the column length. if indexColumnLen != types.UnspecifiedLength && types.IsTypeChar(col.FieldType.Tp) { if col.Flen < indexColumnLen { - return errors.Trace(errIncorrectPrefixKey) + return errors.Trace(dbterror.ErrIncorrectPrefixKey) } // Length must be non-zero for char. if indexColumnLen == types.ErrorLength { - return errors.Trace(errKeyPart0.GenWithStackByArgs(col.Name.O)) + return errors.Trace(dbterror.ErrKeyPart0.GenWithStackByArgs(col.Name.O)) } } @@ -175,7 +176,7 @@ func checkIndexColumn(col *model.ColumnInfo, indexColumnLen int) error { } // Specified length must be shorter than the max length for prefix. if indexColumnLen > config.GetGlobalConfig().MaxIndexLength { - return errTooLongKey.GenWithStackByArgs(config.GetGlobalConfig().MaxIndexLength) + return dbterror.ErrTooLongKey.GenWithStackByArgs(config.GetGlobalConfig().MaxIndexLength) } return nil } @@ -196,7 +197,7 @@ func getIndexColumnLength(col *model.ColumnInfo, colLen int) (int, error) { // Different charsets occupy different numbers of bytes on each character. desc, err := charset.GetCharsetInfo(col.Charset) if err != nil { - return 0, errUnsupportedCharset.GenWithStackByArgs(col.Charset, col.Collate) + return 0, dbterror.ErrUnsupportedCharset.GenWithStackByArgs(col.Charset, col.Collate) } return desc.Maxlen * length, nil case mysql.TypeTiny, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeDouble, mysql.TypeShort: @@ -304,7 +305,7 @@ func onRenameIndex(t *meta.Meta, job *model.Job) (ver int64, _ error) { return ver, errors.Trace(err) } if tblInfo.TableCacheStatusType != model.TableCacheStatusDisable { - return ver, errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("Rename Index")) + return ver, errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Rename Index")) } idx := tblInfo.FindIndexByName(from.L) @@ -400,12 +401,12 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo // Handle normal job. schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return ver, errors.Trace(err) } if tblInfo.TableCacheStatusType != model.TableCacheStatusDisable { - return ver, errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("Create Index")) + return ver, errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Create Index")) } var ( @@ -432,7 +433,7 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo indexInfo := tblInfo.FindIndexByName(indexName.L) if indexInfo != nil && indexInfo.State == model.StatePublic { job.State = model.JobStateCancelled - err = ErrDupKeyName.GenWithStack("index already exist %s", indexName) + err = dbterror.ErrDupKeyName.GenWithStack("index already exist %s", indexName) if isPK { err = infoschema.ErrMultiplePriKey } @@ -567,16 +568,16 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo err = w.runReorgJob(t, reorgInfo, tbl.Meta(), d.lease, func() (addIndexErr error) { defer util.Recover(metrics.LabelDDL, "onCreateIndex", func() { - addIndexErr = errCancelledDDLJob.GenWithStack("add table `%v` index `%v` panic", tblInfo.Name, indexInfo.Name) + addIndexErr = dbterror.ErrCancelledDDLJob.GenWithStack("add table `%v` index `%v` panic", tblInfo.Name, indexInfo.Name) }, false) return w.addTableIndex(tbl, indexInfo, reorgInfo) }) if err != nil { - if errWaitReorgTimeout.Equal(err) { + if dbterror.ErrWaitReorgTimeout.Equal(err) { // if timeout, we should return, check for the owner and re-wait job done. return ver, nil } - if kv.ErrKeyExists.Equal(err) || errCancelledDDLJob.Equal(err) || errCantDecodeRecord.Equal(err) { + if kv.ErrKeyExists.Equal(err) || dbterror.ErrCancelledDDLJob.Equal(err) || dbterror.ErrCantDecodeRecord.Equal(err) { logutil.BgLogger().Warn("[ddl] run add index job failed, convert job to rollback", zap.String("job", job.String()), zap.Error(err)) ver, err = convertAddIdxJob2RollbackJob(t, job, tblInfo, indexInfo, err) if err1 := t.RemoveDDLReorgHandle(job, reorgInfo.elements); err1 != nil { @@ -605,7 +606,7 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo // Finish this job. job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) default: - err = ErrInvalidDDLState.GenWithStackByArgs("index", tblInfo.State) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("index", tblInfo.State) } return ver, errors.Trace(err) @@ -617,7 +618,7 @@ func onDropIndex(t *meta.Meta, job *model.Job) (ver int64, _ error) { return ver, errors.Trace(err) } if tblInfo.TableCacheStatusType != model.TableCacheStatusDisable { - return ver, errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("Drop Index")) + return ver, errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Drop Index")) } dependentHiddenCols := make([]*model.ColumnInfo, 0) @@ -696,14 +697,14 @@ func onDropIndex(t *meta.Meta, job *model.Job) (ver int64, _ error) { job.Args = append(job.Args, indexInfo.ID, getPartitionIDs(tblInfo)) } default: - err = ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) } return ver, errors.Trace(err) } func checkDropIndex(t *meta.Meta, job *model.Job) (*model.TableInfo, *model.IndexInfo, error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, nil, errors.Trace(err) } @@ -717,7 +718,7 @@ func checkDropIndex(t *meta.Meta, job *model.Job) (*model.TableInfo, *model.Inde indexInfo := tblInfo.FindIndexByName(indexName.L) if indexInfo == nil { job.State = model.JobStateCancelled - return nil, nil, ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName) + return nil, nil, dbterror.ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName) } // Double check for drop index on auto_increment column. @@ -741,7 +742,7 @@ func onDropIndexes(t *meta.Meta, job *model.Job) (ver int64, _ error) { return ver, errors.Trace(err) } if tblInfo.TableCacheStatusType != model.TableCacheStatusDisable { - return ver, errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("Drop Indexes")) + return ver, errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Drop Indexes")) } indexInfos, err := checkDropIndexes(tblInfo, job, indexNames, ifExists) @@ -827,7 +828,7 @@ func onDropIndexes(t *meta.Meta, job *model.Job) (ver int64, _ error) { job.FinishTableJob(model.JobStateDone, model.StateNone, ver, tblInfo) job.Args = append(job.Args, indexIDs, getPartitionIDs(tblInfo)) default: - err = ErrInvalidDDLState.GenWithStackByArgs("index", indexInfos[0].State) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("index", indexInfos[0].State) } return ver, errors.Trace(err) @@ -835,7 +836,7 @@ func onDropIndexes(t *meta.Meta, job *model.Job) (ver int64, _ error) { func getSchemaInfos(t *meta.Meta, job *model.Job) (*model.TableInfo, []model.CIStr, []bool, error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, nil, nil, errors.Trace(err) } @@ -858,11 +859,11 @@ func checkDropIndexes(tblInfo *model.TableInfo, job *model.Job, indexNames []mod indexInfo := tblInfo.FindIndexByName(indexName.L) if indexInfo == nil { if ifExists[i] { - warnings = append(warnings, toTError(ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName))) + warnings = append(warnings, toTError(dbterror.ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName))) continue } job.State = model.JobStateCancelled - return nil, ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName) + return nil, dbterror.ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName) } // Double check for drop index on auto_increment column. @@ -875,9 +876,9 @@ func checkDropIndexes(tblInfo *model.TableInfo, job *model.Job, indexNames []mod if UniqueIndexNames[indexName] { if !ifExists[i] { job.State = model.JobStateCancelled - return nil, ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName) + return nil, dbterror.ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName) } - warnings = append(warnings, toTError(ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName))) + warnings = append(warnings, toTError(dbterror.ErrCantDropFieldOrKey.GenWithStack("index %s doesn't exist", indexName))) } UniqueIndexNames[indexName] = true @@ -948,7 +949,7 @@ func checkDropIndexOnAutoIncrementColumn(tblInfo *model.TableInfo, indexInfo *mo func checkRenameIndex(t *meta.Meta, job *model.Job) (*model.TableInfo, model.CIStr, model.CIStr, error) { var from, to model.CIStr schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, from, to, errors.Trace(err) } @@ -977,7 +978,7 @@ func checkAlterIndexVisibility(t *meta.Meta, job *model.Job) (*model.TableInfo, ) schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, indexName, invisible, errors.Trace(err) } @@ -1063,17 +1064,17 @@ func (w *baseIndexWorker) getIndexRecord(idxInfo *model.IndexInfo, handle kv.Han if valStr, ok := val.(string); ok { switch valStr { case "cantDecodeRecordErr": - failpoint.Return(nil, errors.Trace(errCantDecodeRecord.GenWithStackByArgs("index", + failpoint.Return(nil, errors.Trace(dbterror.ErrCantDecodeRecord.GenWithStackByArgs("index", errors.New("mock can't decode record error")))) case "modifyColumnNotOwnerErr": if idxInfo.Name.O == "_Idx$_idx" && handle.IntValue() == 7168 && atomic.CompareAndSwapUint32(&mockNotOwnerErrOnce, 0, 1) { - failpoint.Return(nil, errors.Trace(errNotOwner)) + failpoint.Return(nil, errors.Trace(dbterror.ErrNotOwner)) } case "addIdxNotOwnerErr": // For the case of the old TiDB version(do not exist the element information) is upgraded to the new TiDB version. // First step, we need to exit "addPhysicalTableIndex". if idxInfo.Name.O == "idx2" && handle.IntValue() == 6144 && atomic.CompareAndSwapUint32(&mockNotOwnerErrOnce, 1, 2) { - failpoint.Return(nil, errors.Trace(errNotOwner)) + failpoint.Return(nil, errors.Trace(dbterror.ErrNotOwner)) } } } @@ -1121,7 +1122,7 @@ func (w *baseIndexWorker) updateRowDecoder(handle kv.Handle, rawRecord []byte) e sysZone := w.sessCtx.GetSessionVars().StmtCtx.TimeZone _, err := w.rowDecoder.DecodeAndEvalRowWithMap(w.sessCtx, handle, rawRecord, sysZone, w.rowMap) if err != nil { - return errors.Trace(errCantDecodeRecord.GenWithStackByArgs("index", err)) + return errors.Trace(dbterror.ErrCantDecodeRecord.GenWithStackByArgs("index", err)) } return nil } @@ -1296,6 +1297,7 @@ func (w *addIndexWorker) BackfillDataInTxn(handleRange reorgBackfillTask) (taskC taskCtx.addedCount = 0 taskCtx.scanCount = 0 txn.SetOption(kv.Priority, w.priority) + w.ddlWorker.setResourceGroupTaggerForTopSQL(txn) idxRecords, nextKey, taskDone, err := w.fetchRowColVals(txn, handleRange) if err != nil { @@ -1357,7 +1359,7 @@ func (w *worker) addTableIndex(t table.Table, idx *model.IndexInfo, reorgInfo *r for !finish { p := tbl.GetPartition(reorgInfo.PhysicalTableID) if p == nil { - return errCancelledDDLJob.GenWithStack("Can not find partition id %d for table %d", reorgInfo.PhysicalTableID, t.Meta().ID) + return dbterror.ErrCancelledDDLJob.GenWithStack("Can not find partition id %d for table %d", reorgInfo.PhysicalTableID, t.Meta().ID) } err = w.addPhysicalTableIndex(p, idx, reorgInfo) if err != nil { @@ -1507,6 +1509,7 @@ func (w *cleanUpIndexWorker) BackfillDataInTxn(handleRange reorgBackfillTask) (t taskCtx.addedCount = 0 taskCtx.scanCount = 0 txn.SetOption(kv.Priority, w.priority) + w.ddlWorker.setResourceGroupTaggerForTopSQL(txn) idxRecords, nextKey, taskDone, err := w.fetchRowColVals(txn, handleRange) if err != nil { @@ -1549,7 +1552,7 @@ func (w *worker) cleanupGlobalIndexes(tbl table.PartitionedTable, partitionIDs [ for !finish { p := tbl.GetPartition(reorgInfo.PhysicalTableID) if p == nil { - return errCancelledDDLJob.GenWithStack("Can not find partition id %d for table %d", reorgInfo.PhysicalTableID, tbl.Meta().ID) + return dbterror.ErrCancelledDDLJob.GenWithStack("Can not find partition id %d for table %d", reorgInfo.PhysicalTableID, tbl.Meta().ID) } err = w.cleanupPhysicalTableIndex(p, reorgInfo) if err != nil { diff --git a/ddl/index_change_test.go b/ddl/index_change_test.go index 34e68caef192a..6baf9523d007a 100644 --- a/ddl/index_change_test.go +++ b/ddl/index_change_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package ddl +package ddl_test import ( "context" @@ -20,133 +20,66 @@ import ( "time" "github.com/pingcap/errors" + "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/model" - "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" + "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" ) -type testIndexChangeSuiteToVerify struct { - suite.Suite - store kv.Storage - dbInfo *model.DBInfo -} - -func TestIndexChangeSuite(t *testing.T) { - suite.Run(t, new(testIndexChangeSuiteToVerify)) -} - -func (s *testIndexChangeSuiteToVerify) SetupSuite() { - s.store = createMockStore(s.T()) - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - err := d.Stop() - require.NoError(s.T(), err) - }() - s.dbInfo, err = testSchemaInfo(d, "test_index_change") - require.NoError(s.T(), err) - testCreateSchema(s.T(), testNewContext(d), d, s.dbInfo) -} - -func (s *testIndexChangeSuiteToVerify) TearDownSuite() { - s.Require().NoError(s.store.Close()) -} - -func (s *testIndexChangeSuiteToVerify) TestIndexChange() { - d, err := testNewDDLAndStart( - context.Background(), - WithStore(s.store), - WithLease(testLease), - ) - require.NoError(s.T(), err) - defer func() { - err := d.Stop() - require.NoError(s.T(), err) - }() - // create table t (c1 int primary key, c2 int); - tblInfo, err := testTableInfo(d, "t", 2) - require.NoError(s.T(), err) - tblInfo.Columns[0].Flag = mysql.PriKeyFlag | mysql.NotNullFlag - tblInfo.PKIsHandle = true - ctx := testNewContext(d) - err = ctx.NewTxn(context.Background()) - require.NoError(s.T(), err) - testCreateTable(s.T(), ctx, d, s.dbInfo, tblInfo) - originTable := testGetTable(s.T(), d, s.dbInfo.ID, tblInfo.ID) - - // insert t values (1, 1), (2, 2), (3, 3) - _, err = originTable.AddRecord(ctx, types.MakeDatums(1, 1)) - require.NoError(s.T(), err) - _, err = originTable.AddRecord(ctx, types.MakeDatums(2, 2)) - require.NoError(s.T(), err) - _, err = originTable.AddRecord(ctx, types.MakeDatums(3, 3)) - require.NoError(s.T(), err) - - txn, err := ctx.Txn(true) - require.NoError(s.T(), err) - err = txn.Commit(context.Background()) - require.NoError(s.T(), err) - - tc := &TestDDLCallback{} +func TestIndexChange(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t (c1 int primary key, c2 int)") + tk.MustExec("insert t values (1, 1), (2, 2), (3, 3);") + + d := dom.DDL() + tc := &ddl.TestDDLCallback{Do: dom} // set up hook prevState := model.StateNone addIndexDone := false + var jobID int64 var ( deleteOnlyTable table.Table writeOnlyTable table.Table publicTable table.Table - checkErr error ) - tc.onJobUpdated = func(job *model.Job) { + tc.OnJobUpdatedExported = func(job *model.Job) { if job.SchemaState == prevState { return } - ctx1 := testNewContext(d) + jobID = job.ID + ctx1 := testNewContext(store) prevState = job.SchemaState + require.NoError(t, dom.Reload()) + tbl, exist := dom.InfoSchema().TableByID(job.TableID) + require.True(t, exist) switch job.SchemaState { case model.StateDeleteOnly: - deleteOnlyTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } + deleteOnlyTable = tbl case model.StateWriteOnly: - writeOnlyTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - err = s.checkAddWriteOnly(d, ctx1, deleteOnlyTable, writeOnlyTable) - if err != nil { - checkErr = errors.Trace(err) - } + writeOnlyTable = tbl + err := checkAddWriteOnlyForAddIndex(ctx1, deleteOnlyTable, writeOnlyTable) + require.NoError(t, err) case model.StatePublic: - if job.GetRowCount() != 3 { - checkErr = errors.Errorf("job's row count %d != 3", job.GetRowCount()) - } - publicTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - err = s.checkAddPublic(d, ctx1, writeOnlyTable, publicTable) - if err != nil { - checkErr = errors.Trace(err) - } + require.Equalf(t, int64(3), job.GetRowCount(), "job's row count %d != 3", job.GetRowCount()) + publicTable = tbl + err := checkAddPublicForAddIndex(ctx1, writeOnlyTable, publicTable) + require.NoError(t, err) if job.State == model.JobStateSynced { addIndexDone = true } } } d.SetHook(tc) - testCreateIndex(s.T(), ctx, d, s.dbInfo, originTable.Meta(), false, "c2", "c2") + tk.MustExec("alter table t add index c2(c2)") // We need to make sure onJobUpdated is called in the first hook. // After testCreateIndex(), onJobUpdated() may not be called when job.state is Sync. // If we skip this check, prevState may wrongly set to StatePublic. @@ -156,50 +89,39 @@ func (s *testIndexChangeSuiteToVerify) TestIndexChange() { } time.Sleep(50 * time.Millisecond) } - require.NoError(s.T(), checkErr) - txn, err = ctx.Txn(true) - require.NoError(s.T(), err) - require.Nil(s.T(), txn.Commit(context.Background())) + v := getSchemaVer(t, tk.Session()) + checkHistoryJobArgs(t, tk.Session(), jobID, &historyJobArgs{ver: v, tbl: publicTable.Meta()}) + prevState = model.StateNone var noneTable table.Table - tc.onJobUpdated = func(job *model.Job) { + tc.OnJobUpdatedExported = func(job *model.Job) { + jobID = job.ID if job.SchemaState == prevState { return } prevState = job.SchemaState var err error - ctx1 := testNewContext(d) + require.NoError(t, dom.Reload()) + tbl, exist := dom.InfoSchema().TableByID(job.TableID) + require.True(t, exist) + ctx1 := testNewContext(store) switch job.SchemaState { case model.StateWriteOnly: - writeOnlyTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - err = s.checkDropWriteOnly(d, ctx1, publicTable, writeOnlyTable) - if err != nil { - checkErr = errors.Trace(err) - } + writeOnlyTable = tbl + err = checkDropWriteOnly(ctx1, publicTable, writeOnlyTable) + require.NoError(t, err) case model.StateDeleteOnly: - deleteOnlyTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - err = s.checkDropDeleteOnly(d, ctx1, writeOnlyTable, deleteOnlyTable) - if err != nil { - checkErr = errors.Trace(err) - } + deleteOnlyTable = tbl + err = checkDropDeleteOnly(ctx1, writeOnlyTable, deleteOnlyTable) + require.NoError(t, err) case model.StateNone: - noneTable, err = getCurrentTable(d, s.dbInfo.ID, tblInfo.ID) - if err != nil { - checkErr = errors.Trace(err) - } - if len(noneTable.Indices()) != 0 { - checkErr = errors.New("index should have been dropped") - } + noneTable = tbl + require.Equalf(t, 0, len(noneTable.Indices()), "index should have been dropped") } } - testDropIndex(s.T(), ctx, d, s.dbInfo, publicTable.Meta(), "c2") - require.NoError(s.T(), checkErr) + tk.MustExec("alter table t drop index c2") + v = getSchemaVer(t, tk.Session()) + checkHistoryJobArgs(t, tk.Session(), jobID, &historyJobArgs{ver: v, tbl: noneTable.Meta()}) } func checkIndexExists(ctx sessionctx.Context, tbl table.Table, indexValue interface{}, handle int64, exists bool) error { @@ -221,7 +143,7 @@ func checkIndexExists(ctx sessionctx.Context, tbl table.Table, indexValue interf return nil } -func (s *testIndexChangeSuiteToVerify) checkAddWriteOnly(d *ddl, ctx sessionctx.Context, delOnlyTbl, writeOnlyTbl table.Table) error { +func checkAddWriteOnlyForAddIndex(ctx sessionctx.Context, delOnlyTbl, writeOnlyTbl table.Table) error { // DeleteOnlyTable: insert t values (4, 4); err := ctx.NewTxn(context.Background()) if err != nil { @@ -294,7 +216,7 @@ func (s *testIndexChangeSuiteToVerify) checkAddWriteOnly(d *ddl, ctx sessionctx. return nil } -func (s *testIndexChangeSuiteToVerify) checkAddPublic(d *ddl, ctx sessionctx.Context, writeTbl, publicTbl table.Table) error { +func checkAddPublicForAddIndex(ctx sessionctx.Context, writeTbl, publicTbl table.Table) error { // WriteOnlyTable: insert t values (6, 6) err := ctx.NewTxn(context.Background()) if err != nil { @@ -368,7 +290,7 @@ func (s *testIndexChangeSuiteToVerify) checkAddPublic(d *ddl, ctx sessionctx.Con return txn.Commit(context.Background()) } -func (s *testIndexChangeSuiteToVerify) checkDropWriteOnly(d *ddl, ctx sessionctx.Context, publicTbl, writeTbl table.Table) error { +func checkDropWriteOnly(ctx sessionctx.Context, publicTbl, writeTbl table.Table) error { // WriteOnlyTable insert t values (8, 8) err := ctx.NewTxn(context.Background()) if err != nil { @@ -412,7 +334,7 @@ func (s *testIndexChangeSuiteToVerify) checkDropWriteOnly(d *ddl, ctx sessionctx return txn.Commit(context.Background()) } -func (s *testIndexChangeSuiteToVerify) checkDropDeleteOnly(d *ddl, ctx sessionctx.Context, writeTbl, delTbl table.Table) error { +func checkDropDeleteOnly(ctx sessionctx.Context, writeTbl, delTbl table.Table) error { // WriteOnlyTable insert t values (9, 9) err := ctx.NewTxn(context.Background()) if err != nil { diff --git a/ddl/index_modify_test.go b/ddl/index_modify_test.go new file mode 100644 index 0000000000000..586e9c8ffa7c8 --- /dev/null +++ b/ddl/index_modify_test.go @@ -0,0 +1,1374 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "context" + "fmt" + "math" + "math/rand" + "strconv" + "strings" + "sync/atomic" + "testing" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/ddl" + testddlutil "github.com/pingcap/tidb/ddl/testutil" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/table/tables" + "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/dbterror" + "github.com/pingcap/tidb/util/mock" + "github.com/stretchr/testify/require" +) + +const indexModifyLease = 600 * time.Millisecond + +func TestAddPrimaryKey1(t *testing.T) { + testAddIndex(t, testPlain, "create table test_add_index (c1 bigint, c2 bigint, c3 bigint, unique key(c1))", "primary") +} + +func TestAddPrimaryKey2(t *testing.T) { + testAddIndex(t, testPartition, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, key(c1)) + partition by range (c3) ( + partition p0 values less than (3440), + partition p1 values less than (61440), + partition p2 values less than (122880), + partition p3 values less than (204800), + partition p4 values less than maxvalue)`, "primary") +} + +func TestAddPrimaryKey3(t *testing.T) { + testAddIndex(t, testPartition, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, key(c1)) + partition by hash (c3) partitions 4;`, "primary") +} + +func TestAddPrimaryKey4(t *testing.T) { + testAddIndex(t, testPartition, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, key(c1)) + partition by range columns (c3) ( + partition p0 values less than (3440), + partition p1 values less than (61440), + partition p2 values less than (122880), + partition p3 values less than (204800), + partition p4 values less than maxvalue)`, "primary") +} + +func TestAddIndex1(t *testing.T) { + testAddIndex(t, testPlain, + "create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c1))", "") +} + +func TestAddIndex1WithShardRowID(t *testing.T) { + testAddIndex(t, testPartition|testShardRowID, + "create table test_add_index (c1 bigint, c2 bigint, c3 bigint) SHARD_ROW_ID_BITS = 4 pre_split_regions = 4;", "") +} + +func TestAddIndex2(t *testing.T) { + testAddIndex(t, testPartition, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c1)) + partition by range (c1) ( + partition p0 values less than (3440), + partition p1 values less than (61440), + partition p2 values less than (122880), + partition p3 values less than (204800), + partition p4 values less than maxvalue)`, "") +} + +func TestAddIndex2WithShardRowID(t *testing.T) { + testAddIndex(t, testPartition|testShardRowID, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint) + SHARD_ROW_ID_BITS = 4 pre_split_regions = 4 + partition by range (c1) ( + partition p0 values less than (3440), + partition p1 values less than (61440), + partition p2 values less than (122880), + partition p3 values less than (204800), + partition p4 values less than maxvalue)`, "") +} + +func TestAddIndex3(t *testing.T) { + testAddIndex(t, testPartition, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c1)) + partition by hash (c1) partitions 4;`, "") +} + +func TestAddIndex3WithShardRowID(t *testing.T) { + testAddIndex(t, testPartition|testShardRowID, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint) + SHARD_ROW_ID_BITS = 4 pre_split_regions = 4 + partition by hash (c1) partitions 4;`, "") +} + +func TestAddIndex4(t *testing.T) { + testAddIndex(t, testPartition, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c1)) + partition by range columns (c1) ( + partition p0 values less than (3440), + partition p1 values less than (61440), + partition p2 values less than (122880), + partition p3 values less than (204800), + partition p4 values less than maxvalue)`, "") +} + +func TestAddIndex4WithShardRowID(t *testing.T) { + testAddIndex(t, testPartition|testShardRowID, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint) + SHARD_ROW_ID_BITS = 4 pre_split_regions = 4 + partition by range columns (c1) ( + partition p0 values less than (3440), + partition p1 values less than (61440), + partition p2 values less than (122880), + partition p3 values less than (204800), + partition p4 values less than maxvalue)`, "") +} + +func TestAddIndex5(t *testing.T) { + testAddIndex(t, testClusteredIndex, + `create table test_add_index (c1 bigint, c2 bigint, c3 bigint, primary key(c2, c3))`, "") +} + +type testAddIndexType uint8 + +const ( + testPlain testAddIndexType = 1 + testPartition testAddIndexType = 1 << 1 + testClusteredIndex testAddIndexType = 1 << 2 + testShardRowID testAddIndexType = 1 << 3 +) + +func testAddIndex(t *testing.T, tp testAddIndexType, createTableSQL, idxTp string) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + isTestPartition := (testPartition & tp) > 0 + isTestShardRowID := (testShardRowID & tp) > 0 + if isTestShardRowID { + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) + tk.MustExec("set global tidb_scatter_region = 1") + defer func() { + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) + tk.MustExec("set global tidb_scatter_region = 0") + }() + } + if isTestPartition { + tk.MustExec("set @@session.tidb_enable_table_partition = '1';") + } else if (testClusteredIndex & tp) > 0 { + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + } + tk.MustExec("drop table if exists test_add_index") + tk.MustExec(createTableSQL) + + done := make(chan error, 1) + start := -10 + num := defaultBatchSize + // first add some rows + batchInsert(tk, "test_add_index", start, num) + + // Add some discrete rows. + maxBatch := 20 + batchCnt := 100 + otherKeys := make([]int, 0, batchCnt*maxBatch) + // Make sure there are no duplicate keys. + base := defaultBatchSize * 20 + for i := 1; i < batchCnt; i++ { + if isTestShardRowID { + base = i % 4 << 61 + } + n := base + i*defaultBatchSize + i + for j := 0; j < rand.Intn(maxBatch); j++ { + n += j + sql := fmt.Sprintf("insert into test_add_index values (%d, %d, %d)", n, n, n) + tk.MustExec(sql) + otherKeys = append(otherKeys, n) + } + } + // Encounter the value of math.MaxInt64 in middle of + v := math.MaxInt64 - defaultBatchSize/2 + tk.MustExec(fmt.Sprintf("insert into test_add_index values (%d, %d, %d)", v, v, v)) + otherKeys = append(otherKeys, v) + + addIdxSQL := fmt.Sprintf("alter table test_add_index add %s key c3_index(c3)", idxTp) + testddlutil.SessionExecInGoroutine(store, "test", addIdxSQL, done) + + deletedKeys := make(map[int]struct{}) + + ticker := time.NewTicker(indexModifyLease / 2) + defer ticker.Stop() +LOOP: + for { + select { + case err := <-done: + if err == nil { + break LOOP + } + require.NoError(t, err) + case <-ticker.C: + // When the server performance is particularly poor, + // the adding index operation can not be completed. + // So here is a limit to the number of rows inserted. + if num > defaultBatchSize*10 { + break + } + step := 5 + // delete some rows, and add some data + for i := num; i < num+step; i++ { + n := rand.Intn(num) + deletedKeys[n] = struct{}{} + sql := fmt.Sprintf("delete from test_add_index where c1 = %d", n) + tk.MustExec(sql) + sql = fmt.Sprintf("insert into test_add_index values (%d, %d, %d)", i, i, i) + tk.MustExec(sql) + } + num += step + } + } + + if isTestShardRowID { + rows := tk.MustQuery("show table test_add_index regions").Rows() + require.GreaterOrEqual(t, len(rows), 16) + tk.MustExec("admin check table test_add_index") + return + } + + // get exists keys + keys := make([]int, 0, num) + for i := start; i < num; i++ { + if _, ok := deletedKeys[i]; ok { + continue + } + keys = append(keys, i) + } + keys = append(keys, otherKeys...) + + // test index key + expectedRows := make([][]interface{}, 0, len(keys)) + for _, key := range keys { + expectedRows = append(expectedRows, []interface{}{fmt.Sprintf("%v", key)}) + } + tk.MustQuery(fmt.Sprintf("select c1 from test_add_index where c3 >= %d order by c1", start)).Check(expectedRows) + tk.MustExec("admin check table test_add_index") + if isTestPartition { + return + } + + // TODO: Support explain in future. + // rows := tk.MustQuery("explain select c1 from test_add_index where c3 >= 100").Rows() + // ay := dumpRows(c, rows) + // require.Contains(t, fmt.Sprintf("%v", ay), "c3_index") + + // get all row handles + require.NoError(t, tk.Session().NewTxn(context.Background())) + tbl := external.GetTableByName(t, tk, "test", "test_add_index") + handles := kv.NewHandleMap() + err := tables.IterRecords(tbl, tk.Session(), tbl.Cols(), + func(h kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { + handles.Set(h, struct{}{}) + return true, nil + }) + require.NoError(t, err) + + // check in index + var nidx table.Index + idxName := "c3_index" + if len(idxTp) != 0 { + idxName = "primary" + } + for _, tidx := range tbl.Indices() { + if tidx.Meta().Name.L == idxName { + nidx = tidx + break + } + } + // Make sure there is index with name c3_index. + require.NotNil(t, nidx) + require.Greater(t, nidx.Meta().ID, int64(0)) + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + require.NoError(t, txn.Rollback()) + + require.NoError(t, tk.Session().NewTxn(context.Background())) + tk.MustExec("admin check table test_add_index") + tk.MustExec("drop table test_add_index") +} + +func TestAddIndexForGeneratedColumn(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(y year NOT NULL DEFAULT '2155')") + for i := 0; i < 50; i++ { + tk.MustExec("insert into t values (?)", i) + } + tk.MustExec("insert into t values()") + tk.MustExec("ALTER TABLE t ADD COLUMN y1 year as (y + 2)") + tk.MustExec("ALTER TABLE t ADD INDEX idx_y(y1)") + + tbl := external.GetTableByName(t, tk, "test", "t") + for _, idx := range tbl.Indices() { + require.False(t, strings.EqualFold(idx.Meta().Name.L, "idx_c2")) + } + // NOTE: this test case contains a bug, it should be uncommented after the bug is fixed. + // TODO: Fix bug https://github.com/pingcap/tidb/issues/12181 + // tk.MustExec("delete from t where y = 2155") + // tk.MustExec("alter table t add index idx_y(y1)") + // tk.MustExec("alter table t drop index idx_y") + + // Fix issue 9311. + tk.MustExec("drop table if exists gcai_table") + tk.MustExec("create table gcai_table (id int primary key);") + tk.MustExec("insert into gcai_table values(1);") + tk.MustExec("ALTER TABLE gcai_table ADD COLUMN d date DEFAULT '9999-12-31';") + tk.MustExec("ALTER TABLE gcai_table ADD COLUMN d1 date as (DATE_SUB(d, INTERVAL 31 DAY));") + tk.MustExec("ALTER TABLE gcai_table ADD INDEX idx(d1);") + tk.MustQuery("select * from gcai_table").Check(testkit.Rows("1 9999-12-31 9999-11-30")) + tk.MustQuery("select d1 from gcai_table use index(idx)").Check(testkit.Rows("9999-11-30")) + tk.MustExec("admin check table gcai_table") + // The column is PKIsHandle in generated column expression. + tk.MustExec("ALTER TABLE gcai_table ADD COLUMN id1 int as (id+5);") + tk.MustExec("ALTER TABLE gcai_table ADD INDEX idx1(id1);") + tk.MustQuery("select * from gcai_table").Check(testkit.Rows("1 9999-12-31 9999-11-30 6")) + tk.MustQuery("select id1 from gcai_table use index(idx1)").Check(testkit.Rows("6")) + tk.MustExec("admin check table gcai_table") +} + +// TestAddPrimaryKeyRollback1 is used to test scenarios that will roll back when a duplicate primary key is encountered. +func TestAddPrimaryKeyRollback1(t *testing.T) { + idxName := "PRIMARY" + addIdxSQL := "alter table t1 add primary key c3_index (c3);" + errMsg := "[kv:1062]Duplicate entry '" + strconv.Itoa(defaultBatchSize*2-10) + "' for key 'PRIMARY'" + testAddIndexRollback(t, idxName, addIdxSQL, errMsg, false) +} + +// TestAddPrimaryKeyRollback2 is used to test scenarios that will roll back when a null primary key is encountered. +func TestAddPrimaryKeyRollback2(t *testing.T) { + idxName := "PRIMARY" + addIdxSQL := "alter table t1 add primary key c3_index (c3);" + errMsg := "[ddl:1138]Invalid use of NULL value" + testAddIndexRollback(t, idxName, addIdxSQL, errMsg, true) +} + +func TestAddUniqueIndexRollback(t *testing.T) { + idxName := "c3_index" + addIdxSQL := "create unique index c3_index on t1 (c3)" + errMsg := "[kv:1062]Duplicate entry '" + strconv.Itoa(defaultBatchSize*2-10) + "' for key 'c3_index'" + testAddIndexRollback(t, idxName, addIdxSQL, errMsg, false) +} + +func testAddIndexRollback(t *testing.T, idxName, addIdxSQL, errMsg string, hasNullValsInKey bool) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int, unique key(c1))") + // defaultBatchSize is equal to ddl.defaultBatchSize + base := defaultBatchSize * 2 + count := base + // add some rows + batchInsert(tk, "t1", 0, count) + // add some null rows + if hasNullValsInKey { + for i := count - 10; i < count; i++ { + tk.MustExec("insert into t1 values (?, ?, null)", i+10, i) + } + } else { + // add some duplicate rows + for i := count - 10; i < count; i++ { + tk.MustExec("insert into t1 values (?, ?, ?)", i+10, i, i) + } + } + + done := make(chan error, 1) + go backgroundExec(store, addIdxSQL, done) + + times := 0 + ticker := time.NewTicker(indexModifyLease / 2) + defer ticker.Stop() +LOOP: + for { + select { + case err := <-done: + require.EqualError(t, err, errMsg) + break LOOP + case <-ticker.C: + if times >= 10 { + break + } + step := 5 + // delete some rows, and add some data + for i := count; i < count+step; i++ { + n := rand.Intn(count) + // (2048, 2038, 2038) and (2038, 2038, 2038) + // Don't delete rows where c1 is 2048 or 2038, otherwise, the entry value in duplicated error message would change. + if n == defaultBatchSize*2-10 || n == defaultBatchSize*2 { + continue + } + tk.MustExec("delete from t1 where c1 = ?", n) + tk.MustExec("insert into t1 values (?, ?, ?)", i+10, i, i) + } + count += step + times++ + } + } + + tbl := external.GetTableByName(t, tk, "test", "t1") + for _, tidx := range tbl.Indices() { + require.False(t, strings.EqualFold(tidx.Meta().Name.L, idxName)) + } + + // delete duplicated/null rows, then add index + for i := base - 10; i < base; i++ { + tk.MustExec("delete from t1 where c1 = ?", i+10) + } + tk.MustExec(addIdxSQL) + tk.MustExec("drop table t1") +} + +func TestAddIndexWithSplitTable(t *testing.T) { + createSQL := "CREATE TABLE test_add_index(a bigint PRIMARY KEY AUTO_RANDOM(4), b varchar(255), c bigint)" + stSQL := fmt.Sprintf("SPLIT TABLE test_add_index BETWEEN (%d) AND (%d) REGIONS 16;", math.MinInt64, math.MaxInt64) + testAddIndexWithSplitTable(t, createSQL, stSQL) +} + +func TestAddIndexWithShardRowID(t *testing.T) { + createSQL := "create table test_add_index(a bigint, b bigint, c bigint) SHARD_ROW_ID_BITS = 4 pre_split_regions = 4;" + testAddIndexWithSplitTable(t, createSQL, "") +} + +func testAddIndexWithSplitTable(t *testing.T, createSQL, splitTableSQL string) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + hasAutoRandomField := len(splitTableSQL) > 0 + if !hasAutoRandomField { + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) + tk.MustExec("set global tidb_scatter_region = 1") + defer func() { + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) + tk.MustExec("set global tidb_scatter_region = 0") + }() + } + tk.MustExec(createSQL) + + batchInsertRows := func(tk *testkit.TestKit, needVal bool, tbl string, start, end int) error { + dml := fmt.Sprintf("insert into %s values", tbl) + for i := start; i < end; i++ { + if needVal { + dml += fmt.Sprintf("(%d, %d, %d)", i, i, i) + } else { + dml += "()" + } + if i != end-1 { + dml += "," + } + } + _, err := tk.Exec(dml) + return err + } + + done := make(chan error, 1) + start := -20 + num := defaultBatchSize + // Add some discrete rows. + goCnt := 10 + errCh := make(chan error, goCnt) + for i := 0; i < goCnt; i++ { + base := (i % 8) << 60 + go func(b int, eCh chan error) { + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + eCh <- batchInsertRows(tk1, !hasAutoRandomField, "test_add_index", base+start, base+num) + }(base, errCh) + } + for i := 0; i < goCnt; i++ { + err := <-errCh + require.NoError(t, err) + } + + if hasAutoRandomField { + tk.MustQuery(splitTableSQL).Check(testkit.Rows("15 1")) + } + tk.MustQuery("select @@session.tidb_wait_split_region_finish").Check(testkit.Rows("1")) + rows := tk.MustQuery("show table test_add_index regions").Rows() + require.Len(t, rows, 16) + addIdxSQL := "alter table test_add_index add index idx(a)" + testddlutil.SessionExecInGoroutine(store, "test", addIdxSQL, done) + + ticker := time.NewTicker(indexModifyLease / 5) + defer ticker.Stop() + num = 0 +LOOP: + for { + select { + case err := <-done: + if err == nil { + break LOOP + } + require.NoError(t, err) + case <-ticker.C: + // When the server performance is particularly poor, + // the adding index operation can not be completed. + // So here is a limit to the number of rows inserted. + if num >= 1000 { + break + } + step := 20 + // delete, insert and update some data + for i := num; i < num+step; i++ { + sql := fmt.Sprintf("delete from test_add_index where a = %d", i+1) + tk.MustExec(sql) + if hasAutoRandomField { + sql = "insert into test_add_index values ()" + } else { + sql = fmt.Sprintf("insert into test_add_index values (%d, %d, %d)", i, i, i) + } + tk.MustExec(sql) + sql = fmt.Sprintf("update test_add_index set b = %d", i*10) + tk.MustExec(sql) + } + num += step + } + } + + tk.MustExec("admin check table test_add_index") +} + +func TestAddAnonymousIndex(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t_anonymous_index (c1 int, c2 int, C3 int)") + tk.MustExec("alter table t_anonymous_index add index (c1, c2)") + // for dropping empty index + err := tk.ExecToErr("alter table t_anonymous_index drop index") + require.Error(t, err) + // The index name is c1 when adding index (c1, c2). + tk.MustExec("alter table t_anonymous_index drop index c1") + tbl := external.GetTableByName(t, tk, "test", "t_anonymous_index") + require.Len(t, tbl.Indices(), 0) + // for adding some indices that the first column name is c1 + tk.MustExec("alter table t_anonymous_index add index (c1)") + err = tk.ExecToErr("alter table t_anonymous_index add index c1 (c2)") + require.Error(t, err) + tbl = external.GetTableByName(t, tk, "test", "t_anonymous_index") + require.Len(t, tbl.Indices(), 1) + require.Equal(t, "c1", tbl.Indices()[0].Meta().Name.L) + // The MySQL will be a warning. + tk.MustExec("alter table t_anonymous_index add index c1_3 (c1)") + tk.MustExec("alter table t_anonymous_index add index (c1, c2, C3)") + // The MySQL will be a warning. + tk.MustExec("alter table t_anonymous_index add index (c1)") + tbl = external.GetTableByName(t, tk, "test", "t_anonymous_index") + require.Len(t, tbl.Indices(), 4) + tk.MustExec("alter table t_anonymous_index drop index c1") + tk.MustExec("alter table t_anonymous_index drop index c1_2") + tk.MustExec("alter table t_anonymous_index drop index c1_3") + tk.MustExec("alter table t_anonymous_index drop index c1_4") + // for case-insensitive + tk.MustExec("alter table t_anonymous_index add index (C3)") + tk.MustExec("alter table t_anonymous_index drop index c3") + tk.MustExec("alter table t_anonymous_index add index c3 (C3)") + tk.MustExec("alter table t_anonymous_index drop index C3") + // for anonymous index with column name `primary` + tk.MustExec("create table t_primary (`primary` int, b int, key (`primary`))") + tbl = external.GetTableByName(t, tk, "test", "t_primary") + require.Equal(t, "primary_2", tbl.Indices()[0].Meta().Name.L) + tk.MustExec("alter table t_primary add index (`primary`);") + tbl = external.GetTableByName(t, tk, "test", "t_primary") + require.Equal(t, "primary_2", tbl.Indices()[0].Meta().Name.L) + require.Equal(t, "primary_3", tbl.Indices()[1].Meta().Name.L) + tk.MustExec("alter table t_primary add primary key(b);") + tbl = external.GetTableByName(t, tk, "test", "t_primary") + require.Equal(t, "primary_2", tbl.Indices()[0].Meta().Name.L) + require.Equal(t, "primary_3", tbl.Indices()[1].Meta().Name.L) + require.Equal(t, "primary", tbl.Indices()[2].Meta().Name.L) + tk.MustExec("create table t_primary_2 (`primary` int, key primary_2 (`primary`), key (`primary`))") + tbl = external.GetTableByName(t, tk, "test", "t_primary_2") + require.Equal(t, "primary_2", tbl.Indices()[0].Meta().Name.L) + require.Equal(t, "primary_3", tbl.Indices()[1].Meta().Name.L) + tk.MustExec("create table t_primary_3 (`primary_2` int, key(`primary_2`), `primary` int, key(`primary`));") + tbl = external.GetTableByName(t, tk, "test", "t_primary_3") + require.Equal(t, "primary_2", tbl.Indices()[0].Meta().Name.L) + require.Equal(t, "primary_3", tbl.Indices()[1].Meta().Name.L) +} + +func TestAddIndexWithPK(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tests := []struct { + name string + mode variable.ClusteredIndexDefMode + }{ + { + "ClusteredIndexDefModeIntOnly", + variable.ClusteredIndexDefModeIntOnly, + }, + { + "ClusteredIndexDefModeOn", + variable.ClusteredIndexDefModeOn, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + tk.Session().GetSessionVars().EnableClusteredIndex = test.mode + tk.MustExec("drop table if exists test_add_index_with_pk") + tk.MustExec("create table test_add_index_with_pk(a int not null, b int not null default '0', primary key(a))") + tk.MustExec("insert into test_add_index_with_pk values(1, 2)") + tk.MustExec("alter table test_add_index_with_pk add index idx (a)") + tk.MustQuery("select a from test_add_index_with_pk").Check(testkit.Rows("1")) + tk.MustExec("insert into test_add_index_with_pk values(2, 2)") + tk.MustExec("alter table test_add_index_with_pk add index idx1 (a, b)") + tk.MustQuery("select * from test_add_index_with_pk").Check(testkit.Rows("1 2", "2 2")) + tk.MustExec("drop table if exists test_add_index_with_pk1") + tk.MustExec("create table test_add_index_with_pk1(a int not null, b int not null default '0', c int, d int, primary key(c))") + tk.MustExec("insert into test_add_index_with_pk1 values(1, 1, 1, 1)") + tk.MustExec("alter table test_add_index_with_pk1 add index idx (c)") + tk.MustExec("insert into test_add_index_with_pk1 values(2, 2, 2, 2)") + tk.MustQuery("select * from test_add_index_with_pk1").Check(testkit.Rows("1 1 1 1", "2 2 2 2")) + tk.MustExec("drop table if exists test_add_index_with_pk2") + tk.MustExec("create table test_add_index_with_pk2(a int not null, b int not null default '0', c int unsigned, d int, primary key(c))") + tk.MustExec("insert into test_add_index_with_pk2 values(1, 1, 1, 1)") + tk.MustExec("alter table test_add_index_with_pk2 add index idx (c)") + tk.MustExec("insert into test_add_index_with_pk2 values(2, 2, 2, 2)") + tk.MustQuery("select * from test_add_index_with_pk2").Check(testkit.Rows("1 1 1 1", "2 2 2 2")) + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, b int, c int, primary key(a, b));") + tk.MustExec("insert into t values (1, 2, 3);") + tk.MustExec("create index idx on t (a, b);") + }) + } +} + +func TestCancelAddPrimaryKey(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, indexModifyLease) + defer clean() + idxName := "primary" + addIdxSQL := "alter table t1 add primary key idx_c2 (c2);" + testCancelAddIndex(t, store, dom, idxName, addIdxSQL) + + // Check the column's flag when the "add primary key" failed. + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + require.NoError(t, tk.Session().NewTxn(context.Background())) + tbl := external.GetTableByName(t, tk, "test", "t1") + col1Flag := tbl.Cols()[1].Flag + require.True(t, !mysql.HasNotNullFlag(col1Flag) && !mysql.HasPreventNullInsertFlag(col1Flag) && mysql.HasUnsignedFlag(col1Flag)) +} + +func TestCancelAddIndex(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, indexModifyLease) + defer clean() + idxName := "c3_index" + addIdxSQL := "create unique index c3_index on t1 (c3)" + testCancelAddIndex(t, store, dom, idxName, addIdxSQL) +} + +func testCancelAddIndex(t *testing.T, store kv.Storage, dom *domain.Domain, idxName, addIdxSQL string) { + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int unsigned, c3 int, unique key(c1))") + + d := dom.DDL() + + // defaultBatchSize is equal to ddl.defaultBatchSize + count := defaultBatchSize * 32 + start := 0 + for i := start; i < count; i += defaultBatchSize { + batchInsert(tk, "t1", i, i+defaultBatchSize) + } + + var c3IdxInfo *model.IndexInfo + hook := &ddl.TestDDLCallback{Do: dom} + originBatchSize := tk.MustQuery("select @@global.tidb_ddl_reorg_batch_size") + // Set batch size to lower try to slow down add-index reorganization, This if for hook to cancel this ddl job. + tk.MustExec("set @@global.tidb_ddl_reorg_batch_size = 32") + defer tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_reorg_batch_size = %v", originBatchSize.Rows()[0][0])) + // let hook.OnJobUpdatedExported has chance to cancel the job. + // the hook.OnJobUpdatedExported is called when the job is updated, runReorgJob will wait ddl.ReorgWaitTimeout, then return the ddl.runDDLJob. + // After that ddl call d.hook.OnJobUpdated(job), so that we can canceled the job in this test case. + var checkErr error + hook.OnJobUpdatedExported, c3IdxInfo, checkErr = backgroundExecOnJobUpdatedExported(t, tk, store, hook, idxName) + originalHook := d.GetHook() + jobIDExt := wrapJobIDExtCallback(hook) + d.SetHook(jobIDExt) + done := make(chan error, 1) + go backgroundExec(store, addIdxSQL, done) + + times := 0 + ticker := time.NewTicker(indexModifyLease / 2) + defer ticker.Stop() +LOOP: + for { + select { + case err := <-done: + require.NoError(t, checkErr) + require.EqualError(t, err, "[ddl:8214]Cancelled DDL job") + break LOOP + case <-ticker.C: + if times >= 10 { + break + } + step := 5 + // delete some rows, and add some data + for i := count; i < count+step; i++ { + n := rand.Intn(count) + tk.MustExec("delete from t1 where c1 = ?", n) + tk.MustExec("insert into t1 values (?, ?, ?)", i+10, i, i) + } + count += step + times++ + } + } + checkDelRangeAdded(tk, jobIDExt.jobID, c3IdxInfo.ID) + d.SetHook(originalHook) +} + +func backgroundExecOnJobUpdatedExported(t *testing.T, tk *testkit.TestKit, store kv.Storage, hook *ddl.TestDDLCallback, idxName string) (func(*model.Job), *model.IndexInfo, error) { + var checkErr error + first := true + c3IdxInfo := &model.IndexInfo{} + hook.OnJobUpdatedExported = func(job *model.Job) { + addIndexNotFirstReorg := (job.Type == model.ActionAddIndex || job.Type == model.ActionAddPrimaryKey) && + job.SchemaState == model.StateWriteReorganization && job.SnapshotVer != 0 + // If the action is adding index and the state is writing reorganization, it want to test the case of cancelling the job when backfilling indexes. + // When the job satisfies this case of addIndexNotFirstReorg, the worker will start to backfill indexes. + if !addIndexNotFirstReorg { + // Get the index's meta. + if c3IdxInfo.ID != 0 { + return + } + tbl := external.GetTableByName(t, tk, "test", "t1") + for _, index := range tbl.Indices() { + if !tables.IsIndexWritable(index) { + continue + } + if index.Meta().Name.L == idxName { + *c3IdxInfo = *index.Meta() + } + } + return + } + // The job satisfies the case of addIndexNotFirst for the first time, the worker hasn't finished a batch of backfill indexes. + if first { + first = false + return + } + if checkErr != nil { + return + } + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.Background()) + if err != nil { + checkErr = errors.Trace(err) + return + } + jobIDs := []int64{job.ID} + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + // It only tests cancel one DDL job. + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + txn, err = hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + err = txn.Commit(context.Background()) + if err != nil { + checkErr = errors.Trace(err) + } + } + return hook.OnJobUpdatedExported, c3IdxInfo, checkErr +} + +// TestCancelAddIndex1 tests canceling ddl job when the add index worker is not started. +func TestCancelAddIndex1(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(c1 int, c2 int)") + for i := 0; i < 50; i++ { + tk.MustExec("insert into t values (?, ?)", i, i) + } + + var checkErr error + hook := &ddl.TestDDLCallback{Do: dom} + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization && job.SnapshotVer == 0 { + jobIDs := []int64{job.ID} + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.Background()) + if err != nil { + checkErr = errors.Trace(err) + return + } + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + + checkErr = txn.Commit(context.Background()) + } + } + originalHook := dom.DDL().GetHook() + dom.DDL().SetHook(hook) + err := tk.ExecToErr("alter table t add index idx_c2(c2)") + require.NoError(t, checkErr) + require.EqualError(t, err, "[ddl:8214]Cancelled DDL job") + + dom.DDL().SetHook(originalHook) + tbl := external.GetTableByName(t, tk, "test", "t") + for _, idx := range tbl.Indices() { + require.False(t, strings.EqualFold(idx.Meta().Name.L, "idx_c2")) + } + tk.MustExec("alter table t add index idx_c2(c2)") + tk.MustExec("alter table t drop index idx_c2") +} + +func TestAddGlobalIndex(t *testing.T) { + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.EnableGlobalIndex = true + }) + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table test_t1 (a int, b int) partition by range (b)" + + " (partition p0 values less than (10), " + + " partition p1 values less than (maxvalue));") + tk.MustExec("insert test_t1 values (1, 1)") + tk.MustExec("alter table test_t1 add unique index p_a (a);") + tk.MustExec("insert test_t1 values (2, 11)") + tbl := external.GetTableByName(t, tk, "test", "test_t1") + tblInfo := tbl.Meta() + indexInfo := tblInfo.FindIndexByName("p_a") + require.NotNil(t, indexInfo) + require.True(t, indexInfo.Global) + + require.NoError(t, tk.Session().NewTxn(context.Background())) + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + + // check row 1 + pid := tblInfo.Partition.Definitions[0].ID + idxVals := []types.Datum{types.NewDatum(1)} + rowVals := []types.Datum{types.NewDatum(1), types.NewDatum(1)} + checkGlobalIndexRow(t, tk.Session(), tblInfo, indexInfo, pid, idxVals, rowVals) + + // check row 2 + pid = tblInfo.Partition.Definitions[1].ID + idxVals = []types.Datum{types.NewDatum(2)} + rowVals = []types.Datum{types.NewDatum(2), types.NewDatum(11)} + checkGlobalIndexRow(t, tk.Session(), tblInfo, indexInfo, pid, idxVals, rowVals) + require.NoError(t, txn.Commit(context.Background())) + + // Test add global Primary Key index + tk.MustExec("create table test_t2 (a int, b int) partition by range (b)" + + " (partition p0 values less than (10), " + + " partition p1 values less than (maxvalue));") + tk.MustExec("insert test_t2 values (1, 1)") + tk.MustExec("alter table test_t2 add primary key (a) nonclustered;") + tk.MustExec("insert test_t2 values (2, 11)") + tbl = external.GetTableByName(t, tk, "test", "test_t2") + tblInfo = tbl.Meta() + indexInfo = tblInfo.FindIndexByName("primary") + require.NotNil(t, indexInfo) + require.True(t, indexInfo.Global) + + require.NoError(t, tk.Session().NewTxn(context.Background())) + txn, err = tk.Session().Txn(true) + require.NoError(t, err) + + // check row 1 + pid = tblInfo.Partition.Definitions[0].ID + idxVals = []types.Datum{types.NewDatum(1)} + rowVals = []types.Datum{types.NewDatum(1), types.NewDatum(1)} + checkGlobalIndexRow(t, tk.Session(), tblInfo, indexInfo, pid, idxVals, rowVals) + + // check row 2 + pid = tblInfo.Partition.Definitions[1].ID + idxVals = []types.Datum{types.NewDatum(2)} + rowVals = []types.Datum{types.NewDatum(2), types.NewDatum(11)} + checkGlobalIndexRow(t, tk.Session(), tblInfo, indexInfo, pid, idxVals, rowVals) + + require.NoError(t, txn.Commit(context.Background())) +} + +// checkGlobalIndexRow reads one record from global index and check. Only support int handle. +func checkGlobalIndexRow( + t *testing.T, + ctx sessionctx.Context, + tblInfo *model.TableInfo, + indexInfo *model.IndexInfo, + pid int64, + idxVals []types.Datum, + rowVals []types.Datum, +) { + require.NoError(t, ctx.NewTxn(context.Background())) + txn, err := ctx.Txn(true) + require.NoError(t, err) + sc := ctx.GetSessionVars().StmtCtx + + tblColMap := make(map[int64]*types.FieldType, len(tblInfo.Columns)) + for _, col := range tblInfo.Columns { + tblColMap[col.ID] = &col.FieldType + } + + // Check local index entry does not exist. + localPrefix := tablecodec.EncodeTableIndexPrefix(pid, indexInfo.ID) + it, err := txn.Iter(localPrefix, nil) + require.NoError(t, err) + // no local index entry. + require.False(t, it.Valid() && it.Key().HasPrefix(localPrefix)) + it.Close() + + // Check global index entry. + encodedValue, err := codec.EncodeKey(sc, nil, idxVals...) + require.NoError(t, err) + key := tablecodec.EncodeIndexSeekKey(tblInfo.ID, indexInfo.ID, encodedValue) + require.NoError(t, err) + value, err := txn.Get(context.Background(), key) + require.NoError(t, err) + idxColInfos := tables.BuildRowcodecColInfoForIndexColumns(indexInfo, tblInfo) + colVals, err := tablecodec.DecodeIndexKV(key, value, len(indexInfo.Columns), tablecodec.HandleDefault, idxColInfos) + require.NoError(t, err) + require.Len(t, colVals, len(idxVals)+2) + for i, val := range idxVals { + _, d, err := codec.DecodeOne(colVals[i]) + require.NoError(t, err) + require.Equal(t, val, d) + } + _, d, err := codec.DecodeOne(colVals[len(idxVals)+1]) // pid + require.NoError(t, err) + require.Equal(t, pid, d.GetInt64()) + + _, d, err = codec.DecodeOne(colVals[len(idxVals)]) // handle + require.NoError(t, err) + h := kv.IntHandle(d.GetInt64()) + rowKey := tablecodec.EncodeRowKey(pid, h.Encoded()) + rowValue, err := txn.Get(context.Background(), rowKey) + require.NoError(t, err) + rowValueDatums, err := tablecodec.DecodeRowToDatumMap(rowValue, tblColMap, time.UTC) + require.NoError(t, err) + require.NotNil(t, rowValueDatums) + for i, val := range rowVals { + require.Equal(t, val, rowValueDatums[tblInfo.Columns[i].ID]) + } +} + +func TestDropIndexes(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, indexModifyLease) + defer clean() + // drop multiple indexes + createSQL := "create table test_drop_indexes (id int, c1 int, c2 int, primary key(id), key i1(c1), key i2(c2));" + dropIdxSQL := "alter table test_drop_indexes drop index i1, drop index i2;" + idxNames := []string{"i1", "i2"} + testDropIndexes(t, store, createSQL, dropIdxSQL, idxNames) + + createSQL = "create table test_drop_indexes (id int, c1 int, c2 int, primary key(id) nonclustered, unique key i1(c1), key i2(c2));" + dropIdxSQL = "alter table test_drop_indexes drop primary key, drop index i1;" + idxNames = []string{"primary", "i1"} + testDropIndexes(t, store, createSQL, dropIdxSQL, idxNames) + + createSQL = "create table test_drop_indexes (uuid varchar(32), c1 int, c2 int, primary key(uuid), unique key i1(c1), key i2(c2));" + dropIdxSQL = "alter table test_drop_indexes drop primary key, drop index i1, drop index i2;" + idxNames = []string{"primary", "i1", "i2"} + testDropIndexes(t, store, createSQL, dropIdxSQL, idxNames) + + testDropIndexesIfExists(t, store) + testDropIndexesFromPartitionedTable(t, store) + testCancelDropIndexes(t, store, dom.DDL()) +} + +func testDropIndexes(t *testing.T, store kv.Storage, createSQL, dropIdxSQL string, idxNames []string) { + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists test_drop_indexes") + tk.MustExec(createSQL) + done := make(chan error, 1) + + num := 100 + // add some rows + for i := 0; i < num; i++ { + tk.MustExec("insert into test_drop_indexes values (?, ?, ?)", i, i, i) + } + idxIDs := make([]int64, 0, 3) + for _, idxName := range idxNames { + idxIDs = append(idxIDs, external.GetIndexID(t, tk, "test", "test_drop_indexes", idxName)) + } + jobIDExt, reset := setupJobIDExtCallback(tk.Session()) + defer reset() + testddlutil.SessionExecInGoroutine(store, "test", dropIdxSQL, done) + + ticker := time.NewTicker(indexModifyLease / 2) + defer ticker.Stop() +LOOP: + for { + select { + case err := <-done: + if err == nil { + break LOOP + } + require.NoError(t, err) + case <-ticker.C: + step := 5 + // delete some rows, and add some data + for i := num; i < num+step; i++ { + n := rand.Intn(num) + tk.MustExec("update test_drop_indexes set c2 = 1 where c1 = ?", n) + tk.MustExec("insert into test_drop_indexes values (?, ?, ?)", i, i, i) + } + num += step + } + } + for _, idxID := range idxIDs { + checkDelRangeAdded(tk, jobIDExt.jobID, idxID) + } +} + +func testDropIndexesIfExists(t *testing.T, store kv.Storage) { + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists test_drop_indexes_if_exists;") + tk.MustExec("create table test_drop_indexes_if_exists (id int, c1 int, c2 int, primary key(id), key i1(c1), key i2(c2));") + + // Drop different indexes. + tk.MustGetErrMsg( + "alter table test_drop_indexes_if_exists drop index i1, drop index i3;", + "[ddl:1091]index i3 doesn't exist", + ) + tk.MustExec("alter table test_drop_indexes_if_exists drop index i1, drop index if exists i3;") + tk.MustQuery("show warnings;").Check(testkit.RowsWithSep("|", "Warning|1091|index i3 doesn't exist")) + + // Verify the impact of deletion order when dropping duplicate indexes. + tk.MustGetErrMsg( + "alter table test_drop_indexes_if_exists drop index i2, drop index i2;", + "[ddl:1091]index i2 doesn't exist", + ) + tk.MustGetErrMsg( + "alter table test_drop_indexes_if_exists drop index if exists i2, drop index i2;", + "[ddl:1091]index i2 doesn't exist", + ) + tk.MustExec("alter table test_drop_indexes_if_exists drop index i2, drop index if exists i2;") + tk.MustQuery("show warnings;").Check(testkit.RowsWithSep("|", "Warning|1091|index i2 doesn't exist")) +} + +func testDropIndexesFromPartitionedTable(t *testing.T, store kv.Storage) { + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists test_drop_indexes_from_partitioned_table;") + tk.MustExec(` + create table test_drop_indexes_from_partitioned_table (id int, c1 int, c2 int, primary key(id), key i1(c1), key i2(c2)) + partition by range(id) (partition p0 values less than (6), partition p1 values less than maxvalue); + `) + for i := 0; i < 20; i++ { + tk.MustExec("insert into test_drop_indexes_from_partitioned_table values (?, ?, ?)", i, i, i) + } + tk.MustExec("alter table test_drop_indexes_from_partitioned_table drop index i1, drop index if exists i2;") +} + +func testCancelDropIndexes(t *testing.T, store kv.Storage, d ddl.DDL) { + indexesName := []string{"idx_c1", "idx_c2"} + addIdxesSQL := "alter table t add index idx_c1 (c1);alter table t add index idx_c2 (c2);" + dropIdxesSQL := "alter table t drop index idx_c1;alter table t drop index idx_c2;" + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(c1 int, c2 int)") + defer tk.MustExec("drop table t;") + for i := 0; i < 5; i++ { + tk.MustExec("insert into t values (?, ?)", i, i) + } + testCases := []struct { + needAddIndex bool + jobState model.JobState + JobSchemaState model.SchemaState + cancelSucc bool + }{ + // model.JobStateNone means the jobs is canceled before the first run. + // if we cancel successfully, we need to set needAddIndex to false in the next test case. Otherwise, set needAddIndex to true. + {true, model.JobStateNone, model.StateNone, true}, + {false, model.JobStateRunning, model.StateWriteOnly, false}, + {true, model.JobStateRunning, model.StateDeleteOnly, false}, + {true, model.JobStateRunning, model.StateDeleteReorganization, false}, + } + var checkErr error + hook := &ddl.TestDDLCallback{} + var jobID int64 + testCase := &testCases[0] + hook.OnJobRunBeforeExported = func(job *model.Job) { + if (job.Type == model.ActionDropIndex || job.Type == model.ActionDropPrimaryKey) && + job.State == testCase.jobState && job.SchemaState == testCase.JobSchemaState { + jobID = job.ID + jobIDs := []int64{job.ID} + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.TODO()) + if err != nil { + checkErr = errors.Trace(err) + return + } + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + checkErr = txn.Commit(context.Background()) + } + } + originalHook := d.GetHook() + d.SetHook(hook) + for i := range testCases { + testCase = &testCases[i] + if testCase.needAddIndex { + tk.MustExec(addIdxesSQL) + } + err := tk.ExecToErr(dropIdxesSQL) + tbl := external.GetTableByName(t, tk, "test", "t") + + var indexInfos []*model.IndexInfo + for _, idxName := range indexesName { + indexInfo := tbl.Meta().FindIndexByName(idxName) + if indexInfo != nil { + indexInfos = append(indexInfos, indexInfo) + } + } + + if testCase.cancelSucc { + require.NoError(t, checkErr) + require.EqualError(t, err, "[ddl:8214]Cancelled DDL job") + require.NotNil(t, indexInfos) + require.Equal(t, model.StatePublic, indexInfos[0].State) + } else { + require.NoError(t, err) + require.EqualError(t, checkErr, admin.ErrCannotCancelDDLJob.GenWithStackByArgs(jobID).Error()) + require.Nil(t, indexInfos) + } + } + d.SetHook(originalHook) + tk.MustExec(addIdxesSQL) + tk.MustExec(dropIdxesSQL) +} + +func TestDropPrimaryKey(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + idxName := "primary" + createSQL := "create table test_drop_index (c1 int, c2 int, c3 int, unique key(c1), primary key(c3) nonclustered)" + dropIdxSQL := "alter table test_drop_index drop primary key;" + testDropIndex(t, store, createSQL, dropIdxSQL, idxName) +} + +func TestDropIndex(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + idxName := "c3_index" + createSQL := "create table test_drop_index (c1 int, c2 int, c3 int, unique key(c1), key c3_index(c3))" + dropIdxSQL := "alter table test_drop_index drop index c3_index;" + testDropIndex(t, store, createSQL, dropIdxSQL, idxName) +} + +func testDropIndex(t *testing.T, store kv.Storage, createSQL, dropIdxSQL, idxName string) { + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists test_drop_index") + tk.MustExec(createSQL) + done := make(chan error, 1) + tk.MustExec("delete from test_drop_index") + + num := 100 + // add some rows + for i := 0; i < num; i++ { + tk.MustExec("insert into test_drop_index values (?, ?, ?)", i, i, i) + } + indexID := external.GetIndexID(t, tk, "test", "test_drop_index", idxName) + jobIDExt, reset := setupJobIDExtCallback(tk.Session()) + defer reset() + testddlutil.SessionExecInGoroutine(store, "test", dropIdxSQL, done) + + ticker := time.NewTicker(indexModifyLease / 2) + defer ticker.Stop() +LOOP: + for { + select { + case err := <-done: + if err == nil { + break LOOP + } + require.NoError(t, err) + case <-ticker.C: + step := 5 + // delete some rows, and add some data + for i := num; i < num+step; i++ { + n := rand.Intn(num) + tk.MustExec("update test_drop_index set c2 = 1 where c1 = ?", n) + tk.MustExec("insert into test_drop_index values (?, ?, ?)", i, i, i) + } + num += step + } + } + + rows := tk.MustQuery("explain select c1 from test_drop_index where c3 >= 0") + require.NotContains(t, fmt.Sprintf("%v", rows), idxName) + + checkDelRangeAdded(tk, jobIDExt.jobID, indexID) + tk.MustExec("drop table test_drop_index") +} + +func TestAddMultiColumnsIndexClusterIndex(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("drop database if exists test_add_multi_col_index_clustered;") + tk.MustExec("create database test_add_multi_col_index_clustered;") + tk.MustExec("use test_add_multi_col_index_clustered;") + + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + tk.MustExec("create table t (a int, b varchar(10), c int, primary key (a, b));") + tk.MustExec("insert into t values (1, '1', 1), (2, '2', NULL), (3, '3', 3);") + tk.MustExec("create index idx on t (a, c);") + + tk.MustExec("admin check index t idx;") + tk.MustExec("admin check table t;") + + tk.MustExec("insert into t values (5, '5', 5), (6, '6', NULL);") + + tk.MustExec("admin check index t idx;") + tk.MustExec("admin check table t;") +} + +func TestAddIndexWithDupCols(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + err1 := infoschema.ErrColumnExists.GenWithStackByArgs("b") + err2 := infoschema.ErrColumnExists.GenWithStackByArgs("B") + + tk.MustExec("create table test_add_index_with_dup (a int, b int)") + err := tk.ExecToErr("create index c on test_add_index_with_dup(b, a, b)") + require.ErrorIs(t, err, errors.Cause(err1)) + err = tk.ExecToErr("create index c on test_add_index_with_dup(b, a, B)") + require.ErrorIs(t, err, errors.Cause(err2)) + err = tk.ExecToErr("alter table test_add_index_with_dup add index c (b, a, b)") + require.ErrorIs(t, err, errors.Cause(err1)) + err = tk.ExecToErr("alter table test_add_index_with_dup add index c (b, a, B)") + require.ErrorIs(t, err, errors.Cause(err2)) + + tk.MustExec("drop table test_add_index_with_dup") +} + +func TestAnonymousIndex(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("DROP TABLE IF EXISTS t") + tk.MustExec("create table t(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb int, b int)") + tk.MustExec("alter table t add index bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb(b)") + tk.MustExec("alter table t add index (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)") + rows := tk.MustQuery("show index from t where key_name='bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'").Rows() + require.Len(t, rows, 1) + rows = tk.MustQuery("show index from t where key_name='bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb_2'").Rows() + require.Len(t, rows, 1) +} + +func TestAddIndexWithDupIndex(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, indexModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + err1 := dbterror.ErrDupKeyName.GenWithStack("index already exist %s", "idx") + err2 := dbterror.ErrDupKeyName.GenWithStack("index already exist %s; "+ + "a background job is trying to add the same index, "+ + "please check by `ADMIN SHOW DDL JOBS`", "idx") + + // When there is already an duplicate index, show error message. + tk.MustExec("create table test_add_index_with_dup (a int, key idx (a))") + err := tk.ExecToErr("alter table test_add_index_with_dup add index idx (a)") + require.ErrorIs(t, err, errors.Cause(err1)) + + // When there is another session adding duplicate index with state other than + // StatePublic, show explicit error message. + tbl := external.GetTableByName(t, tk, "test", "test_add_index_with_dup") + indexInfo := tbl.Meta().FindIndexByName("idx") + indexInfo.State = model.StateNone + err = tk.ExecToErr("alter table test_add_index_with_dup add index idx (a)") + require.ErrorIs(t, err, errors.Cause(err2)) +} diff --git a/ddl/integration_test.go b/ddl/integration_test.go index de4a4df0a9b22..0ecd18baa2660 100644 --- a/ddl/integration_test.go +++ b/ddl/integration_test.go @@ -124,3 +124,30 @@ func TestSchema(t *testing.T) { ddl.ExportTestSchema(t) } + +func TestDDLOnCachedTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tests := []struct { + sql string + result string + }{ + {"drop table t", "[ddl:8242]'Drop Table' is unsupported on cache tables."}, + {"create index t_id on t (id)", "[ddl:8242]'Create Index' is unsupported on cache tables."}, + {"alter table t drop index c", "[ddl:8242]'Alter Table' is unsupported on cache tables."}, + {"alter table t add column (d int)", "[ddl:8242]'Alter Table' is unsupported on cache tables."}, + {"truncate table t", "[ddl:8242]'Truncate Table' is unsupported on cache tables."}, + {"rename table t to t1", "[ddl:8242]'Rename Table' is unsupported on cache tables."}, + } + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("create table t (id int, c int, index(c));") + tk.MustExec("alter table t cache;") + + for _, tt := range tests { + tk.MustGetErrMsg(tt.sql, tt.result) + } + + tk.MustExec("alter table t nocache;") + tk.MustExec("drop table if exists t;") +} diff --git a/ddl/label/main_test.go b/ddl/label/main_test.go index 577972a1f5a95..570afb3bb4e05 100644 --- a/ddl/label/main_test.go +++ b/ddl/label/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/ddl/main_test.go b/ddl/main_test.go index 556290c8be63d..3d8de547bd5dc 100644 --- a/ddl/main_test.go +++ b/ddl/main_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package ddl +package ddl_test import ( "context" @@ -22,8 +22,13 @@ import ( "time" "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/domain/infosync" "github.com/pingcap/tidb/meta/autoid" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/util/testbridge" "github.com/tikv/client-go/v2/tikv" "go.uber.org/goleak" @@ -33,9 +38,12 @@ func TestMain(m *testing.M) { testbridge.SetupForCommonTest() tikv.EnableFailpoints() + domain.SchemaOutOfDateRetryInterval.Store(50 * time.Millisecond) + domain.SchemaOutOfDateRetryTimes.Store(50) + autoid.SetStep(5000) - ReorgWaitTimeout = 30 * time.Millisecond - batchInsertDeleteRangeSize = 2 + ddl.ReorgWaitTimeout = 30 * time.Millisecond + ddl.SetBatchInsertDeleteRangeSize(2) config.UpdateGlobal(func(conf *config.Config) { // Test for table lock. @@ -53,9 +61,48 @@ func TestMain(m *testing.M) { } opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } goleak.VerifyTestMain(m, opts...) } + +func wrapJobIDExtCallback(oldCallback ddl.Callback) *testDDLJobIDCallback { + return &testDDLJobIDCallback{ + Callback: oldCallback, + jobID: 0, + } +} + +func setupJobIDExtCallback(ctx sessionctx.Context) (jobExt *testDDLJobIDCallback, tearDown func()) { + dom := domain.GetDomain(ctx) + originHook := dom.DDL().GetHook() + jobIDExt := wrapJobIDExtCallback(originHook) + dom.DDL().SetHook(jobIDExt) + return jobIDExt, func() { + dom.DDL().SetHook(originHook) + } +} + +func checkDelRangeAdded(tk *testkit.TestKit, jobID int64, elemID int64) { + query := `select sum(cnt) from + (select count(1) cnt from mysql.gc_delete_range where job_id = ? and element_id = ? union + select count(1) cnt from mysql.gc_delete_range_done where job_id = ? and element_id = ?) as gdr;` + tk.MustQuery(query, jobID, elemID, jobID, elemID).Check(testkit.Rows("1")) +} + +type testDDLJobIDCallback struct { + ddl.Callback + jobID int64 +} + +func (t *testDDLJobIDCallback) OnJobUpdated(job *model.Job) { + if t.jobID == 0 { + t.jobID = job.ID + } + if t.Callback != nil { + t.Callback.OnJobUpdated(job) + } +} diff --git a/ddl/modify_column_test.go b/ddl/modify_column_test.go new file mode 100644 index 0000000000000..8c68b74b25aad --- /dev/null +++ b/ddl/modify_column_test.go @@ -0,0 +1,989 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "context" + "fmt" + "sync" + "testing" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/meta" + "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/mock" + "github.com/stretchr/testify/require" +) + +func batchInsert(tk *testkit.TestKit, tbl string, start, end int) { + dml := fmt.Sprintf("insert into %s values", tbl) + for i := start; i < end; i++ { + dml += fmt.Sprintf("(%d, %d, %d)", i, i, i) + if i != end-1 { + dml += "," + } + } + tk.MustExec(dml) +} + +func TestModifyColumnReorgInfo(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int, index idx(c2), index idx1(c1, c2));") + + sql := "alter table t1 change c2 c2 mediumint;" + // defaultBatchSize is equal to ddl.defaultBatchSize + base := defaultBatchSize * 8 + // add some rows + batchInsert(tk, "t1", 0, base) + // Make sure the count of regions more than backfill workers. + tk.MustQuery("split table t1 between (0) and (8192) regions 8;").Check(testkit.Rows("8 1")) + + tbl := external.GetTableByName(t, tk, "test", "t1") + + // Check insert null before job first update. + hook := &ddl.TestDDLCallback{Do: dom} + var checkErr error + var currJob *model.Job + var elements []*meta.Element + ctx := mock.NewContext() + ctx.Store = store + times := 0 + hook.OnJobRunBeforeExported = func(job *model.Job) { + if tbl.Meta().ID != job.TableID || checkErr != nil || job.SchemaState != model.StateWriteReorganization { + return + } + if job.Type == model.ActionModifyColumn { + if times == 0 { + times++ + return + } + currJob = job + var ( + newCol *model.ColumnInfo + oldColName *model.CIStr + modifyColumnTp byte + updatedAutoRandomBits uint64 + changingCol *model.ColumnInfo + changingIdxs []*model.IndexInfo + ) + pos := &ast.ColumnPosition{} + checkErr = job.DecodeArgs(&newCol, &oldColName, pos, &modifyColumnTp, &updatedAutoRandomBits, &changingCol, &changingIdxs) + elements = ddl.BuildElements(changingCol, changingIdxs) + } + if job.Type == model.ActionAddIndex { + if times == 1 { + times++ + return + } + tbl := external.GetTableByName(t, tk, "test", "t1") + indexInfo := tbl.Meta().FindIndexByName("idx2") + elements = []*meta.Element{{ID: indexInfo.ID, TypeKey: meta.IndexElementKey}} + } + } + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr", `return("cantDecodeRecordErr")`)) + dom.DDL().SetHook(hook) + err := tk.ExecToErr(sql) + require.EqualError(t, err, "[ddl:8202]Cannot decode index value, because mock can't decode record error") + require.NoError(t, checkErr) + // Check whether the reorg information is cleaned up when executing "modify column" failed. + checkReorgHandle := func(gotElements, expectedElements []*meta.Element) { + for i, e := range gotElements { + require.Equal(t, expectedElements[i], e) + } + require.NoError(t, ctx.NewTxn(context.Background())) + txn, err := ctx.Txn(true) + require.NoError(t, err) + m := meta.NewMeta(txn) + e, start, end, physicalID, err := m.GetDDLReorgHandle(currJob) + require.True(t, meta.ErrDDLReorgElementNotExist.Equal(err)) + require.Nil(t, e) + require.Nil(t, start) + require.Nil(t, end) + require.Zero(t, physicalID) + } + expectedElements := []*meta.Element{ + {ID: 4, TypeKey: meta.ColumnElementKey}, + {ID: 3, TypeKey: meta.IndexElementKey}, + {ID: 4, TypeKey: meta.IndexElementKey}} + checkReorgHandle(elements, expectedElements) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr")) + tk.MustExec("admin check table t1") + + // Check whether the reorg information is cleaned up when executing "modify column" successfully. + // Test encountering a "notOwnerErr" error which caused the processing backfill job to exit halfway. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr", `return("modifyColumnNotOwnerErr")`)) + tk.MustExec(sql) + expectedElements = []*meta.Element{ + {ID: 5, TypeKey: meta.ColumnElementKey}, + {ID: 5, TypeKey: meta.IndexElementKey}, + {ID: 6, TypeKey: meta.IndexElementKey}} + checkReorgHandle(elements, expectedElements) + tk.MustExec("admin check table t1") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr")) + + // Test encountering a "notOwnerErr" error which caused the processing backfill job to exit halfway. + // During the period, the old TiDB version(do not exist the element information) is upgraded to the new TiDB version. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr", `return("addIdxNotOwnerErr")`)) + tk.MustExec("alter table t1 add index idx2(c1)") + expectedElements = []*meta.Element{ + {ID: 7, TypeKey: meta.IndexElementKey}} + checkReorgHandle(elements, expectedElements) + tk.MustExec("admin check table t1") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockGetIndexRecordErr")) +} + +func TestModifyColumnNullToNotNullWithChangingVal2(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockInsertValueAfterCheckNull", `return("insert into test.tt values (NULL, NULL)")`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockInsertValueAfterCheckNull")) + }() + + tk.MustExec("drop table if exists tt;") + tk.MustExec(`create table tt (a bigint, b int, unique index idx(a));`) + tk.MustExec("insert into tt values (1,1),(2,2),(3,3);") + err := tk.ExecToErr("alter table tt modify a int not null;") + require.EqualError(t, err, "[ddl:1265]Data truncated for column 'a' at row 1") + tk.MustExec("drop table tt") +} + +func TestModifyColumnNullToNotNull(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 600*time.Millisecond) + defer clean() + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + + tk1.MustExec("use test") + tk2.MustExec("use test") + + tk1.MustExec("create table t1 (c1 int, c2 int)") + + tbl := external.GetTableByName(t, tk1, "test", "t1") + + // Check insert null before job first update. + hook := &ddl.TestDDLCallback{Do: dom} + tk1.MustExec("delete from t1") + once := sync.Once{} + var checkErr error + hook.OnJobRunBeforeExported = func(job *model.Job) { + if tbl.Meta().ID != job.TableID { + return + } + once.Do(func() { + checkErr = tk2.ExecToErr("insert into t1 values ()") + }) + } + dom.DDL().SetHook(hook) + err := tk1.ExecToErr("alter table t1 change c2 c2 int not null") + require.NoError(t, checkErr) + require.EqualError(t, err, "[ddl:1138]Invalid use of NULL value") + tk1.MustQuery("select * from t1").Check(testkit.Rows(" ")) + + // Check insert error when column has PreventNullInsertFlag. + tk1.MustExec("delete from t1") + hook.OnJobRunBeforeExported = func(job *model.Job) { + if tbl.Meta().ID != job.TableID { + return + } + + if job.State != model.JobStateRunning { + return + } + // now c2 has PreventNullInsertFlag, an error is expected. + checkErr = tk2.ExecToErr("insert into t1 values ()") + } + dom.DDL().SetHook(hook) + tk1.MustExec("alter table t1 change c2 c2 int not null") + require.EqualError(t, checkErr, "[table:1048]Column 'c2' cannot be null") + + c2 := external.GetModifyColumn(t, tk1, "test", "t1", "c2", false) + require.True(t, mysql.HasNotNullFlag(c2.Flag)) + require.False(t, mysql.HasPreventNullInsertFlag(c2.Flag)) + err = tk1.ExecToErr("insert into t1 values ();") + require.EqualError(t, err, "[table:1364]Field 'c2' doesn't have a default value") +} + +func TestModifyColumnNullToNotNullWithChangingVal(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 600*time.Millisecond) + defer clean() + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + + tk1.MustExec("use test") + tk2.MustExec("use test") + + tk1.MustExec("create table t1 (c1 int, c2 int)") + + tbl := external.GetTableByName(t, tk1, "test", "t1") + + // Check insert null before job first update. + hook := &ddl.TestDDLCallback{Do: dom} + tk1.MustExec("delete from t1") + once := sync.Once{} + var checkErr error + hook.OnJobRunBeforeExported = func(job *model.Job) { + if tbl.Meta().ID != job.TableID { + return + } + once.Do(func() { + checkErr = tk2.ExecToErr("insert into t1 values ()") + }) + } + dom.DDL().SetHook(hook) + err := tk1.ExecToErr("alter table t1 change c2 c2 tinyint not null") + require.NoError(t, checkErr) + require.EqualError(t, err, "[ddl:1265]Data truncated for column 'c2' at row 1") + tk1.MustQuery("select * from t1").Check(testkit.Rows(" ")) + + // Check insert error when column has PreventNullInsertFlag. + tk1.MustExec("delete from t1") + hook.OnJobRunBeforeExported = func(job *model.Job) { + if tbl.Meta().ID != job.TableID { + return + } + + if job.State != model.JobStateRunning { + return + } + // now c2 has PreventNullInsertFlag, an error is expected. + checkErr = tk2.ExecToErr("insert into t1 values ()") + } + dom.DDL().SetHook(hook) + tk1.MustExec("alter table t1 change c2 c2 tinyint not null") + require.EqualError(t, checkErr, "[table:1048]Column 'c2' cannot be null") + + c2 := external.GetModifyColumn(t, tk1, "test", "t1", "c2", false) + require.True(t, mysql.HasNotNullFlag(c2.Flag)) + require.False(t, mysql.HasPreventNullInsertFlag(c2.Flag)) + require.EqualError(t, tk1.ExecToErr("insert into t1 values ()"), "[table:1364]Field 'c2' doesn't have a default value") + + c2 = external.GetModifyColumn(t, tk1, "test", "t1", "c2", false) + require.Equal(t, mysql.TypeTiny, c2.FieldType.Tp) +} + +func TestModifyColumnBetweenStringTypes(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + // varchar to varchar + tk.MustExec("create table tt (a varchar(10));") + tk.MustExec("insert into tt values ('111'),('10000');") + tk.MustExec("alter table tt change a a varchar(5);") + mvc := external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, 5, mvc.FieldType.Flen) + tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) + tk.MustGetErrMsg("alter table tt change a a varchar(4);", "[types:1265]Data truncated for column 'a', value is '10000'") + tk.MustExec("alter table tt change a a varchar(100);") + tk.MustQuery("select length(a) from tt").Check(testkit.Rows("3", "5")) + + // char to char + tk.MustExec("drop table if exists tt;") + tk.MustExec("create table tt (a char(10));") + tk.MustExec("insert into tt values ('111'),('10000');") + tk.MustExec("alter table tt change a a char(5);") + mc := external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, 5, mc.FieldType.Flen) + tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) + tk.MustGetErrMsg("alter table tt change a a char(4);", "[types:1265]Data truncated for column 'a', value is '10000'") + tk.MustExec("alter table tt change a a char(100);") + tk.MustQuery("select length(a) from tt").Check(testkit.Rows("3", "5")) + + // binary to binary + tk.MustExec("drop table if exists tt;") + tk.MustExec("create table tt (a binary(10));") + tk.MustExec("insert into tt values ('111'),('10000');") + tk.MustGetErrMsg("alter table tt change a a binary(5);", "[types:1265]Data truncated for column 'a', value is '111\x00\x00\x00\x00\x00\x00\x00'") + mb := external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, 10, mb.FieldType.Flen) + tk.MustQuery("select * from tt").Check(testkit.Rows("111\x00\x00\x00\x00\x00\x00\x00", "10000\x00\x00\x00\x00\x00")) + tk.MustGetErrMsg("alter table tt change a a binary(4);", "[types:1265]Data truncated for column 'a', value is '111\x00\x00\x00\x00\x00\x00\x00'") + tk.MustExec("alter table tt change a a binary(12);") + tk.MustQuery("select * from tt").Check(testkit.Rows("111\x00\x00\x00\x00\x00\x00\x00\x00\x00", "10000\x00\x00\x00\x00\x00\x00\x00")) + tk.MustQuery("select length(a) from tt").Check(testkit.Rows("12", "12")) + + // varbinary to varbinary + tk.MustExec("drop table if exists tt;") + tk.MustExec("create table tt (a varbinary(10));") + tk.MustExec("insert into tt values ('111'),('10000');") + tk.MustExec("alter table tt change a a varbinary(5);") + mvb := external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, 5, mvb.FieldType.Flen) + tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) + tk.MustGetErrMsg("alter table tt change a a varbinary(4);", "[types:1265]Data truncated for column 'a', value is '10000'") + tk.MustExec("alter table tt change a a varbinary(12);") + tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) + tk.MustQuery("select length(a) from tt").Check(testkit.Rows("3", "5")) + + // varchar to char + tk.MustExec("drop table if exists tt;") + tk.MustExec("create table tt (a varchar(10));") + tk.MustExec("insert into tt values ('111'),('10000');") + + tk.MustExec("alter table tt change a a char(10);") + c2 := external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, mysql.TypeString, c2.FieldType.Tp) + require.Equal(t, 10, c2.FieldType.Flen) + tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) + tk.MustGetErrMsg("alter table tt change a a char(4);", "[types:1265]Data truncated for column 'a', value is '10000'") + + // char to text + tk.MustExec("alter table tt change a a text;") + c2 = external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, mysql.TypeBlob, c2.FieldType.Tp) + + // text to set + tk.MustGetErrMsg("alter table tt change a a set('111', '2222');", "[types:1265]Data truncated for column 'a', value is '10000'") + tk.MustExec("alter table tt change a a set('111', '10000');") + c2 = external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, mysql.TypeSet, c2.FieldType.Tp) + tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) + + // set to set + tk.MustExec("alter table tt change a a set('10000', '111');") + c2 = external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, mysql.TypeSet, c2.FieldType.Tp) + tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) + + // set to enum + tk.MustGetErrMsg("alter table tt change a a enum('111', '2222');", "[types:1265]Data truncated for column 'a', value is '10000'") + tk.MustExec("alter table tt change a a enum('111', '10000');") + c2 = external.GetModifyColumn(t, tk, "test", "tt", "a", false) + require.Equal(t, mysql.TypeEnum, c2.FieldType.Tp) + tk.MustQuery("select * from tt").Check(testkit.Rows("111", "10000")) + tk.MustExec("alter table tt change a a enum('10000', '111');") + tk.MustQuery("select * from tt where a = 1").Check(testkit.Rows("10000")) + tk.MustQuery("select * from tt where a = 2").Check(testkit.Rows("111")) + + // no-strict mode + tk.MustExec(`set @@sql_mode="";`) + tk.MustExec("alter table tt change a a enum('111', '2222');") + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1265|Data truncated for column 'a', value is '10000'")) + + tk.MustExec("drop table tt;") +} + +func TestModifyColumnCharset(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t_mcc(a varchar(8) charset utf8, b varchar(8) charset utf8)") + + result := tk.MustQuery(`show create table t_mcc`) + result.Check(testkit.Rows( + "t_mcc CREATE TABLE `t_mcc` (\n" + + " `a` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,\n" + + " `b` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + + tk.MustExec("alter table t_mcc modify column a varchar(8);") + tbl := external.GetTableByName(t, tk, "test", "t_mcc") + tbl.Meta().Version = model.TableInfoVersion0 + // When the table version is TableInfoVersion0, the following statement don't change "b" charset. + // So the behavior is not compatible with MySQL. + tk.MustExec("alter table t_mcc modify column b varchar(8);") + result = tk.MustQuery(`show create table t_mcc`) + result.Check(testkit.Rows( + "t_mcc CREATE TABLE `t_mcc` (\n" + + " `a` varchar(8) DEFAULT NULL,\n" + + " `b` varchar(8) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + +} + +func TestModifyColumnTime_TimeToYear(t *testing.T) { + outOfRangeCode := uint16(1264) + tests := []testModifyColumnTimeCase{ + // time to year, it's reasonable to return current year and discard the time (even if MySQL may get data out of range error). + {"time", `"30 20:00:12"`, "year", "", outOfRangeCode}, + {"time", `"30 20:00"`, "year", "", outOfRangeCode}, + {"time", `"30 20"`, "year", "", outOfRangeCode}, + {"time", `"20:00:12"`, "year", "", outOfRangeCode}, + {"time", `"20:00"`, "year", "", outOfRangeCode}, + {"time", `"12"`, "year", "2012", 0}, + {"time", `"200012"`, "year", "", outOfRangeCode}, + {"time", `200012`, "year", "", outOfRangeCode}, + {"time", `0012`, "year", "2012", 0}, + {"time", `12`, "year", "2012", 0}, + {"time", `"30 20:00:12.498"`, "year", "", outOfRangeCode}, + {"time", `"20:00:12.498"`, "year", "", outOfRangeCode}, + {"time", `"200012.498"`, "year", "", outOfRangeCode}, + {"time", `200012.498`, "year", "", outOfRangeCode}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_TimeToDate(t *testing.T) { + now := time.Now().UTC() + now = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC) + timeToDate1 := now.Format("2006-01-02") + timeToDate2 := now.AddDate(0, 0, 30).Format("2006-01-02") + tests := []testModifyColumnTimeCase{ + // time to date + {"time", `"30 20:00:12"`, "date", timeToDate2, 0}, + {"time", `"30 20:00"`, "date", timeToDate2, 0}, + {"time", `"30 20"`, "date", timeToDate2, 0}, + {"time", `"20:00:12"`, "date", timeToDate1, 0}, + {"time", `"20:00"`, "date", timeToDate1, 0}, + {"time", `"12"`, "date", timeToDate1, 0}, + {"time", `"200012"`, "date", timeToDate1, 0}, + {"time", `200012`, "date", timeToDate1, 0}, + {"time", `0012`, "date", timeToDate1, 0}, + {"time", `12`, "date", timeToDate1, 0}, + {"time", `"30 20:00:12.498"`, "date", timeToDate2, 0}, + {"time", `"20:00:12.498"`, "date", timeToDate1, 0}, + {"time", `"200012.498"`, "date", timeToDate1, 0}, + {"time", `200012.498`, "date", timeToDate1, 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_TimeToDatetime(t *testing.T) { + now := time.Now().UTC() + now = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC) + timeToDatetime1 := now.Add(20 * time.Hour).Add(12 * time.Second).Format("2006-01-02 15:04:05") + timeToDatetime2 := now.Add(20 * time.Hour).Format("2006-01-02 15:04:05") + timeToDatetime3 := now.Add(12 * time.Second).Format("2006-01-02 15:04:05") + timeToDatetime4 := now.AddDate(0, 0, 30).Add(20 * time.Hour).Add(12 * time.Second).Format("2006-01-02 15:04:05") + timeToDatetime5 := now.AddDate(0, 0, 30).Add(20 * time.Hour).Format("2006-01-02 15:04:05") + tests := []testModifyColumnTimeCase{ + // time to datetime + {"time", `"30 20:00:12"`, "datetime", timeToDatetime4, 0}, + {"time", `"30 20:00"`, "datetime", timeToDatetime5, 0}, + {"time", `"30 20"`, "datetime", timeToDatetime5, 0}, + {"time", `"20:00:12"`, "datetime", timeToDatetime1, 0}, + {"time", `"20:00"`, "datetime", timeToDatetime2, 0}, + {"time", `"12"`, "datetime", timeToDatetime3, 0}, + {"time", `"200012"`, "datetime", timeToDatetime1, 0}, + {"time", `200012`, "datetime", timeToDatetime1, 0}, + {"time", `0012`, "datetime", timeToDatetime3, 0}, + {"time", `12`, "datetime", timeToDatetime3, 0}, + {"time", `"30 20:00:12.498"`, "datetime", timeToDatetime4, 0}, + {"time", `"20:00:12.498"`, "datetime", timeToDatetime1, 0}, + {"time", `"200012.498"`, "datetime", timeToDatetime1, 0}, + {"time", `200012.498`, "datetime", timeToDatetime1, 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_TimeToTimestamp(t *testing.T) { + now := time.Now().UTC() + now = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC) + timeToTimestamp1 := now.Add(20 * time.Hour).Add(12 * time.Second).Format("2006-01-02 15:04:05") + timeToTimestamp2 := now.Add(20 * time.Hour).Format("2006-01-02 15:04:05") + timeToTimestamp3 := now.Add(12 * time.Second).Format("2006-01-02 15:04:05") + timeToTimestamp4 := now.AddDate(0, 0, 30).Add(20 * time.Hour).Add(12 * time.Second).Format("2006-01-02 15:04:05") + timeToTimestamp5 := now.AddDate(0, 0, 30).Add(20 * time.Hour).Format("2006-01-02 15:04:05") + tests := []testModifyColumnTimeCase{ + // time to timestamp + {"time", `"30 20:00:12"`, "timestamp", timeToTimestamp4, 0}, + {"time", `"30 20:00"`, "timestamp", timeToTimestamp5, 0}, + {"time", `"30 20"`, "timestamp", timeToTimestamp5, 0}, + {"time", `"20:00:12"`, "timestamp", timeToTimestamp1, 0}, + {"time", `"20:00"`, "timestamp", timeToTimestamp2, 0}, + {"time", `"12"`, "timestamp", timeToTimestamp3, 0}, + {"time", `"200012"`, "timestamp", timeToTimestamp1, 0}, + {"time", `200012`, "timestamp", timeToTimestamp1, 0}, + {"time", `0012`, "timestamp", timeToTimestamp3, 0}, + {"time", `12`, "timestamp", timeToTimestamp3, 0}, + {"time", `"30 20:00:12.498"`, "timestamp", timeToTimestamp4, 0}, + {"time", `"20:00:12.498"`, "timestamp", timeToTimestamp1, 0}, + {"time", `"200012.498"`, "timestamp", timeToTimestamp1, 0}, + {"time", `200012.498`, "timestamp", timeToTimestamp1, 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_DateToTime(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // date to time + {"date", `"2019-01-02"`, "time", "00:00:00", 0}, + {"date", `"19-01-02"`, "time", "00:00:00", 0}, + {"date", `"20190102"`, "time", "00:00:00", 0}, + {"date", `"190102"`, "time", "00:00:00", 0}, + {"date", `20190102`, "time", "00:00:00", 0}, + {"date", `190102`, "time", "00:00:00", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_DateToYear(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // date to year + {"date", `"2019-01-02"`, "year", "2019", 0}, + {"date", `"19-01-02"`, "year", "2019", 0}, + {"date", `"20190102"`, "year", "2019", 0}, + {"date", `"190102"`, "year", "2019", 0}, + {"date", `20190102`, "year", "2019", 0}, + {"date", `190102`, "year", "2019", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_DateToDatetime(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // date to datetime + {"date", `"2019-01-02"`, "datetime", "2019-01-02 00:00:00", 0}, + {"date", `"19-01-02"`, "datetime", "2019-01-02 00:00:00", 0}, + {"date", `"20190102"`, "datetime", "2019-01-02 00:00:00", 0}, + {"date", `"190102"`, "datetime", "2019-01-02 00:00:00", 0}, + {"date", `20190102`, "datetime", "2019-01-02 00:00:00", 0}, + {"date", `190102`, "datetime", "2019-01-02 00:00:00", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_DateToTimestamp(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // date to timestamp + {"date", `"2019-01-02"`, "timestamp", "2019-01-02 00:00:00", 0}, + {"date", `"19-01-02"`, "timestamp", "2019-01-02 00:00:00", 0}, + {"date", `"20190102"`, "timestamp", "2019-01-02 00:00:00", 0}, + {"date", `"190102"`, "timestamp", "2019-01-02 00:00:00", 0}, + {"date", `20190102`, "timestamp", "2019-01-02 00:00:00", 0}, + {"date", `190102`, "timestamp", "2019-01-02 00:00:00", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_TimestampToYear(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // timestamp to year + {"timestamp", `"2006-01-02 15:04:05"`, "year", "2006", 0}, + {"timestamp", `"06-01-02 15:04:05"`, "year", "2006", 0}, + {"timestamp", `"20060102150405"`, "year", "2006", 0}, + {"timestamp", `"060102150405"`, "year", "2006", 0}, + {"timestamp", `20060102150405`, "year", "2006", 0}, + {"timestamp", `060102150405`, "year", "2006", 0}, + {"timestamp", `"2006-01-02 23:59:59.506"`, "year", "2006", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_TimestampToTime(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // timestamp to time + {"timestamp", `"2006-01-02 15:04:05"`, "time", "15:04:05", 0}, + {"timestamp", `"06-01-02 15:04:05"`, "time", "15:04:05", 0}, + {"timestamp", `"20060102150405"`, "time", "15:04:05", 0}, + {"timestamp", `"060102150405"`, "time", "15:04:05", 0}, + {"timestamp", `20060102150405`, "time", "15:04:05", 0}, + {"timestamp", `060102150405`, "time", "15:04:05", 0}, + {"timestamp", `"2006-01-02 23:59:59.506"`, "time", "00:00:00", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_TimestampToDate(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // timestamp to date + {"timestamp", `"2006-01-02 15:04:05"`, "date", "2006-01-02", 0}, + {"timestamp", `"06-01-02 15:04:05"`, "date", "2006-01-02", 0}, + {"timestamp", `"20060102150405"`, "date", "2006-01-02", 0}, + {"timestamp", `"060102150405"`, "date", "2006-01-02", 0}, + {"timestamp", `20060102150405`, "date", "2006-01-02", 0}, + {"timestamp", `060102150405`, "date", "2006-01-02", 0}, + {"timestamp", `"2006-01-02 23:59:59.506"`, "date", "2006-01-03", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_TimestampToDatetime(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // timestamp to datetime + {"timestamp", `"2006-01-02 15:04:05"`, "datetime", "2006-01-02 15:04:05", 0}, + {"timestamp", `"06-01-02 15:04:05"`, "datetime", "2006-01-02 15:04:05", 0}, + {"timestamp", `"20060102150405"`, "datetime", "2006-01-02 15:04:05", 0}, + {"timestamp", `"060102150405"`, "datetime", "2006-01-02 15:04:05", 0}, + {"timestamp", `20060102150405`, "datetime", "2006-01-02 15:04:05", 0}, + {"timestamp", `060102150405`, "datetime", "2006-01-02 15:04:05", 0}, + {"timestamp", `"2006-01-02 23:59:59.506"`, "datetime", "2006-01-03 00:00:00", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_DatetimeToYear(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // datetime to year + {"datetime", `"2006-01-02 15:04:05"`, "year", "2006", 0}, + {"datetime", `"06-01-02 15:04:05"`, "year", "2006", 0}, + {"datetime", `"20060102150405"`, "year", "2006", 0}, + {"datetime", `"060102150405"`, "year", "2006", 0}, + {"datetime", `20060102150405`, "year", "2006", 0}, + {"datetime", `060102150405`, "year", "2006", 0}, + {"datetime", `"2006-01-02 23:59:59.506"`, "year", "2006", 0}, + {"datetime", `"1000-01-02 23:59:59"`, "year", "", errno.ErrWarnDataOutOfRange}, + {"datetime", `"9999-01-02 23:59:59"`, "year", "", errno.ErrWarnDataOutOfRange}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_DatetimeToTime(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // datetime to time + {"datetime", `"2006-01-02 15:04:05"`, "time", "15:04:05", 0}, + {"datetime", `"06-01-02 15:04:05"`, "time", "15:04:05", 0}, + {"datetime", `"20060102150405"`, "time", "15:04:05", 0}, + {"datetime", `"060102150405"`, "time", "15:04:05", 0}, + {"datetime", `20060102150405`, "time", "15:04:05", 0}, + {"datetime", `060102150405`, "time", "15:04:05", 0}, + {"datetime", `"2006-01-02 23:59:59.506"`, "time", "00:00:00", 0}, + {"datetime", `"1000-01-02 23:59:59"`, "time", "23:59:59", 0}, + {"datetime", `"9999-01-02 23:59:59"`, "time", "23:59:59", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_DatetimeToDate(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // datetime to date + {"datetime", `"2006-01-02 15:04:05"`, "date", "2006-01-02", 0}, + {"datetime", `"06-01-02 15:04:05"`, "date", "2006-01-02", 0}, + {"datetime", `"20060102150405"`, "date", "2006-01-02", 0}, + {"datetime", `"060102150405"`, "date", "2006-01-02", 0}, + {"datetime", `20060102150405`, "date", "2006-01-02", 0}, + {"datetime", `060102150405`, "date", "2006-01-02", 0}, + {"datetime", `"2006-01-02 23:59:59.506"`, "date", "2006-01-03", 0}, + {"datetime", `"1000-01-02 23:59:59"`, "date", "1000-01-02", 0}, + {"datetime", `"9999-01-02 23:59:59"`, "date", "9999-01-02", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_DatetimeToTimestamp(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // datetime to timestamp + {"datetime", `"2006-01-02 15:04:05"`, "timestamp", "2006-01-02 15:04:05", 0}, + {"datetime", `"06-01-02 15:04:05"`, "timestamp", "2006-01-02 15:04:05", 0}, + {"datetime", `"20060102150405"`, "timestamp", "2006-01-02 15:04:05", 0}, + {"datetime", `"060102150405"`, "timestamp", "2006-01-02 15:04:05", 0}, + {"datetime", `20060102150405`, "timestamp", "2006-01-02 15:04:05", 0}, + {"datetime", `060102150405`, "timestamp", "2006-01-02 15:04:05", 0}, + {"datetime", `"2006-01-02 23:59:59.506"`, "timestamp", "2006-01-03 00:00:00", 0}, + {"datetime", `"1971-01-02 23:59:59"`, "timestamp", "1971-01-02 23:59:59", 0}, + {"datetime", `"2009-01-02 23:59:59"`, "timestamp", "2009-01-02 23:59:59", 0}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_YearToTime(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // year to time + // failed cases are not handled by TiDB + {"year", `"2019"`, "time", "00:20:19", 0}, + {"year", `2019`, "time", "00:20:19", 0}, + {"year", `"00"`, "time", "00:20:00", 0}, + {"year", `"69"`, "time", "", errno.ErrTruncatedWrongValue}, + {"year", `"70"`, "time", "", errno.ErrTruncatedWrongValue}, + {"year", `"99"`, "time", "", errno.ErrTruncatedWrongValue}, + {"year", `00`, "time", "00:00:00", 0}, + {"year", `69`, "time", "", errno.ErrTruncatedWrongValue}, + {"year", `70`, "time", "", errno.ErrTruncatedWrongValue}, + {"year", `99`, "time", "", errno.ErrTruncatedWrongValue}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_YearToDate(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // year to date + {"year", `"2019"`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `2019`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `"00"`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `"69"`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `"70"`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `"99"`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `00`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `69`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `70`, "date", "", errno.ErrTruncatedWrongValue}, + {"year", `99`, "date", "", errno.ErrTruncatedWrongValue}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_YearToDatetime(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // year to datetime + {"year", `"2019"`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `2019`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `"00"`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `"69"`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `"70"`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `"99"`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `00`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `69`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `70`, "datetime", "", errno.ErrTruncatedWrongValue}, + {"year", `99`, "datetime", "", errno.ErrTruncatedWrongValue}, + } + testModifyColumnTime(t, tests) +} + +func TestModifyColumnTime_YearToTimestamp(t *testing.T) { + tests := []testModifyColumnTimeCase{ + // year to timestamp + {"year", `"2019"`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `2019`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `"00"`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `"69"`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `"70"`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `"99"`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `00`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `69`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `70`, "timestamp", "", errno.ErrTruncatedWrongValue}, + {"year", `99`, "timestamp", "", errno.ErrTruncatedWrongValue}, + } + testModifyColumnTime(t, tests) +} + +type testModifyColumnTimeCase struct { + from string + value string + to string + expect string + err uint16 +} + +func testModifyColumnTime(t *testing.T, tests []testModifyColumnTimeCase) { + limit := variable.GetDDLErrorCountLimit() + + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@global.tidb_ddl_error_count_limit = 3") + + // Set time zone to UTC. + originalTz := tk.Session().GetSessionVars().TimeZone + tk.Session().GetSessionVars().TimeZone = time.UTC + defer func() { + tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_error_count_limit = %v", limit)) + tk.Session().GetSessionVars().TimeZone = originalTz + }() + + for _, test := range tests { + comment := fmt.Sprintf("%+v", test) + tk.MustExec("drop table if exists t_mc") + tk.MustExec(fmt.Sprintf("create table t_mc(a %s)", test.from)) + tk.MustExec(fmt.Sprintf(`insert into t_mc (a) values (%s)`, test.value)) + _, err := tk.Exec(fmt.Sprintf(`alter table t_mc modify a %s`, test.to)) + if test.err != 0 { + require.Error(t, err, comment) + require.Regexp(t, fmt.Sprintf(".*[ddl:%d].*", test.err), err.Error(), comment) + continue + } + require.NoError(t, err, comment) + tk.MustQuery("select a from t_mc").Check(testkit.Rows(test.expect)) + } +} + +func TestModifyColumnTypeWithWarnings(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + // Test normal warnings. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a decimal(5,2))") + tk.MustExec("insert into t values(111.22),(111.22),(111.22),(111.22),(333.4)") + // 111.22 will be truncated the fraction .22 as .2 with truncated warning for each row. + tk.MustExec("alter table t modify column a decimal(4,1)") + // there should 4 rows of warnings corresponding to the origin rows. + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1292 Truncated incorrect DECIMAL value: '111.22'", + "Warning 1292 Truncated incorrect DECIMAL value: '111.22'", + "Warning 1292 Truncated incorrect DECIMAL value: '111.22'", + "Warning 1292 Truncated incorrect DECIMAL value: '111.22'")) + + // Test the strict warnings is treated as errors under the strict mode. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a decimal(5,2))") + tk.MustExec("insert into t values(111.22),(111.22),(111.22),(33.4)") + // Since modify column a from decimal(5,2) to decimal(3,1), the first three rows with 111.22 will overflows the target types. + err := tk.ExecToErr("alter table t modify column a decimal(3,1)") + require.EqualError(t, err, "[types:1690]DECIMAL value is out of range in '(3, 1)'") + + // Test the strict warnings is treated as warnings under the non-strict mode. + tk.MustExec("set @@sql_mode=\"\"") + tk.MustExec("alter table t modify column a decimal(3,1)") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1690 DECIMAL value is out of range in '(3, 1)'", + "Warning 1690 DECIMAL value is out of range in '(3, 1)'", + "Warning 1690 DECIMAL value is out of range in '(3, 1)'")) +} + +// TestModifyColumnTypeWhenInterception is to test modifying column type with warnings intercepted by +// reorg timeout, not owner error and so on. +func TestModifyColumnTypeWhenInterception(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + // Test normal warnings. + tk.MustExec("create table t(a int primary key, b decimal(4,2))") + + count := defaultBatchSize * 4 + // Add some rows. + dml := "insert into t values" + for i := 1; i <= count; i++ { + dml += fmt.Sprintf("(%d, %f)", i, 11.22) + if i != count { + dml += "," + } + } + tk.MustExec(dml) + // Make the regions scale like: [1, 1024), [1024, 2048), [2048, 3072), [3072, 4096] + tk.MustQuery("split table t between(0) and (4096) regions 4") + + d := dom.DDL() + hook := &ddl.TestDDLCallback{} + var checkMiddleWarningCount bool + var checkMiddleAddedCount bool + // Since the `DefTiDBDDLReorgWorkerCount` is 4, every worker will be assigned with one region + // for the first time. Here we mock the insert failure/reorg timeout in region [2048, 3072) + // which will lead next handle be set to 2048 and partial warnings be stored into ddl job. + // Since the existence of reorg batch size, only the last reorg batch [2816, 3072) of kv + // range [2048, 3072) fail to commit, the rest of them all committed successfully. So the + // addedCount and warnings count in the job are all equal to `4096 - reorg batch size`. + // In the next round of this ddl job, the last reorg batch will be finished. + var middleWarningsCount = int64(defaultBatchSize*4 - defaultReorgBatchSize) + hook.OnJobUpdatedExported = func(job *model.Job) { + if job.SchemaState == model.StateWriteReorganization || job.SnapshotVer != 0 { + if len(job.ReorgMeta.WarningsCount) == len(job.ReorgMeta.Warnings) { + for _, v := range job.ReorgMeta.WarningsCount { + if v == middleWarningsCount { + checkMiddleWarningCount = true + } + } + } + if job.RowCount == middleWarningsCount { + checkMiddleAddedCount = true + } + } + } + d.SetHook(hook) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/MockReorgTimeoutInOneRegion", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/MockReorgTimeoutInOneRegion")) + }() + tk.MustExec("alter table t modify column b decimal(3,1)") + require.True(t, checkMiddleWarningCount) + require.True(t, checkMiddleAddedCount) + + res := tk.MustQuery("show warnings") + require.Len(t, res.Rows(), count) +} + +func TestModifyColumnRollBack(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (c1 int, c2 int, c3 int default 1, index (c1))") + + var c2 *table.Column + var checkErr error + hook := &ddl.TestDDLCallback{Do: dom} + hook.OnJobUpdatedExported = func(job *model.Job) { + if checkErr != nil { + return + } + + tbl := external.GetTableByName(t, tk, "test", "t1") + for _, col := range tbl.Cols() { + if col.Name.L == "c2" { + c2 = col + } + } + if mysql.HasPreventNullInsertFlag(c2.Flag) { + tk.MustGetErrCode("insert into t1(c2) values (null);", errno.ErrBadNull) + } + + hookCtx := mock.NewContext() + hookCtx.Store = store + err := hookCtx.NewTxn(context.Background()) + if err != nil { + checkErr = errors.Trace(err) + return + } + + jobIDs := []int64{job.ID} + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + errs, err := admin.CancelJobs(txn, jobIDs) + if err != nil { + checkErr = errors.Trace(err) + return + } + // It only tests cancel one DDL job. + if errs[0] != nil { + checkErr = errors.Trace(errs[0]) + return + } + + txn, err = hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + return + } + err = txn.Commit(context.Background()) + if err != nil { + checkErr = errors.Trace(err) + } + } + + dom.DDL().SetHook(hook) + done := make(chan error, 1) + go backgroundExec(store, "alter table test.t1 change c2 c2 bigint not null;", done) + + err := <-done + require.EqualError(t, err, "[ddl:8214]Cancelled DDL job") + tk.MustExec("insert into t1(c2) values (null);") + + tbl := external.GetTableByName(t, tk, "test", "t1") //nolint:typecheck + for _, col := range tbl.Cols() { + if col.Name.L == "c2" { + c2 = col + } + } + require.False(t, mysql.HasNotNullFlag(c2.Flag)) + tk.MustExec("drop table t1") +} diff --git a/ddl/partition.go b/ddl/partition.go index 2042928700839..4634f021e2243 100644 --- a/ddl/partition.go +++ b/ddl/partition.go @@ -48,6 +48,7 @@ import ( tidbutil "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/slice" @@ -62,7 +63,7 @@ const ( func checkAddPartition(t *meta.Meta, job *model.Job) (*model.TableInfo, *model.PartitionInfo, []model.PartitionDefinition, error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return nil, nil, nil, errors.Trace(err) } @@ -134,7 +135,7 @@ func (w *worker) onAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (v if tblInfo.TiFlashReplica != nil { // Must set placement rule, and make sure it succeeds. - if err := infosync.ConfigureTiFlashPDForPartitions(true, &tblInfo.Partition.AddingDefinitions, tblInfo.TiFlashReplica.Count, &tblInfo.TiFlashReplica.LocationLabels); err != nil { + if err := infosync.ConfigureTiFlashPDForPartitions(true, &tblInfo.Partition.AddingDefinitions, tblInfo.TiFlashReplica.Count, &tblInfo.TiFlashReplica.LocationLabels, tblInfo.ID); err != nil { logutil.BgLogger().Error("ConfigureTiFlashPDForPartitions fails", zap.Error(err)) return ver, errors.Trace(err) } @@ -192,7 +193,7 @@ func (w *worker) onAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (v job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) asyncNotifyEvent(d, &util.Event{Tp: model.ActionAddTablePartition, TableInfo: tblInfo, PartInfo: partInfo}) default: - err = ErrInvalidDDLState.GenWithStackByArgs("partition", job.SchemaState) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("partition", job.SchemaState) } return ver, errors.Trace(err) @@ -209,7 +210,7 @@ func alterTablePartitionBundles(t *meta.Meta, tblInfo *model.TableInfo, addingDe tblInfo.Partition = &p if tblInfo.TiFlashReplica != nil && tblInfo.TiFlashReplica.Count > 0 && tableHasPlacementSettings(tblInfo) { - return nil, errors.Trace(ErrIncompatibleTiFlashAndPlacement) + return nil, errors.Trace(dbterror.ErrIncompatibleTiFlashAndPlacement) } // bundle for table should be recomputed because it includes some default configs for partitions @@ -271,7 +272,7 @@ func checkAddPartitionValue(meta *model.TableInfo, part *model.PartitionInfo) er newDefs, oldDefs := part.Definitions, meta.Partition.Definitions rangeValue := oldDefs[len(oldDefs)-1].LessThan[0] if strings.EqualFold(rangeValue, "MAXVALUE") { - return errors.Trace(ErrPartitionMaxvalue) + return errors.Trace(dbterror.ErrPartitionMaxvalue) } currentRangeValue, err := strconv.Atoi(rangeValue) @@ -284,7 +285,7 @@ func checkAddPartitionValue(meta *model.TableInfo, part *model.PartitionInfo) er if ifMaxvalue && i == len(newDefs)-1 { return nil } else if ifMaxvalue && i != len(newDefs)-1 { - return errors.Trace(ErrPartitionMaxvalue) + return errors.Trace(dbterror.ErrPartitionMaxvalue) } nextRangeValue, err := strconv.Atoi(newDefs[i].LessThan[0]) @@ -292,7 +293,7 @@ func checkAddPartitionValue(meta *model.TableInfo, part *model.PartitionInfo) er return errors.Trace(err) } if nextRangeValue <= currentRangeValue { - return errors.Trace(ErrRangeNotIncreasing) + return errors.Trace(dbterror.ErrRangeNotIncreasing) } currentRangeValue = nextRangeValue } @@ -381,7 +382,7 @@ func buildTablePartitionInfo(ctx sessionctx.Context, s *ast.PartitionOptions, tb } if strings.EqualFold(ctx.GetSessionVars().EnableTablePartition, "OFF") { - ctx.GetSessionVars().StmtCtx.AppendWarning(errTablePartitionDisabled) + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTablePartitionDisabled) return nil } @@ -411,7 +412,7 @@ func buildTablePartitionInfo(ctx sessionctx.Context, s *ast.PartitionOptions, tb } if !enable { - ctx.GetSessionVars().StmtCtx.AppendWarning(errUnsupportedCreatePartition.GenWithStack(fmt.Sprintf("Unsupported partition type %v, treat as normal table", s.Tp))) + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedCreatePartition.GenWithStack(fmt.Sprintf("Unsupported partition type %v, treat as normal table", s.Tp))) return nil } @@ -640,15 +641,15 @@ func checkPartitionValuesIsInt(ctx sessionctx.Context, def *ast.PartitionDefinit case types.KindUint64, types.KindNull: case types.KindInt64: if mysql.HasUnsignedFlag(tp.Flag) && val.GetInt64() < 0 { - return ErrPartitionConstDomain.GenWithStackByArgs() + return dbterror.ErrPartitionConstDomain.GenWithStackByArgs() } default: - return ErrValuesIsNotIntType.GenWithStackByArgs(def.Name) + return dbterror.ErrValuesIsNotIntType.GenWithStackByArgs(def.Name) } _, err = val.ConvertTo(ctx.GetSessionVars().StmtCtx, tp) if err != nil && !types.ErrOverflow.Equal(err) { - return ErrWrongTypeColumnValue.GenWithStackByArgs() + return dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() } } @@ -660,7 +661,7 @@ func checkPartitionNameUnique(pi *model.PartitionInfo) error { partNames := make(map[string]struct{}, len(newPars)) for _, newPar := range newPars { if _, ok := partNames[newPar.Name.L]; ok { - return ErrSameNamePartition.GenWithStackByArgs(newPar.Name) + return dbterror.ErrSameNamePartition.GenWithStackByArgs(newPar.Name) } partNames[newPar.Name.L] = struct{}{} } @@ -678,7 +679,7 @@ func checkAddPartitionNameUnique(tbInfo *model.TableInfo, pi *model.PartitionInf newPars := pi.Definitions for _, newPar := range newPars { if _, ok := partNames[newPar.Name.L]; ok { - return ErrSameNamePartition.GenWithStackByArgs(newPar.Name) + return dbterror.ErrSameNamePartition.GenWithStackByArgs(newPar.Name) } partNames[newPar.Name.L] = struct{}{} } @@ -691,15 +692,15 @@ func checkAndOverridePartitionID(newTableInfo, oldTableInfo *model.TableInfo) er return nil } if oldTableInfo.Partition == nil { - return ErrRepairTableFail.GenWithStackByArgs("Old table doesn't have partitions") + return dbterror.ErrRepairTableFail.GenWithStackByArgs("Old table doesn't have partitions") } if newTableInfo.Partition.Type != oldTableInfo.Partition.Type { - return ErrRepairTableFail.GenWithStackByArgs("Partition type should be the same") + return dbterror.ErrRepairTableFail.GenWithStackByArgs("Partition type should be the same") } // Check whether partitionType is hash partition. if newTableInfo.Partition.Type == model.PartitionTypeHash { if newTableInfo.Partition.Num != oldTableInfo.Partition.Num { - return ErrRepairTableFail.GenWithStackByArgs("Hash partition num should be the same") + return dbterror.ErrRepairTableFail.GenWithStackByArgs("Hash partition num should be the same") } } for i, newOne := range newTableInfo.Partition.Definitions { @@ -714,7 +715,7 @@ func checkAndOverridePartitionID(newTableInfo, oldTableInfo *model.TableInfo) er } } if !found { - return ErrRepairTableFail.GenWithStackByArgs("Partition " + newOne.Name.L + " has lost") + return dbterror.ErrRepairTableFail.GenWithStackByArgs("Partition " + newOne.Name.L + " has lost") } } return nil @@ -731,7 +732,7 @@ func checkPartitionFuncValid(ctx sessionctx.Context, tblInfo *model.TableInfo, e return errors.Trace(exprChecker.err) } if len(exprChecker.columns) == 0 { - return errors.Trace(ErrWrongExprInPartitionFunc) + return errors.Trace(dbterror.ErrWrongExprInPartitionFunc) } return nil } @@ -741,7 +742,7 @@ func checkPartitionFuncValid(ctx sessionctx.Context, tblInfo *model.TableInfo, e // Based on mysql code to check whether field is valid, every time related type has check_valid_arguments_processor function. func checkResultOK(ok bool) error { if !ok { - return errors.Trace(ErrWrongExprInPartitionFunc) + return errors.Trace(dbterror.ErrWrongExprInPartitionFunc) } return nil @@ -762,10 +763,10 @@ func checkPartitionFuncType(ctx sessionctx.Context, expr ast.ExprNode, tblInfo * } if col, ok := expr.(*ast.ColumnNameExpr); ok { - return errors.Trace(ErrNotAllowedTypeInPartition.GenWithStackByArgs(col.Name.Name.L)) + return errors.Trace(dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(col.Name.Name.L)) } - return errors.Trace(ErrPartitionFuncNotAllowed.GenWithStackByArgs("PARTITION")) + return errors.Trace(dbterror.ErrPartitionFuncNotAllowed.GenWithStackByArgs("PARTITION")) } // checkRangePartitionValue checks whether `less than value` is strictly increasing for each partition. @@ -785,7 +786,7 @@ func checkRangePartitionValue(ctx sessionctx.Context, tblInfo *model.TableInfo) var prevRangeValue interface{} for i := 0; i < len(defs); i++ { if strings.EqualFold(defs[i].LessThan[0], partitionMaxValue) { - return errors.Trace(ErrPartitionMaxvalue) + return errors.Trace(dbterror.ErrPartitionMaxvalue) } currentRangeValue, fromExpr, err := getRangeValue(ctx, defs[i].LessThan[0], isUnsigned) @@ -804,11 +805,11 @@ func checkRangePartitionValue(ctx sessionctx.Context, tblInfo *model.TableInfo) if isUnsigned { if currentRangeValue.(uint64) <= prevRangeValue.(uint64) { - return errors.Trace(ErrRangeNotIncreasing) + return errors.Trace(dbterror.ErrRangeNotIncreasing) } } else { if currentRangeValue.(int64) <= prevRangeValue.(int64) { - return errors.Trace(ErrRangeNotIncreasing) + return errors.Trace(dbterror.ErrRangeNotIncreasing) } } prevRangeValue = currentRangeValue @@ -829,7 +830,7 @@ func checkListPartitionValue(ctx sessionctx.Context, tblInfo *model.TableInfo) e partitionsValuesMap := make(map[string]struct{}) for _, s := range expStr { if _, ok := partitionsValuesMap[s]; ok { - return errors.Trace(ErrMultipleDefConstInListPart) + return errors.Trace(dbterror.ErrMultipleDefConstInListPart) } partitionsValuesMap[s] = struct{}{} } @@ -853,7 +854,7 @@ func formatListPartitionValue(ctx sessionctx.Context, tblInfo *model.TableInfo) for _, colName := range pi.Columns { colInfo := findColumnByName(colName.L, tblInfo) if colInfo == nil { - return nil, errors.Trace(ErrFieldNotFoundPart) + return nil, errors.Trace(dbterror.ErrFieldNotFoundPart) } colTps = append(colTps, colInfo.FieldType.Clone()) cols = append(cols, colInfo) @@ -927,21 +928,21 @@ func getRangeValue(ctx sessionctx.Context, str string, unsigned bool) (interface return res, true, nil } } - return 0, false, ErrNotAllowedTypeInPartition.GenWithStackByArgs(str) + return 0, false, dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(str) } // checkDropTablePartition checks if the partition exists and does not allow deleting the last existing partition in the table. func checkDropTablePartition(meta *model.TableInfo, partLowerNames []string) error { pi := meta.Partition if pi.Type != model.PartitionTypeRange && pi.Type != model.PartitionTypeList { - return errOnlyOnRangeListPartition.GenWithStackByArgs("DROP") + return dbterror.ErrOnlyOnRangeListPartition.GenWithStackByArgs("DROP") } // To be error compatible with MySQL, we need to do this first! // see https://github.com/pingcap/tidb/issues/31681#issuecomment-1015536214 oldDefs := pi.Definitions if len(oldDefs) <= len(partLowerNames) { - return errors.Trace(ErrDropLastPartition) + return errors.Trace(dbterror.ErrDropLastPartition) } dupCheck := make(map[string]bool) @@ -950,7 +951,7 @@ func checkDropTablePartition(meta *model.TableInfo, partLowerNames []string) err for _, def := range oldDefs { if def.Name.L == pn { if _, ok := dupCheck[pn]; ok { - return errors.Trace(ErrDropPartitionNonExistent.GenWithStackByArgs("DROP")) + return errors.Trace(dbterror.ErrDropPartitionNonExistent.GenWithStackByArgs("DROP")) } dupCheck[pn] = true found = true @@ -958,7 +959,7 @@ func checkDropTablePartition(meta *model.TableInfo, partLowerNames []string) err } } if !found { - return errors.Trace(ErrDropPartitionNonExistent.GenWithStackByArgs("DROP")) + return errors.Trace(dbterror.ErrDropPartitionNonExistent.GenWithStackByArgs("DROP")) } } return nil @@ -1051,7 +1052,7 @@ func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) ( job.State = model.JobStateCancelled return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } @@ -1133,12 +1134,12 @@ func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) ( err = w.runReorgJob(t, reorgInfo, tbl.Meta(), d.lease, func() (dropIndexErr error) { defer tidbutil.Recover(metrics.LabelDDL, "onDropTablePartition", func() { - dropIndexErr = errCancelledDDLJob.GenWithStack("drop partition panic") + dropIndexErr = dbterror.ErrCancelledDDLJob.GenWithStack("drop partition panic") }, false) return w.cleanupGlobalIndexes(pt, physicalTableIDs, reorgInfo) }) if err != nil { - if errWaitReorgTimeout.Equal(err) { + if dbterror.ErrWaitReorgTimeout.Equal(err) { // if timeout, we should return, check for the owner and re-wait job done. return ver, nil } @@ -1161,7 +1162,7 @@ func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) ( // A background job will be created to delete old partition data. job.Args = []interface{}{physicalTableIDs} default: - err = ErrInvalidDDLState.GenWithStackByArgs("partition", job.SchemaState) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("partition", job.SchemaState) } return ver, errors.Trace(err) } @@ -1174,13 +1175,13 @@ func onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, e job.State = model.JobStateCancelled return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } pi := tblInfo.GetPartitionInfo() if pi == nil { - return ver, errors.Trace(ErrPartitionMgmtOnNonpartitioned) + return ver, errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } newPartitions := make([]model.PartitionDefinition, 0, len(oldIDs)) @@ -1206,7 +1207,7 @@ func onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, e // Clear the tiflash replica available status. if tblInfo.TiFlashReplica != nil { - e := infosync.ConfigureTiFlashPDForPartitions(true, &newPartitions, tblInfo.TiFlashReplica.Count, &tblInfo.TiFlashReplica.LocationLabels) + e := infosync.ConfigureTiFlashPDForPartitions(true, &newPartitions, tblInfo.TiFlashReplica.Count, &tblInfo.TiFlashReplica.LocationLabels, tblInfo.ID) failpoint.Inject("FailTiFlashTruncatePartition", func() { e = errors.New("enforced error") }) @@ -1313,7 +1314,7 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo return ver, errors.Trace(err) } - nt, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + nt, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } @@ -1328,7 +1329,7 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo if pt.State != model.StatePublic { job.State = model.JobStateCancelled - return ver, ErrInvalidDDLState.GenWithStack("table %s is not in public, but %s", pt.Name, pt.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStack("table %s is not in public, but %s", pt.Name, pt.State) } err = checkExchangePartition(pt, nt) @@ -1566,7 +1567,7 @@ func checkExchangePartitionRecordValidation(w *worker, pt *model.TableInfo, inde sql, paramList = buildCheckSQLForListColumnsPartition(pi, index, schemaName, tableName) } default: - return errUnsupportedPartitionType.GenWithStackByArgs(pt.Name.O) + return dbterror.ErrUnsupportedPartitionType.GenWithStackByArgs(pt.Name.O) } var ctx sessionctx.Context @@ -1582,7 +1583,7 @@ func checkExchangePartitionRecordValidation(w *worker, pt *model.TableInfo, inde } rowCount := len(rows) if rowCount != 0 { - return errors.Trace(ErrRowDoesNotMatchPartition) + return errors.Trace(dbterror.ErrRowDoesNotMatchPartition) } return nil } @@ -1667,14 +1668,14 @@ func getInValues(pi *model.PartitionInfo, index int) []string { func checkAddPartitionTooManyPartitions(piDefs uint64) error { if piDefs > uint64(PartitionCountLimit) { - return errors.Trace(ErrTooManyPartitions) + return errors.Trace(dbterror.ErrTooManyPartitions) } return nil } func checkAddPartitionOnTemporaryMode(tbInfo *model.TableInfo) error { if tbInfo.Partition != nil && tbInfo.TempTableType != model.TempTableNone { - return ErrPartitionNoTemporary + return dbterror.ErrPartitionNoTemporary } return nil } @@ -1686,7 +1687,7 @@ func checkPartitionColumnsUnique(tbInfo *model.TableInfo) error { var columnsMap = make(map[string]struct{}) for _, col := range tbInfo.Partition.Columns { if _, ok := columnsMap[col.L]; ok { - return ErrSameNamePartitionField.GenWithStackByArgs(col.L) + return dbterror.ErrSameNamePartitionField.GenWithStackByArgs(col.L) } columnsMap[col.L] = struct{}{} } @@ -1751,10 +1752,10 @@ func checkPartitioningKeysConstraints(sctx sessionctx.Context, s *ast.CreateTabl for _, index := range tblInfo.Indices { if index.Unique && !checkUniqueKeyIncludePartKey(partCols, index.Columns) { if index.Primary { - return ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("PRIMARY KEY") + return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("PRIMARY KEY") } if !config.GetGlobalConfig().EnableGlobalIndex { - return ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("UNIQUE INDEX") + return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("UNIQUE INDEX") } } } @@ -1765,7 +1766,7 @@ func checkPartitioningKeysConstraints(sctx sessionctx.Context, s *ast.CreateTabl Length: types.UnspecifiedLength, }} if !checkUniqueKeyIncludePartKey(partCols, indexCols) { - return ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("PRIMARY KEY") + return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("PRIMARY KEY") } } return nil @@ -1819,7 +1820,7 @@ func (cne *columnNameExtractor) Leave(node ast.Node) (ast.Node, bool) { cne.extractedColumns = append(cne.extractedColumns, info) return node, true } - cne.err = ErrBadField.GenWithStackByArgs(c.Name.Name.O, "expression") + cne.err = dbterror.ErrBadField.GenWithStackByArgs(c.Name.Name.O, "expression") return nil, false } return node, true @@ -1970,7 +1971,7 @@ func (p *partitionExprChecker) extractColumns(_ sessionctx.Context, _ *model.Tab } colInfo := findColumnByName(columnNameExpr.Name.Name.L, p.tbInfo) if colInfo == nil { - return errors.Trace(ErrBadField.GenWithStackByArgs(columnNameExpr.Name.Name.L, "partition function")) + return errors.Trace(dbterror.ErrBadField.GenWithStackByArgs(columnNameExpr.Name.Name.L, "partition function")) } p.columns = append(p.columns, colInfo) @@ -1995,7 +1996,7 @@ func checkPartitionExprAllowed(_ sessionctx.Context, tb *model.TableInfo, e ast. *ast.TimeUnitExpr: return nil } - return errors.Trace(ErrPartitionFunctionIsNotAllowed) + return errors.Trace(dbterror.ErrPartitionFunctionIsNotAllowed) } func checkPartitionExprArgs(_ sessionctx.Context, tblInfo *model.TableInfo, e ast.ExprNode) error { @@ -2027,7 +2028,7 @@ func checkPartitionExprArgs(_ sessionctx.Context, tblInfo *model.TableInfo, e as ast.TimeUnitSecond, ast.TimeUnitMicrosecond, ast.TimeUnitHourMicrosecond, ast.TimeUnitMinuteMicrosecond, ast.TimeUnitSecondMicrosecond: return errors.Trace(checkResultOK(hasTimeArgs(argsType...))) default: - return errors.Trace(ErrWrongExprInPartitionFunc) + return errors.Trace(dbterror.ErrWrongExprInPartitionFunc) } case ast.DateDiff: return errors.Trace(checkResultOK(slice.AllOf(argsType, func(i int) bool { @@ -2037,7 +2038,7 @@ func checkPartitionExprArgs(_ sessionctx.Context, tblInfo *model.TableInfo, e as case ast.Abs, ast.Ceiling, ast.Floor, ast.Mod: has := hasTimestampArgs(argsType...) if has { - return errors.Trace(ErrWrongExprInPartitionFunc) + return errors.Trace(dbterror.ErrWrongExprInPartitionFunc) } } return nil @@ -2052,7 +2053,7 @@ func collectArgsType(tblInfo *model.TableInfo, exprs ...ast.ExprNode) ([]byte, e } columnInfo := findColumnByName(col.Name.Name.L, tblInfo) if columnInfo == nil { - return nil, errors.Trace(ErrBadField.GenWithStackByArgs(col.Name.Name.L, "partition function")) + return nil, errors.Trace(dbterror.ErrBadField.GenWithStackByArgs(col.Name.Name.L, "partition function")) } ts = append(ts, columnInfo.Tp) } @@ -2090,7 +2091,7 @@ func checkNoTimestampArgs(tbInfo *model.TableInfo, exprs ...ast.ExprNode) error return err } if hasTimestampArgs(argsType...) { - return errors.Trace(ErrWrongExprInPartitionFunc) + return errors.Trace(dbterror.ErrWrongExprInPartitionFunc) } return nil } diff --git a/ddl/partition_test.go b/ddl/partition_test.go index e2456a3568cc7..4484dcb07dde8 100644 --- a/ddl/partition_test.go +++ b/ddl/partition_test.go @@ -21,15 +21,16 @@ import ( "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/types" "github.com/stretchr/testify/require" ) -func ExportTestDropAndTruncatePartition(t *testing.T) { - store := createMockStore(t) +func TestDropAndTruncatePartition(t *testing.T) { + store, err := mockstore.NewMockStore() + require.NoError(t, err) defer func() { - err := store.Close() - require.NoError(t, err) + require.NoError(t, store.Close()) }() d, err := testNewDDLAndStart( context.Background(), @@ -38,19 +39,16 @@ func ExportTestDropAndTruncatePartition(t *testing.T) { ) require.NoError(t, err) defer func() { - err := d.Stop() - require.NoError(t, err) + require.NoError(t, d.Stop()) }() dbInfo, err := testSchemaInfo(d, "test_partition") require.NoError(t, err) - testCreateSchemaT(t, testNewContext(d), d, dbInfo) + testCreateSchema(t, testNewContext(d), d, dbInfo) // generate 5 partition in tableInfo. tblInfo, partIDs := buildTableInfoWithPartition(t, d) ctx := testNewContext(d) - testCreateTableT(t, ctx, d, dbInfo, tblInfo) - + testCreateTable(t, ctx, d, dbInfo, tblInfo) testDropPartition(t, ctx, d, dbInfo, tblInfo, []string{"p0", "p1"}) - testTruncatePartition(t, ctx, d, dbInfo, tblInfo, []int64{partIDs[3], partIDs[4]}) } @@ -122,10 +120,11 @@ func buildDropPartitionJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, partN func testDropPartition(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, partNames []string) *model.Job { job := buildDropPartitionJob(dbInfo, tblInfo, partNames) - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) return job } @@ -141,9 +140,10 @@ func buildTruncatePartitionJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, p func testTruncatePartition(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, pids []int64) *model.Job { job := buildTruncatePartitionJob(dbInfo, tblInfo, pids) - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) return job } diff --git a/ddl/placement_policy.go b/ddl/placement_policy.go index 23de48225d285..601b382cbeadf 100644 --- a/ddl/placement_policy.go +++ b/ddl/placement_policy.go @@ -24,25 +24,52 @@ import ( "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/util/dbterror" ) func onCreatePlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { policyInfo := &model.PolicyInfo{} - if err := job.DecodeArgs(policyInfo); err != nil { + var orReplace bool + if err := job.DecodeArgs(policyInfo, &orReplace); err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } policyInfo.State = model.StateNone - err := checkPlacementPolicyNotExistAndCancelExistJob(d, t, job, policyInfo) - if err != nil { + if err := checkPolicyValidation(policyInfo.PlacementSettings); err != nil { + job.State = model.JobStateCancelled return ver, errors.Trace(err) } - err = checkPolicyValidation(policyInfo.PlacementSettings) + + existPolicy, err := getPlacementPolicyByName(d, t, policyInfo.Name) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } + + if existPolicy != nil { + if !orReplace { + job.State = model.JobStateCancelled + return ver, infoschema.ErrPlacementPolicyExists.GenWithStackByArgs(existPolicy.Name) + } + + replacePolicy := existPolicy.Clone() + replacePolicy.PlacementSettings = policyInfo.PlacementSettings + if err = updateExistPlacementPolicy(t, replacePolicy); err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + + job.SchemaID = replacePolicy.ID + ver, err = updateSchemaVersion(t, job) + if err != nil { + return ver, errors.Trace(err) + } + // Finish this job. + job.FinishDBJob(model.JobStateDone, model.StatePublic, ver, nil) + return ver, nil + } + switch policyInfo.State { case model.StateNone: // none -> public @@ -62,7 +89,7 @@ func onCreatePlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64 return ver, nil default: // We can't enter here. - return ver, ErrInvalidDDLState.GenWithStackByArgs("policy", policyInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("policy", policyInfo.State) } } @@ -84,33 +111,32 @@ func getPolicyInfo(t *meta.Meta, policyID int64) (*model.PolicyInfo, error) { return policy, nil } -func checkPlacementPolicyNotExistAndCancelExistJob(d *ddlCtx, t *meta.Meta, job *model.Job, info *model.PolicyInfo) error { +func getPlacementPolicyByName(d *ddlCtx, t *meta.Meta, policyName model.CIStr) (*model.PolicyInfo, error) { currVer, err := t.GetSchemaVersion() if err != nil { - return err + return nil, err } + is := d.infoCache.GetLatest() if is.SchemaMetaVersion() == currVer { // Use cached policy. - _, ok := is.PolicyByName(info.Name) + policy, ok := is.PolicyByName(policyName) if ok { - job.State = model.JobStateCancelled - return infoschema.ErrPlacementPolicyExists.GenWithStackByArgs(info.Name) + return policy, nil } - return nil + return nil, nil } // Check in meta directly. policies, err := t.ListPolicies() if err != nil { - return errors.Trace(err) + return nil, errors.Trace(err) } for _, policy := range policies { - if policy.Name.L == info.Name.L { - job.State = model.JobStateCancelled - return infoschema.ErrPlacementPolicyExists.GenWithStackByArgs(info.Name) + if policy.Name.L == policyName.L { + return policy, nil } } - return nil + return nil, nil } func checkPlacementPolicyExistAndCancelNonExistJob(t *meta.Meta, job *model.Job, policyID int64) (*model.PolicyInfo, error) { @@ -158,7 +184,7 @@ func onDropPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err = checkPlacementPolicyNotInUse(d, t, policyInfo) if err != nil { - if ErrPlacementPolicyInUse.Equal(err) { + if dbterror.ErrPlacementPolicyInUse.Equal(err) { job.State = model.JobStateCancelled } return ver, errors.Trace(err) @@ -203,12 +229,12 @@ func onDropPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, // Finish this job. By now policy don't consider the binlog sync. job.FinishDBJob(model.JobStateDone, model.StateNone, ver, nil) default: - err = ErrInvalidDDLState.GenWithStackByArgs("policy", policyInfo.State) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("policy", policyInfo.State) } return ver, errors.Trace(err) } -func onAlterPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onAlterPlacementPolicy(t *meta.Meta, job *model.Job) (ver int64, _ error) { alterPolicy := &model.PolicyInfo{} if err := job.DecodeArgs(alterPolicy); err != nil { job.State = model.JobStateCancelled @@ -225,24 +251,40 @@ func onAlterPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err = checkPolicyValidation(newPolicyInfo.PlacementSettings) if err != nil { + return ver, errors.Trace(err) + } + + if err = updateExistPlacementPolicy(t, &newPolicyInfo); err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } - err = t.UpdatePolicy(&newPolicyInfo) + ver, err = updateSchemaVersion(t, job) if err != nil { return ver, errors.Trace(err) } - dbIDs, partIDs, tblInfos, err := getPlacementPolicyDependedObjectsIDs(t, oldPolicy) + // Finish this job. + job.FinishDBJob(model.JobStateDone, model.StatePublic, ver, nil) + return ver, nil +} + +func updateExistPlacementPolicy(t *meta.Meta, policy *model.PolicyInfo) error { + err := t.UpdatePolicy(policy) + if err != nil { + return errors.Trace(err) + } + + dbIDs, partIDs, tblInfos, err := getPlacementPolicyDependedObjectsIDs(t, policy) if err != nil { - return ver, errors.Trace(err) + return errors.Trace(err) } + if len(dbIDs)+len(tblInfos)+len(partIDs) != 0 { // build bundle from new placement policy. - bundle, err := placement.NewBundleFromOptions(newPolicyInfo.PlacementSettings) + bundle, err := placement.NewBundleFromOptions(policy.PlacementSettings) if err != nil { - return ver, errors.Trace(err) + return errors.Trace(err) } // Do the http request only when the rules is existed. bundles := make([]*placement.Bundle, 0, len(tblInfos)+len(partIDs)) @@ -264,19 +306,11 @@ func onAlterPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, } err = infosync.PutRuleBundlesWithDefaultRetry(context.TODO(), bundles) if err != nil { - job.State = model.JobStateCancelled - return ver, errors.Wrapf(err, "failed to notify PD the placement rules") + return errors.Wrapf(err, "failed to notify PD the placement rules") } } - ver, err = updateSchemaVersion(t, job) - if err != nil { - return ver, errors.Trace(err) - } - - // Finish this job. - job.FinishDBJob(model.JobStateDone, model.StatePublic, ver, nil) - return ver, nil + return nil } func checkPlacementPolicyNotInUse(d *ddlCtx, t *meta.Meta, policy *model.PolicyInfo) error { @@ -295,7 +329,7 @@ func checkPlacementPolicyNotInUse(d *ddlCtx, t *meta.Meta, policy *model.PolicyI func checkPlacementPolicyNotInUseFromInfoSchema(is infoschema.InfoSchema, policy *model.PolicyInfo) error { for _, dbInfo := range is.AllSchemas() { if ref := dbInfo.PlacementPolicyRef; ref != nil && ref.ID == policy.ID { - return ErrPlacementPolicyInUse.GenWithStackByArgs(policy.Name) + return dbterror.ErrPlacementPolicyInUse.GenWithStackByArgs(policy.Name) } for _, tbl := range is.SchemaTables(dbInfo.Name) { @@ -349,7 +383,7 @@ func checkPlacementPolicyNotInUseFromMeta(t *meta.Meta, policy *model.PolicyInfo for _, dbInfo := range schemas { if ref := dbInfo.PlacementPolicyRef; ref != nil && ref.ID == policy.ID { - return ErrPlacementPolicyInUse.GenWithStackByArgs(policy.Name) + return dbterror.ErrPlacementPolicyInUse.GenWithStackByArgs(policy.Name) } tables, err := t.ListTables(dbInfo.ID) @@ -368,13 +402,13 @@ func checkPlacementPolicyNotInUseFromMeta(t *meta.Meta, policy *model.PolicyInfo func checkPlacementPolicyNotUsedByTable(tblInfo *model.TableInfo, policy *model.PolicyInfo) error { if ref := tblInfo.PlacementPolicyRef; ref != nil && ref.ID == policy.ID { - return ErrPlacementPolicyInUse.GenWithStackByArgs(policy.Name) + return dbterror.ErrPlacementPolicyInUse.GenWithStackByArgs(policy.Name) } if tblInfo.Partition != nil { for _, partition := range tblInfo.Partition.Definitions { if ref := partition.PlacementPolicyRef; ref != nil && ref.ID == policy.ID { - return ErrPlacementPolicyInUse.GenWithStackByArgs(policy.Name) + return dbterror.ErrPlacementPolicyInUse.GenWithStackByArgs(policy.Name) } } } diff --git a/ddl/placement_policy_ddl_test.go b/ddl/placement_policy_ddl_test.go index 146f77f89febd..8f12a44a5bb90 100644 --- a/ddl/placement_policy_ddl_test.go +++ b/ddl/placement_policy_ddl_test.go @@ -22,6 +22,7 @@ import ( "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" ) @@ -43,7 +44,8 @@ func testCreatePlacementPolicy(t *testing.T, ctx sessionctx.Context, d *ddl, pol BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{policyInfo}, } - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) v := getSchemaVer(t, ctx) @@ -132,10 +134,10 @@ func TestPlacementPolicyInUse(t *testing.T) { is := builder.Build() for _, policy := range []*model.PolicyInfo{p1, p2, p4, p5} { - require.True(t, ErrPlacementPolicyInUse.Equal(checkPlacementPolicyNotInUseFromInfoSchema(is, policy))) + require.True(t, dbterror.ErrPlacementPolicyInUse.Equal(checkPlacementPolicyNotInUseFromInfoSchema(is, policy))) require.NoError(t, kv.RunInNewTxn(ctx, sctx.GetStore(), false, func(ctx context.Context, txn kv.Transaction) error { m := meta.NewMeta(txn) - require.True(t, ErrPlacementPolicyInUse.Equal(checkPlacementPolicyNotInUseFromMeta(m, policy))) + require.True(t, dbterror.ErrPlacementPolicyInUse.Equal(checkPlacementPolicyNotInUseFromMeta(m, policy))) return nil })) } diff --git a/ddl/placement_policy_test.go b/ddl/placement_policy_test.go index 6fc7f5cb9cc17..8a70a0e2cc1c0 100644 --- a/ddl/placement_policy_test.go +++ b/ddl/placement_policy_test.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/ddl/placement" + "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/domain/infosync" mysql "github.com/pingcap/tidb/errno" @@ -35,6 +36,7 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/gcworker" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/stretchr/testify/require" ) @@ -191,6 +193,102 @@ func TestPlacementPolicy(t *testing.T) { // TODO: privilege check & constraint syntax check. } +func TestCreatePlacementPolicyWithInfo(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + // clearAllBundles(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists tp") + tk.MustExec("drop placement policy if exists p") + tk.MustExec("create placement policy p " + + "LEARNERS=1 " + + "LEARNER_CONSTRAINTS=\"[+region=cn-west-1]\" " + + "FOLLOWERS=3 " + + "FOLLOWER_CONSTRAINTS=\"[+disk=ssd]\"") + defer tk.MustExec("drop placement policy if exists p") + defer tk.MustExec("drop placement policy if exists p2") + tk.MustExec(`CREATE TABLE tp(id int) placement policy p PARTITION BY RANGE (id) ( +PARTITION p0 VALUES LESS THAN (100) PLACEMENT POLICY p, +PARTITION p1 VALUES LESS THAN (1000)) +`) + defer tk.MustExec("drop table if exists tp") + + oldPolicy, ok := dom.InfoSchema().PolicyByName(model.NewCIStr("p")) + oldPolicy = oldPolicy.Clone() + require.True(t, ok) + + // create a non exist policy + for _, onExist := range []ddl.OnExist{ddl.OnExistReplace, ddl.OnExistIgnore, ddl.OnExistError} { + newPolicy := oldPolicy.Clone() + newPolicy.Name = model.NewCIStr("p2") + newPolicy.Followers = 2 + newPolicy.LearnerConstraints = "[+zone=z2]" + tk.Session().SetValue(sessionctx.QueryString, "skip") + err := dom.DDL().CreatePlacementPolicyWithInfo(tk.Session(), newPolicy.Clone(), onExist) + require.NoError(t, err) + // old policy should not be changed + found, ok := dom.InfoSchema().PolicyByName(model.NewCIStr("p")) + require.True(t, ok) + checkPolicyEquals(t, oldPolicy, found) + checkExistTableBundlesInPD(t, dom, "test", "tp") + + // new created policy + found, ok = dom.InfoSchema().PolicyByName(model.NewCIStr("p2")) + require.True(t, ok) + // ID of the created policy should be reassigned + require.NotEqual(t, newPolicy.ID, found.ID) + newPolicy.ID = found.ID + checkPolicyEquals(t, newPolicy, found) + tk.MustExec("drop placement policy if exists p2") + } + + // create same name policy with on exists error + newPolicy := oldPolicy.Clone() + newPolicy.ID = oldPolicy.ID + 1 + tk.Session().SetValue(sessionctx.QueryString, "skip") + err := dom.DDL().CreatePlacementPolicyWithInfo(tk.Session(), newPolicy.Clone(), ddl.OnExistError) + require.Error(t, err) + require.True(t, infoschema.ErrPlacementPolicyExists.Equal(err)) + found, ok := dom.InfoSchema().PolicyByName(model.NewCIStr("p")) + require.True(t, ok) + checkPolicyEquals(t, oldPolicy, found) + checkExistTableBundlesInPD(t, dom, "test", "tp") + + // create same name policy with on exist ignore + newPolicy = oldPolicy.Clone() + newPolicy.ID = oldPolicy.ID + 1 + tk.Session().SetValue(sessionctx.QueryString, "skip") + err = dom.DDL().CreatePlacementPolicyWithInfo(tk.Session(), newPolicy.Clone(), ddl.OnExistIgnore) + require.NoError(t, err) + found, ok = dom.InfoSchema().PolicyByName(model.NewCIStr("p")) + require.True(t, ok) + checkPolicyEquals(t, oldPolicy, found) + checkExistTableBundlesInPD(t, dom, "test", "tp") + + // create same name policy with on exist replace + newPolicy = oldPolicy.Clone() + newPolicy.ID = oldPolicy.ID + 1 + newPolicy.Followers = 1 + newPolicy.LearnerConstraints = "[+zone=z1]" + tk.Session().SetValue(sessionctx.QueryString, "skip") + err = dom.DDL().CreatePlacementPolicyWithInfo(tk.Session(), newPolicy.Clone(), ddl.OnExistReplace) + require.NoError(t, err) + found, ok = dom.InfoSchema().PolicyByName(model.NewCIStr("p")) + require.True(t, ok) + // when replace a policy the old policy's id should not be changed + newPolicy.ID = oldPolicy.ID + checkPolicyEquals(t, newPolicy, found) + checkExistTableBundlesInPD(t, dom, "test", "tp") +} + +func checkPolicyEquals(t *testing.T, expected *model.PolicyInfo, actual *model.PolicyInfo) { + require.Equal(t, expected.ID, actual.ID) + require.Equal(t, expected.Name, actual.Name) + require.Equal(t, *expected.PlacementSettings, *actual.PlacementSettings) + require.Equal(t, expected.State, actual.State) +} + func TestPlacementFollowers(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -354,20 +452,29 @@ func TestResetSchemaPlacement(t *testing.T) { } func TestCreateOrReplacePlacementPolicy(t *testing.T) { - store, clean := testkit.CreateMockStore(t) + store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop placement policy if exists x") + tk.MustExec("drop table if exists tp") // If the policy does not exist, CREATE OR REPLACE PLACEMENT POLICY is the same as CREATE PLACEMENT POLICY tk.MustExec("create or replace placement policy x primary_region=\"cn-east-1\" regions=\"cn-east-1,cn-east\"") defer tk.MustExec("drop placement policy if exists x") tk.MustQuery("show create placement policy x").Check(testkit.Rows("x CREATE PLACEMENT POLICY `x` PRIMARY_REGION=\"cn-east-1\" REGIONS=\"cn-east-1,cn-east\"")) + // create a table refers the policy + tk.MustExec(`CREATE TABLE tp(id int) placement policy x PARTITION BY RANGE (id) ( +PARTITION p0 VALUES LESS THAN (100) PLACEMENT POLICY x, +PARTITION p1 VALUES LESS THAN (1000)) +`) + defer tk.MustExec("drop table if exists tp") + // If the policy does exist, CREATE OR REPLACE PLACEMENT_POLICY is the same as ALTER PLACEMENT POLICY. tk.MustExec("create or replace placement policy x primary_region=\"cn-east-1\" regions=\"cn-east-1\"") tk.MustQuery("show create placement policy x").Check(testkit.Rows("x CREATE PLACEMENT POLICY `x` PRIMARY_REGION=\"cn-east-1\" REGIONS=\"cn-east-1\"")) + checkExistTableBundlesInPD(t, dom, "test", "tp") // Cannot be used together with the if not exists clause. Ref: https://mariadb.com/kb/en/create-view tk.MustGetErrMsg("create or replace placement policy if not exists x primary_region=\"cn-east-1\" regions=\"cn-east-1\"", "[ddl:1221]Incorrect usage of OR REPLACE and IF NOT EXISTS") @@ -501,7 +608,7 @@ func TestCreateTableWithPlacementPolicy(t *testing.T) { require.Equal(t, "y", policyY.Name.L) require.Equal(t, true, policyY.ID != 0) - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") require.NotNil(t, tbl) require.NotNil(t, tbl.Meta().PlacementPolicyRef) require.Equal(t, "x", tbl.Meta().PlacementPolicyRef.Name.L) @@ -509,7 +616,7 @@ func TestCreateTableWithPlacementPolicy(t *testing.T) { tk.MustExec("drop table if exists t") checkPartitionTableFunc := func(tblName string) { - tbl = tk.GetTableByName("test", tblName) + tbl = external.GetTableByName(t, tk, "test", tblName) require.NotNil(t, tbl) require.NotNil(t, tbl.Meta().PlacementPolicyRef) require.Equal(t, "x", tbl.Meta().PlacementPolicyRef.Name.L) @@ -536,7 +643,7 @@ func TestCreateTableWithPlacementPolicy(t *testing.T) { checkPartitionTableFunc("t_list_p") tk.MustExec("drop table if exists t_list_p") - tbl = tk.GetTableByName("test", "t_hash_p") + tbl = external.GetTableByName(t, tk, "test", "t_hash_p") require.NotNil(t, tbl) require.NotNil(t, tbl.Meta().PlacementPolicyRef) require.Equal(t, "x", tbl.Meta().PlacementPolicyRef.Name.L) @@ -597,6 +704,7 @@ func TestCreateTableWithInfoPlacement(t *testing.T) { tk.MustExec("alter table t1 placement policy='default'") tk.MustExec("drop placement policy p1") tk.MustExec("create placement policy p1 followers=2") + tk.Session().SetValue(sessionctx.QueryString, "skip") require.Nil(t, dom.DDL().CreateTableWithInfo(tk.Session(), model.NewCIStr("test2"), tbl, ddl.OnExistError)) tk.MustQuery("show create table t1").Check(testkit.Rows("t1 CREATE TABLE `t1` (\n" + " `a` int(11) DEFAULT NULL\n" + @@ -617,6 +725,7 @@ func TestCreateTableWithInfoPlacement(t *testing.T) { // Test policy not exists tbl2.Name = model.NewCIStr("t3") tbl2.PlacementPolicyRef.Name = model.NewCIStr("pxx") + tk.Session().SetValue(sessionctx.QueryString, "skip") err = dom.DDL().CreateTableWithInfo(tk.Session(), model.NewCIStr("test2"), tbl2, ddl.OnExistError) require.Equal(t, "[schema:8239]Unknown placement policy 'pxx'", err.Error()) } @@ -648,6 +757,7 @@ func TestCreateSchemaWithInfoPlacement(t *testing.T) { tk.MustExec("alter database test2 placement policy='default'") tk.MustExec("drop placement policy p1") tk.MustExec("create placement policy p1 followers=2") + tk.Session().SetValue(sessionctx.QueryString, "skip") require.Nil(t, dom.DDL().CreateSchemaWithInfo(tk.Session(), db2, ddl.OnExistError)) tk.MustQuery("show create database test2").Check(testkit.Rows("test2 CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET utf8mb4 */")) tk.MustQuery("show create database test3").Check(testkit.Rows("test3 CREATE DATABASE `test3` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ /*T![placement] PLACEMENT POLICY=`p1` */")) @@ -664,6 +774,7 @@ func TestCreateSchemaWithInfoPlacement(t *testing.T) { // Test policy not exists db2.Name = model.NewCIStr("test4") db2.PlacementPolicyRef.Name = model.NewCIStr("p2") + tk.Session().SetValue(sessionctx.QueryString, "skip") err := dom.DDL().CreateSchemaWithInfo(tk.Session(), db2, ddl.OnExistError) require.Equal(t, "[schema:8239]Unknown placement policy 'p2'", err.Error()) } @@ -789,7 +900,7 @@ func TestPolicyCacheAndPolicyDependency(t *testing.T) { tk.MustExec("create table t (a int) placement policy \"x\"") defer tk.MustExec("drop table if exists t") tk.MustQuery("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, TIDB_PLACEMENT_POLICY_NAME FROM information_schema.Tables WHERE TABLE_SCHEMA='test' AND TABLE_NAME = 't'").Check(testkit.Rows(`def test t BASE TABLE x`)) - tbl := tk.GetTableByName("test", "t") + tbl := external.GetTableByName(t, tk, "test", "t") // Test policy dependency cache. dependencies := testGetPolicyDependency(store, "x") @@ -801,7 +912,7 @@ func TestPolicyCacheAndPolicyDependency(t *testing.T) { tk.MustExec("create table t2 (a int) placement policy \"x\"") defer tk.MustExec("drop table if exists t2") tk.MustQuery("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, TIDB_PLACEMENT_POLICY_NAME FROM information_schema.Tables WHERE TABLE_SCHEMA='test' AND TABLE_NAME = 't'").Check(testkit.Rows(`def test t BASE TABLE x`)) - tbl2 := tk.GetTableByName("test", "t2") + tbl2 := external.GetTableByName(t, tk, "test", "t2") dependencies = testGetPolicyDependency(store, "x") require.NotNil(t, dependencies) @@ -1064,12 +1175,12 @@ func TestDropDatabaseGCPlacement(t *testing.T) { defer func(originGC bool) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed")) if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) - ddl.EmulatorGCDisable() + }(util.IsEmulatorGCEnable()) + util.EmulatorGCDisable() store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() tk := testkit.NewTestKit(t, store) @@ -1124,12 +1235,12 @@ func TestDropTableGCPlacement(t *testing.T) { defer func(originGC bool) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed")) if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) - ddl.EmulatorGCDisable() + }(util.IsEmulatorGCEnable()) + util.EmulatorGCDisable() store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() tk := testkit.NewTestKit(t, store) @@ -1252,12 +1363,12 @@ func TestDropTablePartitionGCPlacement(t *testing.T) { defer func(originGC bool) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed")) if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) - ddl.EmulatorGCDisable() + }(util.IsEmulatorGCEnable()) + util.EmulatorGCDisable() store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() tk := testkit.NewTestKit(t, store) @@ -1562,12 +1673,12 @@ func TestTruncateTableGCWithPlacement(t *testing.T) { defer func(originGC bool) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed")) if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) - ddl.EmulatorGCDisable() + }(util.IsEmulatorGCEnable()) + util.EmulatorGCDisable() store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() tk := testkit.NewTestKit(t, store) @@ -1697,12 +1808,12 @@ func TestTruncatePartitionGCWithPlacement(t *testing.T) { defer func(originGC bool) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed")) if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) - ddl.EmulatorGCDisable() + }(util.IsEmulatorGCEnable()) + util.EmulatorGCDisable() store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() tk := testkit.NewTestKit(t, store) @@ -1990,12 +2101,12 @@ func TestRecoverTableWithPlacementPolicy(t *testing.T) { defer func(originGC bool) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/ignoreDeleteRangeFailed")) if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) - ddl.EmulatorGCDisable() + }(util.IsEmulatorGCEnable()) + util.EmulatorGCDisable() store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() tk := testkit.NewTestKit(t, store) diff --git a/ddl/placement_sql_test.go b/ddl/placement_sql_test.go index ade5f33fdf2a7..c7df990a2094b 100644 --- a/ddl/placement_sql_test.go +++ b/ddl/placement_sql_test.go @@ -25,8 +25,9 @@ import ( "github.com/pingcap/tidb/domain" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/testkit" - "github.com/pingcap/tidb/util/testutil" + "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" ) @@ -316,13 +317,13 @@ func TestAlterDBPlacement(t *testing.T) { // Test for information_schema.schemata tk.MustQuery("SELECT CATALOG_NAME, SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, TIDB_PLACEMENT_POLICY_NAME FROM information_schema.schemata WHERE SCHEMA_NAME='TestAlterDB'").Check(testkit.Rows(`def TestAlterDB utf8mb4 utf8mb4_bin alter_x`)) // Test for Show Create Database - tk.MustQuery(`show create database TestAlterDB`).Check(testutil.RowsWithSep("|", + tk.MustQuery(`show create database TestAlterDB`).Check(testkit.RowsWithSep("|", "TestAlterDB CREATE DATABASE `TestAlterDB` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ "+ "/*T![placement] PLACEMENT POLICY=`alter_x` */", )) // Test for Alter Placement Policy affect table created. tk.MustExec("create table t(a int);") - tk.MustQuery(`show create table t`).Check(testutil.RowsWithSep("|", + tk.MustQuery(`show create table t`).Check(testkit.RowsWithSep("|", "t CREATE TABLE `t` (\n"+ " `a` int(11) DEFAULT NULL\n"+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin "+ @@ -332,13 +333,13 @@ func TestAlterDBPlacement(t *testing.T) { // Test for Alter Default Placement Policy, And will not update the old table options. tk.MustExec("ALTER DATABASE TestAlterDB DEFAULT PLACEMENT POLICY=`alter_y`;") tk.MustExec("create table t2(a int);") - tk.MustQuery(`show create table t`).Check(testutil.RowsWithSep("|", + tk.MustQuery(`show create table t`).Check(testkit.RowsWithSep("|", "t CREATE TABLE `t` (\n"+ " `a` int(11) DEFAULT NULL\n"+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin "+ "/*T![placement] PLACEMENT POLICY=`alter_x` */", )) - tk.MustQuery(`show create table t2`).Check(testutil.RowsWithSep("|", + tk.MustQuery(`show create table t2`).Check(testkit.RowsWithSep("|", "t2 CREATE TABLE `t2` (\n"+ " `a` int(11) DEFAULT NULL\n"+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin "+ @@ -353,7 +354,7 @@ func TestAlterDBPlacement(t *testing.T) { // Test for Alter Placement Rule affect table created. tk.MustExec("create table t3(a int);") - tk.MustQuery(`show create table t3`).Check(testutil.RowsWithSep("|", + tk.MustQuery(`show create table t3`).Check(testkit.RowsWithSep("|", "t3 CREATE TABLE `t3` (\n"+ " `a` int(11) DEFAULT NULL\n"+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin "+ @@ -363,7 +364,7 @@ func TestAlterDBPlacement(t *testing.T) { // Test for override default option tk.MustExec("create table t4(a int) PLACEMENT POLICY=\"alter_y\";") - tk.MustQuery(`show create table t4`).Check(testutil.RowsWithSep("|", + tk.MustQuery(`show create table t4`).Check(testkit.RowsWithSep("|", "t4 CREATE TABLE `t4` (\n"+ " `a` int(11) DEFAULT NULL\n"+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin "+ @@ -373,7 +374,7 @@ func TestAlterDBPlacement(t *testing.T) { // Test alter to another policy tk.MustExec("ALTER DATABASE TestAlterDB PLACEMENT POLICY=`alter_y`;") - tk.MustQuery(`show create database TestAlterDB`).Check(testutil.RowsWithSep("|", + tk.MustQuery(`show create database TestAlterDB`).Check(testkit.RowsWithSep("|", "TestAlterDB CREATE DATABASE `TestAlterDB` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ "+ "/*T![placement] PLACEMENT POLICY=`alter_y` */", )) @@ -411,6 +412,9 @@ func TestPlacementMode(t *testing.T) { defer tk.MustExec("drop table if exists t2") tk.MustQuery("show warnings").Check(testkit.Rows()) + existPolicy, ok := dom.InfoSchema().PolicyByName(model.NewCIStr("p1")) + require.True(t, ok) + // invalid values err := tk.ExecToErr("set tidb_placement_mode='aaa'") require.EqualError(t, err, "[variable:1231]Variable 'tidb_placement_mode' can't be set to the value of 'aaa'") @@ -429,6 +433,31 @@ func TestPlacementMode(t *testing.T) { tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Placement is ignored when TIDB_PLACEMENT_MODE is 'IGNORE'")) tk.MustQuery("show placement where target='POLICY p3'").Check(testkit.Rows()) + // create placement policy with info in ignore mode (policy name exists) + newPolicy := existPolicy.Clone() + newPolicy.Followers = 8 + tk.Session().SetValue(sessionctx.QueryString, "skip") + err = dom.DDL().CreatePlacementPolicyWithInfo(tk.Session(), newPolicy.Clone(), ddl.OnExistError) + require.NoError(t, err) + tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Placement is ignored when TIDB_PLACEMENT_MODE is 'IGNORE'")) + tk.MustQuery("show placement where target='POLICY p1'").Check(testkit.Rows("POLICY p1 FOLLOWERS=4 NULL")) + + tk.Session().SetValue(sessionctx.QueryString, "skip") + err = dom.DDL().CreatePlacementPolicyWithInfo(tk.Session(), newPolicy.Clone(), ddl.OnExistReplace) + require.NoError(t, err) + tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Placement is ignored when TIDB_PLACEMENT_MODE is 'IGNORE'")) + tk.MustQuery("show placement where target='POLICY p1'").Check(testkit.Rows("POLICY p1 FOLLOWERS=4 NULL")) + + // create placement policy in ignore mode (policy name not exists) + newPolicy = existPolicy.Clone() + newPolicy.Name = model.NewCIStr("p3") + newPolicy.Followers = 8 + tk.Session().SetValue(sessionctx.QueryString, "skip") + err = dom.DDL().CreatePlacementPolicyWithInfo(tk.Session(), newPolicy, ddl.OnExistError) + require.NoError(t, err) + tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Placement is ignored when TIDB_PLACEMENT_MODE is 'IGNORE'")) + tk.MustQuery("show placement where target='POLICY p3'").Check(testkit.Rows()) + // alter placement policy in ignore mode (policy exists) tk.MustExec("alter placement policy p1 primary_region='r1' regions='r1'") tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Placement is ignored when TIDB_PLACEMENT_MODE is 'IGNORE'")) @@ -607,6 +636,7 @@ func TestPlacementMode(t *testing.T) { require.NoError(t, err) require.NotNil(t, tbl.PlacementPolicyRef) tbl.Name = model.NewCIStr("t2") + tk.Session().SetValue(sessionctx.QueryString, "skip") err = dom.DDL().CreateTableWithInfo(tk.Session(), model.NewCIStr("test"), tbl, ddl.OnExistError) require.NoError(t, err) tk.MustQuery("show create table t2").Check(testkit.Rows("t2 CREATE TABLE `t2` (\n" + @@ -620,6 +650,7 @@ func TestPlacementMode(t *testing.T) { require.NotNil(t, tbl.PlacementPolicyRef) tbl.Name = model.NewCIStr("t2") tbl.PlacementPolicyRef.Name = model.NewCIStr("pxx") + tk.Session().SetValue(sessionctx.QueryString, "skip") err = dom.DDL().CreateTableWithInfo(tk.Session(), model.NewCIStr("test"), tbl, ddl.OnExistError) require.NoError(t, err) tk.MustQuery("show create table t2").Check(testkit.Rows("t2 CREATE TABLE `t2` (\n" + @@ -632,6 +663,7 @@ func TestPlacementMode(t *testing.T) { require.True(t, ok) require.NotNil(t, db1.PlacementPolicyRef) db1.Name = model.NewCIStr("db2") + tk.Session().SetValue(sessionctx.QueryString, "skip") err = dom.DDL().CreateSchemaWithInfo(tk.Session(), db1, ddl.OnExistError) require.NoError(t, err) tk.MustQuery("show create database db2").Check(testkit.Rows("db2 CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET utf8mb4 */")) @@ -643,6 +675,7 @@ func TestPlacementMode(t *testing.T) { require.NotNil(t, db1.PlacementPolicyRef) db1.Name = model.NewCIStr("db2") db1.PlacementPolicyRef.Name = model.NewCIStr("pxx") + tk.Session().SetValue(sessionctx.QueryString, "skip") err = dom.DDL().CreateSchemaWithInfo(tk.Session(), db1, ddl.OnExistError) require.NoError(t, err) tk.MustQuery("show create database db2").Check(testkit.Rows("db2 CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET utf8mb4 */")) @@ -674,9 +707,9 @@ func TestPlacementTiflashCheck(t *testing.T) { tk.MustExec("alter table tp set tiflash replica 1") err := tk.ExecToErr("alter table tp placement policy p1") - require.True(t, ddl.ErrIncompatibleTiFlashAndPlacement.Equal(err)) + require.True(t, dbterror.ErrIncompatibleTiFlashAndPlacement.Equal(err)) err = tk.ExecToErr("alter table tp partition p0 placement policy p1") - require.True(t, ddl.ErrIncompatibleTiFlashAndPlacement.Equal(err)) + require.True(t, dbterror.ErrIncompatibleTiFlashAndPlacement.Equal(err)) tk.MustQuery("show create table tp").Check(testkit.Rows("" + "tp CREATE TABLE `tp` (\n" + " `id` int(11) DEFAULT NULL\n" + @@ -691,7 +724,7 @@ func TestPlacementTiflashCheck(t *testing.T) { PARTITION p1 VALUES LESS THAN (1000) )`) err = tk.ExecToErr("alter table tp set tiflash replica 1") - require.True(t, ddl.ErrIncompatibleTiFlashAndPlacement.Equal(err)) + require.True(t, dbterror.ErrIncompatibleTiFlashAndPlacement.Equal(err)) tk.MustQuery("show create table tp").Check(testkit.Rows("" + "tp CREATE TABLE `tp` (\n" + " `id` int(11) DEFAULT NULL\n" + @@ -706,7 +739,7 @@ func TestPlacementTiflashCheck(t *testing.T) { PARTITION p1 VALUES LESS THAN (1000) )`) err = tk.ExecToErr("alter table tp set tiflash replica 1") - require.True(t, ddl.ErrIncompatibleTiFlashAndPlacement.Equal(err)) + require.True(t, dbterror.ErrIncompatibleTiFlashAndPlacement.Equal(err)) tk.MustQuery("show create table tp").Check(testkit.Rows("" + "tp CREATE TABLE `tp` (\n" + " `id` int(11) DEFAULT NULL\n" + @@ -721,7 +754,7 @@ func TestPlacementTiflashCheck(t *testing.T) { PARTITION p1 VALUES LESS THAN (1000) )`) err = tk.ExecToErr("alter table tp set tiflash replica 1") - require.True(t, ddl.ErrIncompatibleTiFlashAndPlacement.Equal(err)) + require.True(t, dbterror.ErrIncompatibleTiFlashAndPlacement.Equal(err)) tk.MustQuery("show create table tp").Check(testkit.Rows("" + "tp CREATE TABLE `tp` (\n" + " `id` int(11) DEFAULT NULL\n" + @@ -736,7 +769,7 @@ func TestPlacementTiflashCheck(t *testing.T) { PARTITION p1 VALUES LESS THAN (1000) )`) err = tk.ExecToErr("alter table tp set tiflash replica 1") - require.True(t, ddl.ErrIncompatibleTiFlashAndPlacement.Equal(err)) + require.True(t, dbterror.ErrIncompatibleTiFlashAndPlacement.Equal(err)) tk.MustQuery("show create table tp").Check(testkit.Rows("" + "tp CREATE TABLE `tp` (\n" + " `id` int(11) DEFAULT NULL\n" + diff --git a/ddl/primary_key_handle_test.go b/ddl/primary_key_handle_test.go new file mode 100644 index 0000000000000..f1f24be108974 --- /dev/null +++ b/ddl/primary_key_handle_test.go @@ -0,0 +1,616 @@ +// Copyright 2019 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "fmt" + "math" + "strconv" + "strings" + "testing" + + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/store/mockstore" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/testutil" + "github.com/stretchr/testify/require" + "github.com/tikv/client-go/v2/testutils" +) + +func getTableMaxHandle(t *testing.T, d ddl.DDL, tbl table.Table, store kv.Storage) (kv.Handle, bool) { + ver, err := store.CurrentVersion(kv.GlobalTxnScope) + require.NoError(t, err) + maxHandle, emptyTable, err := d.GetTableMaxHandle(ver.Ver, tbl.(table.PhysicalTable)) + require.NoError(t, err) + return maxHandle, emptyTable +} + +func checkTableMaxHandle(t *testing.T, d ddl.DDL, tbl table.Table, store kv.Storage, expectedEmpty bool, expectedMaxHandle kv.Handle) { + maxHandle, emptyHandle := getTableMaxHandle(t, d, tbl, store) + require.Equal(t, expectedEmpty, emptyHandle) + if expectedEmpty { + require.True(t, emptyHandle) + require.Nil(t, maxHandle) + } else { + require.False(t, emptyHandle) + testutil.HandleEqual(t, expectedMaxHandle, maxHandle) + } +} + +func TestPrimaryKey(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeIntOnly + + // Test add/drop primary key on a plain table. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a int, b varchar(10));") + tk.MustGetErrCode("alter table t add primary key(a) clustered;", errno.ErrUnsupportedDDLOperation) + tk.MustExec("alter table t add primary key(a) nonclustered;") + tk.MustExec("alter table t drop primary key;") + tk.MustExec("alter table t add primary key(a) nonclustered;") + tk.MustExec("drop index `primary` on t;") + tk.MustExec("alter table t add primary key(a);") // implicit nonclustered + tk.MustExec("drop index `primary` on t;") + tk.MustGetErrCode("drop index `primary` on t;", errno.ErrCantDropFieldOrKey) + + // Test add/drop primary key on a PKIsHandle table. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a int, b varchar(10), primary key(a) clustered);") + tk.MustGetErrCode("alter table t drop primary key;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t add primary key(a) clustered;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t add primary key(a) nonclustered;", mysql.ErrMultiplePriKey) + tk.MustGetErrCode("alter table t add primary key(a);", errno.ErrMultiplePriKey) // implicit nonclustered + tk.MustGetErrCode("alter table t add primary key(b) clustered;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t add primary key(b) nonclustered;", errno.ErrMultiplePriKey) + tk.MustGetErrCode("alter table t add primary key(b);", errno.ErrMultiplePriKey) // implicit nonclustered + + // Test add/drop primary key on a nonclustered primary key table. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a int, b varchar(10), primary key(a) nonclustered);") + tk.MustGetErrCode("alter table t add primary key(a) clustered;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t add primary key(a) nonclustered;", errno.ErrMultiplePriKey) + tk.MustGetErrCode("alter table t add primary key(a);", errno.ErrMultiplePriKey) // implicit nonclustered + tk.MustGetErrCode("alter table t add primary key(b) clustered;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t add primary key(b) nonclustered;", errno.ErrMultiplePriKey) + tk.MustGetErrCode("alter table t add primary key(b);", errno.ErrMultiplePriKey) // implicit nonclustered + tk.MustExec("alter table t drop primary key;") + + // Test add/drop primary key on a CommonHandle key table. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a int, b varchar(10), primary key(b) clustered);") + tk.MustGetErrCode("alter table t drop primary key;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t add primary key(a) clustered;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t add primary key(a) nonclustered;", errno.ErrMultiplePriKey) + tk.MustGetErrCode("alter table t add primary key(a);", errno.ErrMultiplePriKey) // implicit nonclustered + tk.MustGetErrCode("alter table t add primary key(b) clustered;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("alter table t add primary key(b) nonclustered;", errno.ErrMultiplePriKey) + tk.MustGetErrCode("alter table t add primary key(b);", errno.ErrMultiplePriKey) // implicit nonclustered + + // Test add/drop primary key when the column&index name is `primary`. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (`primary` int);") + tk.MustExec("alter table t add index (`primary`);") + tk.MustGetErrCode("drop index `primary` on t;", errno.ErrCantDropFieldOrKey) + + // The primary key cannot be invisible, for the case pk_is_handle. + tk.MustExec("drop table if exists t;") + tk.MustGetErrCode("create table t(c1 int not null, primary key(c1) invisible);", errno.ErrPKIndexCantBeInvisible) + tk.MustExec("create table t (a int, b int not null, primary key(a), unique(b) invisible);") + tk.MustExec("drop table t;") +} + +func TestMultiRegionGetTableEndHandle(t *testing.T) { + var cluster testutils.Cluster + store, clean := testkit.CreateMockStore(t, mockstore.WithClusterInspector(func(c testutils.Cluster) { + mockstore.BootstrapWithSingleStore(c) + cluster = c + })) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a bigint PRIMARY KEY, b int)") + var builder strings.Builder + _, _ = fmt.Fprintf(&builder, "insert into t values ") + for i := 0; i < 1000; i++ { + _, _ = fmt.Fprintf(&builder, "(%v, %v),", i, i) + } + sql := builder.String() + tk.MustExec(sql[:len(sql)-1]) + + // Get table ID for split. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + + d := dom.DDL() + + // Split the table. + tableStart := tablecodec.GenTableRecordPrefix(tbl.Meta().ID) + cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 100) + checkTableMaxHandle(t, d, tbl, store, false, kv.IntHandle(999)) + + tk.MustExec("insert into t values(10000, 1000)") + checkTableMaxHandle(t, d, tbl, store, false, kv.IntHandle(10000)) + + tk.MustExec("insert into t values(-1, 1000)") + checkTableMaxHandle(t, d, tbl, store, false, kv.IntHandle(10000)) +} + +func TestGetTableEndHandle(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + // TestGetTableEndHandle test ddl.GetTableMaxHandle method, which will return the max row id of the table. + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + // PK is handle. + tk.MustExec("create table t(a bigint PRIMARY KEY, b int)") + + is := dom.InfoSchema() + d := dom.DDL() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + + // test empty table + checkTableMaxHandle(t, d, tbl, store, true, nil) + + tk.MustExec("insert into t values(-1, 1)") + checkTableMaxHandle(t, d, tbl, store, false, kv.IntHandle(-1)) + + tk.MustExec("insert into t values(9223372036854775806, 1)") + checkTableMaxHandle(t, d, tbl, store, false, kv.IntHandle(9223372036854775806)) + + tk.MustExec("insert into t values(9223372036854775807, 1)") + checkTableMaxHandle(t, d, tbl, store, false, kv.IntHandle(9223372036854775807)) + + tk.MustExec("insert into t values(10, 1)") + tk.MustExec("insert into t values(102149142, 1)") + checkTableMaxHandle(t, d, tbl, store, false, kv.IntHandle(9223372036854775807)) + + tk.MustExec("create table t1(a bigint PRIMARY KEY, b int)") + + var builder strings.Builder + _, _ = fmt.Fprintf(&builder, "insert into t1 values ") + for i := 0; i < 1000; i++ { + _, _ = fmt.Fprintf(&builder, "(%v, %v),", i, i) + } + sql := builder.String() + tk.MustExec(sql[:len(sql)-1]) + + is = dom.InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t1")) + require.NoError(t, err) + checkTableMaxHandle(t, d, tbl, store, false, kv.IntHandle(999)) + + // Test PK is not handle + tk.MustExec("create table t2(a varchar(255))") + + is = dom.InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t2")) + require.NoError(t, err) + checkTableMaxHandle(t, d, tbl, store, true, nil) + + builder.Reset() + _, _ = fmt.Fprintf(&builder, "insert into t2 values ") + for i := 0; i < 1000; i++ { + _, _ = fmt.Fprintf(&builder, "(%v),", i) + } + sql = builder.String() + tk.MustExec(sql[:len(sql)-1]) + + result := tk.MustQuery("select MAX(_tidb_rowid) from t2") + maxHandle, emptyTable := getTableMaxHandle(t, d, tbl, store) + result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) + require.False(t, emptyTable) + + tk.MustExec("insert into t2 values(100000)") + result = tk.MustQuery("select MAX(_tidb_rowid) from t2") + maxHandle, emptyTable = getTableMaxHandle(t, d, tbl, store) + result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) + require.False(t, emptyTable) + + tk.MustExec(fmt.Sprintf("insert into t2 values(%v)", math.MaxInt64-1)) + result = tk.MustQuery("select MAX(_tidb_rowid) from t2") + maxHandle, emptyTable = getTableMaxHandle(t, d, tbl, store) + result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) + require.False(t, emptyTable) + + tk.MustExec(fmt.Sprintf("insert into t2 values(%v)", math.MaxInt64)) + result = tk.MustQuery("select MAX(_tidb_rowid) from t2") + maxHandle, emptyTable = getTableMaxHandle(t, d, tbl, store) + result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) + require.False(t, emptyTable) + + tk.MustExec("insert into t2 values(100)") + result = tk.MustQuery("select MAX(_tidb_rowid) from t2") + maxHandle, emptyTable = getTableMaxHandle(t, d, tbl, store) + result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) + require.False(t, emptyTable) +} + +func TestMultiRegionGetTableEndCommonHandle(t *testing.T) { + var cluster testutils.Cluster + store, clean := testkit.CreateMockStore(t, mockstore.WithClusterInspector(func(c testutils.Cluster) { + mockstore.BootstrapWithSingleStore(c) + cluster = c + })) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + + tk.MustExec("create table t(a varchar(20), b int, c float, d bigint, primary key (a, b, c))") + var builder strings.Builder + _, _ = fmt.Fprintf(&builder, "insert into t values ") + for i := 0; i < 1000; i++ { + _, _ = fmt.Fprintf(&builder, "('%v', %v, %v, %v),", i, i, i, i) + } + sql := builder.String() + tk.MustExec(sql[:len(sql)-1]) + + // Get table ID for split. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + + d := dom.DDL() + + // Split the table. + tableStart := tablecodec.GenTableRecordPrefix(tbl.Meta().ID) + cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 100) + checkTableMaxHandle(t, d, tbl, store, false, testutil.MustNewCommonHandle(t, "999", 999, 999)) + + tk.MustExec("insert into t values('a', 1, 1, 1)") + checkTableMaxHandle(t, d, tbl, store, false, testutil.MustNewCommonHandle(t, "a", 1, 1)) + + tk.MustExec("insert into t values('0000', 1, 1, 1)") + checkTableMaxHandle(t, d, tbl, store, false, testutil.MustNewCommonHandle(t, "a", 1, 1)) +} + +func TestGetTableEndCommonHandle(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + + tk.MustExec("create table t(a varchar(15), b bigint, c int, primary key (a, b))") + tk.MustExec("create table t1(a varchar(15), b bigint, c int, primary key (a(2), b))") + + is := dom.InfoSchema() + d := dom.DDL() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + + // test empty table + checkTableMaxHandle(t, d, tbl, store, true, nil) + + tk.MustExec("insert into t values('abc', 1, 10)") + checkTableMaxHandle(t, d, tbl, store, false, testutil.MustNewCommonHandle(t, "abc", 1)) + + tk.MustExec("insert into t values('abchzzzzzzzz', 1, 10)") + checkTableMaxHandle(t, d, tbl, store, false, testutil.MustNewCommonHandle(t, "abchzzzzzzzz", 1)) + tk.MustExec("insert into t values('a', 1, 10)") + tk.MustExec("insert into t values('ab', 1, 10)") + checkTableMaxHandle(t, d, tbl, store, false, testutil.MustNewCommonHandle(t, "abchzzzzzzzz", 1)) + + // Test MaxTableRowID with prefixed primary key. + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t1")) + require.NoError(t, err) + d = dom.DDL() + checkTableMaxHandle(t, d, tbl, store, true, nil) + tk.MustExec("insert into t1 values('abccccc', 1, 10)") + checkTableMaxHandle(t, d, tbl, store, false, testutil.MustNewCommonHandle(t, "ab", 1)) + tk.MustExec("insert into t1 values('azzzz', 1, 10)") + checkTableMaxHandle(t, d, tbl, store, false, testutil.MustNewCommonHandle(t, "az", 1)) +} + +func TestAutoRandomChangeFromAutoInc(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("set @@tidb_allow_remove_auto_inc = 1;") + + // Basic usages. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a bigint auto_increment primary key);") + tk.MustExec("insert into t values (), (), ();") + tk.MustExec("alter table t modify column a bigint auto_random(3);") + tk.MustExec("insert into t values (), (), ();") + rows := tk.MustQuery("show table t next_row_id;").Rows() + require.Len(t, rows, 1, fmt.Sprintf("query result: %v", rows)) + require.Len(t, rows[0], 5, fmt.Sprintf("query result: %v", rows)) + require.Equal(t, "AUTO_RANDOM", rows[0][4]) + + // Changing from auto_inc unique key is not allowed. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a bigint auto_increment unique key);") + tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a bigint auto_increment unique key, b bigint auto_random primary key);") + tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) + + // Changing from non-auto-inc column is not allowed. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a bigint);") + tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a bigint primary key);") + tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) + + // Changing from non BIGINT auto_inc pk column is not allowed. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a int auto_increment primary key);") + tk.MustGetErrCode("alter table t modify column a int auto_random;", errno.ErrInvalidAutoRandom) + tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) + + // Changing from auto_random to auto_increment is not allowed. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a bigint auto_random primary key);") + // "Unsupported modify column: can't set auto_increment" + tk.MustGetErrCode("alter table t modify column a bigint auto_increment;", errno.ErrUnsupportedDDLOperation) + + // Large auto_increment number overflows auto_random. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a bigint auto_increment primary key);") + tk.MustExec("insert into t values (1<<(64-5));") + // "max allowed auto_random shard bits is 3, but got 4 on column `a`" + tk.MustGetErrCode("alter table t modify column a bigint auto_random(4);", errno.ErrInvalidAutoRandom) + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a bigint auto_increment primary key);") + tk.MustExec("insert into t values (1<<(64-6));") + tk.MustExec("alter table t modify column a bigint auto_random(4);") +} + +func TestAutoRandomExchangePartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database if not exists auto_random_db") + defer tk.MustExec("drop database if exists auto_random_db") + + tk.MustExec("use auto_random_db") + + tk.MustExec("set @@tidb_enable_exchange_partition=1") + defer tk.MustExec("set @@tidb_enable_exchange_partition=0") + + tk.MustExec("drop table if exists e1, e2, e3, e4;") + + tk.MustExec("create table e1 (a bigint primary key clustered auto_random(3)) partition by hash(a) partitions 1;") + + tk.MustExec("create table e2 (a bigint primary key);") + tk.MustGetErrCode("alter table e1 exchange partition p0 with table e2;", errno.ErrTablesDifferentMetadata) + + tk.MustExec("create table e3 (a bigint primary key auto_random(2));") + tk.MustGetErrCode("alter table e1 exchange partition p0 with table e3;", errno.ErrTablesDifferentMetadata) + tk.MustExec("insert into e1 values (), (), ()") + + tk.MustExec("create table e4 (a bigint primary key auto_random(3));") + tk.MustExec("insert into e4 values ()") + tk.MustExec("alter table e1 exchange partition p0 with table e4;") + + tk.MustQuery("select count(*) from e1").Check(testkit.Rows("1")) + tk.MustExec("insert into e1 values ()") + tk.MustQuery("select count(*) from e1").Check(testkit.Rows("2")) + + tk.MustQuery("select count(*) from e4").Check(testkit.Rows("3")) + tk.MustExec("insert into e4 values ()") + tk.MustQuery("select count(*) from e4").Check(testkit.Rows("4")) +} + +func TestAutoRandomIncBitsIncrementAndOffset(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database if not exists auto_random_db") + defer tk.MustExec("drop database if exists auto_random_db") + tk.MustExec("use auto_random_db") + tk.MustExec("drop table if exists t") + + recreateTable := func() { + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a bigint auto_random(6) primary key clustered)") + } + truncateTable := func() { + _, _ = tk.Exec("delete from t") + } + insertTable := func() { + tk.MustExec("insert into t values ()") + } + assertIncBitsValues := func(values ...int) { + mask := strings.Repeat("1", 64-1-6) + sql := fmt.Sprintf(`select a & b'%s' from t order by a & b'%s' asc`, mask, mask) + vs := make([]string, len(values)) + for i, value := range values { + vs[i] = strconv.Itoa(value) + } + tk.MustQuery(sql).Check(testkit.Rows(vs...)) + } + + const truncate, recreate = true, false + expect := func(vs ...int) []int { return vs } + testCase := []struct { + setupAction bool // truncate or recreate + increment int // @@auto_increment_increment + offset int // @@auto_increment_offset + results []int // the implicit allocated auto_random incremental-bit part of values + }{ + {recreate, 5, 10, expect(10, 15, 20)}, + {recreate, 2, 10, expect(10, 12, 14)}, + {truncate, 5, 10, expect(15, 20, 25)}, + {truncate, 10, 10, expect(30, 40, 50)}, + {truncate, 5, 10, expect(55, 60, 65)}, + } + for _, tc := range testCase { + switch tc.setupAction { + case recreate: + recreateTable() + case truncate: + truncateTable() + } + tk.Session().GetSessionVars().AutoIncrementIncrement = tc.increment + tk.Session().GetSessionVars().AutoIncrementOffset = tc.offset + for range tc.results { + insertTable() + } + assertIncBitsValues(tc.results...) + } +} + +func TestInvisibleIndex(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t,t1,t2,t3,t4,t5,t6") + + // The DDL statement related to invisible index. + showIndexes := "select index_name, is_visible from information_schema.statistics where table_schema = 'test' and table_name = 't'" + // 1. Create table with invisible index + tk.MustExec("create table t (a int, b int, unique (a) invisible)") + tk.MustQuery(showIndexes).Check(testkit.Rows("a NO")) + tk.MustExec("insert into t values (1, 2)") + tk.MustQuery("select * from t").Check(testkit.Rows("1 2")) + // 2. Drop invisible index + tk.MustExec("alter table t drop index a") + tk.MustQuery(showIndexes).Check(testkit.Rows()) + tk.MustExec("insert into t values (3, 4)") + tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4")) + // 3. Add an invisible index + tk.MustExec("alter table t add index (b) invisible") + tk.MustQuery(showIndexes).Check(testkit.Rows("b NO")) + tk.MustExec("insert into t values (5, 6)") + tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4", "5 6")) + // 4. Drop it + tk.MustExec("alter table t drop index b") + tk.MustQuery(showIndexes).Check(testkit.Rows()) + tk.MustExec("insert into t values (7, 8)") + tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4", "5 6", "7 8")) + // 5. Create a multiple-column invisible index + tk.MustExec("alter table t add index a_b(a, b) invisible") + tk.MustQuery(showIndexes).Check(testkit.Rows("a_b NO", "a_b NO")) + tk.MustExec("insert into t values (9, 10)") + tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4", "5 6", "7 8", "9 10")) + // 6. Drop it + tk.MustExec("alter table t drop index a_b") + tk.MustQuery(showIndexes).Check(testkit.Rows()) + tk.MustExec("insert into t values (11, 12)") + tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4", "5 6", "7 8", "9 10", "11 12")) + + // Limitation: Primary key cannot be invisible index + tk.MustGetErrCode("create table t1 (a int, primary key (a) nonclustered invisible)", errno.ErrPKIndexCantBeInvisible) + tk.MustGetErrCode("create table t1 (a int, b int, primary key (a, b) nonclustered invisible)", errno.ErrPKIndexCantBeInvisible) + tk.MustExec("create table t1 (a int, b int)") + tk.MustGetErrCode("alter table t1 add primary key(a) nonclustered invisible", errno.ErrPKIndexCantBeInvisible) + tk.MustGetErrCode("alter table t1 add primary key(a, b) nonclustered invisible", errno.ErrPKIndexCantBeInvisible) + + // Implicit primary key cannot be invisible index + // Create a implicit primary key + tk.MustGetErrCode("create table t2(a int not null, unique (a) invisible)", errno.ErrPKIndexCantBeInvisible) + tk.MustGetErrCode("create table t2(a int auto_increment, unique key (a) invisible);", errno.ErrPKIndexCantBeInvisible) + // Column `a` become implicit primary key after DDL statement on itself + tk.MustExec("create table t2(a int not null)") + tk.MustGetErrCode("alter table t2 add unique (a) invisible", errno.ErrPKIndexCantBeInvisible) + tk.MustExec("create table t3(a int, unique index (a) invisible)") + tk.MustGetErrCode("alter table t3 modify column a int not null", errno.ErrPKIndexCantBeInvisible) + // Only first unique column can be implicit primary + tk.MustExec("create table t4(a int not null, b int not null, unique (a), unique (b) invisible)") + showIndexes = "select index_name, is_visible from information_schema.statistics where table_schema = 'test' and table_name = 't4'" + tk.MustQuery(showIndexes).Check(testkit.Rows("a YES", "b NO")) + tk.MustExec("insert into t4 values (1, 2)") + tk.MustQuery("select * from t4").Check(testkit.Rows("1 2")) + tk.MustGetErrCode("create table t5(a int not null, b int not null, unique (b) invisible, unique (a))", errno.ErrPKIndexCantBeInvisible) + // Column `b` become implicit primary key after DDL statement on other columns + tk.MustExec("create table t5(a int not null, b int not null, unique (a), unique (b) invisible)") + tk.MustGetErrCode("alter table t5 drop index a", errno.ErrPKIndexCantBeInvisible) + tk.MustGetErrCode("alter table t5 modify column a int null", errno.ErrPKIndexCantBeInvisible) + // If these is a explicit primary key, no key will become implicit primary key + tk.MustExec("create table t6 (a int not null, b int, unique (a) invisible, primary key(b) nonclustered)") + showIndexes = "select index_name, is_visible from information_schema.statistics where table_schema = 'test' and table_name = 't6'" + tk.MustQuery(showIndexes).Check(testkit.Rows("a NO", "PRIMARY YES")) + tk.MustExec("insert into t6 values (1, 2)") + tk.MustQuery("select * from t6").Check(testkit.Rows("1 2")) + tk.MustGetErrCode("alter table t6 drop primary key", errno.ErrPKIndexCantBeInvisible) + res := tk.MustQuery("show index from t6 where Key_name='PRIMARY';") + require.Len(t, res.Rows(), 1) +} + +func TestCreateClusteredIndex(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + tk.MustExec("CREATE TABLE t1 (a int primary key, b int)") + tk.MustExec("CREATE TABLE t2 (a varchar(255) primary key, b int)") + tk.MustExec("CREATE TABLE t3 (a int, b int, c int, primary key (a, b))") + tk.MustExec("CREATE TABLE t4 (a int, b int, c int)") + is := domain.GetDomain(tk.Session()).InfoSchema() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t1")) + require.NoError(t, err) + require.True(t, tbl.Meta().PKIsHandle) + require.False(t, tbl.Meta().IsCommonHandle) + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t2")) + require.NoError(t, err) + require.True(t, tbl.Meta().IsCommonHandle) + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t3")) + require.NoError(t, err) + require.True(t, tbl.Meta().IsCommonHandle) + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t4")) + require.NoError(t, err) + require.False(t, tbl.Meta().IsCommonHandle) + + tk.MustExec("CREATE TABLE t5 (a varchar(255) primary key nonclustered, b int)") + tk.MustExec("CREATE TABLE t6 (a int, b int, c int, primary key (a, b) nonclustered)") + is = domain.GetDomain(tk.Session()).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t5")) + require.NoError(t, err) + require.False(t, tbl.Meta().IsCommonHandle) + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t6")) + require.NoError(t, err) + require.False(t, tbl.Meta().IsCommonHandle) + + tk.MustExec("CREATE TABLE t21 like t2") + tk.MustExec("CREATE TABLE t31 like t3") + is = domain.GetDomain(tk.Session()).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t21")) + require.NoError(t, err) + require.True(t, tbl.Meta().IsCommonHandle) + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t31")) + require.NoError(t, err) + require.True(t, tbl.Meta().IsCommonHandle) + + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeIntOnly + tk.MustExec("CREATE TABLE t7 (a varchar(255) primary key, b int)") + is = domain.GetDomain(tk.Session()).InfoSchema() + tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t7")) + require.NoError(t, err) + require.False(t, tbl.Meta().IsCommonHandle) +} diff --git a/ddl/reorg.go b/ddl/reorg.go index 5fbe012bff18e..e7c7de58a4ed4 100644 --- a/ddl/reorg.go +++ b/ddl/reorg.go @@ -40,6 +40,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/ranger" @@ -268,8 +269,8 @@ func (w *worker) runReorgJob(t *meta.Meta, reorgInfo *reorgInfo, tblInfo *model. w.reorgCtx.setNextKey(nil) w.reorgCtx.setRowCount(0) w.reorgCtx.resetWarnings() - // We return errWaitReorgTimeout here too, so that outer loop will break. - return errWaitReorgTimeout + // We return dbterror.ErrWaitReorgTimeout here too, so that outer loop will break. + return dbterror.ErrWaitReorgTimeout case <-time.After(waitTimeout): rowCount, doneKey, currentElement := w.reorgCtx.getRowCountAndKey() // Update a job's RowCount. @@ -294,7 +295,7 @@ func (w *worker) runReorgJob(t *meta.Meta, reorgInfo *reorgInfo, tblInfo *model. zap.String("doneKey", tryDecodeToHandleString(doneKey)), zap.Error(err)) // If timeout, we will return, check the owner and retry to wait job done again. - return errWaitReorgTimeout + return dbterror.ErrWaitReorgTimeout } return nil } @@ -357,18 +358,18 @@ func getTableTotalCount(w *worker, tblInfo *model.TableInfo) int64 { func (w *worker) isReorgRunnable(d *ddlCtx) error { if isChanClosed(w.ctx.Done()) { // Worker is closed. So it can't do the reorganizational job. - return errInvalidWorker.GenWithStack("worker is closed") + return dbterror.ErrInvalidWorker.GenWithStack("worker is closed") } if w.reorgCtx.isReorgCanceled() { // Job is cancelled. So it can't be done. - return errCancelledDDLJob + return dbterror.ErrCancelledDDLJob } if !d.isOwner() { // If it's not the owner, we will try later, so here just returns an error. logutil.BgLogger().Info("[ddl] DDL worker is not the DDL owner", zap.String("ID", d.uuid)) - return errors.Trace(errNotOwner) + return errors.Trace(dbterror.ErrNotOwner) } return nil } @@ -573,7 +574,7 @@ func getValidCurrentVersion(store kv.Storage) (ver kv.Version, err error) { if err != nil { return ver, errors.Trace(err) } else if ver.Ver <= 0 { - return ver, errInvalidStoreVer.GenWithStack("invalid storage current version %d", ver.Ver) + return ver, dbterror.ErrInvalidStoreVer.GenWithStack("invalid storage current version %d", ver.Ver) } return ver, nil } diff --git a/ddl/reorg_test.go b/ddl/reorg_test.go index 15fc4a9da09c1..a5355627ad0c8 100644 --- a/ddl/reorg_test.go +++ b/ddl/reorg_test.go @@ -283,3 +283,7 @@ func TestReorgOwner(t *testing.T) { }) require.NoError(t, err) } + +func testCheckOwner(t *testing.T, d *ddl, expectedVal bool) { + require.Equal(t, d.isOwner(), expectedVal) +} diff --git a/ddl/repair_table_test.go b/ddl/repair_table_test.go new file mode 100644 index 0000000000000..b24ddae15b387 --- /dev/null +++ b/ddl/repair_table_test.go @@ -0,0 +1,242 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "testing" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/parser/terror" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/util/domainutil" + "github.com/stretchr/testify/require" +) + +const repairTableLease = 600 * time.Millisecond + +func TestRepairTable(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/repairFetchCreateTable", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/infoschema/repairFetchCreateTable")) + }() + + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, repairTableLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + // Test repair table when TiDB is not in repair mode. + tk.MustExec("CREATE TABLE t (a int primary key nonclustered, b varchar(10));") + tk.MustGetErrMsg("admin repair table t CREATE TABLE t (a float primary key, b varchar(5));", "[ddl:8215]Failed to repair table: TiDB is not in REPAIR MODE") + + // Test repair table when the repaired list is empty. + domainutil.RepairInfo.SetRepairMode(true) + tk.MustGetErrMsg("admin repair table t CREATE TABLE t (a float primary key, b varchar(5));", "[ddl:8215]Failed to repair table: repair list is empty") + + // Test repair table when it's database isn't in repairInfo. + domainutil.RepairInfo.SetRepairTableList([]string{"test.other_table"}) + tk.MustGetErrMsg("admin repair table t CREATE TABLE t (a float primary key, b varchar(5));", "[ddl:8215]Failed to repair table: database test is not in repair") + + // Test repair table when the table isn't in repairInfo. + tk.MustExec("CREATE TABLE other_table (a int, b varchar(1), key using hash(b));") + tk.MustGetErrMsg("admin repair table t CREATE TABLE t (a float primary key, b varchar(5));", "[ddl:8215]Failed to repair table: table t is not in repair") + + // Test user can't access to the repaired table. + tk.MustGetErrMsg("select * from other_table", "[schema:1146]Table 'test.other_table' doesn't exist") + + // Test create statement use the same name with what is in repaired. + tk.MustGetErrMsg("CREATE TABLE other_table (a int);", "[ddl:1103]Incorrect table name 'other_table'%!(EXTRA string=this table is in repair)") + + // Test column lost in repair table. + tk.MustGetErrMsg("admin repair table other_table CREATE TABLE other_table (a int, c char(1));", "[ddl:8215]Failed to repair table: Column c has lost") + + // Test column type should be the same. + tk.MustGetErrMsg("admin repair table other_table CREATE TABLE other_table (a bigint, b varchar(1), key using hash(b));", "[ddl:8215]Failed to repair table: Column a type should be the same") + + // Test index lost in repair table. + tk.MustGetErrMsg("admin repair table other_table CREATE TABLE other_table (a int unique);", "[ddl:8215]Failed to repair table: Index a has lost") + + // Test index type should be the same. + tk.MustGetErrMsg("admin repair table other_table CREATE TABLE other_table (a int, b varchar(2) unique)", "[ddl:8215]Failed to repair table: Index b type should be the same") + + // Test sub create statement in repair statement with the same name. + tk.MustExec("admin repair table other_table CREATE TABLE other_table (a int);") + + // Test whether repair table name is case-sensitive. + domainutil.RepairInfo.SetRepairMode(true) + domainutil.RepairInfo.SetRepairTableList([]string{"test.other_table2"}) + tk.MustExec("CREATE TABLE otHer_tAblE2 (a int, b varchar(1));") + tk.MustExec("admin repair table otHer_tAblE2 CREATE TABLE otHeR_tAbLe (a int, b varchar(2));") + repairTable := external.GetTableByName(t, tk, "test", "otHeR_tAbLe") //nolint:typecheck + require.Equal(t, "otHeR_tAbLe", repairTable.Meta().Name.O) + + // Test memory and system database is not for repair. + domainutil.RepairInfo.SetRepairMode(true) + domainutil.RepairInfo.SetRepairTableList([]string{"test.xxx"}) + tk.MustGetErrMsg("admin repair table performance_schema.xxx CREATE TABLE yyy (a int);", "[ddl:8215]Failed to repair table: memory or system database is not for repair") + + // Test the repair detail. + turnRepairModeAndInit(true) + defer turnRepairModeAndInit(false) + // Domain reload the tableInfo and add it into repairInfo. + tk.MustExec("CREATE TABLE origin (a int primary key nonclustered auto_increment, b varchar(10), c int);") + // Repaired tableInfo has been filtered by `domain.InfoSchema()`, so get it in repairInfo. + originTableInfo, _ := domainutil.RepairInfo.GetRepairedTableInfoByTableName("test", "origin") + + hook := &ddl.TestDDLCallback{Do: dom} + var repairErr error + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type != model.ActionRepairTable { + return + } + if job.TableID != originTableInfo.ID { + repairErr = errors.New("table id should be the same") + return + } + if job.SchemaState != model.StateNone { + repairErr = errors.New("repair job state should be the none") + return + } + // Test whether it's readable, when repaired table is still stateNone. + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + _, repairErr = tk.Exec("select * from origin") + // Repaired tableInfo has been filtered by `domain.InfoSchema()`, here will get an error cause user can't get access to it. + if repairErr != nil && terror.ErrorEqual(repairErr, infoschema.ErrTableNotExists) { + repairErr = nil + } + } + originalHook := dom.DDL().GetHook() + defer dom.DDL().SetHook(originalHook) + dom.DDL().SetHook(hook) + + // Exec the repair statement to override the tableInfo. + tk.MustExec("admin repair table origin CREATE TABLE origin (a int primary key nonclustered auto_increment, b varchar(5), c int);") + require.NoError(t, repairErr) + + // Check the repaired tableInfo is exactly the same with old one in tableID, indexID, colID. + // testGetTableByName will extract the Table from `domain.InfoSchema()` directly. + repairTable = external.GetTableByName(t, tk, "test", "origin") //nolint:typecheck + require.Equal(t, originTableInfo.ID, repairTable.Meta().ID) + require.Equal(t, 3, len(repairTable.Meta().Columns)) + require.Equal(t, originTableInfo.Columns[0].ID, repairTable.Meta().Columns[0].ID) + require.Equal(t, originTableInfo.Columns[1].ID, repairTable.Meta().Columns[1].ID) + require.Equal(t, originTableInfo.Columns[2].ID, repairTable.Meta().Columns[2].ID) + require.Equal(t, 1, len(repairTable.Meta().Indices)) + require.Equal(t, originTableInfo.Columns[0].ID, repairTable.Meta().Indices[0].ID) + require.Equal(t, originTableInfo.AutoIncID, repairTable.Meta().AutoIncID) + + require.Equal(t, mysql.TypeLong, repairTable.Meta().Columns[0].Tp) + require.Equal(t, mysql.TypeVarchar, repairTable.Meta().Columns[1].Tp) + require.Equal(t, 5, repairTable.Meta().Columns[1].Flen) + require.Equal(t, mysql.TypeLong, repairTable.Meta().Columns[2].Tp) + + // Exec the show create table statement to make sure new tableInfo has been set. + result := tk.MustQuery("show create table origin") + require.Equal(t, "CREATE TABLE `origin` (\n `a` int(11) NOT NULL AUTO_INCREMENT,\n `b` varchar(5) DEFAULT NULL,\n `c` int(11) DEFAULT NULL,\n PRIMARY KEY (`a`) /*T![clustered_index] NONCLUSTERED */\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", result.Rows()[0][1]) +} + +func turnRepairModeAndInit(on bool) { + list := make([]string, 0) + if on { + list = append(list, "test.origin") + } + domainutil.RepairInfo.SetRepairMode(on) + domainutil.RepairInfo.SetRepairTableList(list) +} + +func TestRepairTableWithPartition(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/repairFetchCreateTable", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/infoschema/repairFetchCreateTable")) + }() + store, clean := testkit.CreateMockStoreWithSchemaLease(t, repairTableLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists origin") + + turnRepairModeAndInit(true) + defer turnRepairModeAndInit(false) + // Domain reload the tableInfo and add it into repairInfo. + tk.MustExec("create table origin (a int not null) partition by RANGE(a) (" + + "partition p10 values less than (10)," + + "partition p30 values less than (30)," + + "partition p50 values less than (50)," + + "partition p70 values less than (70)," + + "partition p90 values less than (90));") + // Test for some old partition has lost. + tk.MustGetErrMsg("admin repair table origin create table origin (a int not null) partition by RANGE(a) ("+ + "partition p10 values less than (10),"+ + "partition p30 values less than (30),"+ + "partition p50 values less than (50),"+ + "partition p90 values less than (90),"+ + "partition p100 values less than (100));", "[ddl:8215]Failed to repair table: Partition p100 has lost") + + // Test for some partition changed the condition. + tk.MustGetErrMsg("admin repair table origin create table origin (a int not null) partition by RANGE(a) ("+ + "partition p10 values less than (10),"+ + "partition p20 values less than (25),"+ + "partition p50 values less than (50),"+ + "partition p90 values less than (90));", "[ddl:8215]Failed to repair table: Partition p20 has lost") + + // Test for some partition changed the partition name. + tk.MustGetErrMsg("admin repair table origin create table origin (a int not null) partition by RANGE(a) ("+ + "partition p10 values less than (10),"+ + "partition p30 values less than (30),"+ + "partition pNew values less than (50),"+ + "partition p90 values less than (90));", "[ddl:8215]Failed to repair table: Partition pnew has lost") + + originTableInfo, _ := domainutil.RepairInfo.GetRepairedTableInfoByTableName("test", "origin") + tk.MustExec("admin repair table origin create table origin_rename (a int not null) partition by RANGE(a) (" + + "partition p10 values less than (10)," + + "partition p30 values less than (30)," + + "partition p50 values less than (50)," + + "partition p90 values less than (90));") + repairTable := external.GetTableByName(t, tk, "test", "origin_rename") //nolint:typecheck + require.Equal(t, originTableInfo.ID, repairTable.Meta().ID) + require.Equal(t, 1, len(repairTable.Meta().Columns)) + require.Equal(t, originTableInfo.Columns[0].ID, repairTable.Meta().Columns[0].ID) + require.Equal(t, 4, len(repairTable.Meta().Partition.Definitions)) + require.Equal(t, originTableInfo.Partition.Definitions[0].ID, repairTable.Meta().Partition.Definitions[0].ID) + require.Equal(t, originTableInfo.Partition.Definitions[1].ID, repairTable.Meta().Partition.Definitions[1].ID) + require.Equal(t, originTableInfo.Partition.Definitions[2].ID, repairTable.Meta().Partition.Definitions[2].ID) + require.Equal(t, originTableInfo.Partition.Definitions[4].ID, repairTable.Meta().Partition.Definitions[3].ID) + + // Test hash partition. + tk.MustExec("drop table if exists origin") + domainutil.RepairInfo.SetRepairMode(true) + domainutil.RepairInfo.SetRepairTableList([]string{"test.origin"}) + tk.MustExec("create table origin (a varchar(1), b int not null, c int, key idx(c)) partition by hash(b) partitions 30") + + // Test partition num in repair should be exactly same with old one, other wise will cause partition semantic problem. + tk.MustGetErrMsg("admin repair table origin create table origin (a varchar(2), b int not null, c int, key idx(c)) partition by hash(b) partitions 20", "[ddl:8215]Failed to repair table: Hash partition num should be the same") + + originTableInfo, _ = domainutil.RepairInfo.GetRepairedTableInfoByTableName("test", "origin") + tk.MustExec("admin repair table origin create table origin (a varchar(3), b int not null, c int, key idx(c)) partition by hash(b) partitions 30") + repairTable = external.GetTableByName(t, tk, "test", "origin") //nolint:typecheck + require.Equal(t, originTableInfo.ID, repairTable.Meta().ID) + require.Equal(t, 30, len(repairTable.Meta().Partition.Definitions)) + require.Equal(t, originTableInfo.Partition.Definitions[0].ID, repairTable.Meta().Partition.Definitions[0].ID) + require.Equal(t, originTableInfo.Partition.Definitions[1].ID, repairTable.Meta().Partition.Definitions[1].ID) + require.Equal(t, originTableInfo.Partition.Definitions[29].ID, repairTable.Meta().Partition.Definitions[29].ID) +} diff --git a/ddl/restart_test.go b/ddl/restart_test.go index 51f374b810efd..cd1e330cd3fa7 100644 --- a/ddl/restart_test.go +++ b/ddl/restart_test.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/terror" + "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/mock" "github.com/stretchr/testify/require" ) @@ -70,11 +71,12 @@ func runInterruptedJob(d *ddl, job *model.Job, doneCh chan error) { err error ) - err = d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err = d.DoDDLJob(ctx, job) if errors.Is(err, context.Canceled) { endlessLoopTime := time.Now().Add(time.Minute) for history == nil { - // imitate doDDLJob's logic, quit only find history + // imitate DoDDLJob's logic, quit only find history history, _ = d.getHistoryDDLJob(job.ID) if history != nil { err = history.Error diff --git a/ddl/rollingback.go b/ddl/rollingback.go index ab4e863fb7134..e99a7be9b90a4 100644 --- a/ddl/rollingback.go +++ b/ddl/rollingback.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" ) @@ -80,7 +81,7 @@ func convertAddIdxJob2RollbackJob(t *meta.Meta, job *model.Job, tblInfo *model.T // to rollback add index operations. job.SnapshotVer == 0 indicates the workers are not started. func convertNotStartAddIdxJob2RollbackJob(t *meta.Meta, job *model.Job, occuredErr error) (ver int64, err error) { schemaID := job.SchemaID - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return ver, errors.Trace(err) } @@ -100,7 +101,7 @@ func convertNotStartAddIdxJob2RollbackJob(t *meta.Meta, job *model.Job, occuredE indexInfo := tblInfo.FindIndexByName(indexName.L) if indexInfo == nil { job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } return convertAddIdxJob2RollbackJob(t, job, tblInfo, indexInfo, occuredErr) } @@ -115,7 +116,7 @@ func rollingbackModifyColumn(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) // column type change workers are started. we have to ask them to exit. logutil.Logger(w.logCtx).Info("[ddl] run the cancelling DDL job", zap.String("job", job.String())) w.reorgCtx.notifyReorgCancel() - // Give the this kind of ddl one more round to run, the errCancelledDDLJob should be fetched from the bottom up. + // Give the this kind of ddl one more round to run, the dbterror.ErrCancelledDDLJob should be fetched from the bottom up. return w.onModifyColumn(d, t, job) } _, tblInfo, oldCol, jp, err := getModifyColumnInfo(t, job) @@ -129,11 +130,11 @@ func rollingbackModifyColumn(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) // To roll back this kind of normal job, it is necessary to mark the state as JobStateRollingback to restore the old col's flag. if jp.modifyColumnTp == mysql.TypeNull && tblInfo.Columns[oldCol.Offset].Flag|mysql.PreventNullInsertFlag != 0 { job.State = model.JobStateRollingback - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } // Normal job with stateNone can be cancelled directly. job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } // StatePublic couldn't be cancelled. job.State = model.JobStateRunning @@ -143,11 +144,11 @@ func rollingbackModifyColumn(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) if jp.changingCol == nil { // The job hasn't been handled and we cancel it directly. job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } // The job has been in its middle state (but the reorg worker hasn't started) and we roll it back here. job.State = model.JobStateRollingback - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } func rollingbackAddColumn(t *meta.Meta, job *model.Job) (ver int64, err error) { @@ -157,7 +158,7 @@ func rollingbackAddColumn(t *meta.Meta, job *model.Job) (ver int64, err error) { } if columnInfo == nil { job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } originalState := columnInfo.State @@ -171,7 +172,7 @@ func rollingbackAddColumn(t *meta.Meta, job *model.Job) (ver int64, err error) { } job.State = model.JobStateRollingback - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } func rollingbackAddColumns(t *meta.Meta, job *model.Job) (ver int64, err error) { @@ -181,7 +182,7 @@ func rollingbackAddColumns(t *meta.Meta, job *model.Job) (ver int64, err error) } if len(columnInfos) == 0 { job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } colNames := make([]model.CIStr, len(columnInfos)) @@ -199,7 +200,7 @@ func rollingbackAddColumns(t *meta.Meta, job *model.Job) (ver int64, err error) return ver, errors.Trace(err) } job.State = model.JobStateRollingback - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } func rollingbackDropColumn(t *meta.Meta, job *model.Job) (ver int64, err error) { @@ -219,14 +220,14 @@ func rollingbackDropColumn(t *meta.Meta, job *model.Job) (ver int64, err error) return ver, nil case model.StatePublic: default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) } } // StatePublic means when the job is not running yet. if colInfo.State == model.StatePublic { job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } // In the state of drop column `write only -> delete only -> reorganization`, // We can not rollback now, so just continue to drop column. @@ -251,14 +252,14 @@ func rollingbackDropColumns(t *meta.Meta, job *model.Job) (ver int64, err error) return ver, nil case model.StatePublic: default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) } } // StatePublic means when the job is not running yet. if colInfos[0].State == model.StatePublic { job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } // In the state of drop columns `write only -> delete only -> reorganization`, // We can not rollback now, so just continue to drop columns. @@ -280,9 +281,9 @@ func rollingbackDropIndex(t *meta.Meta, job *model.Job) (ver int64, err error) { return ver, nil case model.StatePublic: job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) } } @@ -311,7 +312,7 @@ func rollingbackDropIndexes(t *meta.Meta, job *model.Job) (ver int64, err error) indexInfo.State = model.StatePublic } default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("index", indexInfo.State) } job.SchemaState = indexInfo.State @@ -320,7 +321,7 @@ func rollingbackDropIndexes(t *meta.Meta, job *model.Job) (ver int64, err error) return ver, errors.Trace(err) } job.FinishTableJob(model.JobStateRollbackDone, model.StatePublic, ver, tblInfo) - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } func rollingbackAddIndex(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, isPK bool) (ver int64, err error) { @@ -332,7 +333,7 @@ func rollingbackAddIndex(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, isP ver, err = w.onCreateIndex(d, t, job, isPK) } else { // add index workers are not started, remove the indexInfo in tableInfo. - ver, err = convertNotStartAddIdxJob2RollbackJob(t, job, errCancelledDDLJob) + ver, err = convertNotStartAddIdxJob2RollbackJob(t, job, dbterror.ErrCancelledDDLJob) } return } @@ -360,10 +361,10 @@ func rollingbackAddTablePartition(t *meta.Meta, job *model.Job) (ver int64, err // addingDefinitions' len = 0 means the job hasn't reached the replica-only state. if len(addingDefinitions) == 0 { job.State = model.JobStateCancelled - return ver, errors.Trace(errCancelledDDLJob) + return ver, errors.Trace(dbterror.ErrCancelledDDLJob) } // addingDefinitions is also in tblInfo, here pass the tblInfo as parameter directly. - return convertAddTablePartitionJob2RollbackJob(t, job, errCancelledDDLJob, tblInfo) + return convertAddTablePartitionJob2RollbackJob(t, job, dbterror.ErrCancelledDDLJob, tblInfo) } func rollingbackDropTableOrView(t *meta.Meta, job *model.Job) error { @@ -375,14 +376,14 @@ func rollingbackDropTableOrView(t *meta.Meta, job *model.Job) error { // Normally won't fetch here, because there is check when cancel ddl jobs. see function: isJobRollbackable. if tblInfo.State == model.StatePublic { job.State = model.JobStateCancelled - return errCancelledDDLJob + return dbterror.ErrCancelledDDLJob } job.State = model.JobStateRunning return nil } func rollingbackDropTablePartition(t *meta.Meta, job *model.Job) (ver int64, err error) { - _, err = getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + _, err = GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } @@ -398,7 +399,7 @@ func rollingbackDropSchema(t *meta.Meta, job *model.Job) error { // Normally won't fetch here, because there is check when cancel ddl jobs. see function: isJobRollbackable. if dbInfo.State == model.StatePublic { job.State = model.JobStateCancelled - return errCancelledDDLJob + return dbterror.ErrCancelledDDLJob } job.State = model.JobStateRunning return nil @@ -413,7 +414,7 @@ func rollingbackRenameIndex(t *meta.Meta, job *model.Job) (ver int64, err error) idx := tblInfo.FindIndexByName(from.L) if idx.State == model.StatePublic { job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } job.State = model.JobStateRunning return ver, errors.Trace(err) @@ -423,7 +424,7 @@ func cancelOnlyNotHandledJob(job *model.Job) (ver int64, err error) { // We can only cancel the not handled job. if job.SchemaState == model.StateNone { job.State = model.JobStateCancelled - return ver, errCancelledDDLJob + return ver, dbterror.ErrCancelledDDLJob } job.State = model.JobStateRunning @@ -432,7 +433,7 @@ func cancelOnlyNotHandledJob(job *model.Job) (ver int64, err error) { } func rollingbackTruncateTable(t *meta.Meta, job *model.Job) (ver int64, err error) { - _, err = getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + _, err = GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } @@ -480,7 +481,7 @@ func convertJob2RollbackJob(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) ver, err = cancelOnlyNotHandledJob(job) default: job.State = model.JobStateCancelled - err = errCancelledDDLJob + err = dbterror.ErrCancelledDDLJob } if err != nil { @@ -489,9 +490,9 @@ func convertJob2RollbackJob(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) } job.ErrorCount++ - if errCancelledDDLJob.Equal(err) { + if dbterror.ErrCancelledDDLJob.Equal(err) { // The job is normally cancelled. - if !job.Error.Equal(errCancelledDDLJob) { + if !job.Error.Equal(dbterror.ErrCancelledDDLJob) { job.Error = terror.GetErrClass(job.Error).Synthesize(terror.ErrCode(job.Error.Code()), fmt.Sprintf("DDL job rollback, error msg: %s", terror.ToSQLError(job.Error).Message)) } diff --git a/ddl/rollingback_test.go b/ddl/rollingback_test.go index 409e6f94e375e..dcc3a455d9957 100644 --- a/ddl/rollingback_test.go +++ b/ddl/rollingback_test.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/util/sqlexec" "github.com/stretchr/testify/require" ) @@ -49,7 +50,7 @@ func TestCancelAddIndexJobError(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockConvertAddIdxJob2RollbackJobError")) }() - tbl := tk.GetTableByName("test", "t_cancel_add_index") + tbl := external.GetTableByName(t, tk, "test", "t_cancel_add_index") //nolint:typecheck require.NotNil(t, tbl) d := dom.DDL() @@ -80,7 +81,7 @@ func TestCancelAddIndexJobError(t *testing.T) { } } } - d.(ddl.DDLForTest).SetHook(hook) + d.SetHook(hook) // This will hang on stateDeleteOnly, and the job will be canceled. err := tk.ExecToErr("alter table t_cancel_add_index add index idx(a)") diff --git a/ddl/schema_test.go b/ddl/schema_test.go index 44925a7b69e07..0b99510974589 100644 --- a/ddl/schema_test.go +++ b/ddl/schema_test.go @@ -49,8 +49,8 @@ func testCreateSchema(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *mode BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{dbInfo}, } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) + ctx.SetValue(sessionctx.QueryString, "skip") + require.NoError(t, d.DoDDLJob(ctx, job)) v := getSchemaVer(t, ctx) dbInfo.State = model.StatePublic @@ -59,23 +59,6 @@ func testCreateSchema(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *mode return job } -func testCreateSchemaT(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo) *model.Job { - job := &model.Job{ - SchemaID: dbInfo.ID, - Type: model.ActionCreateSchema, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{dbInfo}, - } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) - - v := getSchemaVerT(t, ctx) - dbInfo.State = model.StatePublic - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, db: dbInfo}) - dbInfo.State = model.StateNone - return job -} - func buildDropSchemaJob(dbInfo *model.DBInfo) *model.Job { return &model.Job{ SchemaID: dbInfo.ID, @@ -86,7 +69,8 @@ func buildDropSchemaJob(dbInfo *model.DBInfo) *model.Job { func testDropSchema(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo) (*model.Job, int64) { job := buildDropSchemaJob(dbInfo) - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) ver := getSchemaVer(t, ctx) return job, ver @@ -194,7 +178,8 @@ func ExportTestSchema(t *testing.T) { Type: model.ActionDropSchema, BinlogInfo: &model.HistoryInfo{}, } - err = d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err = d.DoDDLJob(ctx, job) require.True(t, terror.ErrorEqual(err, infoschema.ErrDatabaseDropExists), "err %v", err) // Drop a database without a table. @@ -273,3 +258,31 @@ func testGetSchemaInfoWithError(d *ddl, schemaID int64) (*model.DBInfo, error) { } return dbInfo, nil } + +func doDDLJobErr(t *testing.T, schemaID, tableID int64, tp model.ActionType, args []interface{}, ctx sessionctx.Context, d *ddl) *model.Job { + job := &model.Job{ + SchemaID: schemaID, + TableID: tableID, + Type: tp, + Args: args, + BinlogInfo: &model.HistoryInfo{}, + } + // TODO: check error detail + require.Error(t, d.DoDDLJob(ctx, job)) + testCheckJobCancelled(t, d.store, job, nil) + + return job +} + +func testCheckJobCancelled(t *testing.T, store kv.Storage, job *model.Job, state *model.SchemaState) { + require.NoError(t, kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + historyJob, err := m.GetHistoryDDLJob(job.ID) + require.NoError(t, err) + require.True(t, historyJob.IsCancelled() || historyJob.IsRollbackDone(), "history job %s", historyJob) + if state != nil { + require.Equal(t, historyJob.SchemaState, *state) + } + return nil + })) +} diff --git a/ddl/sequence.go b/ddl/sequence.go index 3ab8820c898eb..e2ba2d620cc6b 100644 --- a/ddl/sequence.go +++ b/ddl/sequence.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/util/dbterror" math2 "github.com/pingcap/tidb/util/math" ) @@ -65,7 +66,7 @@ func onCreateSequence(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ err asyncNotifyEvent(d, &util.Event{Tp: model.ActionCreateSequence, TableInfo: tbInfo}) return ver, nil default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("sequence", tbInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("sequence", tbInfo.State) } } @@ -178,12 +179,12 @@ func buildSequenceInfo(stmt *ast.CreateSequenceStmt, ident ast.Ident) (*model.Se case ast.TableOptionEngine: // TableOptionEngine will always be 'InnoDB', thus we do nothing in this branch to avoid error happening. default: - return nil, ErrSequenceUnsupportedTableOption.GenWithStackByArgs(op.StrValue) + return nil, dbterror.ErrSequenceUnsupportedTableOption.GenWithStackByArgs(op.StrValue) } } handleSequenceOptions(stmt.SeqOptions, sequenceInfo) if !validateSequenceOptions(sequenceInfo) { - return nil, ErrSequenceInvalidData.GenWithStackByArgs(ident.Schema.L, ident.Name.L) + return nil, dbterror.ErrSequenceInvalidData.GenWithStackByArgs(ident.Schema.L, ident.Name.L) } return sequenceInfo, nil } @@ -223,7 +224,7 @@ func alterSequenceOptions(sequenceOptions []*ast.SequenceOption, ident ast.Ident } } if !validateSequenceOptions(oldSequence) { - return false, 0, ErrSequenceInvalidData.GenWithStackByArgs(ident.Schema.L, ident.Name.L) + return false, 0, dbterror.ErrSequenceInvalidData.GenWithStackByArgs(ident.Schema.L, ident.Name.L) } if restartWithFlag { return true, restartValue, nil diff --git a/ddl/sequence_test.go b/ddl/sequence_test.go index 248a2f8284dac..2ec8a77bf5270 100644 --- a/ddl/sequence_test.go +++ b/ddl/sequence_test.go @@ -19,7 +19,6 @@ import ( "testing" "time" - "github.com/pingcap/tidb/ddl" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/parser/auth" "github.com/pingcap/tidb/parser/model" @@ -27,6 +26,8 @@ import ( "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" ) @@ -65,7 +66,7 @@ func TestCreateSequence(t *testing.T) { _, err := tk.Exec("create sequence seq comment=\"test\"") require.NoError(t, err) - sequenceTable := tk.GetTableByName("test", "seq") + sequenceTable := external.GetTableByName(t, tk, "test", "seq") require.Equal(t, true, sequenceTable.Meta().IsSequence()) require.Equal(t, model.DefaultSequenceIncrementValue, sequenceTable.Meta().Sequence.Increment) @@ -132,7 +133,7 @@ func TestDropSequence(t *testing.T) { tk.MustExec("create table seq3 (a int)") _, err = tk.Exec("drop sequence seq3") require.Error(t, err) - require.True(t, terror.ErrorEqual(err, ddl.ErrWrongObject)) + require.True(t, terror.ErrorEqual(err, dbterror.ErrWrongObject)) // Test schema is not exist. _, err = tk.Exec("drop sequence unknown.seq") @@ -156,7 +157,7 @@ func TestDropSequence(t *testing.T) { // Test drop view when the object is a sequence. _, err = tk.Exec("drop view seq") require.Error(t, err) - require.True(t, terror.ErrorEqual(err, ddl.ErrWrongObject)) + require.True(t, terror.ErrorEqual(err, dbterror.ErrWrongObject)) tk.MustExec("drop sequence seq") // Test drop privilege. @@ -475,7 +476,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustQuery("select setval(seq, 20)").Check(testkit.Rows("20")) // the next value will not be base on next value. tk.MustQuery("select nextval(seq)").Check(testkit.Rows("25")) - sequenceTable := tk.GetTableByName("test", "seq") + sequenceTable := external.GetTableByName(t, tk, "test", "seq") tc, ok := sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round := tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -485,7 +486,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustQuery("select setval(seq, 95)").Check(testkit.Rows("95")) // make sequence alloc the next batch. tk.MustQuery("select nextval(seq)").Check(testkit.Rows("1")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -500,7 +501,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustQuery("select setval(seq, -20)").Check(testkit.Rows("")) tk.MustQuery("select setval(seq, 20)").Check(testkit.Rows("20")) tk.MustQuery("select nextval(seq)").Check(testkit.Rows("-10")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -511,7 +512,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustExec("drop sequence if exists seq") tk.MustExec("create sequence seq increment -3 start 5 maxvalue 10 minvalue -10 cache 3 cycle") tk.MustQuery("select nextval(seq)").Check(testkit.Rows("5")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -520,7 +521,7 @@ func TestSequenceFunction(t *testing.T) { // exhausted the sequence first cache batch. tk.MustQuery("select setval(seq, -2)").Check(testkit.Rows("-2")) tk.MustQuery("select nextval(seq)").Check(testkit.Rows("-4")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -529,7 +530,7 @@ func TestSequenceFunction(t *testing.T) { // exhausted the sequence second cache batch. tk.MustQuery("select setval(seq, -10)").Check(testkit.Rows("-10")) tk.MustQuery("select nextval(seq)").Check(testkit.Rows("10")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -546,7 +547,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustQuery("select setval(seq, 20)").Check(testkit.Rows("")) tk.MustQuery("select setval(seq, -20)").Check(testkit.Rows("-20")) tk.MustQuery("select nextval(seq)").Check(testkit.Rows("10")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -574,7 +575,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustExec("create sequence seq increment 3 start 3 maxvalue 14 cache 3 cycle") tk.MustQuery("select lastval(seq)").Check(testkit.Rows("")) tk.MustQuery("select nextval(seq)").Check(testkit.Rows("3")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -585,7 +586,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustQuery("select lastval(seq)").Check(testkit.Rows("3")) // trigger the next sequence cache. tk.MustQuery("select nextval(seq)").Check(testkit.Rows("12")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -596,7 +597,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustQuery("select lastval(seq)").Check(testkit.Rows("12")) // trigger the next sequence cache. tk.MustQuery("select nextval(seq)").Check(testkit.Rows("1")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -609,7 +610,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustExec("create sequence seq increment -3 start -2 maxvalue 10 minvalue -10 cache 3 cycle") tk.MustQuery("select lastval(seq)").Check(testkit.Rows("")) tk.MustQuery("select nextval(seq)").Check(testkit.Rows("-2")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -619,7 +620,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustQuery("select setval(seq, -8)").Check(testkit.Rows("-8")) tk.MustQuery("select lastval(seq)").Check(testkit.Rows("-2")) tk.MustQuery("select nextval(seq)").Check(testkit.Rows("10")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -632,7 +633,7 @@ func TestSequenceFunction(t *testing.T) { tk.MustQuery("select nextval(seq)").Check(testkit.Rows("1")) tk.MustQuery("select setval(seq, -8)").Check(testkit.Rows("-8")) tk.MustQuery("select nextval(seq)").Check(testkit.Rows("-9")) - sequenceTable = tk.GetTableByName("test", "seq") + sequenceTable = external.GetTableByName(t, tk, "test", "seq") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() diff --git a/ddl/serial_test.go b/ddl/serial_test.go index e208299e83d4b..73d08a441e8ee 100644 --- a/ddl/serial_test.go +++ b/ddl/serial_test.go @@ -18,17 +18,17 @@ import ( "context" "fmt" "math" - "strconv" "strings" "sync" "sync/atomic" + "testing" "time" - . "github.com/pingcap/check" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/ddl/util" ddlutil "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/errno" @@ -40,468 +40,80 @@ import ( "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" - "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/gcutil" "github.com/pingcap/tidb/util/mock" - "github.com/pingcap/tidb/util/testkit" - "github.com/pingcap/tidb/util/testutil" - . "github.com/pingcap/tidb/util/testutil" + "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/testutils" ) -// Make it serial because config is modified in test cases. -var _ = SerialSuites(&testSerialSuite{}) - -// TODO(tangenta): Move all the parallel tests out of this file. -var _ = Suite(&testIntegrationSuite7{&testIntegrationSuite{}}) - -type testIntegrationSuite7 struct{ *testIntegrationSuite } - -type testIntegrationSuite struct { - lease time.Duration - cluster testutils.Cluster - store kv.Storage - dom *domain.Domain - ctx sessionctx.Context -} - -func setupIntegrationSuite(s *testIntegrationSuite, c *C) { - var err error - s.lease = 50 * time.Millisecond - ddl.SetWaitTimeWhenErrorOccurred(0) - - s.store, err = mockstore.NewMockStore( - mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithSingleStore(c) - s.cluster = c - }), - ) - c.Assert(err, IsNil) - session.SetSchemaLease(s.lease) - session.DisableStats4Test() - s.dom, err = session.BootstrapSession(s.store) - c.Assert(err, IsNil) - - se, err := session.CreateSession4Test(s.store) - c.Assert(err, IsNil) - s.ctx = se.(sessionctx.Context) - _, err = se.Execute(context.Background(), "create database test_db") - c.Assert(err, IsNil) -} - -func tearDownIntegrationSuiteTest(s *testIntegrationSuite, c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestTruncateAllPartitions(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - r := tk.MustQuery("show tables") - for _, tb := range r.Rows() { - tableName := tb[0] - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } -} - -func tearDownIntegrationSuite(s *testIntegrationSuite, c *C) { - s.dom.Close() - s.store.Close() -} - -func (s *testIntegrationSuite) SetUpSuite(c *C) { - setupIntegrationSuite(s, c) -} - -func (s *testIntegrationSuite) TearDownSuite(c *C) { - tearDownIntegrationSuite(s, c) + tk.MustExec("create table partition_table (v int) partition by hash (v) partitions 10") + tk.MustExec("insert into partition_table values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)") + tk.MustExec("alter table partition_table truncate partition all") + tk.MustQuery("select count(*) from partition_table").Check(testkit.Rows("0")) } -type testMaxTableRowIDContext struct { - c *C - d ddl.DDL - tbl table.Table -} - -func newTestMaxTableRowIDContext(c *C, d ddl.DDL, tbl table.Table) *testMaxTableRowIDContext { - return &testMaxTableRowIDContext{ - c: c, - d: d, - tbl: tbl, - } -} - -func getMaxTableHandle(ctx *testMaxTableRowIDContext, store kv.Storage) (kv.Handle, bool) { - c := ctx.c - d := ctx.d - tbl := ctx.tbl - curVer, err := store.CurrentVersion(kv.GlobalTxnScope) - c.Assert(err, IsNil) - maxHandle, emptyTable, err := d.GetTableMaxHandle(curVer.Ver, tbl.(table.PhysicalTable)) - c.Assert(err, IsNil) - return maxHandle, emptyTable -} - -func checkGetMaxTableRowID(ctx *testMaxTableRowIDContext, store kv.Storage, expectEmpty bool, expectMaxHandle kv.Handle) { - c := ctx.c - maxHandle, emptyTable := getMaxTableHandle(ctx, store) - c.Assert(emptyTable, Equals, expectEmpty) - c.Assert(maxHandle, testutil.HandleEquals, expectMaxHandle) -} - -type testSerialSuite struct { - store kv.Storage - cluster testutils.Cluster - dom *domain.Domain -} - -func (s *testSerialSuite) SetUpSuite(c *C) { - session.SetSchemaLease(200 * time.Millisecond) - session.DisableStats4Test() - config.UpdateGlobal(func(conf *config.Config) { - // Update config here. - }) - - ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) - - var err error - s.store, err = mockstore.NewMockStore( - mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithSingleStore(c) - s.cluster = c - }), - ) - c.Assert(err, IsNil) - - s.dom, err = session.BootstrapSession(s.store) - c.Assert(err, IsNil) -} +func TestIssue23872(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") -func (s *testSerialSuite) TearDownSuite(c *C) { - if s.dom != nil { - s.dom.Close() - } - if s.store != nil { - s.store.Close() + for _, test := range []struct { + sql string + flag uint + }{ + { + "create table t(id smallint,id1 int, primary key (id))", + mysql.NotNullFlag | mysql.PriKeyFlag | mysql.NoDefaultValueFlag, + }, + { + "create table t(a int default 1, primary key(a))", + mysql.NotNullFlag | mysql.PriKeyFlag, + }, + } { + tk.MustExec("drop table if exists t") + tk.MustExec(test.sql) + rs, err := tk.Exec("select * from t") + require.NoError(t, err) + cols := rs.Fields() + require.NoError(t, rs.Close()) + require.Equal(t, test.flag, cols[0].Column.Flag) } } -func (s *testSerialSuite) TestChangeMaxIndexLength(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) +func TestChangeMaxIndexLength(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) defer config.RestoreFunc()() config.UpdateGlobal(func(conf *config.Config) { conf.MaxIndexLength = config.DefMaxOfMaxIndexLength }) - tk.MustExec("drop table if exists t;") - tk.MustExec("drop table if exists t1;") - - tk.MustExec("create table t (c1 varchar(3073), index(c1)) charset = ascii;") - tk.MustExec(fmt.Sprintf("create table t1 (c1 varchar(%d), index(c1)) charset = ascii;", config.DefMaxOfMaxIndexLength)) - _, err := tk.Exec(fmt.Sprintf("create table t2 (c1 varchar(%d), index(c1)) charset = ascii;", config.DefMaxOfMaxIndexLength+1)) - c.Assert(err.Error(), Equals, "[ddl:1071]Specified key was too long; max key length is 12288 bytes") - tk.MustExec("drop table t, t1") -} - -func (s *testIntegrationSuite7) TestPrimaryKey(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_primary_key;") - tk.MustExec("create database test_primary_key;") - tk.MustExec("use test_primary_key;") - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeIntOnly - - // Test add/drop primary key on a plain table. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a int, b varchar(10));") - tk.MustGetErrCode("alter table t add primary key(a) clustered;", errno.ErrUnsupportedDDLOperation) - tk.MustExec("alter table t add primary key(a) nonclustered;") - tk.MustExec("alter table t drop primary key;") - tk.MustExec("alter table t add primary key(a) nonclustered;") - tk.MustExec("drop index `primary` on t;") - tk.MustExec("alter table t add primary key(a);") // implicit nonclustered - tk.MustExec("drop index `primary` on t;") - tk.MustGetErrCode("drop index `primary` on t;", errno.ErrCantDropFieldOrKey) - - // Test add/drop primary key on a PKIsHandle table. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a int, b varchar(10), primary key(a) clustered);") - tk.MustGetErrCode("alter table t drop primary key;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t add primary key(a) clustered;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t add primary key(a) nonclustered;", mysql.ErrMultiplePriKey) - tk.MustGetErrCode("alter table t add primary key(a);", errno.ErrMultiplePriKey) // implicit nonclustered - tk.MustGetErrCode("alter table t add primary key(b) clustered;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t add primary key(b) nonclustered;", errno.ErrMultiplePriKey) - tk.MustGetErrCode("alter table t add primary key(b);", errno.ErrMultiplePriKey) // implicit nonclustered - - // Test add/drop primary key on a nonclustered primary key table. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a int, b varchar(10), primary key(a) nonclustered);") - tk.MustGetErrCode("alter table t add primary key(a) clustered;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t add primary key(a) nonclustered;", errno.ErrMultiplePriKey) - tk.MustGetErrCode("alter table t add primary key(a);", errno.ErrMultiplePriKey) // implicit nonclustered - tk.MustGetErrCode("alter table t add primary key(b) clustered;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t add primary key(b) nonclustered;", errno.ErrMultiplePriKey) - tk.MustGetErrCode("alter table t add primary key(b);", errno.ErrMultiplePriKey) // implicit nonclustered - tk.MustExec("alter table t drop primary key;") - - // Test add/drop primary key on a CommonHandle key table. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a int, b varchar(10), primary key(b) clustered);") - tk.MustGetErrCode("alter table t drop primary key;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t add primary key(a) clustered;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t add primary key(a) nonclustered;", errno.ErrMultiplePriKey) - tk.MustGetErrCode("alter table t add primary key(a);", errno.ErrMultiplePriKey) // implicit nonclustered - tk.MustGetErrCode("alter table t add primary key(b) clustered;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("alter table t add primary key(b) nonclustered;", errno.ErrMultiplePriKey) - tk.MustGetErrCode("alter table t add primary key(b);", errno.ErrMultiplePriKey) // implicit nonclustered - - // Test add/drop primary key when the column&index name is `primary`. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (`primary` int);") - tk.MustExec("alter table t add index (`primary`);") - tk.MustGetErrCode("drop index `primary` on t;", errno.ErrCantDropFieldOrKey) - - // The primary key cannot be invisible, for the case pk_is_handle. - tk.MustExec("drop table if exists t;") - tk.MustGetErrCode("create table t(c1 int not null, primary key(c1) invisible);", errno.ErrPKIndexCantBeInvisible) - tk.MustExec("create table t (a int, b int not null, primary key(a), unique(b) invisible);") - tk.MustExec("drop table t;") -} - -func (s *testIntegrationSuite7) TestDropAutoIncrementIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int(11) not null auto_increment key, b int(11), c bigint, unique key (a, b, c))") - tk.MustExec("alter table t1 drop index a") -} - -func (s *testIntegrationSuite7) TestMultiRegionGetTableEndHandle(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_get_endhandle") - tk.MustExec("create database test_get_endhandle") - tk.MustExec("use test_get_endhandle") - - tk.MustExec("create table t(a bigint PRIMARY KEY, b int)") - var builder strings.Builder - fmt.Fprintf(&builder, "insert into t values ") - for i := 0; i < 1000; i++ { - fmt.Fprintf(&builder, "(%v, %v),", i, i) - } - sql := builder.String() - tk.MustExec(sql[:len(sql)-1]) - - // Get table ID for split. - dom := domain.GetDomain(tk.Se) - is := dom.InfoSchema() - tbl, err := is.TableByName(model.NewCIStr("test_get_endhandle"), model.NewCIStr("t")) - c.Assert(err, IsNil) - tblID := tbl.Meta().ID - - d := s.dom.DDL() - testCtx := newTestMaxTableRowIDContext(c, d, tbl) - - // Split the table. - tableStart := tablecodec.GenTableRecordPrefix(tblID) - s.cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 100) - - maxHandle, emptyTable := getMaxTableHandle(testCtx, s.store) - c.Assert(emptyTable, IsFalse) - c.Assert(maxHandle, Equals, kv.IntHandle(999)) - - tk.MustExec("insert into t values(10000, 1000)") - maxHandle, emptyTable = getMaxTableHandle(testCtx, s.store) - c.Assert(emptyTable, IsFalse) - c.Assert(maxHandle, Equals, kv.IntHandle(10000)) - - tk.MustExec("insert into t values(-1, 1000)") - maxHandle, emptyTable = getMaxTableHandle(testCtx, s.store) - c.Assert(emptyTable, IsFalse) - c.Assert(maxHandle, Equals, kv.IntHandle(10000)) -} - -func (s *testIntegrationSuite7) TestGetTableEndHandle(c *C) { - // TestGetTableEndHandle test ddl.GetTableMaxHandle method, which will return the max row id of the table. - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_get_endhandle") - tk.MustExec("create database test_get_endhandle") - tk.MustExec("use test_get_endhandle") - // Test PK is handle. - tk.MustExec("create table t(a bigint PRIMARY KEY, b int)") - - is := s.dom.InfoSchema() - d := s.dom.DDL() - tbl, err := is.TableByName(model.NewCIStr("test_get_endhandle"), model.NewCIStr("t")) - c.Assert(err, IsNil) - - testCtx := newTestMaxTableRowIDContext(c, d, tbl) - // test empty table - checkGetMaxTableRowID(testCtx, s.store, true, nil) - - tk.MustExec("insert into t values(-1, 1)") - checkGetMaxTableRowID(testCtx, s.store, false, kv.IntHandle(-1)) - - tk.MustExec("insert into t values(9223372036854775806, 1)") - checkGetMaxTableRowID(testCtx, s.store, false, kv.IntHandle(9223372036854775806)) - - tk.MustExec("insert into t values(9223372036854775807, 1)") - checkGetMaxTableRowID(testCtx, s.store, false, kv.IntHandle(9223372036854775807)) - - tk.MustExec("insert into t values(10, 1)") - tk.MustExec("insert into t values(102149142, 1)") - checkGetMaxTableRowID(testCtx, s.store, false, kv.IntHandle(9223372036854775807)) - - tk.MustExec("create table t1(a bigint PRIMARY KEY, b int)") - - var builder strings.Builder - fmt.Fprintf(&builder, "insert into t1 values ") - for i := 0; i < 1000; i++ { - fmt.Fprintf(&builder, "(%v, %v),", i, i) - } - sql := builder.String() - tk.MustExec(sql[:len(sql)-1]) - - is = s.dom.InfoSchema() - testCtx.tbl, err = is.TableByName(model.NewCIStr("test_get_endhandle"), model.NewCIStr("t1")) - c.Assert(err, IsNil) - checkGetMaxTableRowID(testCtx, s.store, false, kv.IntHandle(999)) - - // Test PK is not handle - tk.MustExec("create table t2(a varchar(255))") - - is = s.dom.InfoSchema() - testCtx.tbl, err = is.TableByName(model.NewCIStr("test_get_endhandle"), model.NewCIStr("t2")) - c.Assert(err, IsNil) - checkGetMaxTableRowID(testCtx, s.store, true, nil) - - builder.Reset() - fmt.Fprintf(&builder, "insert into t2 values ") - for i := 0; i < 1000; i++ { - fmt.Fprintf(&builder, "(%v),", i) - } - sql = builder.String() - tk.MustExec(sql[:len(sql)-1]) - - result := tk.MustQuery("select MAX(_tidb_rowid) from t2") - maxHandle, emptyTable := getMaxTableHandle(testCtx, s.store) - result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) - c.Assert(emptyTable, IsFalse) - - tk.MustExec("insert into t2 values(100000)") - result = tk.MustQuery("select MAX(_tidb_rowid) from t2") - maxHandle, emptyTable = getMaxTableHandle(testCtx, s.store) - result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) - c.Assert(emptyTable, IsFalse) - - tk.MustExec(fmt.Sprintf("insert into t2 values(%v)", math.MaxInt64-1)) - result = tk.MustQuery("select MAX(_tidb_rowid) from t2") - maxHandle, emptyTable = getMaxTableHandle(testCtx, s.store) - result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) - c.Assert(emptyTable, IsFalse) - - tk.MustExec(fmt.Sprintf("insert into t2 values(%v)", math.MaxInt64)) - result = tk.MustQuery("select MAX(_tidb_rowid) from t2") - maxHandle, emptyTable = getMaxTableHandle(testCtx, s.store) - result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) - c.Assert(emptyTable, IsFalse) - - tk.MustExec("insert into t2 values(100)") - result = tk.MustQuery("select MAX(_tidb_rowid) from t2") - maxHandle, emptyTable = getMaxTableHandle(testCtx, s.store) - result.Check(testkit.Rows(fmt.Sprintf("%v", maxHandle.IntValue()))) - c.Assert(emptyTable, IsFalse) -} - -func (s *testIntegrationSuite7) TestMultiRegionGetTableEndCommonHandle(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_get_endhandle") - tk.MustExec("create database test_get_endhandle") - tk.MustExec("use test_get_endhandle") - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - - tk.MustExec("create table t(a varchar(20), b int, c float, d bigint, primary key (a, b, c))") - var builder strings.Builder - fmt.Fprintf(&builder, "insert into t values ") - for i := 0; i < 1000; i++ { - fmt.Fprintf(&builder, "('%v', %v, %v, %v),", i, i, i, i) - } - sql := builder.String() - tk.MustExec(sql[:len(sql)-1]) - - // Get table ID for split. - dom := domain.GetDomain(tk.Se) - is := dom.InfoSchema() - tbl, err := is.TableByName(model.NewCIStr("test_get_endhandle"), model.NewCIStr("t")) - c.Assert(err, IsNil) - tblID := tbl.Meta().ID - - d := s.dom.DDL() - testCtx := newTestMaxTableRowIDContext(c, d, tbl) - - // Split the table. - tableStart := tablecodec.GenTableRecordPrefix(tblID) - s.cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 100) - - maxHandle, emptyTable := getMaxTableHandle(testCtx, s.store) - c.Assert(emptyTable, IsFalse) - c.Assert(maxHandle, HandleEquals, MustNewCommonHandle(c, "999", 999, 999)) - - tk.MustExec("insert into t values('a', 1, 1, 1)") - maxHandle, emptyTable = getMaxTableHandle(testCtx, s.store) - c.Assert(emptyTable, IsFalse) - c.Assert(maxHandle, HandleEquals, MustNewCommonHandle(c, "a", 1, 1)) - - tk.MustExec("insert into t values('0000', 1, 1, 1)") - maxHandle, emptyTable = getMaxTableHandle(testCtx, s.store) - c.Assert(emptyTable, IsFalse) - c.Assert(maxHandle, HandleEquals, MustNewCommonHandle(c, "a", 1, 1)) -} - -func (s *testIntegrationSuite7) TestGetTableEndCommonHandle(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_get_endhandle") - tk.MustExec("create database test_get_endhandle") - tk.MustExec("use test_get_endhandle") - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - - tk.MustExec("create table t(a varchar(15), b bigint, c int, primary key (a, b))") - tk.MustExec("create table t1(a varchar(15), b bigint, c int, primary key (a(2), b))") - - is := s.dom.InfoSchema() - d := s.dom.DDL() - tbl, err := is.TableByName(model.NewCIStr("test_get_endhandle"), model.NewCIStr("t")) - c.Assert(err, IsNil) - testCtx := newTestMaxTableRowIDContext(c, d, tbl) - - // test empty table - checkGetMaxTableRowID(testCtx, s.store, true, nil) - tk.MustExec("insert into t values('abc', 1, 10)") - expectedHandle := MustNewCommonHandle(c, "abc", 1) - checkGetMaxTableRowID(testCtx, s.store, false, expectedHandle) - tk.MustExec("insert into t values('abchzzzzzzzz', 1, 10)") - expectedHandle = MustNewCommonHandle(c, "abchzzzzzzzz", 1) - checkGetMaxTableRowID(testCtx, s.store, false, expectedHandle) - tk.MustExec("insert into t values('a', 1, 10)") - tk.MustExec("insert into t values('ab', 1, 10)") - checkGetMaxTableRowID(testCtx, s.store, false, expectedHandle) - - // Test MaxTableRowID with prefixed primary key. - tbl, err = is.TableByName(model.NewCIStr("test_get_endhandle"), model.NewCIStr("t1")) - c.Assert(err, IsNil) - d = s.dom.DDL() - testCtx = newTestMaxTableRowIDContext(c, d, tbl) - checkGetMaxTableRowID(testCtx, s.store, true, nil) - tk.MustExec("insert into t1 values('abccccc', 1, 10)") - expectedHandle = MustNewCommonHandle(c, "ab", 1) - checkGetMaxTableRowID(testCtx, s.store, false, expectedHandle) - tk.MustExec("insert into t1 values('azzzz', 1, 10)") - expectedHandle = MustNewCommonHandle(c, "az", 1) - checkGetMaxTableRowID(testCtx, s.store, false, expectedHandle) + tk.MustExec("create table t (c1 varchar(3073), index(c1)) charset = ascii") + tk.MustExec(fmt.Sprintf("create table t1 (c1 varchar(%d), index(c1)) charset = ascii;", config.DefMaxOfMaxIndexLength)) + err := tk.ExecToErr(fmt.Sprintf("create table t2 (c1 varchar(%d), index(c1)) charset = ascii;", config.DefMaxOfMaxIndexLength+1)) + require.EqualError(t, err, "[ddl:1071]Specified key was too long; max key length is 12288 bytes") } -func (s *testSerialSuite) TestCreateTableWithLike(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreateTableWithLike(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) // for the same database tk.MustExec("create database ctwl_db") tk.MustExec("use ctwl_db") @@ -515,22 +127,21 @@ func (s *testSerialSuite) TestCreateTableWithLike(c *C) { tk.MustQuery("select * from t").Check(testkit.Rows("10 1")) tk.MustQuery("select * from t1").Check(testkit.Rows("1 11")) tk.MustQuery("select * from t2").Check(testkit.Rows("1 12")) - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() + is := domain.GetDomain(tk.Session()).InfoSchema() tbl1, err := is.TableByName(model.NewCIStr("ctwl_db"), model.NewCIStr("t1")) - c.Assert(err, IsNil) + require.NoError(t, err) tbl1Info := tbl1.Meta() - c.Assert(tbl1Info.ForeignKeys, IsNil) - c.Assert(tbl1Info.PKIsHandle, Equals, true) + require.Nil(t, tbl1Info.ForeignKeys) + require.True(t, tbl1Info.PKIsHandle) col := tbl1Info.Columns[0] hasNotNull := mysql.HasNotNullFlag(col.Flag) - c.Assert(hasNotNull, IsTrue) + require.True(t, hasNotNull) tbl2, err := is.TableByName(model.NewCIStr("ctwl_db"), model.NewCIStr("t2")) - c.Assert(err, IsNil) + require.NoError(t, err) tbl2Info := tbl2.Meta() - c.Assert(tbl2Info.ForeignKeys, IsNil) - c.Assert(tbl2Info.PKIsHandle, Equals, true) - c.Assert(mysql.HasNotNullFlag(tbl2Info.Columns[0].Flag), IsTrue) + require.Nil(t, tbl2Info.ForeignKeys) + require.True(t, tbl2Info.PKIsHandle) + require.True(t, mysql.HasNotNullFlag(tbl2Info.Columns[0].Flag)) // for different databases tk.MustExec("create database ctwl_db1") @@ -538,57 +149,57 @@ func (s *testSerialSuite) TestCreateTableWithLike(c *C) { tk.MustExec("create table t1 like ctwl_db.t") tk.MustExec("insert into t1 set c2=11") tk.MustQuery("select * from t1").Check(testkit.Rows("1 11")) - is = domain.GetDomain(ctx).InfoSchema() + is = domain.GetDomain(tk.Session()).InfoSchema() tbl1, err = is.TableByName(model.NewCIStr("ctwl_db1"), model.NewCIStr("t1")) - c.Assert(err, IsNil) - c.Assert(tbl1.Meta().ForeignKeys, IsNil) + require.NoError(t, err) + require.Nil(t, tbl1.Meta().ForeignKeys) // for table partition tk.MustExec("use ctwl_db") tk.MustExec("create table pt1 (id int) partition by range columns (id) (partition p0 values less than (10))") - tk.MustExec("insert into pt1 values (1),(2),(3),(4);") - tk.MustExec("create table ctwl_db1.pt1 like ctwl_db.pt1;") + tk.MustExec("insert into pt1 values (1),(2),(3),(4)") + tk.MustExec("create table ctwl_db1.pt1 like ctwl_db.pt1") tk.MustQuery("select * from ctwl_db1.pt1").Check(testkit.Rows()) // Test create table like for partition table. atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) tk.MustExec("use test") - tk.MustExec("set @@global.tidb_scatter_region=1;") - tk.MustExec("drop table if exists partition_t;") + tk.MustExec("set @@global.tidb_scatter_region=1") + tk.MustExec("drop table if exists partition_t") tk.MustExec("create table partition_t (a int, b int,index(a)) partition by hash (a) partitions 3") - tk.MustExec("drop table if exists t1;") + tk.MustExec("drop table if exists t1") tk.MustExec("create table t1 like partition_t") re := tk.MustQuery("show table t1 regions") rows := re.Rows() - c.Assert(len(rows), Equals, 3) - tbl := testGetTableByName(c, tk.Se, "test", "t1") + require.Len(t, rows, 3) + tbl := external.GetTableByName(t, tk, "test", "t1") partitionDef := tbl.Meta().GetPartitionInfo().Definitions - c.Assert(rows[0][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[0].ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[1].ID)) - c.Assert(rows[2][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[2].ID)) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[0].ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[1].ID), rows[1][1]) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[2].ID), rows[2][1]) // Test pre-split table region when create table like. tk.MustExec("drop table if exists t_pre") - tk.MustExec("create table t_pre (a int, b int) shard_row_id_bits = 2 pre_split_regions=2;") - tk.MustExec("drop table if exists t2;") + tk.MustExec("create table t_pre (a int, b int) shard_row_id_bits = 2 pre_split_regions=2") + tk.MustExec("drop table if exists t2") tk.MustExec("create table t2 like t_pre") re = tk.MustQuery("show table t2 regions") rows = re.Rows() // Table t2 which create like t_pre should have 4 regions now. - c.Assert(len(rows), Equals, 4) - tbl = testGetTableByName(c, tk.Se, "test", "t2") - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_2305843009213693952", tbl.Meta().ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_4611686018427387904", tbl.Meta().ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_6917529027641081856", tbl.Meta().ID)) + require.Len(t, rows, 4) + tbl = external.GetTableByName(t, tk, "test", "t2") + require.Equal(t, fmt.Sprintf("t_%d_r_2305843009213693952", tbl.Meta().ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_4611686018427387904", tbl.Meta().ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_6917529027641081856", tbl.Meta().ID), rows[3][1]) // Test after truncate table the region is also splited. tk.MustExec("truncate table t2") re = tk.MustQuery("show table t2 regions") rows = re.Rows() - c.Assert(len(rows), Equals, 4) - tbl = testGetTableByName(c, tk.Se, "test", "t2") - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_2305843009213693952", tbl.Meta().ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_4611686018427387904", tbl.Meta().ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_6917529027641081856", tbl.Meta().ID)) + require.Equal(t, 4, len(rows)) + tbl = external.GetTableByName(t, tk, "test", "t2") + require.Equal(t, fmt.Sprintf("t_%d_r_2305843009213693952", tbl.Meta().ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_4611686018427387904", tbl.Meta().ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_6917529027641081856", tbl.Meta().ID), rows[3][1]) defer atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) @@ -617,60 +228,61 @@ func (s *testSerialSuite) TestCreateTableWithLike(c *C) { tk.MustExec("drop database ctwl_db1") } -func (s *testSerialSuite) TestCreateTableWithLikeAtTemporaryMode(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCreateTableWithLikeAtTemporaryMode(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) // Test create table like at temporary mode. tk.MustExec("use test") - tk.MustExec("drop table if exists temporary_table;") + tk.MustExec("drop table if exists temporary_table") tk.MustExec("create global temporary table temporary_table (a int, b int,index(a)) on commit delete rows") - tk.MustExec("drop table if exists temporary_table_t1;") - _, err := tk.Exec("create table temporary_table_t1 like temporary_table") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error()) - tk.MustExec("drop table if exists temporary_table;") + tk.MustExec("drop table if exists temporary_table_t1") + err := tk.ExecToErr("create table temporary_table_t1 like temporary_table") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error(), err.Error()) + tk.MustExec("drop table if exists temporary_table") // Test create temporary table like. // Test auto_random. tk.MustExec("drop table if exists auto_random_table") - _, err = tk.Exec("create table auto_random_table (a bigint primary key auto_random(3), b varchar(255));") + err = tk.ExecToErr("create table auto_random_table (a bigint primary key auto_random(3), b varchar(255))") defer tk.MustExec("drop table if exists auto_random_table") tk.MustExec("drop table if exists auto_random_temporary_global") - _, err = tk.Exec("create global temporary table auto_random_temporary_global like auto_random_table on commit delete rows;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("auto_random").Error()) + err = tk.ExecToErr("create global temporary table auto_random_temporary_global like auto_random_table on commit delete rows") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("auto_random").Error(), err.Error()) // Test pre split regions. tk.MustExec("drop table if exists table_pre_split") - _, err = tk.Exec("create table table_pre_split(id int) shard_row_id_bits = 2 pre_split_regions=2;") + err = tk.ExecToErr("create table table_pre_split(id int) shard_row_id_bits = 2 pre_split_regions=2") defer tk.MustExec("drop table if exists table_pre_split") tk.MustExec("drop table if exists temporary_table_pre_split") - _, err = tk.Exec("create global temporary table temporary_table_pre_split like table_pre_split ON COMMIT DELETE ROWS;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions").Error()) + err = tk.ExecToErr("create global temporary table temporary_table_pre_split like table_pre_split ON COMMIT DELETE ROWS") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions").Error(), err.Error()) // Test shard_row_id_bits. tk.MustExec("drop table if exists shard_row_id_table, shard_row_id_temporary_table, shard_row_id_table_plus, shard_row_id_temporary_table_plus") - _, err = tk.Exec("create table shard_row_id_table (a int) shard_row_id_bits = 5;") - _, err = tk.Exec("create global temporary table shard_row_id_temporary_table like shard_row_id_table on commit delete rows;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) - tk.MustExec("create table shard_row_id_table_plus (a int);") - tk.MustExec("create global temporary table shard_row_id_temporary_table_plus (a int) on commit delete rows;") + err = tk.ExecToErr("create table shard_row_id_table (a int) shard_row_id_bits = 5") + err = tk.ExecToErr("create global temporary table shard_row_id_temporary_table like shard_row_id_table on commit delete rows") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error(), err.Error()) + tk.MustExec("create table shard_row_id_table_plus (a int)") + tk.MustExec("create global temporary table shard_row_id_temporary_table_plus (a int) on commit delete rows") defer tk.MustExec("drop table if exists shard_row_id_table, shard_row_id_temporary_table, shard_row_id_table_plus, shard_row_id_temporary_table_plus") - _, err = tk.Exec("alter table shard_row_id_temporary_table_plus shard_row_id_bits = 4;") - c.Assert(err.Error(), Equals, ddl.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) + err = tk.ExecToErr("alter table shard_row_id_temporary_table_plus shard_row_id_bits = 4") + require.Equal(t, dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error(), err.Error()) // Test partition. - tk.MustExec("drop table if exists global_partition_table;") - tk.MustExec("create table global_partition_table (a int, b int) partition by hash(a) partitions 3;") - defer tk.MustExec("drop table if exists global_partition_table;") - tk.MustGetErrCode("create global temporary table global_partition_temp_table like global_partition_table ON COMMIT DELETE ROWS;", - errno.ErrPartitionNoTemporary) + tk.MustExec("drop table if exists global_partition_table") + tk.MustExec("create table global_partition_table (a int, b int) partition by hash(a) partitions 3") + defer tk.MustExec("drop table if exists global_partition_table") + tk.MustGetErrCode("create global temporary table global_partition_temp_table like global_partition_table ON COMMIT DELETE ROWS;", errno.ErrPartitionNoTemporary) // Test virtual columns. tk.MustExec("drop table if exists test_gv_ddl, test_gv_ddl_temp") tk.MustExec(`create table test_gv_ddl(a int, b int as (a+8) virtual, c int as (b + 2) stored)`) tk.MustExec(`create global temporary table test_gv_ddl_temp like test_gv_ddl on commit delete rows;`) defer tk.MustExec("drop table if exists test_gv_ddl_temp, test_gv_ddl") - is := tk.Se.(sessionctx.Context).GetInfoSchema().(infoschema.InfoSchema) + is := tk.Session().GetInfoSchema().(infoschema.InfoSchema) table, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("test_gv_ddl")) - c.Assert(err, IsNil) + require.NoError(t, err) testCases := []struct { generatedExprString string generatedStored bool @@ -680,113 +292,113 @@ func (s *testSerialSuite) TestCreateTableWithLikeAtTemporaryMode(c *C) { {"`b` + 2", true}, } for i, column := range table.Meta().Columns { - c.Assert(column.GeneratedExprString, Equals, testCases[i].generatedExprString) - c.Assert(column.GeneratedStored, Equals, testCases[i].generatedStored) + require.Equal(t, testCases[i].generatedExprString, column.GeneratedExprString) + require.Equal(t, testCases[i].generatedStored, column.GeneratedStored) } result := tk.MustQuery(`DESC test_gv_ddl_temp`) result.Check(testkit.Rows(`a int(11) YES `, `b int(11) YES VIRTUAL GENERATED`, `c int(11) YES STORED GENERATED`)) - tk.MustExec("begin;") + tk.MustExec("begin") tk.MustExec("insert into test_gv_ddl_temp values (1, default, default)") tk.MustQuery("select * from test_gv_ddl_temp").Check(testkit.Rows("1 9 11")) - _, err = tk.Exec("commit") - c.Assert(err, IsNil) + err = tk.ExecToErr("commit") + require.NoError(t, err) // Test foreign key. tk.MustExec("drop table if exists test_foreign_key, t1") - tk.MustExec("create table t1 (a int, b int);") - tk.MustExec("create table test_foreign_key (c int,d int,foreign key (d) references t1 (b));") - defer tk.MustExec("drop table if exists test_foreign_key, t1;") - tk.MustExec("create global temporary table test_foreign_key_temp like test_foreign_key on commit delete rows;") - is = tk.Se.(sessionctx.Context).GetInfoSchema().(infoschema.InfoSchema) + tk.MustExec("create table t1 (a int, b int)") + tk.MustExec("create table test_foreign_key (c int,d int,foreign key (d) references t1 (b))") + defer tk.MustExec("drop table if exists test_foreign_key, t1") + tk.MustExec("create global temporary table test_foreign_key_temp like test_foreign_key on commit delete rows") + is = tk.Session().GetInfoSchema().(infoschema.InfoSchema) table, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("test_foreign_key_temp")) - c.Assert(err, IsNil) + require.NoError(t, err) tableInfo := table.Meta() - c.Assert(len(tableInfo.ForeignKeys), Equals, 0) + require.Equal(t, 0, len(tableInfo.ForeignKeys)) // Issue 25613. // Test from->normal, to->normal. tk.MustExec("drop table if exists tb1, tb2") - tk.MustExec("create table tb1(id int);") + tk.MustExec("create table tb1(id int)") tk.MustExec("create table tb2 like tb1") defer tk.MustExec("drop table if exists tb1, tb2") - tk.MustQuery("show create table tb2;").Check(testkit.Rows("tb2 CREATE TABLE `tb2` (\n" + + tk.MustQuery("show create table tb2").Check(testkit.Rows("tb2 CREATE TABLE `tb2` (\n" + " `id` int(11) DEFAULT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) // Test from->normal, to->global temporary. tk.MustExec("drop table if exists tb3, tb4") - tk.MustExec("create table tb3(id int);") - tk.MustExec("create global temporary table tb4 like tb3 on commit delete rows;") + tk.MustExec("create table tb3(id int)") + tk.MustExec("create global temporary table tb4 like tb3 on commit delete rows") defer tk.MustExec("drop table if exists tb3, tb4") - tk.MustQuery("show create table tb4;").Check(testkit.Rows("tb4 CREATE GLOBAL TEMPORARY TABLE `tb4` (\n" + + tk.MustQuery("show create table tb4").Check(testkit.Rows("tb4 CREATE GLOBAL TEMPORARY TABLE `tb4` (\n" + " `id` int(11) DEFAULT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ON COMMIT DELETE ROWS")) // Test from->global temporary, to->normal. tk.MustExec("drop table if exists tb5, tb6") - tk.MustExec("create global temporary table tb5(id int) on commit delete rows;") - _, err = tk.Exec("create table tb6 like tb5;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error()) + tk.MustExec("create global temporary table tb5(id int) on commit delete rows") + err = tk.ExecToErr("create table tb6 like tb5") + require.EqualError(t, err, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error()) defer tk.MustExec("drop table if exists tb5, tb6") // Test from->global temporary, to->global temporary. tk.MustExec("drop table if exists tb7, tb8") - tk.MustExec("create global temporary table tb7(id int) on commit delete rows;") - _, err = tk.Exec("create global temporary table tb8 like tb7 on commit delete rows;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error()) + tk.MustExec("create global temporary table tb7(id int) on commit delete rows") + err = tk.ExecToErr("create global temporary table tb8 like tb7 on commit delete rows") + require.EqualError(t, err, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error()) defer tk.MustExec("drop table if exists tb7, tb8") // Test from->normal, to->local temporary tk.MustExec("drop table if exists tb11, tb12") tk.MustExec("create table tb11 (i int primary key, j int)") tk.MustExec("create temporary table tb12 like tb11") - tk.MustQuery("show create table tb12;").Check(testkit.Rows("tb12 CREATE TEMPORARY TABLE `tb12` (\n" + + tk.MustQuery("show create table tb12").Check(testkit.Rows("tb12 CREATE TEMPORARY TABLE `tb12` (\n" + " `i` int(11) NOT NULL,\n `j` int(11) DEFAULT NULL,\n PRIMARY KEY (`i`) /*T![clustered_index] CLUSTERED */\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("create temporary table if not exists tb12 like tb11;") - c.Assert(tk.Se.(sessionctx.Context).GetSessionVars().StmtCtx.GetWarnings()[0].Err.Error(), Equals, - infoschema.ErrTableExists.GenWithStackByArgs("test.tb12").Error()) + tk.MustExec("create temporary table if not exists tb12 like tb11") + err = infoschema.ErrTableExists.GenWithStackByArgs("test.tb12") + require.EqualError(t, err, tk.Session().GetSessionVars().StmtCtx.GetWarnings()[0].Err.Error()) defer tk.MustExec("drop table if exists tb11, tb12") // Test from->local temporary, to->local temporary tk.MustExec("drop table if exists tb13, tb14") tk.MustExec("create temporary table tb13 (i int primary key, j int)") - _, err = tk.Exec("create temporary table tb14 like tb13;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error()) + err = tk.ExecToErr("create temporary table tb14 like tb13") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error(), err.Error()) defer tk.MustExec("drop table if exists tb13, tb14") // Test from->local temporary, to->normal tk.MustExec("drop table if exists tb15, tb16") tk.MustExec("create temporary table tb15 (i int primary key, j int)") - _, err = tk.Exec("create table tb16 like tb15;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error()) + err = tk.ExecToErr("create table tb16 like tb15") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("create table like").Error(), err.Error()) defer tk.MustExec("drop table if exists tb15, tb16") tk.MustExec("drop table if exists table_pre_split, tmp_pre_split") - tk.MustExec("create table table_pre_split(id int) shard_row_id_bits=2 pre_split_regions=2;") - _, err = tk.Exec("create temporary table tmp_pre_split like table_pre_split") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions").Error()) + tk.MustExec("create table table_pre_split(id int) shard_row_id_bits=2 pre_split_regions=2") + err = tk.ExecToErr("create temporary table tmp_pre_split like table_pre_split") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions").Error(), err.Error()) defer tk.MustExec("drop table if exists table_pre_split, tmp_pre_split") tk.MustExec("drop table if exists table_shard_row_id, tmp_shard_row_id") - tk.MustExec("create table table_shard_row_id(id int) shard_row_id_bits=2;") - _, err = tk.Exec("create temporary table tmp_shard_row_id like table_shard_row_id") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error()) + tk.MustExec("create table table_shard_row_id(id int) shard_row_id_bits=2") + err = tk.ExecToErr("create temporary table tmp_shard_row_id like table_shard_row_id") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits").Error(), err.Error()) defer tk.MustExec("drop table if exists table_shard_row_id, tmp_shard_row_id") tk.MustExec("drop table if exists partition_table, tmp_partition_table") - tk.MustExec("create table partition_table (a int, b int) partition by hash(a) partitions 3;") + tk.MustExec("create table partition_table (a int, b int) partition by hash(a) partitions 3") tk.MustGetErrCode("create temporary table tmp_partition_table like partition_table", errno.ErrPartitionNoTemporary) defer tk.MustExec("drop table if exists partition_table, tmp_partition_table") - tk.MustExec("drop table if exists foreign_key_table1, foreign_key_table2, foreign_key_tmp;") - tk.MustExec("create table foreign_key_table1 (a int, b int);") - tk.MustExec("create table foreign_key_table2 (c int,d int,foreign key (d) references foreign_key_table1 (b));") + tk.MustExec("drop table if exists foreign_key_table1, foreign_key_table2, foreign_key_tmp") + tk.MustExec("create table foreign_key_table1 (a int, b int)") + tk.MustExec("create table foreign_key_table2 (c int,d int,foreign key (d) references foreign_key_table1 (b))") tk.MustExec("create temporary table foreign_key_tmp like foreign_key_table2") - is = tk.Se.(sessionctx.Context).GetInfoSchema().(infoschema.InfoSchema) + is = tk.Session().GetInfoSchema().(infoschema.InfoSchema) table, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("foreign_key_tmp")) - c.Assert(err, IsNil) + require.NoError(t, err) tableInfo = table.Meta() - c.Assert(len(tableInfo.ForeignKeys), Equals, 0) - defer tk.MustExec("drop table if exists foreign_key_table1, foreign_key_table2, foreign_key_tmp;") + require.Equal(t, 0, len(tableInfo.ForeignKeys)) + defer tk.MustExec("drop table if exists foreign_key_table1, foreign_key_table2, foreign_key_tmp") // Test for placement tk.MustExec("drop placement policy if exists p1") @@ -796,23 +408,42 @@ func (s *testSerialSuite) TestCreateTableWithLikeAtTemporaryMode(c *C) { tk.MustExec("create table placement_table1(id int) placement policy p1") defer tk.MustExec("drop table if exists placement_table1") - _, err = tk.Exec("create global temporary table g_tmp_placement1 like placement_table1 on commit delete rows") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("placement").Error()) - _, err = tk.Exec("create temporary table l_tmp_placement1 like placement_table1") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("placement").Error()) + err = tk.ExecToErr("create global temporary table g_tmp_placement1 like placement_table1 on commit delete rows") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("placement").Error(), err.Error()) + err = tk.ExecToErr("create temporary table l_tmp_placement1 like placement_table1") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("placement").Error(), err.Error()) +} + +func createMockStoreAndDomain(t *testing.T) (store kv.Storage, dom *domain.Domain, clean func()) { + session.SetSchemaLease(200 * time.Millisecond) + session.DisableStats4Test() + ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) + + var err error + store, err = mockstore.NewMockStore() + require.NoError(t, err) + dom, err = session.BootstrapSession(store) + require.NoError(t, err) + clean = func() { + dom.Close() + require.NoError(t, store.Close()) + } + return } // TestCancelAddIndex1 tests canceling ddl job when the add index worker is not started. -func (s *testSerialSuite) TestCancelAddIndexPanic(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/errorMockPanic", `return(true)`), IsNil) +func TestCancelAddIndexPanic(t *testing.T) { + store, dom, clean := createMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/errorMockPanic", `return(true)`)) defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/errorMockPanic"), IsNil) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/errorMockPanic")) }() - tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(c1 int, c2 int)") - defer tk.MustExec("drop table t;") + defer tk.MustExec("drop table t") for i := 0; i < 5; i++ { tk.MustExec("insert into t values (?, ?)", i, i) } @@ -825,7 +456,7 @@ func (s *testSerialSuite) TestCancelAddIndexPanic(c *C) { if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization && job.SnapshotVer != 0 { jobIDs := []int64{job.ID} hookCtx := mock.NewContext() - hookCtx.Store = s.store + hookCtx.Store = store err := hookCtx.NewTxn(context.Background()) if err != nil { checkErr = errors.Trace(err) @@ -853,39 +484,39 @@ func (s *testSerialSuite) TestCancelAddIndexPanic(c *C) { checkErr = txn.Commit(context.Background()) } } - origHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(origHook) - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) rs, err := tk.Exec("alter table t add index idx_c2(c2)") if rs != nil { - rs.Close() + require.NoError(t, rs.Close()) } - c.Assert(checkErr, IsNil) - c.Assert(err, NotNil) + require.NoError(t, checkErr) + require.Error(t, err) errMsg := err.Error() // Cancelling the job can either succeed or not, it depends on whether the cancelled job takes affect. // For now, there's no way to guarantee that cancelling will always take effect. // TODO: After issue #17904 is fixed, there is no need to tolerate it here. - c.Assert(strings.HasPrefix(errMsg, "[ddl:8214]Cancelled DDL job") || strings.HasPrefix(errMsg, "[ddl:8211]DDL job rollback"), IsTrue) + require.True(t, strings.HasPrefix(errMsg, "[ddl:8214]Cancelled DDL job") || strings.HasPrefix(errMsg, "[ddl:8211]DDL job rollback")) } -func (s *testSerialSuite) TestRecoverTableByJobID(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestRecoverTableByJobID(t *testing.T) { + store, _, clean := createMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists test_recover") tk.MustExec("use test_recover") tk.MustExec("drop table if exists t_recover") - tk.MustExec("create table t_recover (a int);") + tk.MustExec("create table t_recover (a int)") defer func(originGC bool) { if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) + }(util.IsEmulatorGCEnable()) // disable emulator GC. // Otherwise emulator GC will delete table record as soon as possible after execute drop table ddl. - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() gcTimeFormat := "20060102-15:04:05 -0700 MST" timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) timeAfterDrop := time.Now().Add(48 * 60 * 60 * time.Second).Format(gcTimeFormat) @@ -900,23 +531,22 @@ func (s *testSerialSuite) TestRecoverTableByJobID(c *C) { getDDLJobID := func(table, tp string) int64 { rs, err := tk.Exec("admin show ddl jobs") - c.Assert(err, IsNil) - rows, err := session.GetRows4Test(context.Background(), tk.Se, rs) - c.Assert(err, IsNil) + require.NoError(t, err) + rows, err := session.GetRows4Test(context.Background(), tk.Session(), rs) + require.NoError(t, err) for _, row := range rows { if row.GetString(1) == table && row.GetString(3) == tp { return row.GetInt64(0) } } - c.Errorf("can't find %s table of %s", tp, table) + require.FailNowf(t, "can't find %s table of %s", tp, table) return -1 } jobID := getDDLJobID("test_recover", "drop table") // if GC safe point is not exists in mysql.tidb - _, err := tk.Exec(fmt.Sprintf("recover table by job %d", jobID)) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "can not get 'tikv_gc_safe_point'") + err := tk.ExecToErr(fmt.Sprintf("recover table by job %d", jobID)) + require.EqualError(t, err, "can not get 'tikv_gc_safe_point'") // set GC safe point tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) @@ -924,21 +554,21 @@ func (s *testSerialSuite) TestRecoverTableByJobID(c *C) { tk.MustExec(fmt.Sprintf("recover table by job %d", jobID)) tk.MustExec("DROP TABLE t_recover") - err = gcutil.EnableGC(tk.Se) - c.Assert(err, IsNil) + err = gcutil.EnableGC(tk.Session()) + require.NoError(t, err) // recover job is before GC safe point tk.MustExec(fmt.Sprintf(safePointSQL, timeAfterDrop)) - _, err = tk.Exec(fmt.Sprintf("recover table by job %d", jobID)) - c.Assert(err, NotNil) - c.Assert(strings.Contains(err.Error(), "snapshot is older than GC safe point"), Equals, true) + err = tk.ExecToErr(fmt.Sprintf("recover table by job %d", jobID)) + require.Error(t, err) + require.Contains(t, err.Error(), "snapshot is older than GC safe point") // set GC safe point tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) // if there is a new table with the same name, should return failed. - tk.MustExec("create table t_recover (a int);") - _, err = tk.Exec(fmt.Sprintf("recover table by job %d", jobID)) - c.Assert(err.Error(), Equals, infoschema.ErrTableExists.GenWithStackByArgs("t_recover").Error()) + tk.MustExec("create table t_recover (a int)") + err = tk.ExecToErr(fmt.Sprintf("recover table by job %d", jobID)) + require.EqualError(t, err, infoschema.ErrTableExists.GenWithStackByArgs("t_recover").Error()) // drop the new table with the same name, then recover table. tk.MustExec("drop table t_recover") @@ -947,18 +577,18 @@ func (s *testSerialSuite) TestRecoverTableByJobID(c *C) { tk.MustExec(fmt.Sprintf("recover table by job %d", jobID)) // check recover table meta and data record. - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1", "2", "3")) // check recover table autoID. tk.MustExec("insert into t_recover values (4),(5),(6)") - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) // recover table by none exits job. - _, err = tk.Exec(fmt.Sprintf("recover table by job %d", 10000000)) - c.Assert(err, NotNil) + err = tk.ExecToErr(fmt.Sprintf("recover table by job %d", 10000000)) + require.Error(t, err) // Disable GC by manual first, then after recover table, the GC enable status should also be disabled. - err = gcutil.DisableGC(tk.Se) - c.Assert(err, IsNil) + err = gcutil.DisableGC(tk.Session()) + require.NoError(t, err) tk.MustExec("delete from t_recover where a > 1") tk.MustExec("drop table t_recover") @@ -967,10 +597,10 @@ func (s *testSerialSuite) TestRecoverTableByJobID(c *C) { tk.MustExec(fmt.Sprintf("recover table by job %d", jobID)) // check recover table meta and data record. - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1")) // check recover table autoID. tk.MustExec("insert into t_recover values (7),(8),(9)") - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "7", "8", "9")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1", "7", "8", "9")) // Test for recover truncate table. tk.MustExec("truncate table t_recover") @@ -978,30 +608,32 @@ func (s *testSerialSuite) TestRecoverTableByJobID(c *C) { jobID = getDDLJobID("test_recover", "truncate table") tk.MustExec(fmt.Sprintf("recover table by job %d", jobID)) tk.MustExec("insert into t_recover values (10)") - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "7", "8", "9", "10")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1", "7", "8", "9", "10")) - gcEnable, err := gcutil.CheckGCEnable(tk.Se) - c.Assert(err, IsNil) - c.Assert(gcEnable, Equals, false) + gcEnable, err := gcutil.CheckGCEnable(tk.Session()) + require.NoError(t, err) + require.Equal(t, false, gcEnable) } -func (s *testSerialSuite) TestRecoverTableByJobIDFail(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestRecoverTableByJobIDFail(t *testing.T) { + store, dom, clean := createMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists test_recover") tk.MustExec("use test_recover") tk.MustExec("drop table if exists t_recover") - tk.MustExec("create table t_recover (a int);") + tk.MustExec("create table t_recover (a int)") defer func(originGC bool) { if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) + }(util.IsEmulatorGCEnable()) // disable emulator GC. - // Otherwise emulator GC will delete table record as soon as possible after execute drop table ddl. - ddl.EmulatorGCDisable() + // Otherwise, emulator GC will delete table record as soon as possible after execute drop table util. + util.EmulatorGCDisable() gcTimeFormat := "20060102-15:04:05 -0700 MST" timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) safePointSQL := `INSERT HIGH_PRIORITY INTO mysql.tidb VALUES ('tikv_gc_safe_point', '%[1]s', '') @@ -1012,65 +644,65 @@ func (s *testSerialSuite) TestRecoverTableByJobIDFail(c *C) { tk.MustExec("drop table t_recover") rs, err := tk.Exec("admin show ddl jobs") - c.Assert(err, IsNil) - rows, err := session.GetRows4Test(context.Background(), tk.Se, rs) - c.Assert(err, IsNil) + require.NoError(t, err) + rows, err := session.GetRows4Test(context.Background(), tk.Session(), rs) + require.NoError(t, err) row := rows[0] - c.Assert(row.GetString(1), Equals, "test_recover") - c.Assert(row.GetString(3), Equals, "drop table") + require.Equal(t, "test_recover", row.GetString(1)) + require.Equal(t, "drop table", row.GetString(3)) jobID := row.GetInt64(0) // enableGC first - err = gcutil.EnableGC(tk.Se) - c.Assert(err, IsNil) + err = gcutil.EnableGC(tk.Session()) + require.NoError(t, err) tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) // set hook hook := &ddl.TestDDLCallback{} hook.OnJobRunBeforeExported = func(job *model.Job) { if job.Type == model.ActionRecoverTable { - c.Assert(failpoint.Enable("tikvclient/mockCommitError", `return(true)`), IsNil) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockRecoverTableCommitErr", `return(true)`), IsNil) + require.NoError(t, failpoint.Enable("tikvclient/mockCommitError", `return(true)`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockRecoverTableCommitErr", `return(true)`)) } } - origHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(origHook) - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) // do recover table. tk.MustExec(fmt.Sprintf("recover table by job %d", jobID)) - c.Assert(failpoint.Disable("tikvclient/mockCommitError"), IsNil) - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/mockRecoverTableCommitErr"), IsNil) + require.NoError(t, failpoint.Disable("tikvclient/mockCommitError")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockRecoverTableCommitErr")) // make sure enable GC after recover table. - enable, err := gcutil.CheckGCEnable(tk.Se) - c.Assert(err, IsNil) - c.Assert(enable, Equals, true) + enable, err := gcutil.CheckGCEnable(tk.Session()) + require.NoError(t, err) + require.Equal(t, true, enable) // check recover table meta and data record. - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1", "2", "3")) // check recover table autoID. tk.MustExec("insert into t_recover values (4),(5),(6)") - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) } -func (s *testSerialSuite) TestRecoverTableByTableNameFail(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestRecoverTableByTableNameFail(t *testing.T) { + store, dom, clean := createMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists test_recover") tk.MustExec("use test_recover") tk.MustExec("drop table if exists t_recover") - tk.MustExec("create table t_recover (a int);") + tk.MustExec("create table t_recover (a int)") defer func(originGC bool) { if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) + }(util.IsEmulatorGCEnable()) // disable emulator GC. // Otherwise emulator GC will delete table record as soon as possible after execute drop table ddl. - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() gcTimeFormat := "20060102-15:04:05 -0700 MST" timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) safePointSQL := `INSERT HIGH_PRIORITY INTO mysql.tidb VALUES ('tikv_gc_safe_point', '%[1]s', '') @@ -1081,82 +713,84 @@ func (s *testSerialSuite) TestRecoverTableByTableNameFail(c *C) { tk.MustExec("drop table t_recover") // enableGC first - err := gcutil.EnableGC(tk.Se) - c.Assert(err, IsNil) + err := gcutil.EnableGC(tk.Session()) + require.NoError(t, err) tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) // set hook hook := &ddl.TestDDLCallback{} hook.OnJobRunBeforeExported = func(job *model.Job) { if job.Type == model.ActionRecoverTable { - c.Assert(failpoint.Enable("tikvclient/mockCommitError", `return(true)`), IsNil) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockRecoverTableCommitErr", `return(true)`), IsNil) + require.NoError(t, failpoint.Enable("tikvclient/mockCommitError", `return(true)`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockRecoverTableCommitErr", `return(true)`)) } } - origHook := s.dom.DDL().GetHook() - defer s.dom.DDL().(ddl.DDLForTest).SetHook(origHook) - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) + dom.DDL().SetHook(hook) // do recover table. tk.MustExec("recover table t_recover") - c.Assert(failpoint.Disable("tikvclient/mockCommitError"), IsNil) - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/mockRecoverTableCommitErr"), IsNil) + require.NoError(t, failpoint.Disable("tikvclient/mockCommitError")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockRecoverTableCommitErr")) // make sure enable GC after recover table. - enable, err := gcutil.CheckGCEnable(tk.Se) - c.Assert(err, IsNil) - c.Assert(enable, Equals, true) + enable, err := gcutil.CheckGCEnable(tk.Session()) + require.NoError(t, err) + require.True(t, enable) // check recover table meta and data record. - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1", "2", "3")) // check recover table autoID. tk.MustExec("insert into t_recover values (4),(5),(6)") - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) + tk.MustQuery("select * from t_recover").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) } -func (s *testSerialSuite) TestCancelJobByErrorCountLimit(c *C) { - tk := testkit.NewTestKit(c, s.store) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockExceedErrorLimit", `return(true)`), IsNil) +func TestCancelJobByErrorCountLimit(t *testing.T) { + store, _, clean := createMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockExceedErrorLimit", `return(true)`)) defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/mockExceedErrorLimit"), IsNil) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockExceedErrorLimit")) }() tk.MustExec("use test") tk.MustExec("drop table if exists t") limit := variable.GetDDLErrorCountLimit() tk.MustExec("set @@global.tidb_ddl_error_count_limit = 16") - err := ddlutil.LoadDDLVars(tk.Se) - c.Assert(err, IsNil) + err := ddlutil.LoadDDLVars(tk.Session()) + require.NoError(t, err) defer tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_error_count_limit = %d", limit)) - _, err = tk.Exec("create table t (a int)") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:-1]DDL job rollback, error msg: mock do job error") + err = tk.ExecToErr("create table t (a int)") + require.EqualError(t, err, "[ddl:-1]DDL job rollback, error msg: mock do job error") } -func (s *testSerialSuite) TestTruncateTableUpdateSchemaVersionErr(c *C) { - tk := testkit.NewTestKit(c, s.store) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockTruncateTableUpdateVersionError", `return(true)`), IsNil) +func TestTruncateTableUpdateSchemaVersionErr(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockTruncateTableUpdateVersionError", `return(true)`)) tk.MustExec("use test") tk.MustExec("drop table if exists t") limit := variable.GetDDLErrorCountLimit() tk.MustExec("set @@global.tidb_ddl_error_count_limit = 5") - err := ddlutil.LoadDDLVars(tk.Se) - c.Assert(err, IsNil) + err := ddlutil.LoadDDLVars(tk.Session()) + require.NoError(t, err) defer tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_error_count_limit = %d", limit)) tk.MustExec("create table t (a int)") - _, err = tk.Exec("truncate table t") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:-1]DDL job rollback, error msg: mock update version error") + err = tk.ExecToErr("truncate table t") + require.EqualError(t, err, "[ddl:-1]DDL job rollback, error msg: mock update version error") // Disable fail point. - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/mockTruncateTableUpdateVersionError"), IsNil) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockTruncateTableUpdateVersionError")) tk.MustExec("truncate table t") } -func (s *testSerialSuite) TestCanceledJobTakeTime(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestCanceledJobTakeTime(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t_cjtt(a int)") @@ -1164,20 +798,18 @@ func (s *testSerialSuite) TestCanceledJobTakeTime(c *C) { once := sync.Once{} hook.OnJobUpdatedExported = func(job *model.Job) { once.Do(func() { - err := kv.RunInNewTxn(context.Background(), s.store, false, func(ctx context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) - err := t.GetAutoIDAccessors(job.SchemaID, job.TableID).Del() + err := kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + err := m.GetAutoIDAccessors(job.SchemaID, job.TableID).Del() if err != nil { return err } - return t.DropTableOrView(job.SchemaID, job.TableID) + return m.DropTableOrView(job.SchemaID, job.TableID) }) - c.Assert(err, IsNil) + require.NoError(t, err) }) } - origHook := s.dom.DDL().GetHook() - s.dom.DDL().(ddl.DDLForTest).SetHook(hook) - defer s.dom.DDL().(ddl.DDLForTest).SetHook(origHook) + dom.DDL().SetHook(hook) originalWT := ddl.GetWaitTimeWhenErrorOccurred() ddl.SetWaitTimeWhenErrorOccurred(1 * time.Second) @@ -1185,14 +817,14 @@ func (s *testSerialSuite) TestCanceledJobTakeTime(c *C) { startTime := time.Now() tk.MustGetErrCode("alter table t_cjtt add column b int", mysql.ErrNoSuchTable) sub := time.Since(startTime) - c.Assert(sub, Less, ddl.GetWaitTimeWhenErrorOccurred()) + require.Less(t, sub, ddl.GetWaitTimeWhenErrorOccurred()) } -func (s *testSerialSuite) TestTableLocksEnable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestTableLocksEnable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - defer tk.MustExec("drop table if exists t1") tk.MustExec("create table t1 (a int)") // Test for enable table lock config. @@ -1203,34 +835,38 @@ func (s *testSerialSuite) TestTableLocksEnable(c *C) { tk.MustExec("lock tables t1 write") tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1235 LOCK TABLES is not supported. To enable this experimental feature, set 'enable-table-lock' in the configuration file.")) - checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) + tbl := external.GetTableByName(t, tk, "test", "t1") + dom := domain.GetDomain(tk.Session()) + require.NoError(t, dom.Reload()) + require.Nil(t, tbl.Meta().Lock) tk.MustExec("unlock tables") tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1235 UNLOCK TABLES is not supported. To enable this experimental feature, set 'enable-table-lock' in the configuration file.")) } -func (s *testSerialDBSuite) TestAutoRandomOnTemporaryTable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAutoRandomOnTemporaryTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists auto_random_temporary") - _, err := tk.Exec("create global temporary table auto_random_temporary (a bigint primary key auto_random(3), b varchar(255)) on commit delete rows;") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("auto_random").Error()) - _, err = tk.Exec("create temporary table t(a bigint key auto_random);") - c.Assert(err.Error(), Equals, core.ErrOptOnTemporaryTable.GenWithStackByArgs("auto_random").Error()) + err := tk.ExecToErr("create global temporary table auto_random_temporary (a bigint primary key auto_random(3), b varchar(255)) on commit delete rows") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("auto_random").Error(), err.Error()) + err = tk.ExecToErr("create temporary table t(a bigint key auto_random)") + require.Equal(t, core.ErrOptOnTemporaryTable.GenWithStackByArgs("auto_random").Error(), err.Error()) } -func (s *testSerialDBSuite) TestAutoRandom(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAutoRandom(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists auto_random_db") - defer tk.MustExec("drop database if exists auto_random_db") tk.MustExec("use auto_random_db") databaseName, tableName := "auto_random_db", "t" - tk.MustExec("drop table if exists t") tk.MustExec("set @@allow_auto_random_explicit_insert = true") assertInvalidAutoRandomErr := func(sql string, errMsg string, args ...interface{}) { - _, err := tk.Exec(sql) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, ddl.ErrInvalidAutoRandom.GenWithStackByArgs(fmt.Sprintf(errMsg, args...)).Error()) + err := tk.ExecToErr(sql) + require.EqualError(t, err, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(fmt.Sprintf(errMsg, args...)).Error()) } assertPKIsNotHandle := func(sql, errCol string) { @@ -1413,8 +1049,8 @@ func (s *testSerialDBSuite) TestAutoRandom(c *C) { mustExecAndDrop(sql, func() { note := fmt.Sprintf(autoid.AutoRandomAvailableAllocTimesNote, times) result := fmt.Sprintf("Note|1105|%s", note) - tk.MustQuery("show warnings").Check(RowsWithSep("|", result)) - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(0)) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", result)) + require.Equal(t, uint16(0), tk.Session().GetSessionVars().StmtCtx.WarningCount()) }) } assertShowWarningCorrect("create table t (a bigint auto_random(15) primary key)", 281474976710655) @@ -1439,178 +1075,33 @@ func (s *testSerialDBSuite) TestAutoRandom(c *C) { }) } -func (s *testIntegrationSuite7) TestAutoRandomChangeFromAutoInc(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("set @@tidb_allow_remove_auto_inc = 1;") - - // Basic usages. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a bigint auto_increment primary key);") - tk.MustExec("insert into t values (), (), ();") - tk.MustExec("alter table t modify column a bigint auto_random(3);") - tk.MustExec("insert into t values (), (), ();") - rows := tk.MustQuery("show table t next_row_id;").Rows() - c.Assert(len(rows), Equals, 1, Commentf("query result: %v", rows)) - c.Assert(len(rows[0]), Equals, 5, Commentf("query result: %v", rows)) - c.Assert(rows[0][4], Equals, "AUTO_RANDOM") - - // Changing from auto_inc unique key is not allowed. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a bigint auto_increment unique key);") - tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a bigint auto_increment unique key, b bigint auto_random primary key);") - tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) - - // Changing from non-auto-inc column is not allowed. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a bigint);") - tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a bigint primary key);") - tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) - - // Changing from non BIGINT auto_inc pk column is not allowed. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a int auto_increment primary key);") - tk.MustGetErrCode("alter table t modify column a int auto_random;", errno.ErrInvalidAutoRandom) - tk.MustGetErrCode("alter table t modify column a bigint auto_random;", errno.ErrInvalidAutoRandom) - - // Changing from auto_random to auto_increment is not allowed. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a bigint auto_random primary key);") - // "Unsupported modify column: can't set auto_increment" - tk.MustGetErrCode("alter table t modify column a bigint auto_increment;", errno.ErrUnsupportedDDLOperation) - - // Large auto_increment number overflows auto_random. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a bigint auto_increment primary key);") - tk.MustExec("insert into t values (1<<(64-5));") - // "max allowed auto_random shard bits is 3, but got 4 on column `a`" - tk.MustGetErrCode("alter table t modify column a bigint auto_random(4);", errno.ErrInvalidAutoRandom) - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a bigint auto_increment primary key);") - tk.MustExec("insert into t values (1<<(64-6));") - tk.MustExec("alter table t modify column a bigint auto_random(4);") -} - -func (s *testIntegrationSuite7) TestAutoRandomExchangePartition(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database if not exists auto_random_db") - defer tk.MustExec("drop database if exists auto_random_db") - - tk.MustExec("use auto_random_db") - - tk.MustExec("set @@tidb_enable_exchange_partition=1") - defer tk.MustExec("set @@tidb_enable_exchange_partition=0") - - tk.MustExec("drop table if exists e1, e2, e3, e4;") - - tk.MustExec("create table e1 (a bigint primary key clustered auto_random(3)) partition by hash(a) partitions 1;") - - tk.MustExec("create table e2 (a bigint primary key);") - tk.MustGetErrCode("alter table e1 exchange partition p0 with table e2;", errno.ErrTablesDifferentMetadata) - - tk.MustExec("create table e3 (a bigint primary key auto_random(2));") - tk.MustGetErrCode("alter table e1 exchange partition p0 with table e3;", errno.ErrTablesDifferentMetadata) - tk.MustExec("insert into e1 values (), (), ()") - - tk.MustExec("create table e4 (a bigint primary key auto_random(3));") - tk.MustExec("insert into e4 values ()") - tk.MustExec("alter table e1 exchange partition p0 with table e4;") - - tk.MustQuery("select count(*) from e1").Check(testkit.Rows("1")) - tk.MustExec("insert into e1 values ()") - tk.MustQuery("select count(*) from e1").Check(testkit.Rows("2")) - - tk.MustQuery("select count(*) from e4").Check(testkit.Rows("3")) - tk.MustExec("insert into e4 values ()") - tk.MustQuery("select count(*) from e4").Check(testkit.Rows("4")) -} - -func (s *testIntegrationSuite7) TestAutoRandomIncBitsIncrementAndOffset(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAutoRandomWithPreSplitRegion(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists auto_random_db") - defer tk.MustExec("drop database if exists auto_random_db") tk.MustExec("use auto_random_db") - tk.MustExec("drop table if exists t") - - recreateTable := func() { - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a bigint auto_random(6) primary key clustered)") - } - truncateTable := func() { - _, _ = tk.Exec("delete from t") - } - insertTable := func() { - tk.MustExec("insert into t values ()") - } - assertIncBitsValues := func(values ...int) { - mask := strings.Repeat("1", 64-1-6) - sql := fmt.Sprintf(`select a & b'%s' from t order by a & b'%s' asc`, mask, mask) - vs := make([]string, len(values)) - for i, value := range values { - vs[i] = strconv.Itoa(value) - } - tk.MustQuery(sql).Check(testkit.Rows(vs...)) - } - - const truncate, recreate = true, false - expect := func(vs ...int) []int { return vs } - testCase := []struct { - setupAction bool // truncate or recreate - increment int // @@auto_increment_increment - offset int // @@auto_increment_offset - results []int // the implicit allocated auto_random incremental-bit part of values - }{ - {recreate, 5, 10, expect(10, 15, 20)}, - {recreate, 2, 10, expect(10, 12, 14)}, - {truncate, 5, 10, expect(15, 20, 25)}, - {truncate, 10, 10, expect(30, 40, 50)}, - {truncate, 5, 10, expect(55, 60, 65)}, - } - for _, tc := range testCase { - switch tc.setupAction { - case recreate: - recreateTable() - case truncate: - truncateTable() - } - tk.Se.GetSessionVars().AutoIncrementIncrement = tc.increment - tk.Se.GetSessionVars().AutoIncrementOffset = tc.offset - for range tc.results { - insertTable() - } - assertIncBitsValues(tc.results...) - } -} - -func (s *testSerialSuite) TestAutoRandomWithPreSplitRegion(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database if not exists auto_random_db;") - defer tk.MustExec("drop database if exists auto_random_db;") - tk.MustExec("use auto_random_db;") - tk.MustExec("drop table if exists t;") origin := atomic.LoadUint32(&ddl.EnableSplitTableRegion) atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) defer atomic.StoreUint32(&ddl.EnableSplitTableRegion, origin) - tk.MustExec("set @@global.tidb_scatter_region=1;") + tk.MustExec("set @@global.tidb_scatter_region=1") // Test pre-split table region for auto_random table. - tk.MustExec("create table t (a bigint auto_random(2) primary key clustered, b int) pre_split_regions=2;") - re := tk.MustQuery("show table t regions;") + tk.MustExec("create table t (a bigint auto_random(2) primary key clustered, b int) pre_split_regions=2") + re := tk.MustQuery("show table t regions") rows := re.Rows() - c.Assert(len(rows), Equals, 4) - tbl := testGetTableByName(c, tk.Se, "auto_random_db", "t") - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_2305843009213693952", tbl.Meta().ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_4611686018427387904", tbl.Meta().ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_6917529027641081856", tbl.Meta().ID)) + require.Len(t, rows, 4) + tbl := external.GetTableByName(t, tk, "auto_random_db", "t") //nolint:typecheck + require.Equal(t, fmt.Sprintf("t_%d_r_2305843009213693952", tbl.Meta().ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_4611686018427387904", tbl.Meta().ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_6917529027641081856", tbl.Meta().ID), rows[3][1]) } -func (s *testSerialSuite) TestModifyingColumn4NewCollations(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestModifyingColumn4NewCollations(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database dct") tk.MustExec("use dct") tk.MustExec("create table t(b varchar(10) collate utf8_bin, c varchar(10) collate utf8_general_ci) collate utf8_bin") @@ -1642,12 +1133,15 @@ func (s *testSerialSuite) TestModifyingColumn4NewCollations(c *C) { tk.MustExec("alter database dct charset utf8mb4 collate utf8mb4_general_ci") } -func (s *testSerialSuite) TestForbidUnsupportedCollations(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestForbidUnsupportedCollations(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) mustGetUnsupportedCollation := func(sql string, coll string) { tk.MustGetErrMsg(sql, fmt.Sprintf("[ddl:1273]Unsupported collation when new collation is enabled: '%s'", coll)) } + // Test default collation of database. mustGetUnsupportedCollation("create database ucd charset utf8mb4 collate utf8mb4_roman_ci", "utf8mb4_roman_ci") mustGetUnsupportedCollation("create database ucd charset utf8 collate utf8_roman_ci", "utf8_roman_ci") @@ -1676,139 +1170,13 @@ func (s *testSerialSuite) TestForbidUnsupportedCollations(c *C) { // mustGetUnsupportedCollation("alter table t convert to collate utf8mb4_unicode_ci", "utf8mb4_unicode_ci") } -func (s *testIntegrationSuite7) TestInvisibleIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test") - tk.MustExec("drop table if exists t,t1,t2,t3,t4,t5,t6") - - // The DDL statement related to invisible index. - showIndexes := "select index_name, is_visible from information_schema.statistics where table_schema = 'test' and table_name = 't'" - // 1. Create table with invisible index - tk.MustExec("create table t (a int, b int, unique (a) invisible)") - tk.MustQuery(showIndexes).Check(testkit.Rows("a NO")) - tk.MustExec("insert into t values (1, 2)") - tk.MustQuery("select * from t").Check(testkit.Rows("1 2")) - // 2. Drop invisible index - tk.MustExec("alter table t drop index a") - tk.MustQuery(showIndexes).Check(testkit.Rows()) - tk.MustExec("insert into t values (3, 4)") - tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4")) - // 3. Add an invisible index - tk.MustExec("alter table t add index (b) invisible") - tk.MustQuery(showIndexes).Check(testkit.Rows("b NO")) - tk.MustExec("insert into t values (5, 6)") - tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4", "5 6")) - // 4. Drop it - tk.MustExec("alter table t drop index b") - tk.MustQuery(showIndexes).Check(testkit.Rows()) - tk.MustExec("insert into t values (7, 8)") - tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4", "5 6", "7 8")) - // 5. Create a multiple-column invisible index - tk.MustExec("alter table t add index a_b(a, b) invisible") - tk.MustQuery(showIndexes).Check(testkit.Rows("a_b NO", "a_b NO")) - tk.MustExec("insert into t values (9, 10)") - tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4", "5 6", "7 8", "9 10")) - // 6. Drop it - tk.MustExec("alter table t drop index a_b") - tk.MustQuery(showIndexes).Check(testkit.Rows()) - tk.MustExec("insert into t values (11, 12)") - tk.MustQuery("select * from t").Check(testkit.Rows("1 2", "3 4", "5 6", "7 8", "9 10", "11 12")) - - // Limitation: Primary key cannot be invisible index - tk.MustGetErrCode("create table t1 (a int, primary key (a) nonclustered invisible)", errno.ErrPKIndexCantBeInvisible) - tk.MustGetErrCode("create table t1 (a int, b int, primary key (a, b) nonclustered invisible)", errno.ErrPKIndexCantBeInvisible) - tk.MustExec("create table t1 (a int, b int)") - tk.MustGetErrCode("alter table t1 add primary key(a) nonclustered invisible", errno.ErrPKIndexCantBeInvisible) - tk.MustGetErrCode("alter table t1 add primary key(a, b) nonclustered invisible", errno.ErrPKIndexCantBeInvisible) - - // Implicit primary key cannot be invisible index - // Create a implicit primary key - tk.MustGetErrCode("create table t2(a int not null, unique (a) invisible)", errno.ErrPKIndexCantBeInvisible) - tk.MustGetErrCode("create table t2(a int auto_increment, unique key (a) invisible);", errno.ErrPKIndexCantBeInvisible) - // Column `a` become implicit primary key after DDL statement on itself - tk.MustExec("create table t2(a int not null)") - tk.MustGetErrCode("alter table t2 add unique (a) invisible", errno.ErrPKIndexCantBeInvisible) - tk.MustExec("create table t3(a int, unique index (a) invisible)") - tk.MustGetErrCode("alter table t3 modify column a int not null", errno.ErrPKIndexCantBeInvisible) - // Only first unique column can be implicit primary - tk.MustExec("create table t4(a int not null, b int not null, unique (a), unique (b) invisible)") - showIndexes = "select index_name, is_visible from information_schema.statistics where table_schema = 'test' and table_name = 't4'" - tk.MustQuery(showIndexes).Check(testkit.Rows("a YES", "b NO")) - tk.MustExec("insert into t4 values (1, 2)") - tk.MustQuery("select * from t4").Check(testkit.Rows("1 2")) - tk.MustGetErrCode("create table t5(a int not null, b int not null, unique (b) invisible, unique (a))", errno.ErrPKIndexCantBeInvisible) - // Column `b` become implicit primary key after DDL statement on other columns - tk.MustExec("create table t5(a int not null, b int not null, unique (a), unique (b) invisible)") - tk.MustGetErrCode("alter table t5 drop index a", errno.ErrPKIndexCantBeInvisible) - tk.MustGetErrCode("alter table t5 modify column a int null", errno.ErrPKIndexCantBeInvisible) - // If these is a explicit primary key, no key will become implicit primary key - tk.MustExec("create table t6 (a int not null, b int, unique (a) invisible, primary key(b) nonclustered)") - showIndexes = "select index_name, is_visible from information_schema.statistics where table_schema = 'test' and table_name = 't6'" - tk.MustQuery(showIndexes).Check(testkit.Rows("a NO", "PRIMARY YES")) - tk.MustExec("insert into t6 values (1, 2)") - tk.MustQuery("select * from t6").Check(testkit.Rows("1 2")) - tk.MustGetErrCode("alter table t6 drop primary key", errno.ErrPKIndexCantBeInvisible) - res := tk.MustQuery("show index from t6 where Key_name='PRIMARY';") - c.Check(len(res.Rows()), Equals, 1) -} - -func (s *testIntegrationSuite7) TestCreateClusteredIndex(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - tk.MustExec("CREATE TABLE t1 (a int primary key, b int)") - tk.MustExec("CREATE TABLE t2 (a varchar(255) primary key, b int)") - tk.MustExec("CREATE TABLE t3 (a int, b int, c int, primary key (a, b))") - tk.MustExec("CREATE TABLE t4 (a int, b int, c int)") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t1")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().PKIsHandle, IsTrue) - c.Assert(tbl.Meta().IsCommonHandle, IsFalse) - tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t2")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().IsCommonHandle, IsTrue) - tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t3")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().IsCommonHandle, IsTrue) - tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t4")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().IsCommonHandle, IsFalse) - - tk.MustExec("CREATE TABLE t5 (a varchar(255) primary key nonclustered, b int)") - tk.MustExec("CREATE TABLE t6 (a int, b int, c int, primary key (a, b) nonclustered)") - is = domain.GetDomain(ctx).InfoSchema() - tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t5")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().IsCommonHandle, IsFalse) - tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t6")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().IsCommonHandle, IsFalse) - - tk.MustExec("CREATE TABLE t21 like t2") - tk.MustExec("CREATE TABLE t31 like t3") - is = domain.GetDomain(ctx).InfoSchema() - tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t21")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().IsCommonHandle, IsTrue) - tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t31")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().IsCommonHandle, IsTrue) - - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeIntOnly - tk.MustExec("CREATE TABLE t7 (a varchar(255) primary key, b int)") - is = domain.GetDomain(ctx).InfoSchema() - tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t7")) - c.Assert(err, IsNil) - c.Assert(tbl.Meta().IsCommonHandle, IsFalse) -} - -func (s *testSerialDBSuite) TestCreateTableNoBlock(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/checkOwnerCheckAllVersionsWaitTime", `return(true)`), IsNil) +func TestCreateTableNoBlock(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/checkOwnerCheckAllVersionsWaitTime", `return(true)`)) defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/checkOwnerCheckAllVersionsWaitTime"), IsNil) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/checkOwnerCheckAllVersionsWaitTime")) }() save := variable.GetDDLErrorCountLimit() tk.MustExec("set @@global.tidb_ddl_error_count_limit = 1") @@ -1816,14 +1184,16 @@ func (s *testSerialDBSuite) TestCreateTableNoBlock(c *C) { tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_error_count_limit = %v", save)) }() + tk.MustExec("use test") tk.MustExec("drop table if exists t") - _, err := tk.Exec("create table t(a int)") - c.Assert(err, NotNil) + require.Error(t, tk.ExecToErr("create table t(a int)")) } -func (s *testSerialSuite) TestCheckEnumLength(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("drop table if exists t1,t2,t3,t4,t5") +func TestCheckEnumLength(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") tk.MustGetErrCode("create table t1 (a enum('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'))", errno.ErrTooLongValueForType) tk.MustGetErrCode("create table t1 (a set('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'))", errno.ErrTooLongValueForType) tk.MustExec("create table t2 (id int primary key)") @@ -1832,12 +1202,10 @@ func (s *testSerialSuite) TestCheckEnumLength(c *C) { config.UpdateGlobal(func(conf *config.Config) { conf.EnableEnumLengthLimit = false }) - _, err := tk.Exec("create table t3 (a enum('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'))") - c.Assert(err, IsNil) + tk.MustExec("create table t3 (a enum('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'))") tk.MustExec("insert into t3 values(1)") tk.MustQuery("select a from t3").Check(testkit.Rows("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) - _, err = tk.Exec("create table t4 (a set('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'))") - c.Assert(err, IsNil) + tk.MustExec("create table t4 (a set('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'))") config.UpdateGlobal(func(conf *config.Config) { conf.EnableEnumLengthLimit = true @@ -1847,12 +1215,18 @@ func (s *testSerialSuite) TestCheckEnumLength(c *C) { tk.MustExec("drop table if exists t1,t2,t3,t4,t5") } -func (s *testSerialSuite) TestGetReverseKey(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestGetReverseKey(t *testing.T) { + var cluster testutils.Cluster + store, dom, clean := testkit.CreateMockStoreAndDomain(t, + mockstore.WithClusterInspector(func(c testutils.Cluster) { + mockstore.BootstrapWithSingleStore(c) + cluster = c + })) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database db_get") tk.MustExec("use db_get") - tk.MustExec("drop table if exists test_get") - tk.MustExec("create table test_get(a bigint not null primary key, b bigint);") + tk.MustExec("create table test_get(a bigint not null primary key, b bigint)") insertVal := func(val int) { sql := fmt.Sprintf("insert into test_get value(%d, %d)", val, val) @@ -1866,12 +1240,12 @@ func (s *testSerialSuite) TestGetReverseKey(c *C) { insertVal(math.MaxInt64 - 1) // Get table ID for split. - is := s.dom.InfoSchema() + is := dom.InfoSchema() tbl, err := is.TableByName(model.NewCIStr("db_get"), model.NewCIStr("test_get")) - c.Assert(err, IsNil) + require.NoError(t, err) // Split the table. tableStart := tablecodec.GenTableRecordPrefix(tbl.Meta().ID) - s.cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 4) + cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 4) tk.MustQuery("select * from test_get order by a").Check(testkit.Rows("-9223372036854775808 -9223372036854775808", "-9223372036854775807 -9223372036854775807", @@ -1884,10 +1258,11 @@ func (s *testSerialSuite) TestGetReverseKey(c *C) { minKey := tablecodec.EncodeRecordKey(tbl.RecordPrefix(), kv.IntHandle(math.MinInt64)) maxKey := tablecodec.EncodeRecordKey(tbl.RecordPrefix(), kv.IntHandle(math.MaxInt64)) checkRet := func(startKey, endKey, retKey kv.Key) { - h, err := ddl.GetMaxRowID(s.store, 0, tbl, startKey, endKey) - c.Assert(err, IsNil) - c.Assert(h.Cmp(retKey), Equals, 0) + h, err := ddl.GetMaxRowID(store, 0, tbl, startKey, endKey) + require.NoError(t, err) + require.Equal(t, 0, h.Cmp(retKey)) } + // [minInt64, minInt64] checkRet(minKey, minKey, minKey) // [minInt64, 1<<64-1] @@ -1904,27 +1279,20 @@ func (s *testSerialSuite) TestGetReverseKey(c *C) { checkRet(startKey, endKey, endKey) } -func (s *testSerialDBSuite) TestLocalTemporaryTableBlockedDDL(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) +func TestLocalTemporaryTableBlockedDDL(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t1 (id int)") tk.MustExec("create temporary table tmp1 (id int primary key, a int unique, b int)") - err := tk.ExecToErr("rename table tmp1 to tmp2") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) - err = tk.ExecToErr("alter table tmp1 add column c int") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) - err = tk.ExecToErr("alter table tmp1 add index b(b)") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) - err = tk.ExecToErr("create index a on tmp1(b)") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) - err = tk.ExecToErr("drop index a on tmp1") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) - err = tk.ExecToErr("lock tables tmp1 read") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) - err = tk.ExecToErr("lock tables tmp1 write") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) - err = tk.ExecToErr("lock tables t1 read, tmp1 read") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) - err = tk.ExecToErr("admin cleanup table lock tmp1") - c.Assert(ddl.ErrUnsupportedLocalTempTableDDL.Equal(err), IsTrue) + require.ErrorIs(t, tk.ExecToErr("rename table tmp1 to tmp2"), dbterror.ErrUnsupportedLocalTempTableDDL) + require.ErrorIs(t, tk.ExecToErr("alter table tmp1 add column c int"), dbterror.ErrUnsupportedLocalTempTableDDL) + require.ErrorIs(t, tk.ExecToErr("alter table tmp1 add index b(b)"), dbterror.ErrUnsupportedLocalTempTableDDL) + require.ErrorIs(t, tk.ExecToErr("create index a on tmp1(b)"), dbterror.ErrUnsupportedLocalTempTableDDL) + require.ErrorIs(t, tk.ExecToErr("drop index a on tmp1"), dbterror.ErrUnsupportedLocalTempTableDDL) + require.ErrorIs(t, tk.ExecToErr("lock tables tmp1 read"), dbterror.ErrUnsupportedLocalTempTableDDL) + require.ErrorIs(t, tk.ExecToErr("lock tables tmp1 write"), dbterror.ErrUnsupportedLocalTempTableDDL) + require.ErrorIs(t, tk.ExecToErr("lock tables t1 read, tmp1 read"), dbterror.ErrUnsupportedLocalTempTableDDL) + require.ErrorIs(t, tk.ExecToErr("admin cleanup table lock tmp1"), dbterror.ErrUnsupportedLocalTempTableDDL) } diff --git a/ddl/session_pool.go b/ddl/session_pool.go index 9a7bfa8cd0d9e..9545af18da187 100644 --- a/ddl/session_pool.go +++ b/ddl/session_pool.go @@ -49,7 +49,7 @@ func (sg *sessionPool) get() (sessionctx.Context, error) { sg.mu.Lock() if sg.mu.closed { sg.mu.Unlock() - return nil, errors.Errorf("sessionPool is closed.") + return nil, errors.Errorf("sessionPool is closed") } sg.mu.Unlock() diff --git a/ddl/stat_test.go b/ddl/stat_test.go index cd06a346e71a2..d721cbfa7b39f 100644 --- a/ddl/stat_test.go +++ b/ddl/stat_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/stretchr/testify/require" ) @@ -69,7 +70,8 @@ func TestDDLStatsInfo(t *testing.T) { done := make(chan error, 1) go func() { - done <- d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + done <- d.DoDDLJob(ctx, job) }() exit := false diff --git a/ddl/table.go b/ddl/table.go index e53be47854b8c..6e843e22e455e 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -39,6 +39,7 @@ import ( "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" tidb_util "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/gcutil" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" @@ -87,12 +88,12 @@ func createTable(d *ddlCtx, t *meta.Meta, job *model.Job) (*model.TableInfo, err replicaInfo := tbInfo.TiFlashReplica if pi := tbInfo.GetPartitionInfo(); pi != nil { logutil.BgLogger().Info("Set TiFlash replica pd rule for partitioned table when creating", zap.Int64("tableID", tbInfo.ID)) - if e := infosync.ConfigureTiFlashPDForPartitions(false, &pi.Definitions, replicaInfo.Count, &replicaInfo.LocationLabels); e != nil { + if e := infosync.ConfigureTiFlashPDForPartitions(false, &pi.Definitions, replicaInfo.Count, &replicaInfo.LocationLabels, tbInfo.ID); e != nil { job.State = model.JobStateCancelled return tbInfo, errors.Trace(e) } // Partitions that in adding mid-state. They have high priorities, so we should set accordingly pd rules. - if e := infosync.ConfigureTiFlashPDForPartitions(true, &pi.AddingDefinitions, replicaInfo.Count, &replicaInfo.LocationLabels); e != nil { + if e := infosync.ConfigureTiFlashPDForPartitions(true, &pi.AddingDefinitions, replicaInfo.Count, &replicaInfo.LocationLabels, tbInfo.ID); e != nil { job.State = model.JobStateCancelled return tbInfo, errors.Trace(e) } @@ -120,7 +121,7 @@ func createTable(d *ddlCtx, t *meta.Meta, job *model.Job) (*model.TableInfo, err return tbInfo, nil default: - return tbInfo, ErrInvalidDDLState.GenWithStackByArgs("table", tbInfo.State) + return tbInfo, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tbInfo.State) } } @@ -270,7 +271,7 @@ func onCreateView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) asyncNotifyEvent(d, &util.Event{Tp: model.ActionCreateView, TableInfo: tbInfo}) return ver, nil default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("table", tbInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tbInfo.State) } } @@ -328,7 +329,7 @@ func onDropTableOrView(t *meta.Meta, job *model.Job) (ver int64, _ error) { startKey := tablecodec.EncodeTablePrefix(job.TableID) job.Args = append(job.Args, startKey, oldIDs, ruleIDs) default: - err = ErrInvalidDDLState.GenWithStackByArgs("table", tblInfo.State) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tblInfo.State) } return ver, errors.Trace(err) @@ -478,7 +479,7 @@ func (w *worker) onRecoverTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver in // Finish this job. job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("table", tblInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tblInfo.State) } return ver, nil } @@ -557,7 +558,8 @@ func getTable(store kv.Storage, schemaID int64, tblInfo *model.TableInfo) (table return tbl, errors.Trace(err) } -func getTableInfoAndCancelFaultJob(t *meta.Meta, job *model.Job, schemaID int64) (*model.TableInfo, error) { +// GetTableInfoAndCancelFaultJob is exported for test. +func GetTableInfoAndCancelFaultJob(t *meta.Meta, job *model.Job, schemaID int64) (*model.TableInfo, error) { tblInfo, err := checkTableExistAndCancelNonExistJob(t, job, schemaID) if err != nil { return nil, errors.Trace(err) @@ -565,7 +567,7 @@ func getTableInfoAndCancelFaultJob(t *meta.Meta, job *model.Job, schemaID int64) if tblInfo.State != model.StatePublic { job.State = model.JobStateCancelled - return nil, ErrInvalidDDLState.GenWithStack("table %s is not in public, but %s", tblInfo.Name, tblInfo.State) + return nil, dbterror.ErrInvalidDDLState.GenWithStack("table %s is not in public, but %s", tblInfo.Name, tblInfo.State) } return tblInfo, nil @@ -616,7 +618,7 @@ func onTruncateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ erro job.State = model.JobStateCancelled return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return ver, errors.Trace(err) } @@ -683,7 +685,7 @@ func onTruncateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ erro if tblInfo.TiFlashReplica != nil { // Set PD rules for TiFlash if pi := tblInfo.GetPartitionInfo(); pi != nil { - if e := infosync.ConfigureTiFlashPDForPartitions(true, &pi.Definitions, tblInfo.TiFlashReplica.Count, &tblInfo.TiFlashReplica.LocationLabels); e != nil { + if e := infosync.ConfigureTiFlashPDForPartitions(true, &pi.Definitions, tblInfo.TiFlashReplica.Count, &tblInfo.TiFlashReplica.LocationLabels, tblInfo.ID); e != nil { logutil.BgLogger().Error("ConfigureTiFlashPDForPartitions fails", zap.Error(err)) job.State = model.JobStateCancelled return ver, errors.Trace(e) @@ -756,7 +758,7 @@ func onRebaseAutoID(store kv.Storage, t *meta.Meta, job *model.Job, tp autoid.Al job.State = model.JobStateCancelled return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -801,7 +803,7 @@ func onModifyTableAutoIDCache(t *meta.Meta, job *model.Job) (int64, error) { return 0, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, errors.Trace(err) } @@ -822,7 +824,7 @@ func (w *worker) onShardRowID(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int6 job.State = model.JobStateCancelled return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -933,7 +935,7 @@ func onRenameTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error } func checkAndRenameTables(t *meta.Meta, job *model.Job, oldSchemaID, newSchemaID int64, oldSchemaName, tableName *model.CIStr) (ver int64, tblInfo *model.TableInfo, _ error) { - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, oldSchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, oldSchemaID) if err != nil { return ver, tblInfo, errors.Trace(err) } @@ -995,7 +997,7 @@ func onModifyTableComment(t *meta.Meta, job *model.Job) (ver int64, _ error) { return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } @@ -1022,7 +1024,7 @@ func onModifyTableCharsetAndCollate(t *meta.Meta, job *model.Job) (ver int64, _ return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } @@ -1065,19 +1067,19 @@ func (w *worker) onSetTableFlashReplica(t *meta.Meta, job *model.Job) (ver int64 return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } if replicaInfo.Count > 0 && tableHasPlacementSettings(tblInfo) { job.State = model.JobStateCancelled - return ver, errors.Trace(ErrIncompatibleTiFlashAndPlacement) + return ver, errors.Trace(dbterror.ErrIncompatibleTiFlashAndPlacement) } // Ban setting replica count for tables in system database. if tidb_util.IsMemOrSysDB(job.SchemaName) { - return ver, errors.Trace(errUnsupportedAlterReplicaForSysTable) + return ver, errors.Trace(dbterror.ErrUnsupportedAlterReplicaForSysTable) } err = w.checkTiFlashReplicaCount(replicaInfo.Count) @@ -1088,12 +1090,12 @@ func (w *worker) onSetTableFlashReplica(t *meta.Meta, job *model.Job) (ver int64 // We should check this first, in order to avoid creating redundant DDL jobs. if pi := tblInfo.GetPartitionInfo(); pi != nil { logutil.BgLogger().Info("Set TiFlash replica pd rule for partitioned table", zap.Int64("tableID", tblInfo.ID)) - if e := infosync.ConfigureTiFlashPDForPartitions(false, &pi.Definitions, replicaInfo.Count, &replicaInfo.Labels); e != nil { + if e := infosync.ConfigureTiFlashPDForPartitions(false, &pi.Definitions, replicaInfo.Count, &replicaInfo.Labels, tblInfo.ID); e != nil { job.State = model.JobStateCancelled return ver, errors.Trace(e) } // Partitions that in adding mid-state. They have high priorities, so we should set accordingly pd rules. - if e := infosync.ConfigureTiFlashPDForPartitions(true, &pi.AddingDefinitions, replicaInfo.Count, &replicaInfo.Labels); e != nil { + if e := infosync.ConfigureTiFlashPDForPartitions(true, &pi.AddingDefinitions, replicaInfo.Count, &replicaInfo.Labels, tblInfo.ID); e != nil { job.State = model.JobStateCancelled return ver, errors.Trace(e) } @@ -1140,7 +1142,7 @@ func onUpdateFlashReplicaStatus(t *meta.Meta, job *model.Job) (ver int64, _ erro return ver, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } @@ -1300,7 +1302,7 @@ func onRepairTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) tblInfo.State = model.StateNone // Check the old DB and old table exist. - _, err := getTableInfoAndCancelFaultJob(t, job, schemaID) + _, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { return ver, errors.Trace(err) } @@ -1326,7 +1328,7 @@ func onRepairTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) asyncNotifyEvent(d, &util.Event{Tp: model.ActionRepairTable, TableInfo: tblInfo}) return ver, nil default: - return ver, ErrInvalidDDLState.GenWithStackByArgs("table", tblInfo.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tblInfo.State) } } @@ -1338,7 +1340,7 @@ func onAlterTableAttributes(t *meta.Meta, job *model.Job) (ver int64, err error) return 0, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, err } @@ -1370,7 +1372,7 @@ func onAlterTablePartitionAttributes(t *meta.Meta, job *model.Job) (ver int64, e job.State = model.JobStateCancelled return 0, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, err } @@ -1408,14 +1410,14 @@ func onAlterTablePartitionPlacement(t *meta.Meta, job *model.Job) (ver int64, er job.State = model.JobStateCancelled return 0, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, err } if tblInfo.TiFlashReplica != nil && tblInfo.TiFlashReplica.Count > 0 { job.State = model.JobStateCancelled - return 0, errors.Trace(ErrIncompatibleTiFlashAndPlacement) + return 0, errors.Trace(dbterror.ErrIncompatibleTiFlashAndPlacement) } ptInfo := tblInfo.GetPartitionInfo() @@ -1478,14 +1480,14 @@ func onAlterTablePlacement(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, return 0, errors.Trace(err) } - tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, err } if tblInfo.TiFlashReplica != nil && tblInfo.TiFlashReplica.Count > 0 { job.State = model.JobStateCancelled - return 0, errors.Trace(ErrIncompatibleTiFlashAndPlacement) + return 0, errors.Trace(dbterror.ErrIncompatibleTiFlashAndPlacement) } if _, err = checkPlacementPolicyRefValidAndCanNonValidJob(t, job, policyRefInfo); err != nil { @@ -1566,7 +1568,7 @@ func updateLabelRules(job *model.Job, tblInfo *model.TableInfo, oldRules map[str } func onAlterCacheTable(t *meta.Meta, job *model.Job) (ver int64, err error) { - tbInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tbInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, errors.Trace(err) } @@ -1577,11 +1579,11 @@ func onAlterCacheTable(t *meta.Meta, job *model.Job) (ver int64, err error) { } if tbInfo.TempTableType != model.TempTableNone { - return ver, errors.Trace(ErrOptOnTemporaryTable.GenWithStackByArgs("alter temporary table cache")) + return ver, errors.Trace(dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("alter temporary table cache")) } if tbInfo.Partition != nil { - return ver, errors.Trace(ErrOptOnCacheTable.GenWithStackByArgs("partition mode")) + return ver, errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("partition mode")) } switch tbInfo.TableCacheStatusType { @@ -1603,13 +1605,13 @@ func onAlterCacheTable(t *meta.Meta, job *model.Job) (ver int64, err error) { job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) default: job.State = model.JobStateCancelled - err = ErrInvalidDDLState.GenWithStackByArgs("alter table cache", tbInfo.TableCacheStatusType.String()) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("alter table cache", tbInfo.TableCacheStatusType.String()) } return ver, err } func onAlterNoCacheTable(t *meta.Meta, job *model.Job) (ver int64, err error) { - tbInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tbInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, errors.Trace(err) } @@ -1638,7 +1640,7 @@ func onAlterNoCacheTable(t *meta.Meta, job *model.Job) (ver int64, err error) { job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) default: job.State = model.JobStateCancelled - err = ErrInvalidDDLState.GenWithStackByArgs("alter table no cache", tbInfo.TableCacheStatusType.String()) + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("alter table no cache", tbInfo.TableCacheStatusType.String()) } return ver, err } diff --git a/ddl/table_lock.go b/ddl/table_lock.go index 07498a160932a..ec4d00b6dbb55 100644 --- a/ddl/table_lock.go +++ b/ddl/table_lock.go @@ -19,6 +19,7 @@ import ( "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/util/dbterror" ) func onLockTables(t *meta.Meta, job *model.Job) (ver int64, err error) { @@ -39,7 +40,7 @@ func onLockTables(t *meta.Meta, job *model.Job) (ver int64, err error) { for i, tl := range arg.LockTables { job.SchemaID = tl.SchemaID job.TableID = tl.TableID - tbInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tbInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, err } @@ -59,7 +60,7 @@ func onLockTables(t *meta.Meta, job *model.Job) (ver int64, err error) { job.SchemaID = arg.LockTables[arg.IndexOfLock].SchemaID job.TableID = arg.LockTables[arg.IndexOfLock].TableID var tbInfo *model.TableInfo - tbInfo, err = getTableInfoAndCancelFaultJob(t, job, job.SchemaID) + tbInfo, err = GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, err } @@ -92,7 +93,7 @@ func onLockTables(t *meta.Meta, job *model.Job) (ver int64, err error) { } default: job.State = model.JobStateCancelled - return ver, ErrInvalidDDLState.GenWithStackByArgs("table lock", tbInfo.Lock.State) + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table lock", tbInfo.Lock.State) } } diff --git a/ddl/table_modify_test.go b/ddl/table_modify_test.go new file mode 100644 index 0000000000000..2cb1e88ad2933 --- /dev/null +++ b/ddl/table_modify_test.go @@ -0,0 +1,294 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "context" + "testing" + "time" + + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/terror" + "github.com/pingcap/tidb/session" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/admin" + "github.com/stretchr/testify/require" +) + +const tableModifyLease = 600 * time.Millisecond + +func TestCreateTable(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, tableModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("CREATE TABLE `t` (`a` double DEFAULT 1.0 DEFAULT now() DEFAULT 2.0 );") + tk.MustExec("CREATE TABLE IF NOT EXISTS `t` (`a` double DEFAULT 1.0 DEFAULT now() DEFAULT 2.0 );") + is := domain.GetDomain(tk.Session()).InfoSchema() + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + + cols := tbl.Cols() + require.Len(t, cols, 1) + col := cols[0] + require.Equal(t, "a", col.Name.L) + d, ok := col.DefaultValue.(string) + require.True(t, ok) + require.Equal(t, "2.0", d) + + tk.MustExec("drop table t") + tk.MustGetErrCode("CREATE TABLE `t` (`a` int) DEFAULT CHARSET=abcdefg", errno.ErrUnknownCharacterSet) + + tk.MustExec("CREATE TABLE `collateTest` (`a` int, `b` varchar(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci") + expects := "collateTest CREATE TABLE `collateTest` (\n `a` int(11) DEFAULT NULL,\n `b` varchar(10) COLLATE utf8_general_ci DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci" + tk.MustQuery("show create table collateTest").Check(testkit.Rows(expects)) + + tk.MustGetErrCode("CREATE TABLE `collateTest2` (`a` int) CHARSET utf8 COLLATE utf8mb4_unicode_ci", errno.ErrCollationCharsetMismatch) + tk.MustGetErrCode("CREATE TABLE `collateTest3` (`a` int) COLLATE utf8mb4_unicode_ci CHARSET utf8", errno.ErrConflictingDeclarations) + + tk.MustExec("CREATE TABLE `collateTest4` (`a` int) COLLATE utf8_uniCOde_ci") + expects = "collateTest4 CREATE TABLE `collateTest4` (\n `a` int(11) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci" + tk.MustQuery("show create table collateTest4").Check(testkit.Rows(expects)) + + tk.MustExec("create database test2 default charset utf8 collate utf8_general_ci") + tk.MustExec("use test2") + tk.MustExec("create table dbCollateTest (a varchar(10))") + expects = "dbCollateTest CREATE TABLE `dbCollateTest` (\n `a` varchar(10) COLLATE utf8_general_ci DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci" + tk.MustQuery("show create table dbCollateTest").Check(testkit.Rows(expects)) + + // test for enum column + tk.MustExec("use test") + tk.MustGetErrCode("create table t_enum (a enum('e','e'));", errno.ErrDuplicatedValueInType) + + tk = testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustGetErrCode("create table t_enum (a enum('e','E')) charset=utf8 collate=utf8_general_ci;", errno.ErrDuplicatedValueInType) + tk.MustGetErrCode("create table t_enum (a enum('abc','Abc')) charset=utf8 collate=utf8_general_ci;", errno.ErrDuplicatedValueInType) + tk.MustGetErrCode("create table t_enum (a enum('e','E')) charset=utf8 collate=utf8_unicode_ci;", errno.ErrDuplicatedValueInType) + tk.MustGetErrCode("create table t_enum (a enum('ss','ß')) charset=utf8 collate=utf8_unicode_ci;", errno.ErrDuplicatedValueInType) + // test for set column + tk.MustGetErrCode("create table t_enum (a set('e','e'));", errno.ErrDuplicatedValueInType) + tk.MustGetErrCode("create table t_enum (a set('e','E')) charset=utf8 collate=utf8_general_ci;", errno.ErrDuplicatedValueInType) + tk.MustGetErrCode("create table t_enum (a set('abc','Abc')) charset=utf8 collate=utf8_general_ci;", errno.ErrDuplicatedValueInType) + tk.MustGetErrMsg("create table t_enum (a enum('B','b')) charset=utf8 collate=utf8_general_ci;", "[types:1291]Column 'a' has duplicated value 'b' in ENUM") + tk.MustGetErrCode("create table t_enum (a set('e','E')) charset=utf8 collate=utf8_unicode_ci;", errno.ErrDuplicatedValueInType) + tk.MustGetErrCode("create table t_enum (a set('ss','ß')) charset=utf8 collate=utf8_unicode_ci;", errno.ErrDuplicatedValueInType) + tk.MustGetErrMsg("create table t_enum (a enum('ss','ß')) charset=utf8 collate=utf8_unicode_ci;", "[types:1291]Column 'a' has duplicated value 'ß' in ENUM") + + // test for table option "union" not supported + tk.MustExec("use test") + tk.MustExec("CREATE TABLE x (a INT) ENGINE = MyISAM;") + tk.MustExec("CREATE TABLE y (a INT) ENGINE = MyISAM;") + tk.MustGetErrCode("CREATE TABLE z (a INT) ENGINE = MERGE UNION = (x, y);", errno.ErrTableOptionUnionUnsupported) + tk.MustGetErrCode("ALTER TABLE x UNION = (y);", errno.ErrTableOptionUnionUnsupported) + tk.MustExec("drop table x;") + tk.MustExec("drop table y;") + + // test for table option "insert method" not supported + tk.MustExec("use test") + tk.MustExec("CREATE TABLE x (a INT) ENGINE = MyISAM;") + tk.MustExec("CREATE TABLE y (a INT) ENGINE = MyISAM;") + tk.MustGetErrCode("CREATE TABLE z (a INT) ENGINE = MERGE INSERT_METHOD=LAST;", errno.ErrTableOptionInsertMethodUnsupported) + tk.MustGetErrCode("ALTER TABLE x INSERT_METHOD=LAST;", errno.ErrTableOptionInsertMethodUnsupported) + tk.MustExec("drop table x;") + tk.MustExec("drop table y;") +} + +func TestLockTableReadOnly(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, tableModifyLease) + defer clean() + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk2.MustExec("use test") + tk1.MustExec("drop table if exists t1,t2") + defer func() { + tk1.MustExec("alter table t1 read write") + tk1.MustExec("alter table t2 read write") + tk1.MustExec("drop table if exists t1,t2") + }() + tk1.MustExec("create table t1 (a int key, b int)") + tk1.MustExec("create table t2 (a int key)") + + tk1.MustExec("alter table t1 read only") + tk1.MustQuery("select * from t1") + tk2.MustQuery("select * from t1") + require.True(t, terror.ErrorEqual(tk1.ExecToErr("insert into t1 set a=1, b=2"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk1.ExecToErr("update t1 set a=1"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk1.ExecToErr("delete from t1"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("insert into t1 set a=1, b=2"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("update t1 set a=1"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("delete from t1"), infoschema.ErrTableLocked)) + + tk2.MustExec("alter table t1 read only") + require.True(t, terror.ErrorEqual(tk2.ExecToErr("insert into t1 set a=1, b=2"), infoschema.ErrTableLocked)) + + tk1.MustExec("alter table t1 read write") + tk1.MustExec("lock tables t1 read") + require.True(t, terror.ErrorEqual(tk1.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked)) + tk1.MustExec("lock tables t1 write") + require.True(t, terror.ErrorEqual(tk1.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked)) + tk1.MustExec("lock tables t1 write local") + require.True(t, terror.ErrorEqual(tk1.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("alter table t1 read only"), infoschema.ErrTableLocked)) + tk1.MustExec("unlock tables") + + tk1.MustExec("alter table t1 read only") + require.True(t, terror.ErrorEqual(tk1.ExecToErr("lock tables t1 read"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("lock tables t1 read"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk1.ExecToErr("lock tables t1 write"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("lock tables t1 write"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk1.ExecToErr("lock tables t1 write local"), infoschema.ErrTableLocked)) + require.True(t, terror.ErrorEqual(tk2.ExecToErr("lock tables t1 write local"), infoschema.ErrTableLocked)) + tk1.MustExec("admin cleanup table lock t1") + tk2.MustExec("insert into t1 set a=1, b=2") + + tk1.MustExec("set tidb_enable_amend_pessimistic_txn = 1") + tk1.MustExec("begin pessimistic") + tk1.MustQuery("select * from t1 where a = 1").Check(testkit.Rows("1 2")) + tk2.MustExec("update t1 set b = 3") + tk2.MustExec("alter table t1 read only") + tk2.MustQuery("select * from t1 where a = 1").Check(testkit.Rows("1 3")) + tk1.MustQuery("select * from t1 where a = 1").Check(testkit.Rows("1 2")) + tk1.MustExec("update t1 set b = 4") + require.True(t, terror.ErrorEqual(tk1.ExecToErr("commit"), domain.ErrInfoSchemaChanged)) + tk2.MustExec("alter table t1 read write") +} + +// TestConcurrentLockTables test concurrent lock/unlock tables. +func TestConcurrentLockTables(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, tableModifyLease) + defer clean() + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk2.MustExec("use test") + tk1.MustExec("create table t1 (a int)") + + // Test concurrent lock tables read. + sql1 := "lock tables t1 read" + sql2 := "lock tables t1 read" + testParallelExecSQL(t, store, dom, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { + require.NoError(t, err1) + require.NoError(t, err2) + }) + tk1.MustExec("unlock tables") + tk2.MustExec("unlock tables") + + // Test concurrent lock tables write. + sql1 = "lock tables t1 write" + sql2 = "lock tables t1 write" + testParallelExecSQL(t, store, dom, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { + require.NoError(t, err1) + require.True(t, terror.ErrorEqual(err2, infoschema.ErrTableLocked)) + }) + tk1.MustExec("unlock tables") + tk2.MustExec("unlock tables") + + // Test concurrent lock tables write local. + sql1 = "lock tables t1 write local" + sql2 = "lock tables t1 write local" + testParallelExecSQL(t, store, dom, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { + require.NoError(t, err1) + require.True(t, terror.ErrorEqual(err2, infoschema.ErrTableLocked)) + }) + + tk1.MustExec("unlock tables") + tk2.MustExec("unlock tables") +} + +func testParallelExecSQL(t *testing.T, store kv.Storage, dom *domain.Domain, sql1, sql2 string, se1, se2 session.Session, f func(t *testing.T, err1, err2 error)) { + callback := &ddl.TestDDLCallback{} + times := 0 + callback.OnJobRunBeforeExported = func(job *model.Job) { + if times != 0 { + return + } + var qLen int + for { + err := kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + jobs, err1 := admin.GetDDLJobs(txn) + if err1 != nil { + return err1 + } + qLen = len(jobs) + return nil + }) + require.NoError(t, err) + if qLen == 2 { + break + } + time.Sleep(5 * time.Millisecond) + } + times++ + } + d := dom.DDL() + originalCallback := d.GetHook() + defer d.SetHook(originalCallback) + d.SetHook(callback) + + var wg util.WaitGroupWrapper + var err1 error + var err2 error + ch := make(chan struct{}) + // Make sure the sql1 is put into the DDLJobQueue. + go func() { + var qLen int + for { + err := kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + jobs, err3 := admin.GetDDLJobs(txn) + if err3 != nil { + return err3 + } + qLen = len(jobs) + return nil + }) + require.NoError(t, err) + if qLen == 1 { + // Make sure sql2 is executed after the sql1. + close(ch) + break + } + time.Sleep(5 * time.Millisecond) + } + }() + wg.Run(func() { + _, err1 = se1.Execute(context.Background(), sql1) + }) + wg.Run(func() { + <-ch + _, err2 = se2.Execute(context.Background(), sql2) + }) + + wg.Wait() + f(t, err1, err2) +} + +func TestUnsupportedAlterTableOption(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, tableModifyLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a char(10) not null,b char(20)) shard_row_id_bits=6") + tk.MustGetErrCode("alter table t pre_split_regions=6", errno.ErrUnsupportedDDLOperation) +} diff --git a/ddl/table_test.go b/ddl/table_test.go index 6be497a6828e1..b9f3dc4dbe948 100644 --- a/ddl/table_test.go +++ b/ddl/table_test.go @@ -31,25 +31,14 @@ import ( "github.com/stretchr/testify/require" ) -func testCreateTableT(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) *model.Job { - job := &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionCreateTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{tblInfo}, - } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) - - v := getSchemaVerT(t, ctx) - tblInfo.State = model.StatePublic - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - tblInfo.State = model.StateNone - return job -} - -func testRenameTable(t *testing.T, ctx sessionctx.Context, d *ddl, newSchemaID, oldSchemaID int64, oldSchemaName model.CIStr, tblInfo *model.TableInfo) *model.Job { +func testRenameTable( + t *testing.T, + ctx sessionctx.Context, + d *ddl, + newSchemaID, oldSchemaID int64, + oldSchemaName model.CIStr, + tblInfo *model.TableInfo, +) *model.Job { job := &model.Job{ SchemaID: newSchemaID, TableID: tblInfo.ID, @@ -57,12 +46,12 @@ func testRenameTable(t *testing.T, ctx sessionctx.Context, d *ddl, newSchemaID, BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{oldSchemaID, tblInfo.Name, oldSchemaName}, } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) + ctx.SetValue(sessionctx.QueryString, "skip") + require.NoError(t, d.DoDDLJob(ctx, job)) - v := getSchemaVerT(t, ctx) + v := getSchemaVer(t, ctx) tblInfo.State = model.StatePublic - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) tblInfo.State = model.StateNone return job } @@ -77,11 +66,11 @@ func testRenameTables( BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{oldSchemaIDs, newSchemaIDs, newTableNames, oldTableIDs, oldSchemaNames}, } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) + ctx.SetValue(sessionctx.QueryString, "skip") + require.NoError(t, d.DoDDLJob(ctx, job)) - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: nil}) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: nil}) return job } @@ -100,11 +89,12 @@ func testLockTable(t *testing.T, ctx sessionctx.Context, d *ddl, newSchemaID int BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{arg}, } - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v}) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v}) return job } @@ -127,21 +117,6 @@ func checkTableLockedTest(t *testing.T, d *ddl, dbInfo *model.DBInfo, tblInfo *m require.NoError(t, err) } -func testDropTableT(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) *model.Job { - job := &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionDropTable, - BinlogInfo: &model.HistoryInfo{}, - } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) - - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - return job -} - func testTruncateTable(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) *model.Job { genIDs, err := d.genGlobalIDs(1) require.NoError(t, err) @@ -153,39 +128,16 @@ func testTruncateTable(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *mod BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{newTableID}, } - err = d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err = d.DoDDLJob(ctx, job) require.NoError(t, err) - v := getSchemaVerT(t, ctx) + v := getSchemaVer(t, ctx) tblInfo.ID = newTableID - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) return job } -func testCheckTableStateT(t *testing.T, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, state model.SchemaState) { - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { - tt := meta.NewMeta(txn) - info, err := tt.GetTable(dbInfo.ID, tblInfo.ID) - require.NoError(t, err) - - if state == model.StateNone { - require.Nil(t, info) - return nil - } - - require.EqualValues(t, tblInfo.Name, info.Name) - require.Equal(t, state, info.State) - return nil - }) - require.NoError(t, err) -} - -func testGetTableT(t *testing.T, d *ddl, schemaID int64, tableID int64) table.Table { - tbl, err := testGetTableWithError(d, schemaID, tableID) - require.NoError(t, err) - return tbl -} - func testGetTableWithError(d *ddl, schemaID, tableID int64) (table.Table, error) { var tblInfo *model.TableInfo err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { @@ -211,85 +163,87 @@ func testGetTableWithError(d *ddl, schemaID, tableID int64) (table.Table, error) return tbl, nil } -func ExportTestTable(t *testing.T) { +func TestTable(t *testing.T) { store, err := mockstore.NewMockStore() require.NoError(t, err) - ddl, err := testNewDDLAndStart( + defer func() { + require.NoError(t, store.Close()) + }() + d, err := testNewDDLAndStart( context.Background(), WithStore(store), WithLease(testLease), ) require.NoError(t, err) + defer func() { + require.NoError(t, d.Stop()) + }() - dbInfo, err := testSchemaInfo(ddl, "test_table") + dbInfo, err := testSchemaInfo(d, "test_table") require.NoError(t, err) - testCreateSchemaT(t, testNewContext(ddl), ddl, dbInfo) + testCreateSchema(t, testNewContext(d), d, dbInfo) - ctx := testNewContext(ddl) + ctx := testNewContext(d) - tblInfo, err := testTableInfo(ddl, "t", 3) + tblInfo, err := testTableInfo(d, "t", 3) require.NoError(t, err) - job := testCreateTableT(t, ctx, ddl, dbInfo, tblInfo) - testCheckTableStateT(t, ddl, dbInfo, tblInfo, model.StatePublic) - testCheckJobDoneT(t, ddl, job, true) + job := testCreateTable(t, ctx, d, dbInfo, tblInfo) + testCheckTableState(t, d, dbInfo, tblInfo, model.StatePublic) + testCheckJobDone(t, d, job, true) // Create an existing table. - newTblInfo, err := testTableInfo(ddl, "t", 3) + newTblInfo, err := testTableInfo(d, "t", 3) require.NoError(t, err) - doDDLJobErrT(t, dbInfo.ID, newTblInfo.ID, model.ActionCreateTable, []interface{}{newTblInfo}, ctx, ddl) + doDDLJobErr(t, dbInfo.ID, newTblInfo.ID, model.ActionCreateTable, []interface{}{newTblInfo}, ctx, d) count := 2000 - tbl := testGetTableT(t, ddl, dbInfo.ID, tblInfo.ID) + tbl := testGetTable(t, d, dbInfo.ID, tblInfo.ID) for i := 1; i <= count; i++ { _, err := tbl.AddRecord(ctx, types.MakeDatums(i, i, i)) require.NoError(t, err) } - job = testDropTableT(t, ctx, ddl, dbInfo, tblInfo) - testCheckJobDoneT(t, ddl, job, false) + job = testDropTable(t, ctx, d, dbInfo, tblInfo) + testCheckJobDone(t, d, job, false) // for truncate table - tblInfo, err = testTableInfo(ddl, "tt", 3) + tblInfo, err = testTableInfo(d, "tt", 3) require.NoError(t, err) - job = testCreateTableT(t, ctx, ddl, dbInfo, tblInfo) - testCheckTableStateT(t, ddl, dbInfo, tblInfo, model.StatePublic) - testCheckJobDoneT(t, ddl, job, true) - job = testTruncateTable(t, ctx, ddl, dbInfo, tblInfo) - testCheckTableStateT(t, ddl, dbInfo, tblInfo, model.StatePublic) - testCheckJobDoneT(t, ddl, job, true) + job = testCreateTable(t, ctx, d, dbInfo, tblInfo) + testCheckTableState(t, d, dbInfo, tblInfo, model.StatePublic) + testCheckJobDone(t, d, job, true) + job = testTruncateTable(t, ctx, d, dbInfo, tblInfo) + testCheckTableState(t, d, dbInfo, tblInfo, model.StatePublic) + testCheckJobDone(t, d, job, true) // for rename table - dbInfo1, err := testSchemaInfo(ddl, "test_rename_table") + dbInfo1, err := testSchemaInfo(d, "test_rename_table") require.NoError(t, err) - testCreateSchemaT(t, testNewContext(ddl), ddl, dbInfo1) - job = testRenameTable(t, ctx, ddl, dbInfo1.ID, dbInfo.ID, dbInfo.Name, tblInfo) - testCheckTableStateT(t, ddl, dbInfo1, tblInfo, model.StatePublic) - testCheckJobDoneT(t, ddl, job, true) - - job = testLockTable(t, ctx, ddl, dbInfo1.ID, tblInfo, model.TableLockWrite) - testCheckTableStateT(t, ddl, dbInfo1, tblInfo, model.StatePublic) - testCheckJobDoneT(t, ddl, job, true) - checkTableLockedTest(t, ddl, dbInfo1, tblInfo, ddl.GetID(), ctx.GetSessionVars().ConnectionID, model.TableLockWrite) + testCreateSchema(t, testNewContext(d), d, dbInfo1) + job = testRenameTable(t, ctx, d, dbInfo1.ID, dbInfo.ID, dbInfo.Name, tblInfo) + testCheckTableState(t, d, dbInfo1, tblInfo, model.StatePublic) + testCheckJobDone(t, d, job, true) + + job = testLockTable(t, ctx, d, dbInfo1.ID, tblInfo, model.TableLockWrite) + testCheckTableState(t, d, dbInfo1, tblInfo, model.StatePublic) + testCheckJobDone(t, d, job, true) + checkTableLockedTest(t, d, dbInfo1, tblInfo, d.GetID(), ctx.GetSessionVars().ConnectionID, model.TableLockWrite) // for alter cache table - job = testAlterCacheTable(t, ctx, ddl, dbInfo1.ID, tblInfo) - testCheckTableStateT(t, ddl, dbInfo1, tblInfo, model.StatePublic) - testCheckJobDoneT(t, ddl, job, true) - checkTableCacheTest(t, ddl, dbInfo1, tblInfo) + job = testAlterCacheTable(t, ctx, d, dbInfo1.ID, tblInfo) + testCheckTableState(t, d, dbInfo1, tblInfo, model.StatePublic) + testCheckJobDone(t, d, job, true) + checkTableCacheTest(t, d, dbInfo1, tblInfo) // for alter no cache table - job = testAlterNoCacheTable(t, ctx, ddl, dbInfo1.ID, tblInfo) - testCheckTableStateT(t, ddl, dbInfo1, tblInfo, model.StatePublic) - testCheckJobDoneT(t, ddl, job, true) - checkTableNoCacheTest(t, ddl, dbInfo1, tblInfo) + job = testAlterNoCacheTable(t, ctx, d, dbInfo1.ID, tblInfo) + testCheckTableState(t, d, dbInfo1, tblInfo, model.StatePublic) + testCheckJobDone(t, d, job, true) + checkTableNoCacheTest(t, d, dbInfo1, tblInfo) - testDropSchema(t, testNewContext(ddl), ddl, dbInfo) - err = ddl.Stop() - require.NoError(t, err) - err = store.Close() - require.NoError(t, err) + testDropSchema(t, testNewContext(d), d, dbInfo) } func checkTableCacheTest(t *testing.T, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) { - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { + require.NoError(t, kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { tt := meta.NewMeta(txn) info, err := tt.GetTable(dbInfo.ID, tblInfo.ID) require.NoError(t, err) @@ -297,20 +251,18 @@ func checkTableCacheTest(t *testing.T, d *ddl, dbInfo *model.DBInfo, tblInfo *mo require.NotNil(t, info.TableCacheStatusType) require.Equal(t, model.TableCacheStatusEnable, info.TableCacheStatusType) return nil - }) - require.NoError(t, err) + })) } func checkTableNoCacheTest(t *testing.T, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) { - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { + require.NoError(t, kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { tt := meta.NewMeta(txn) info, err := tt.GetTable(dbInfo.ID, tblInfo.ID) require.NoError(t, err) require.NotNil(t, info) require.Equal(t, model.TableCacheStatusDisable, info.TableCacheStatusType) return nil - }) - require.NoError(t, err) + })) } func testAlterCacheTable(t *testing.T, ctx sessionctx.Context, d *ddl, newSchemaID int64, tblInfo *model.TableInfo) *model.Job { @@ -321,16 +273,16 @@ func testAlterCacheTable(t *testing.T, ctx sessionctx.Context, d *ddl, newSchema BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{}, } - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v}) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v}) return job } func testAlterNoCacheTable(t *testing.T, ctx sessionctx.Context, d *ddl, newSchemaID int64, tblInfo *model.TableInfo) *model.Job { - job := &model.Job{ SchemaID: newSchemaID, TableID: tblInfo.ID, @@ -338,56 +290,54 @@ func testAlterNoCacheTable(t *testing.T, ctx sessionctx.Context, d *ddl, newSche BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{}, } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) + ctx.SetValue(sessionctx.QueryString, "skip") + require.NoError(t, d.DoDDLJob(ctx, job)) - v := getSchemaVerT(t, ctx) - checkHistoryJobArgsT(t, ctx, job.ID, &historyJobArgs{ver: v}) + v := getSchemaVer(t, ctx) + checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v}) return job } -func ExportTestRenameTables(t *testing.T) { +func TestRenameTables(t *testing.T) { store, err := mockstore.NewMockStore() defer func() { - err := store.Close() - require.NoError(t, err) + require.NoError(t, store.Close()) }() require.NoError(t, err) - ddl, err := testNewDDLAndStart( + d, err := testNewDDLAndStart( context.Background(), WithStore(store), WithLease(testLease), ) require.NoError(t, err) defer func() { - err := ddl.Stop() - require.NoError(t, err) + require.NoError(t, d.Stop()) }() - dbInfo, err := testSchemaInfo(ddl, "test_table") + dbInfo, err := testSchemaInfo(d, "test_table") require.NoError(t, err) - testCreateSchemaT(t, testNewContext(ddl), ddl, dbInfo) + testCreateSchema(t, testNewContext(d), d, dbInfo) - ctx := testNewContext(ddl) + ctx := testNewContext(d) var tblInfos = make([]*model.TableInfo, 0, 2) var newTblInfos = make([]*model.TableInfo, 0, 2) for i := 1; i < 3; i++ { tableName := fmt.Sprintf("t%d", i) - tblInfo, err := testTableInfo(ddl, tableName, 3) + tblInfo, err := testTableInfo(d, tableName, 3) require.NoError(t, err) - job := testCreateTableT(t, ctx, ddl, dbInfo, tblInfo) - testCheckTableStateT(t, ddl, dbInfo, tblInfo, model.StatePublic) - testCheckJobDoneT(t, ddl, job, true) + job := testCreateTable(t, ctx, d, dbInfo, tblInfo) + testCheckTableState(t, d, dbInfo, tblInfo, model.StatePublic) + testCheckJobDone(t, d, job, true) tblInfos = append(tblInfos, tblInfo) newTableName := fmt.Sprintf("tt%d", i) - tblInfo, err = testTableInfo(ddl, newTableName, 3) + tblInfo, err = testTableInfo(d, newTableName, 3) require.NoError(t, err) newTblInfos = append(newTblInfos, tblInfo) } job := testRenameTables( - t, ctx, ddl, + t, ctx, d, []int64{dbInfo.ID, dbInfo.ID}, []int64{dbInfo.ID, dbInfo.ID}, []*model.CIStr{&newTblInfos[0].Name, &newTblInfos[1].Name}, @@ -402,32 +352,30 @@ func ExportTestRenameTables(t *testing.T) { require.Equal(t, wantTblInfos[1].Name.L, "tt2") } -func ExportTestCreateTables(t *testing.T) { +func TestCreateTables(t *testing.T) { store, err := mockstore.NewMockStore() require.NoError(t, err) defer func() { - err := store.Close() - require.NoError(t, err) + require.NoError(t, store.Close()) }() - ddl, err := testNewDDLAndStart( + d, err := testNewDDLAndStart( context.Background(), WithStore(store), WithLease(testLease), ) require.NoError(t, err) defer func() { - err := ddl.Stop() - require.NoError(t, err) + require.NoError(t, d.Stop()) }() - dbInfo, err := testSchemaInfo(ddl, "test_table") + dbInfo, err := testSchemaInfo(d, "test_table") require.NoError(t, err) - testCreateSchemaT(t, testNewContext(ddl), ddl, dbInfo) + testCreateSchema(t, testNewContext(d), d, dbInfo) - ctx := testNewContext(ddl) + ctx := testNewContext(d) - infos := []*model.TableInfo{} - genIDs, err := ddl.genGlobalIDs(3) + var infos []*model.TableInfo + genIDs, err := d.genGlobalIDs(3) require.NoError(t, err) infos = append(infos, &model.TableInfo{ @@ -449,10 +397,11 @@ func ExportTestCreateTables(t *testing.T) { BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{infos}, } - err = ddl.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err = d.DoDDLJob(ctx, job) require.NoError(t, err) - testGetTableT(t, ddl, dbInfo.ID, genIDs[0]) - testGetTableT(t, ddl, dbInfo.ID, genIDs[1]) - testGetTableT(t, ddl, dbInfo.ID, genIDs[2]) + testGetTable(t, d, dbInfo.ID, genIDs[0]) + testGetTable(t, d, dbInfo.ID, genIDs[1]) + testGetTable(t, d, dbInfo.ID, genIDs[2]) } diff --git a/ddl/testutil/testutil.go b/ddl/testutil/testutil.go index 3b4d2911f0bcb..a18d0e045fb3c 100644 --- a/ddl/testutil/testutil.go +++ b/ddl/testutil/testutil.go @@ -28,8 +28,8 @@ import ( ) // SessionExecInGoroutine export for testing. -func SessionExecInGoroutine(s kv.Storage, sql string, done chan error) { - ExecMultiSQLInGoroutine(s, "test_db", []string{sql}, done) +func SessionExecInGoroutine(s kv.Storage, dbName, sql string, done chan error) { + ExecMultiSQLInGoroutine(s, dbName, []string{sql}, done) } // ExecMultiSQLInGoroutine exports for testing. @@ -53,7 +53,7 @@ func ExecMultiSQLInGoroutine(s kv.Storage, dbName string, multiSQL []string, don return } if rs != nil { - done <- errors.Errorf("RecordSet should be empty.") + done <- errors.Errorf("RecordSet should be empty") return } done <- nil diff --git a/ddl/tiflash_replica_test.go b/ddl/tiflash_replica_test.go new file mode 100644 index 0000000000000..f0ccad6e73aa9 --- /dev/null +++ b/ddl/tiflash_replica_test.go @@ -0,0 +1,447 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 ddl_test + +import ( + "context" + "fmt" + "math" + "strings" + "sync" + "testing" + "time" + + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/parser/auth" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/terror" + "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/stretchr/testify/require" +) + +const tiflashReplicaLease = 600 * time.Millisecond + +func TestSetTableFlashReplica(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`)) + store, clean := testkit.CreateMockStoreWithSchemaLease(t, tiflashReplicaLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t_flash(a int, b int)") + + tbl := external.GetTableByName(t, tk, "test", "t_flash") + require.Nil(t, tbl.Meta().TiFlashReplica) + + tk.MustExec("alter table t_flash set tiflash replica 2 location labels 'a','b';") + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.NotNil(t, tbl.Meta().TiFlashReplica) + require.Equal(t, uint64(2), tbl.Meta().TiFlashReplica.Count) + require.Equal(t, "a,b", strings.Join(tbl.Meta().TiFlashReplica.LocationLabels, ",")) + + tk.MustExec("alter table t_flash set tiflash replica 0") + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.Nil(t, tbl.Meta().TiFlashReplica) + + // Test set tiflash replica for partition table. + tk.MustExec("drop table if exists t_flash;") + tk.MustExec("create table t_flash(a int, b int) partition by hash(a) partitions 3") + tk.MustExec("alter table t_flash set tiflash replica 2 location labels 'a','b';") + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.NotNil(t, tbl.Meta().TiFlashReplica) + require.Equal(t, uint64(2), tbl.Meta().TiFlashReplica.Count) + require.Equal(t, "a,b", strings.Join(tbl.Meta().TiFlashReplica.LocationLabels, ",")) + + // Use table ID as physical ID, mock for partition feature was not enabled. + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tbl.Meta().ID, true) + require.NoError(t, err) + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.NotNil(t, tbl.Meta().TiFlashReplica) + require.True(t, tbl.Meta().TiFlashReplica.Available) + require.Len(t, tbl.Meta().TiFlashReplica.AvailablePartitionIDs, 0) + + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tbl.Meta().ID, false) + require.NoError(t, err) + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.False(t, tbl.Meta().TiFlashReplica.Available) + + // Mock for partition 0 replica was available. + partition := tbl.Meta().Partition + require.Len(t, partition.Definitions, 3) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, true) + require.NoError(t, err) + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.False(t, tbl.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[0].ID}, tbl.Meta().TiFlashReplica.AvailablePartitionIDs) + + // Mock for partition 0 replica become unavailable. + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, false) + require.NoError(t, err) + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.False(t, tbl.Meta().TiFlashReplica.Available) + require.Len(t, tbl.Meta().TiFlashReplica.AvailablePartitionIDs, 0) + + // Mock for partition 0, 1,2 replica was available. + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, true) + require.NoError(t, err) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[1].ID, true) + require.NoError(t, err) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[2].ID, true) + require.NoError(t, err) + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.True(t, tbl.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[0].ID, partition.Definitions[1].ID, partition.Definitions[2].ID}, tbl.Meta().TiFlashReplica.AvailablePartitionIDs) + + // Mock for partition 1 replica was unavailable. + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[1].ID, false) + require.NoError(t, err) + tbl = external.GetTableByName(t, tk, "test", "t_flash") + require.Equal(t, false, tbl.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[0].ID, partition.Definitions[2].ID}, tbl.Meta().TiFlashReplica.AvailablePartitionIDs) + + // Test for update table replica with unknown table ID. + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), math.MaxInt64, false) + require.EqualError(t, err, "[schema:1146]Table which ID = 9223372036854775807 does not exist.") + + // Test for FindTableByPartitionID. + is := domain.GetDomain(tk.Session()).InfoSchema() + tbl, dbInfo, _ := is.FindTableByPartitionID(partition.Definitions[0].ID) + require.NotNil(t, tbl) + require.NotNil(t, dbInfo) + require.Equal(t, "t_flash", tbl.Meta().Name.L) + tbl, dbInfo, _ = is.FindTableByPartitionID(tbl.Meta().ID) + require.Nil(t, tbl) + require.Nil(t, dbInfo) + err = failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") + require.NoError(t, err) + + // Test for set replica count more than the tiflash store count. + tk.MustExec("drop table if exists t_flash;") + tk.MustExec("create table t_flash(a int, b int)") + tk.MustGetErrMsg("alter table t_flash set tiflash replica 2 location labels 'a','b';", "the tiflash replica count: 2 should be less than the total tiflash server count: 0") +} + +func TestSetTiFlashReplicaForTemporaryTable(t *testing.T) { + // test for tiflash replica + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount")) + }() + + store, clean := testkit.CreateMockStoreWithSchemaLease(t, tiflashReplicaLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create global temporary table temp(id int) on commit delete rows") + tk.MustExec("create temporary table temp2(id int)") + tk.MustGetErrCode("alter table temp set tiflash replica 1", errno.ErrOptOnTemporaryTable) + tk.MustGetErrCode("alter table temp2 set tiflash replica 1", errno.ErrUnsupportedDDLOperation) + tk.MustExec("drop table temp, temp2") + + tk.MustExec("drop table if exists normal") + tk.MustExec("create table normal(id int)") + tk.MustExec("alter table normal set tiflash replica 1") + tk.MustQuery("select REPLICA_COUNT from information_schema.tiflash_replica where table_schema='test' and table_name='normal'").Check(testkit.Rows("1")) + tk.MustExec("create global temporary table temp like normal on commit delete rows") + tk.MustQuery("select REPLICA_COUNT from information_schema.tiflash_replica where table_schema='test' and table_name='temp'").Check(testkit.Rows()) + tk.MustExec("drop table temp") + tk.MustExec("create temporary table temp like normal") + tk.MustQuery("select REPLICA_COUNT from information_schema.tiflash_replica where table_schema='test' and table_name='temp'").Check(testkit.Rows()) +} + +func TestSetTableFlashReplicaForSystemTable(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, tiflashReplicaLease) + defer clean() + + tk := testkit.NewTestKit(t, store) + sysTables := make([]string, 0, 24) + memOrSysDB := []string{"MySQL", "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "METRICS_SCHEMA"} + for _, db := range memOrSysDB { + tk.MustExec("use " + db) + tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil) + rows := tk.MustQuery("show tables").Rows() + for i := 0; i < len(rows); i++ { + sysTables = append(sysTables, rows[i][0].(string)) + } + for _, one := range sysTables { + _, err := tk.Exec(fmt.Sprintf("alter table `%s` set tiflash replica 1", one)) + if db == "MySQL" { + require.Equal(t, "[ddl:8200]ALTER table replica for tables in system database is currently unsupported", err.Error()) + } else { + require.Equal(t, fmt.Sprintf("[planner:1142]ALTER command denied to user 'root'@'%%' for table '%s'", strings.ToLower(one)), err.Error()) + } + + } + sysTables = sysTables[:0] + } +} + +func TestSkipSchemaChecker(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`)) + defer func() { + err := failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") + require.NoError(t, err) + }() + + store, clean := testkit.CreateMockStoreWithSchemaLease(t, tiflashReplicaLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int)") + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use test") + + // Test skip schema checker for ActionSetTiFlashReplica. + tk.MustExec("begin") + tk.MustExec("insert into t1 set a=1;") + tk2.MustExec("alter table t1 set tiflash replica 2 location labels 'a','b';") + tk.MustExec("commit") + + // Test skip schema checker for ActionUpdateTiFlashReplicaStatus. + tk.MustExec("begin") + tk.MustExec("insert into t1 set a=1;") + tb := external.GetTableByName(t, tk, "test", "t1") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) + tk.MustExec("commit") + + // Test can't skip schema checker. + tk.MustExec("begin") + tk.MustExec("insert into t1 set a=1;") + tk2.MustExec("alter table t1 add column b int;") + err = tk.ExecToErr("commit") + require.True(t, terror.ErrorEqual(domain.ErrInfoSchemaChanged, err)) +} + +// TestCreateTableWithLike2 tests create table with like when refer table have non-public column/index. +func TestCreateTableWithLike2(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, tiflashReplicaLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (a int, b int, c int, index idx1(c));") + + tbl1 := external.GetTableByName(t, tk, "test", "t1") + doneCh := make(chan error, 2) + hook := &ddl.TestDDLCallback{Do: dom} + var onceChecker sync.Map + hook.OnJobRunBeforeExported = func(job *model.Job) { + if job.Type != model.ActionAddColumn && job.Type != model.ActionDropColumn && + job.Type != model.ActionAddColumns && job.Type != model.ActionDropColumns && + job.Type != model.ActionAddIndex && job.Type != model.ActionDropIndex { + return + } + if job.TableID != tbl1.Meta().ID { + return + } + + if job.SchemaState == model.StateDeleteOnly { + if _, ok := onceChecker.Load(job.ID); ok { + return + } + + onceChecker.Store(job.ID, true) + go backgroundExec(store, "create table t2 like t1", doneCh) + } + } + originalHook := dom.DDL().GetHook() + defer dom.DDL().SetHook(originalHook) + dom.DDL().SetHook(hook) + + // create table when refer table add column + tk.MustExec("alter table t1 add column d int") + checkTbl2 := func() { + err := <-doneCh + require.NoError(t, err) + tk.MustExec("alter table t2 add column e int") + t2Info := external.GetTableByName(t, tk, "test", "t2") + require.Equal(t, len(t2Info.Cols()), len(t2Info.Meta().Columns)) + } + checkTbl2() + + // create table when refer table drop column + tk.MustExec("drop table t2;") + tk.MustExec("alter table t1 drop column b;") + checkTbl2() + + // create table when refer table add index + tk.MustExec("drop table t2;") + tk.MustExec("alter table t1 add index idx2(a);") + checkTbl2 = func() { + err := <-doneCh + require.NoError(t, err) + tk.MustExec("alter table t2 add column e int") + tbl2 := external.GetTableByName(t, tk, "test", "t2") + require.Equal(t, len(tbl2.Cols()), len(tbl2.Meta().Columns)) + + for i := 0; i < len(tbl2.Meta().Indices); i++ { + require.Equal(t, model.StatePublic, tbl2.Meta().Indices[i].State) + } + } + checkTbl2() + + // create table when refer table drop index. + tk.MustExec("drop table t2;") + tk.MustExec("alter table t1 drop index idx2;") + checkTbl2() + + // Test for table has tiflash replica. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`)) + defer func() { + err := failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount") + require.NoError(t, err) + }() + + dom.DDL().SetHook(originalHook) + tk.MustExec("drop table if exists t1,t2;") + tk.MustExec("create table t1 (a int) partition by hash(a) partitions 2;") + tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") + t1 := external.GetTableByName(t, tk, "test", "t1") + // Mock for all partitions replica was available. + partition := t1.Meta().Partition + require.Equal(t, 2, len(partition.Definitions)) + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, true) + require.NoError(t, err) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[1].ID, true) + require.NoError(t, err) + t1 = external.GetTableByName(t, tk, "test", "t1") + require.NotNil(t, t1.Meta().TiFlashReplica) + require.True(t, t1.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[0].ID, partition.Definitions[1].ID}, t1.Meta().TiFlashReplica.AvailablePartitionIDs) + + tk.MustExec("create table t2 like t1") + t2 := external.GetTableByName(t, tk, "test", "t2") + require.Equal(t, t1.Meta().TiFlashReplica.Count, t2.Meta().TiFlashReplica.Count) + require.Equal(t, t1.Meta().TiFlashReplica.LocationLabels, t2.Meta().TiFlashReplica.LocationLabels) + require.False(t, t2.Meta().TiFlashReplica.Available) + require.Len(t, t2.Meta().TiFlashReplica.AvailablePartitionIDs, 0) + // Test for not affecting the original table. + t1 = external.GetTableByName(t, tk, "test", "t1") + require.NotNil(t, t1.Meta().TiFlashReplica) + require.True(t, t1.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[0].ID, partition.Definitions[1].ID}, t1.Meta().TiFlashReplica.AvailablePartitionIDs) +} + +func TestTruncateTable2(t *testing.T) { + store, clean := testkit.CreateMockStoreWithSchemaLease(t, tiflashReplicaLease) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table truncate_table (c1 int, c2 int)") + tk.MustExec("insert truncate_table values (1, 1), (2, 2)") + is := domain.GetDomain(tk.Session()).InfoSchema() + oldTblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("truncate_table")) + require.NoError(t, err) + oldTblID := oldTblInfo.Meta().ID + + tk.MustExec("truncate table truncate_table") + + tk.MustExec("insert truncate_table values (3, 3), (4, 4)") + tk.MustQuery("select * from truncate_table").Check(testkit.Rows("3 3", "4 4")) + + is = domain.GetDomain(tk.Session()).InfoSchema() + newTblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("truncate_table")) + require.NoError(t, err) + require.Greater(t, newTblInfo.Meta().ID, oldTblID) + + // Verify that the old table data has been deleted by background worker. + tablePrefix := tablecodec.EncodeTablePrefix(oldTblID) + hasOldTableData := true + for i := 0; i < waitForCleanDataRound; i++ { + err = kv.RunInNewTxn(context.Background(), store, false, func(ctx context.Context, txn kv.Transaction) error { + it, err1 := txn.Iter(tablePrefix, nil) + if err1 != nil { + return err1 + } + if !it.Valid() { + hasOldTableData = false + } else { + hasOldTableData = it.Key().HasPrefix(tablePrefix) + } + it.Close() + return nil + }) + require.NoError(t, err) + if !hasOldTableData { + break + } + time.Sleep(waitForCleanDataInterval) + } + require.False(t, hasOldTableData) + + // Test for truncate table should clear the tiflash available status. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/infoschema/mockTiFlashStoreCount")) + }() + + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t1 (a int);") + tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") + t1 := external.GetTableByName(t, tk, "test", "t1") + // Mock for table tiflash replica was available. + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), t1.Meta().ID, true) + require.NoError(t, err) + t1 = external.GetTableByName(t, tk, "test", "t1") + require.NotNil(t, t1.Meta().TiFlashReplica) + require.True(t, t1.Meta().TiFlashReplica.Available) + + tk.MustExec("truncate table t1") + t2 := external.GetTableByName(t, tk, "test", "t1") + require.Equal(t, t1.Meta().TiFlashReplica.Count, t2.Meta().TiFlashReplica.Count) + require.Equal(t, t1.Meta().TiFlashReplica.LocationLabels, t2.Meta().TiFlashReplica.LocationLabels) + require.False(t, t2.Meta().TiFlashReplica.Available) + require.Len(t, t2.Meta().TiFlashReplica.AvailablePartitionIDs, 0) + + // Test for truncate partition should clear the tiflash available status. + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t1 (a int) partition by hash(a) partitions 2;") + tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") + t1 = external.GetTableByName(t, tk, "test", "t1") + // Mock for all partitions replica was available. + partition := t1.Meta().Partition + require.Equal(t, 2, len(partition.Definitions)) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[0].ID, true) + require.NoError(t, err) + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.Definitions[1].ID, true) + require.NoError(t, err) + t1 = external.GetTableByName(t, tk, "test", "t1") + require.NotNil(t, t1.Meta().TiFlashReplica) + require.True(t, t1.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[0].ID, partition.Definitions[1].ID}, t1.Meta().TiFlashReplica.AvailablePartitionIDs) + + tk.MustExec("alter table t1 truncate partition p0") + t2 = external.GetTableByName(t, tk, "test", "t1") + require.Equal(t, t1.Meta().TiFlashReplica.Count, t2.Meta().TiFlashReplica.Count) + require.Equal(t, t1.Meta().TiFlashReplica.LocationLabels, t2.Meta().TiFlashReplica.LocationLabels) + require.False(t, t2.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[1].ID}, t2.Meta().TiFlashReplica.AvailablePartitionIDs) + // Test for truncate twice. + tk.MustExec("alter table t1 truncate partition p0") + t2 = external.GetTableByName(t, tk, "test", "t1") + require.Equal(t, t1.Meta().TiFlashReplica.Count, t2.Meta().TiFlashReplica.Count) + require.Equal(t, t1.Meta().TiFlashReplica.LocationLabels, t2.Meta().TiFlashReplica.LocationLabels) + require.False(t, t2.Meta().TiFlashReplica.Available) + require.Equal(t, []int64{partition.Definitions[1].ID}, t2.Meta().TiFlashReplica.AvailablePartitionIDs) + +} diff --git a/ddl/util/main_test.go b/ddl/util/main_test.go index a3b8b8141e60d..eef260a706759 100644 --- a/ddl/util/main_test.go +++ b/ddl/util/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), } goleak.VerifyTestMain(m, opts...) diff --git a/ddl/util/util.go b/ddl/util/util.go index 04ed74fec2b2e..d45e198ef8db5 100644 --- a/ddl/util/util.go +++ b/ddl/util/util.go @@ -27,6 +27,7 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" + atomicutil "go.uber.org/atomic" ) const ( @@ -205,3 +206,22 @@ func GetTimeZone(sctx sessionctx.Context) (string, int) { _, offset := time.Now().In(loc).Zone() return "UTC", offset } + +// enableEmulatorGC means whether to enable emulator GC. The default is enable. +// In some unit tests, we want to stop emulator GC, then wen can set enableEmulatorGC to 0. +var emulatorGCEnable = atomicutil.NewInt32(1) + +// EmulatorGCEnable enables emulator gc. It exports for testing. +func EmulatorGCEnable() { + emulatorGCEnable.Store(1) +} + +// EmulatorGCDisable disables emulator gc. It exports for testing. +func EmulatorGCDisable() { + emulatorGCEnable.Store(0) +} + +// IsEmulatorGCEnable indicates whether emulator GC enabled. It exports for testing. +func IsEmulatorGCEnable() bool { + return emulatorGCEnable.Load() == 1 +} diff --git a/ddl/util_test.go b/ddl/util_test.go index 71b9531bdfa26..37b0fa638c325 100644 --- a/ddl/util_test.go +++ b/ddl/util_test.go @@ -15,14 +15,12 @@ package ddl import ( - "bytes" "context" "fmt" "testing" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/parser/auth" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/sessionctx" @@ -124,43 +122,6 @@ func testAddedNewTablePartitionInfo(t *testing.T, d *ddl, tblInfo *model.TableIn } } -// testViewInfo creates a test view with num int columns. -func testViewInfo(t *testing.T, d *ddl, name string, num int) *model.TableInfo { - tblInfo := &model.TableInfo{ - Name: model.NewCIStr(name), - } - genIDs, err := d.genGlobalIDs(1) - require.NoError(t, err) - tblInfo.ID = genIDs[0] - - cols := make([]*model.ColumnInfo, num) - viewCols := make([]model.CIStr, num) - - var stmtBuffer bytes.Buffer - stmtBuffer.WriteString("SELECT ") - for i := range cols { - col := &model.ColumnInfo{ - Name: model.NewCIStr(fmt.Sprintf("c%d", i+1)), - Offset: i, - State: model.StatePublic, - } - - col.ID = allocateColumnID(tblInfo) - cols[i] = col - viewCols[i] = col.Name - stmtBuffer.WriteString(cols[i].Name.L + ",") - } - stmtBuffer.WriteString("1 FROM t") - - view := model.ViewInfo{Cols: viewCols, Security: model.SecurityDefiner, Algorithm: model.AlgorithmMerge, - SelectStmt: stmtBuffer.String(), CheckOption: model.CheckOptionCascaded, Definer: &auth.UserIdentity{CurrentUser: true}} - - tblInfo.View = &view - tblInfo.Columns = cols - - return tblInfo -} - func testCreateTable(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) *model.Job { job := &model.Job{ SchemaID: dbInfo.ID, @@ -169,27 +130,8 @@ func testCreateTable(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model BinlogInfo: &model.HistoryInfo{}, Args: []interface{}{tblInfo}, } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) - - v := getSchemaVer(t, ctx) - tblInfo.State = model.StatePublic - checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - tblInfo.State = model.StateNone - return job -} - -func testCreateView(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) *model.Job { - job := &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionCreateView, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{tblInfo, false, 0}, - } - - require.True(t, tblInfo.IsView()) - err := d.doDDLJob(ctx, job) + ctx.SetValue(sessionctx.QueryString, "skip") + err := d.DoDDLJob(ctx, job) require.NoError(t, err) v := getSchemaVer(t, ctx) @@ -206,30 +148,29 @@ func testDropTable(t *testing.T, ctx sessionctx.Context, d *ddl, dbInfo *model.D Type: model.ActionDropTable, BinlogInfo: &model.HistoryInfo{}, } - err := d.doDDLJob(ctx, job) - require.NoError(t, err) + ctx.SetValue(sessionctx.QueryString, "skip") + require.NoError(t, d.DoDDLJob(ctx, job)) v := getSchemaVer(t, ctx) checkHistoryJobArgs(t, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) return job } -func testCheckTableState(test *testing.T, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, state model.SchemaState) { - err := kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) - info, err := t.GetTable(dbInfo.ID, tblInfo.ID) - require.NoError(test, err) +func testCheckTableState(t *testing.T, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo, state model.SchemaState) { + require.NoError(t, kv.RunInNewTxn(context.Background(), d.store, false, func(ctx context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + info, err := m.GetTable(dbInfo.ID, tblInfo.ID) + require.NoError(t, err) if state == model.StateNone { - require.NoError(test, err) + require.NoError(t, err) return nil } - require.Equal(test, info.Name, tblInfo.Name) - require.Equal(test, info.State, state) + require.Equal(t, info.Name, tblInfo.Name) + require.Equal(t, info.State, state) return nil - }) - require.NoError(test, err) + })) } func testGetTable(t *testing.T, d *ddl, schemaID int64, tableID int64) table.Table { diff --git a/distsql/distsql.go b/distsql/distsql.go index b9ec41f1f718b..06104f0e368f9 100644 --- a/distsql/distsql.go +++ b/distsql/distsql.go @@ -78,9 +78,7 @@ func Select(ctx context.Context, sctx sessionctx.Context, kvReq *kv.Request, fie hook.(func(*kv.Request))(kvReq) } - if !sctx.GetSessionVars().EnableStreaming { - kvReq.Streaming = false - } + kvReq.Streaming = false enabledRateLimitAction := sctx.GetSessionVars().EnabledRateLimitAction originalSQL := sctx.GetSessionVars().StmtCtx.OriginalSQL eventCb := func(event trxevents.TransactionEvent) { @@ -219,9 +217,6 @@ func canUseChunkRPC(ctx sessionctx.Context) bool { if !ctx.GetSessionVars().EnableChunkRPC { return false } - if ctx.GetSessionVars().EnableStreaming { - return false - } if !checkAlignment() { return false } diff --git a/distsql/distsql_test.go b/distsql/distsql_test.go index 6559ef8a0917e..15d9919cca0ba 100644 --- a/distsql/distsql_test.go +++ b/distsql/distsql_test.go @@ -152,36 +152,6 @@ func TestSelectResultRuntimeStats(t *testing.T) { require.Equal(t, expect, s1.String()) } -func TestSelectStreaming(t *testing.T) { - response, colTypes := createSelectStreaming(t, 1, 2) - // Test Next. - chk := chunk.New(colTypes, 32, 32) - numAllRows := 0 - for { - err := response.Next(context.TODO(), chk) - require.NoError(t, err) - numAllRows += chk.NumRows() - if chk.NumRows() == 0 { - break - } - } - require.Equal(t, 2, numAllRows) - require.NoError(t, response.Close()) -} - -func TestSelectStreamingWithNextRaw(t *testing.T) { - response, _ := createSelectStreaming(t, 1, 2) - data, err := response.NextRaw(context.TODO()) - require.NoError(t, err) - require.Len(t, data, 16) -} - -func TestSelectStreamingChunkSize(t *testing.T) { - response, colTypes := createSelectStreaming(t, 100, 1000000) - testChunkSize(t, response, colTypes) - require.NoError(t, response.Close()) -} - func TestAnalyze(t *testing.T) { sctx := newMockSessionContext() sctx.GetSessionVars().EnableChunkRPC = false @@ -472,44 +442,3 @@ func createSelectNormal(t *testing.T, batch, totalRows int, planIDs []int, sctx return result, colTypes } - -func createSelectStreaming(t *testing.T, batch, totalRows int) (*streamResult, []*types.FieldType) { - request, err := (&RequestBuilder{}).SetKeyRanges(nil). - SetDAGRequest(&tipb.DAGRequest{}). - SetDesc(false). - SetKeepOrder(false). - SetFromSessionVars(variable.NewSessionVars()). - SetStreaming(true). - Build() - require.NoError(t, err) - - // 4 int64 types. - colTypes := []*types.FieldType{ - { - Tp: mysql.TypeLonglong, - Flen: mysql.MaxIntWidth, - Decimal: 0, - Flag: mysql.BinaryFlag, - Charset: charset.CharsetBin, - Collate: charset.CollationBin, - }, - } - colTypes = append(colTypes, colTypes[0]) - colTypes = append(colTypes, colTypes[0]) - colTypes = append(colTypes, colTypes[0]) - - sctx := newMockSessionContext() - sctx.GetSessionVars().EnableStreaming = true - - response, err := Select(context.TODO(), sctx, request, colTypes, statistics.NewQueryFeedback(0, nil, 0, false)) - require.NoError(t, err) - result, ok := response.(*streamResult) - require.True(t, ok) - require.Len(t, colTypes, result.rowLen) - - resp, ok := result.resp.(*mockResponse) - require.True(t, ok) - resp.total = totalRows - resp.batch = batch - return result, colTypes -} diff --git a/distsql/main_test.go b/distsql/main_test.go index d000a32e9561f..052afbf350c46 100644 --- a/distsql/main_test.go +++ b/distsql/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/distsql/request_builder.go b/distsql/request_builder.go index 2b1961de2d973..3ffb78c002cb3 100644 --- a/distsql/request_builder.go +++ b/distsql/request_builder.go @@ -217,6 +217,12 @@ func (builder *RequestBuilder) SetAllowBatchCop(batchCop bool) *RequestBuilder { return builder } +// SetPartitionIDAndRanges sets `PartitionIDAndRanges` property. +func (builder *RequestBuilder) SetPartitionIDAndRanges(PartitionIDAndRanges []kv.PartitionIDAndRanges) *RequestBuilder { + builder.PartitionIDAndRanges = PartitionIDAndRanges + return builder +} + func (builder *RequestBuilder) getIsolationLevel() kv.IsoLevel { switch builder.Tp { case kv.ReqTypeAnalyze: @@ -244,15 +250,19 @@ func (builder *RequestBuilder) SetFromSessionVars(sv *variable.SessionVars) *Req // Concurrency may be set to 1 by SetDAGRequest builder.Request.Concurrency = sv.DistSQLScanConcurrency() } + replicaReadType := sv.GetReplicaRead() if sv.StmtCtx.WeakConsistency { builder.Request.IsolationLevel = kv.RC + } else if sv.StmtCtx.RCCheckTS { + builder.Request.IsolationLevel = kv.RCCheckTS + replicaReadType = kv.ReplicaReadLeader } else { builder.Request.IsolationLevel = builder.getIsolationLevel() } builder.Request.NotFillCache = sv.StmtCtx.NotFillCache builder.Request.TaskID = sv.StmtCtx.TaskID builder.Request.Priority = builder.getKVPriority(sv) - builder.Request.ReplicaRead = sv.GetReplicaRead() + builder.Request.ReplicaRead = replicaReadType builder.SetResourceGroupTagger(sv.StmtCtx) return builder } diff --git a/distsql/request_builder_test.go b/distsql/request_builder_test.go index 81ea73513cfa1..8d571656fadd4 100644 --- a/distsql/request_builder_test.go +++ b/distsql/request_builder_test.go @@ -270,7 +270,6 @@ func TestRequestBuilder1(t *testing.T) { IsolationLevel: 0, Priority: 0, NotFillCache: false, - SyncLog: false, Streaming: false, ReplicaRead: kv.ReplicaReadLeader, ReadReplicaScope: kv.GlobalReplicaScope, @@ -352,7 +351,6 @@ func TestRequestBuilder2(t *testing.T) { IsolationLevel: 0, Priority: 0, NotFillCache: false, - SyncLog: false, Streaming: false, ReplicaRead: kv.ReplicaReadLeader, ReadReplicaScope: kv.GlobalReplicaScope, @@ -400,7 +398,6 @@ func TestRequestBuilder3(t *testing.T) { IsolationLevel: 0, Priority: 0, NotFillCache: false, - SyncLog: false, Streaming: false, ReplicaRead: kv.ReplicaReadLeader, ReadReplicaScope: kv.GlobalReplicaScope, @@ -449,7 +446,6 @@ func TestRequestBuilder4(t *testing.T) { Priority: 0, Streaming: true, NotFillCache: false, - SyncLog: false, ReplicaRead: kv.ReplicaReadLeader, ReadReplicaScope: kv.GlobalReplicaScope, } @@ -493,7 +489,6 @@ func TestRequestBuilder5(t *testing.T) { IsolationLevel: kv.RC, Priority: 1, NotFillCache: true, - SyncLog: false, Streaming: false, ReadReplicaScope: kv.GlobalReplicaScope, } @@ -524,7 +519,6 @@ func TestRequestBuilder6(t *testing.T) { IsolationLevel: 0, Priority: 0, NotFillCache: true, - SyncLog: false, Streaming: false, ReadReplicaScope: kv.GlobalReplicaScope, } @@ -561,7 +555,6 @@ func TestRequestBuilder7(t *testing.T) { IsolationLevel: 0, Priority: 0, NotFillCache: false, - SyncLog: false, Streaming: false, ReplicaRead: replicaRead.replicaReadType, ReadReplicaScope: kv.GlobalReplicaScope, diff --git a/distsql/stream.go b/distsql/stream.go index 2f10e72b5c0f5..526b2693de54d 100644 --- a/distsql/stream.go +++ b/distsql/stream.go @@ -94,7 +94,7 @@ func (r *streamResult) readDataFromResponse(ctx context.Context, resp kv.Respons return false, errors.Trace(err) } if stream.Error != nil { - return false, errors.Errorf("stream response error: [%d]%s\n", stream.Error.Code, stream.Error.Msg) + return false, errors.Errorf("stream response error: [%d]%s", stream.Error.Code, stream.Error.Msg) } for _, warning := range stream.Warnings { r.ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ClassTiKV.Synthesize(terror.ErrCode(warning.Code), warning.Msg)) diff --git a/docs/design/2021-09-22-data-consistency.md b/docs/design/2021-09-22-data-consistency.md new file mode 100644 index 0000000000000..ba752be4f5109 --- /dev/null +++ b/docs/design/2021-09-22-data-consistency.md @@ -0,0 +1,144 @@ +# Proposal: Reduce Data inconsistencies + +- Author(s): [Li Su](http://github.com/lysu), [Ziqian Qin](http://github.com/ekexium) +- Tracking Issue: https://github.com/pingcap/tidb/issues/26833 + +## Table of Contents + +- [Table of Contents](#table-of-contents) + +- [Introduction](#introduction) +- [Motivation or Background](#motivation-or-background) +- [Detailed Design](#detailed-design) + +- [Test Design](#test-design) + + - [Regression Tests](#regression-tests) + - [System Tests](#system-tests) + - [Performance Tests](#performance-tests) + +- [Impacts & Risks](#impacts--risks) + +## Introduction + +The document proposes an enhancement that reduces data inconsistency issues in TiDB. The feature also includes an +enhancement in the logging and error handling of data inconsistency issues to help diagnosis. + +## Motivation or Background + +TiDB occasionally encounters data index inconsistencies, i.e., row data and indices of the same record are +inconsistent (in their numbers or content). Inconsistent data indices in production environments can have a very bad +impact on users, including but not limited to + +- Read errors: errors are reported when reading or writing inconsistent data +- Data error: data can be read but the result is incorrect +- Data Loss: Data written cannot be read + +It is very difficult for support engineers to locate data index inconsistencies when they occur. + +- Multiple possible causes of data errors +- Inconsistency phenomenon cannot easily imply its cause +- Difficulty in collecting information available for investigation on the cause + +In short, the serious impact of the problem and the difficulty of troubleshooting is the main reason why we need to +invest in improvement at present. + +## Detailed Design + +There are two methods to reduce data corruption from happening and spreading. And we have separate system variables to +enable them. + +`tidb_enable_mutation_checker`, takes value of `ON` or `OFF`. + +`tidb_txn_assertion_level`, takes value of `OFF`, `FAST`, or `STRICT`. Details will be discussed later. + +### Assertion + +Based on the operator characteristics and the information that the operator has already checked, some assertions can be +made with regard to the data being mutated. The assertions are pushed down to TiKV and are executed before writing. DML +operators (e.g. UpdateExec, InsertExec) are encapsulated in tables to make KV modifications to memDB: + +- Put KV: Add or update KV pairs +- Del KV: delete KV pair + +While the data is modified, the KV pair modified to memDB is additionally set with 4 new Assertion Flags (occupying a +total of 2 bits): + +- None(00): There is currently no Assertion for KV, but subsequent modifications in the transaction can overwrite this + value [default Flag] +- Unknown(11): KV pair cannot be asserted, and subsequent modifications within the transaction cannot be overwritten +- MustExist(10): Key must exist in storage, subsequent modifications within the transaction cannot be overwritten +- MustNotExist(01): Key must not exist in the storage, subsequent modifications within the transaction cannot be + overwritten + +The flags in MemDB, like the KV data, are first set to the current stage of the statement. After that, if the statement +reports an error and the statement rolls back, the flags will be invalidated. If the statement is executed successfully +and is submitted, the flags will take effect in the transaction. The assertion information is sent to TiKV in the +prewrite stage of 2PC. TiKV performs additional checks based on the assertions before modifying data. If the assertions +fail, TiKV rejects the request. + +For pessimistic transactions, prewrite requests may not read the previous value of the key. In this case, we let the +pessimistic lock requests return the existence information of the key and cache it in the client(TiDB) side. Before +committing the transaction, the client(TiDB) side will use the information to check assertions, so that doesn't have to +be the overhead of reads in TiKV. Some keys in pessimistic transactions are not pessimistically locked, so we have 2 +strategies to deal with this situation: the `FAST` mode just ignores the keys, and the `STRICT` mode will read all keys +in TiKV. + +### Check Mutations + +The basic idea is to ensure that the transaction will not write inconsistent data when the data before the transaction +is consistent. + +For possible errors in the executor: Assume that the set of row values before and after the transaction are V1 and V2 +respectively, and the data indices are consistent before the transaction is executed. The condition of data consistency +after the transaction's commitment is V1-V2 = { Del_{index}.value }, V2-V1 = { Put_{index}.value }. + +## Test Design + +The main quality objectives of this project include correctness, effectiveness, efficiency, ease of use, and +compatibility. The test part involves two parts: ensuring correctness (including compatibility) and measuring +effectiveness. + +Correctness: There will be no false positives when the data is correct + +Effectiveness: + +1. Reject transactions with inconsistent mutations +2. Report errors as soon as possible for existing problematic data to prevent the spread of errors + +### Regression tests + +Regression tests are useful to check correctness since all tests should not report data inconsistency errors. + +### System tests + +Specific system test cases need to be constructed. Cases should at least involve the following parts + +- Encoding related + - Collation + - Row format + - Charset + - Time zone +- Table structure + - Concurrent DDL + - Clustered index + - Prefix index + - Expression index + +### Performance Tests + +The enhancement should have little impact on performance, including latency, throughput, memory and CPU consumption. + +Standard sysbench and TPC-C tests are needed. + +## Impacts & Risks + +According to the performance tests, the following impacts and risks are expected: + +In the `STRICT` assertion mode, pessimistic transactions results in a notable increase in the scheduler CPU usage and +the number of kvdb get and seek operations. + +The mutation checker can increase the TiDB CPU usage. When the CPU becomes the bottleneck of TiDB, introducing the +enhancement may decrease the throughput by 1.5%, and increase P95 latency by 2.4%. + + diff --git a/docs/tidb_http_api.md b/docs/tidb_http_api.md index b372ecded6788..9c927f38f64db 100644 --- a/docs/tidb_http_api.md +++ b/docs/tidb_http_api.md @@ -303,10 +303,10 @@ timezone.* } ``` - *Hint: On a partitioned table, use the `table(partition)` pattern as the table name, `test(p1)` for example:* + *Hint: On a partitioned table, use the `table(partition)` pattern as the table name, `t1(p1)` for example:* ```shell - $curl http://127.0.0.1:10080/mvcc/index/test(p1)/t1/idx/1\?a\=A + $curl http://127.0.0.1:10080/mvcc/index/test/t1(p1)/idx/1\?a\=A ``` If the handle is clustered, also specify the primary key column values in the query string diff --git a/domain/domain.go b/domain/domain.go index 751b3520d42b5..53db3a8d079e2 100644 --- a/domain/domain.go +++ b/domain/domain.go @@ -90,7 +90,7 @@ type Domain struct { statsUpdating atomicutil.Int32 cancel context.CancelFunc indexUsageSyncLease time.Duration - planReplayer *planReplayer + dumpFileGcChecker *dumpFileGcChecker expiredTimeStamp4PC types.Time serverID uint64 @@ -98,6 +98,8 @@ type Domain struct { isLostConnectionToPD atomicutil.Int32 // !0: true, 0: false. onClose func() sysExecutorFactory func(*Domain) (pools.Resource, error) + + sysProcesses SysProcesses } // loadInfoSchema loads infoschema at startTS. @@ -716,7 +718,7 @@ func (do *Domain) Close() { const resourceIdleTimeout = 3 * time.Minute // resources in the ResourcePool will be recycled after idleTimeout // NewDomain creates a new domain. Should not create multiple domains for the same store. -func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duration, idxUsageSyncLease time.Duration, planReplayerGCLease time.Duration, factory pools.Factory, onClose func()) *Domain { +func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duration, idxUsageSyncLease time.Duration, dumpFileGcLease time.Duration, factory pools.Factory, onClose func()) *Domain { capacity := 200 // capacity of the sysSessionPool size do := &Domain{ store: store, @@ -726,13 +728,14 @@ func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duratio infoCache: infoschema.NewCache(16), slowQuery: newTopNSlowQueries(30, time.Hour*24*7, 500), indexUsageSyncLease: idxUsageSyncLease, - planReplayer: &planReplayer{planReplayerGCLease: planReplayerGCLease}, + dumpFileGcChecker: &dumpFileGcChecker{gcLease: dumpFileGcLease, paths: []string{GetPlanReplayerDirName(), GetOptimizerTraceDirName()}}, onClose: onClose, expiredTimeStamp4PC: types.NewTime(types.ZeroCoreTime, mysql.TypeTimestamp, types.DefaultFsp), } do.SchemaValidator = NewSchemaValidator(ddlLease, do) do.expensiveQueryHandle = expensivequery.NewExpensiveQueryHandle(do.exit) + do.sysProcesses = SysProcesses{mu: &sync.RWMutex{}, procMap: make(map[uint64]sessionctx.Context)} return do } @@ -935,6 +938,11 @@ func (do *Domain) SysSessionPool() *sessionPool { return do.sysSessionPool } +// SysProcTracker returns the system processes tracker. +func (do *Domain) SysProcTracker() sessionctx.SysProcTracker { + return &do.sysProcesses +} + // GetEtcdClient returns the etcd client. func (do *Domain) GetEtcdClient() *clientv3.Client { return do.etcdClient @@ -1213,23 +1221,23 @@ func (do *Domain) TelemetryRotateSubWindowLoop(ctx sessionctx.Context) { }() } -// PlanReplayerLoop creates a goroutine that handles `exit` and `gc`. -func (do *Domain) PlanReplayerLoop() { +// DumpFileGcCheckerLoop creates a goroutine that handles `exit` and `gc`. +func (do *Domain) DumpFileGcCheckerLoop() { do.wg.Add(1) go func() { - gcTicker := time.NewTicker(do.planReplayer.planReplayerGCLease) + gcTicker := time.NewTicker(do.dumpFileGcChecker.gcLease) defer func() { gcTicker.Stop() do.wg.Done() - logutil.BgLogger().Info("PlanReplayerLoop exited.") - util.Recover(metrics.LabelDomain, "PlanReplayerLoop", nil, false) + logutil.BgLogger().Info("dumpFileGcChecker exited.") + util.Recover(metrics.LabelDomain, "dumpFileGcCheckerLoop", nil, false) }() for { select { case <-do.exit: return case <-gcTicker.C: - do.planReplayer.planReplayerGC(time.Hour) + do.dumpFileGcChecker.gcDumpFiles(time.Hour) } } }() @@ -1242,7 +1250,7 @@ func (do *Domain) StatsHandle() *handle.Handle { // CreateStatsHandle is used only for test. func (do *Domain) CreateStatsHandle(ctx sessionctx.Context) error { - h, err := handle.NewHandle(ctx, do.statsLease, do.sysSessionPool) + h, err := handle.NewHandle(ctx, do.statsLease, do.sysSessionPool, &do.sysProcesses) if err != nil { return err } @@ -1267,12 +1275,21 @@ func (do *Domain) SetStatsUpdating(val bool) { // RunAutoAnalyze indicates if this TiDB server starts auto analyze worker and can run auto analyze job. var RunAutoAnalyze = true +// LoadAndUpdateStatsLoop loads and updates stats info. +func (do *Domain) LoadAndUpdateStatsLoop(ctxs []sessionctx.Context) error { + if err := do.UpdateTableStatsLoop(ctxs[0]); err != nil { + return err + } + do.StartLoadStatsSubWorkers(ctxs[1:]) + return nil +} + // UpdateTableStatsLoop creates a goroutine loads stats info and updates stats info in a loop. // It will also start a goroutine to analyze tables automatically. // It should be called only once in BootstrapSession. func (do *Domain) UpdateTableStatsLoop(ctx sessionctx.Context) error { ctx.GetSessionVars().InRestrictedSQL = true - statsHandle, err := handle.NewHandle(ctx, do.statsLease, do.sysSessionPool) + statsHandle, err := handle.NewHandle(ctx, do.statsLease, do.sysSessionPool, &do.sysProcesses) if err != nil { return err } @@ -1301,7 +1318,7 @@ func (do *Domain) UpdateTableStatsLoop(ctx sessionctx.Context) error { return nil } -// StartLoadStatsSubWorkers starts sub workers with new sessions to load stats concurrently +// StartLoadStatsSubWorkers starts sub workers with new sessions to load stats concurrently. func (do *Domain) StartLoadStatsSubWorkers(ctxList []sessionctx.Context) { statsHandle := do.StatsHandle() for i, ctx := range ctxList { @@ -1654,7 +1671,8 @@ func (do *Domain) acquireServerID(ctx context.Context) error { } for { - randServerID := rand.Int63n(int64(util.MaxServerID)) + 1 // get a random serverID: [1, MaxServerID] #nosec G404 + // get a random serverID: [1, MaxServerID] + randServerID := rand.Int63n(int64(util.MaxServerID)) + 1 // #nosec G404 key := fmt.Sprintf("%s/%v", serverIDEtcdPath, randServerID) cmp := clientv3.Compare(clientv3.CreateRevision(key), "=", 0) value := "0" @@ -1785,6 +1803,9 @@ func (do *Domain) MockInfoCacheAndLoadInfoSchema(is infoschema.InfoSchema) { func init() { initByLDFlagsForGlobalKill() + telemetry.GetDomainInfoSchema = func(ctx sessionctx.Context) infoschema.InfoSchema { + return GetDomain(ctx).InfoSchema() + } } var ( @@ -1794,3 +1815,56 @@ var ( ErrInfoSchemaChanged = dbterror.ClassDomain.NewStdErr(errno.ErrInfoSchemaChanged, mysql.Message(errno.MySQLErrName[errno.ErrInfoSchemaChanged].Raw+". "+kv.TxnRetryableMark, nil)) ) + +// SysProcesses holds the sys processes infos +type SysProcesses struct { + mu *sync.RWMutex + procMap map[uint64]sessionctx.Context +} + +// Track tracks the sys process into procMap +func (s *SysProcesses) Track(id uint64, proc sessionctx.Context) error { + s.mu.Lock() + defer s.mu.Unlock() + if oldProc, ok := s.procMap[id]; ok && oldProc != proc { + return errors.Errorf("The ID is in use: %v", id) + } + s.procMap[id] = proc + proc.GetSessionVars().ConnectionID = id + atomic.StoreUint32(&proc.GetSessionVars().Killed, 0) + return nil +} + +// UnTrack removes the sys process from procMap +func (s *SysProcesses) UnTrack(id uint64) { + s.mu.Lock() + defer s.mu.Unlock() + if proc, ok := s.procMap[id]; ok { + delete(s.procMap, id) + proc.GetSessionVars().ConnectionID = 0 + atomic.StoreUint32(&proc.GetSessionVars().Killed, 0) + } +} + +// GetSysProcessList gets list of system ProcessInfo +func (s *SysProcesses) GetSysProcessList() map[uint64]*util.ProcessInfo { + s.mu.RLock() + defer s.mu.RUnlock() + rs := make(map[uint64]*util.ProcessInfo) + for connID, proc := range s.procMap { + // if session is still tracked in this map, it's not returned to sysSessionPool yet + if pi := proc.ShowProcess(); pi != nil && pi.ID == connID { + rs[connID] = pi + } + } + return rs +} + +// KillSysProcess kills sys process with specified ID +func (s *SysProcesses) KillSysProcess(id uint64) { + s.mu.Lock() + defer s.mu.Unlock() + if proc, ok := s.procMap[id]; ok { + atomic.StoreUint32(&proc.GetSessionVars().Killed, 1) + } +} diff --git a/domain/domain_test.go b/domain/domain_test.go index f1a9081509782..d305a219ea412 100644 --- a/domain/domain_test.go +++ b/domain/domain_test.go @@ -34,6 +34,7 @@ import ( "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/session/txninfo" + "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/util" @@ -176,10 +177,12 @@ func TestDomain(t *testing.T) { Chs: "utf8", Col: "utf8_bin", } + ctx.SetValue(sessionctx.QueryString, "skip") err = dd.CreateSchema(ctx, model.NewCIStr("aaa"), cs, nil) require.NoError(t, err) // Test for fetchSchemasWithTables when "tables" isn't nil. + ctx.SetValue(sessionctx.QueryString, "skip") err = dd.CreateTable(ctx, &ast.CreateTableStmt{Table: &ast.TableName{ Schema: model.NewCIStr("aaa"), Name: model.NewCIStr("tbl")}}) @@ -233,6 +236,7 @@ func TestDomain(t *testing.T) { require.Equal(t, tblInfo2, tbl.Meta()) // Test for tryLoadSchemaDiffs when "isTooOldSchema" is false. + ctx.SetValue(sessionctx.QueryString, "skip") err = dd.CreateSchema(ctx, model.NewCIStr("bbb"), cs, nil) require.NoError(t, err) diff --git a/domain/globalconfigsync/globalconfig_test.go b/domain/globalconfigsync/globalconfig_test.go index 565bc853a99b7..7cc40acfd992e 100644 --- a/domain/globalconfigsync/globalconfig_test.go +++ b/domain/globalconfigsync/globalconfig_test.go @@ -34,6 +34,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/domain/infosync/info.go b/domain/infosync/info.go index 338a7da245573..bd44b41696f5b 100644 --- a/domain/infosync/info.go +++ b/domain/infosync/info.go @@ -237,6 +237,7 @@ func initTiFlashPlacementManager(addrs []string) TiFlashPlacementManager { m := mockTiFlashPlacementManager{} return &m } + logutil.BgLogger().Warn("init TiFlashPlacementManager", zap.Strings("pd addrs", addrs)) return &TiFlashPDPlacementManager{addrs: addrs} } @@ -942,11 +943,14 @@ func GetLabelRules(ctx context.Context, ruleIDs []string) (map[string]*label.Rul } // SetTiFlashPlacementRule is a helper function to set placement rule. +// It is discouraged to use SetTiFlashPlacementRule directly, +// use `ConfigureTiFlashPDForTable`/`ConfigureTiFlashPDForPartitions` instead. func SetTiFlashPlacementRule(ctx context.Context, rule placement.TiFlashRule) error { is, err := getGlobalInfoSyncer() if err != nil { return errors.Trace(err) } + logutil.BgLogger().Info("SetTiFlashPlacementRule", zap.String("ruleID", rule.ID)) return is.tiflashPlacementManager.SetPlacementRule(ctx, rule) } @@ -956,6 +960,7 @@ func DeleteTiFlashPlacementRule(ctx context.Context, group string, ruleID string if err != nil { return errors.Trace(err) } + logutil.BgLogger().Info("DeleteTiFlashPlacementRule", zap.String("ruleID", ruleID)) return is.tiflashPlacementManager.DeletePlacementRule(ctx, group, ruleID) } @@ -974,6 +979,7 @@ func PostTiFlashAccelerateSchedule(ctx context.Context, tableID int64) error { if err != nil { return errors.Trace(err) } + logutil.BgLogger().Info("PostTiFlashAccelerateSchedule", zap.Int64("tableID", tableID)) return is.tiflashPlacementManager.PostAccelerateSchedule(ctx, tableID) } @@ -1020,14 +1026,14 @@ func ConfigureTiFlashPDForTable(id int64, count uint64, locationLabels *[]string } // ConfigureTiFlashPDForPartitions configures pd rule for all partition in partitioned tables. -func ConfigureTiFlashPDForPartitions(accel bool, definitions *[]model.PartitionDefinition, count uint64, locationLabels *[]string) error { +func ConfigureTiFlashPDForPartitions(accel bool, definitions *[]model.PartitionDefinition, count uint64, locationLabels *[]string, tableID int64) error { is, err := getGlobalInfoSyncer() if err != nil { return errors.Trace(err) } ctx := context.Background() for _, p := range *definitions { - logutil.BgLogger().Info("ConfigureTiFlashPDForPartitions", zap.Int64("partID", p.ID), zap.Bool("accel", accel), zap.Uint64("count", count)) + logutil.BgLogger().Info("ConfigureTiFlashPDForPartitions", zap.Int64("tableID", tableID), zap.Int64("partID", p.ID), zap.Bool("accel", accel), zap.Uint64("count", count)) ruleNew := MakeNewRule(p.ID, count, *locationLabels) if e := is.tiflashPlacementManager.SetPlacementRule(ctx, *ruleNew); e != nil { return errors.Trace(e) diff --git a/domain/infosync/info_test.go b/domain/infosync/info_test.go index cbfadd7c780e1..5042e897c1fd6 100644 --- a/domain/infosync/info_test.go +++ b/domain/infosync/info_test.go @@ -39,6 +39,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), } goleak.VerifyTestMain(m, opts...) @@ -262,7 +263,7 @@ func TestTiFlashManager(t *testing.T) { Name: model.NewCIStr("p"), LessThan: []string{}, }, - }, 3, &[]string{}) + }, 3, &[]string{}, 100) rules, err = GetTiFlashGroupRules(ctx, "tiflash") require.NoError(t, err) // Have table 1 and 2 diff --git a/domain/infosync/tiflash_manager.go b/domain/infosync/tiflash_manager.go index 8243d32539777..4f655c3206df6 100644 --- a/domain/infosync/tiflash_manager.go +++ b/domain/infosync/tiflash_manager.go @@ -276,7 +276,6 @@ func (tiflash *MockTiFlash) setUpMockTiFlashHTTPServer() { return } table, ok := tiflash.SyncStatus[tableID] - logutil.BgLogger().Info("Mock TiFlash returns", zap.Bool("ok", ok), zap.Int("tableID", tableID)) if !ok { w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte("0\n\n")) diff --git a/domain/main_test.go b/domain/main_test.go index f739274f1179b..1896313761270 100644 --- a/domain/main_test.go +++ b/domain/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/domain/plan_replayer.go b/domain/plan_replayer.go index 37fbbc50472b9..b207f904a6608 100644 --- a/domain/plan_replayer.go +++ b/domain/plan_replayer.go @@ -16,7 +16,6 @@ package domain import ( "errors" - "fmt" "io/ioutil" "os" "path/filepath" @@ -29,9 +28,12 @@ import ( "go.uber.org/zap" ) -type planReplayer struct { +// dumpFileGcChecker is used to gc dump file in circle +// For now it is used by `plan replayer` and `trace plan` statement +type dumpFileGcChecker struct { sync.Mutex - planReplayerGCLease time.Duration + gcLease time.Duration + paths []string } // GetPlanReplayerDirName returns plan replayer directory path. @@ -56,32 +58,37 @@ func parseTime(s string) (time.Time, error) { return time.Unix(0, i), nil } -func (p *planReplayer) planReplayerGC(t time.Duration) { +func (p *dumpFileGcChecker) gcDumpFiles(t time.Duration) { p.Lock() defer p.Unlock() - path := GetPlanReplayerDirName() + for _, path := range p.paths { + p.gcDumpFilesByPath(path, t) + } +} + +func (p *dumpFileGcChecker) gcDumpFilesByPath(path string, t time.Duration) { files, err := ioutil.ReadDir(path) if err != nil { if !os.IsNotExist(err) { - logutil.BgLogger().Warn("[PlanReplayer] open plan replayer directory failed", zap.Error(err)) + logutil.BgLogger().Warn("[dumpFileGcChecker] open plan replayer directory failed", zap.Error(err)) } - return } gcTime := time.Now().Add(-t) for _, f := range files { - createTime, err := parseTime(f.Name()) + fileName := f.Name() + createTime, err := parseTime(fileName) if err != nil { - logutil.BgLogger().Warn("[PlanReplayer] parseTime failed", zap.Error(err)) + logutil.BgLogger().Error("[dumpFileGcChecker] parseTime failed", zap.Error(err), zap.String("filename", fileName)) continue } if !createTime.After(gcTime) { err := os.Remove(filepath.Join(path, f.Name())) if err != nil { - logutil.BgLogger().Warn("[PlanReplayer] remove file failed", zap.Error(err)) + logutil.BgLogger().Warn("[dumpFileGcChecker] remove file failed", zap.Error(err), zap.String("filename", fileName)) continue } - logutil.BgLogger().Info(fmt.Sprintf("[PlanReplayer] GC %s", f.Name())) + logutil.BgLogger().Info("dumpFileGcChecker successful", zap.String("filename", fileName)) } } } diff --git a/domain/plan_replayer_test.go b/domain/plan_replayer_test.go index aef54894489c8..7b44db9b8d239 100644 --- a/domain/plan_replayer_test.go +++ b/domain/plan_replayer_test.go @@ -35,8 +35,10 @@ func TestPlanReplayerGC(t *testing.T) { require.NoError(t, err) zf.Close() - handler := &planReplayer{} - handler.planReplayerGC(0) + handler := &dumpFileGcChecker{ + paths: []string{GetPlanReplayerDirName()}, + } + handler.gcDumpFiles(0) _, err = os.Stat(path) require.NotNil(t, err) diff --git a/domain/sysvar_cache.go b/domain/sysvar_cache.go index 8488d982d57fd..cc77855f2f9a0 100644 --- a/domain/sysvar_cache.go +++ b/domain/sysvar_cache.go @@ -164,8 +164,8 @@ func (do *Domain) rebuildSysVarCache(ctx sessionctx.Context) error { func (do *Domain) checkEnableServerGlobalVar(name, sVal string) { var err error switch name { - case variable.TiDBMemQuotaBindCache: - variable.MemQuotaBindCache.Store(variable.TidbOptInt64(sVal, variable.DefTiDBMemQuotaBindCache)) + case variable.TiDBMemQuotaBindingCache: + variable.MemQuotaBindingCache.Store(variable.TidbOptInt64(sVal, variable.DefTiDBMemQuotaBindingCache)) case variable.TiDBTSOClientBatchMaxWaitTime: var val float64 val, err = strconv.ParseFloat(sVal, 64) diff --git a/dumpling/export/block_allow_list_test.go b/dumpling/export/block_allow_list_test.go index 3ce55497d589b..640e9cef7e4dc 100644 --- a/dumpling/export/block_allow_list_test.go +++ b/dumpling/export/block_allow_list_test.go @@ -6,8 +6,8 @@ import ( "strings" "testing" - "github.com/pingcap/tidb-tools/pkg/filter" - tf "github.com/pingcap/tidb-tools/pkg/table-filter" + "github.com/pingcap/tidb/util/filter" + tf "github.com/pingcap/tidb/util/table-filter" "github.com/stretchr/testify/require" "github.com/pingcap/tidb/br/pkg/version" diff --git a/dumpling/export/config.go b/dumpling/export/config.go index 2edd7ce70761d..726c9fcf23afc 100644 --- a/dumpling/export/config.go +++ b/dumpling/export/config.go @@ -17,14 +17,13 @@ import ( "github.com/docker/go-units" "github.com/go-sql-driver/mysql" "github.com/pingcap/errors" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" - "github.com/pingcap/tidb-tools/pkg/utils" + "github.com/pingcap/tidb/br/pkg/storage" + "github.com/pingcap/tidb/br/pkg/version" + "github.com/pingcap/tidb/util" + filter "github.com/pingcap/tidb/util/table-filter" "github.com/prometheus/client_golang/prometheus" "github.com/spf13/pflag" "go.uber.org/zap" - - "github.com/pingcap/tidb/br/pkg/storage" - "github.com/pingcap/tidb/br/pkg/version" ) const ( @@ -45,6 +44,7 @@ const ( flagConsistency = "consistency" flagSnapshot = "snapshot" flagNoViews = "no-views" + flagNoSequences = "no-sequences" flagSortByPk = "order-by-primary-key" flagStatusAddr = "status-addr" flagRows = "rows" @@ -79,10 +79,12 @@ const ( // Config is the dump config for dumpling type Config struct { storage.BackendOptions + ExtStorage storage.ExternalStorage `json:"-"` AllowCleartextPasswords bool SortByPk bool NoViews bool + NoSequences bool NoHeader bool NoSchemas bool NoData bool @@ -165,6 +167,7 @@ func DefaultConfig() *Config { Snapshot: "", Consistency: consistencyTypeAuto, NoViews: true, + NoSequences: true, Rows: UnspecifiedSize, Where: "", FileType: "", @@ -230,6 +233,7 @@ func (conf *Config) DefineFlags(flags *pflag.FlagSet) { flags.String(flagConsistency, consistencyTypeAuto, "Consistency level during dumping: {auto|none|flush|lock|snapshot}") flags.String(flagSnapshot, "", "Snapshot position (uint64 or MySQL style string timestamp). Valid only when consistency=snapshot") flags.BoolP(flagNoViews, "W", true, "Do not dump views") + flags.Bool(flagNoSequences, true, "Do not dump sequences") flags.Bool(flagSortByPk, true, "Sort dump results by primary key through order by sql") flags.String(flagStatusAddr, ":8281", "dumpling API server and pprof addr") flags.Uint64P(flagRows, "r", UnspecifiedSize, "If specified, dumpling will split table into chunks and concurrently dump them to different files to improve efficiency. For TiDB v3.0+, specify this will make dumpling split table with each file one TiDB region(no matter how many rows is).\n"+ @@ -327,6 +331,10 @@ func (conf *Config) ParseFromFlags(flags *pflag.FlagSet) error { if err != nil { return errors.Trace(err) } + conf.NoSequences, err = flags.GetBool(flagNoSequences) + if err != nil { + return errors.Trace(err) + } conf.SortByPk, err = flags.GetBool(flagSortByPk) if err != nil { return errors.Trace(err) @@ -541,6 +549,9 @@ func ParseCompressType(compressType string) (storage.CompressType, error) { } func (conf *Config) createExternalStorage(ctx context.Context) (storage.ExternalStorage, error) { + if conf.ExtStorage != nil { + return conf.ExtStorage, nil + } b, err := storage.ParseBackend(conf.OutputDirPath, &conf.BackendOptions) if err != nil { return nil, errors.Trace(err) @@ -604,7 +615,7 @@ func registerTLSConfig(conf *Config) error { return errors.Trace(err) } } - tlsConfig, err = utils.ToTLSConfigWithVerifyByRawbytes(conf.Security.SSLCABytes, + tlsConfig, err = util.ToTLSConfigWithVerifyByRawbytes(conf.Security.SSLCABytes, conf.Security.SSLCertBytes, conf.Security.SSLKEYBytes, []string{}) if err != nil { return errors.Trace(err) diff --git a/dumpling/export/dump.go b/dumpling/export/dump.go index 4db8b22460c8a..0e1087e9eebb3 100755 --- a/dumpling/export/dump.go +++ b/dumpling/export/dump.go @@ -59,6 +59,19 @@ type Dumper struct { // NewDumper returns a new Dumper func NewDumper(ctx context.Context, conf *Config) (*Dumper, error) { + failpoint.Inject("setExtStorage", func(val failpoint.Value) { + path := val.(string) + b, err := storage.ParseBackend(path, nil) + if err != nil { + panic(err) + } + s, err := storage.New(context.Background(), b, &storage.ExternalStorageOptions{}) + if err != nil { + panic(err) + } + conf.ExtStorage = s + }) + tctx, cancelFn := tcontext.Background().WithContext(ctx).WithCancel() d := &Dumper{ tctx: tctx, @@ -373,14 +386,20 @@ func (d *Dumper) dumpDatabases(tctx *tcontext.Context, metaConn *BaseConn, taskC } if !conf.NoSchemas { - if table.Type == TableTypeView { + switch table.Type { + case TableTypeView: task := NewTaskViewMeta(dbName, table.Name, meta.ShowCreateTable(), meta.ShowCreateView()) ctxDone := d.sendTaskToChan(tctx, task, taskChan) if ctxDone { return tctx.Err() } - } else { - + case TableTypeSequence: + task := NewTaskSequenceMeta(dbName, table.Name, meta.ShowCreateTable()) + ctxDone := d.sendTaskToChan(tctx, task, taskChan) + if ctxDone { + return tctx.Err() + } + default: // adjust table collation newCreateSQL, err := adjustTableCollation(tctx, d.conf.CollationCompatible, parser1, meta.ShowCreateTable(), d.charsetAndDefaultCollationMap) if err != nil { @@ -1076,6 +1095,9 @@ func prepareTableListToDump(tctx *tcontext.Context, conf *Config, db *sql.Conn) if !conf.NoViews { tableTypes = append(tableTypes, TableTypeView) } + if !conf.NoSequences { + tableTypes = append(tableTypes, TableTypeSequence) + } ifSeqExists, err := CheckIfSeqExists(db) if err != nil { @@ -1083,7 +1105,6 @@ func prepareTableListToDump(tctx *tcontext.Context, conf *Config, db *sql.Conn) } var listType listTableType if ifSeqExists { - tctx.L().Warn("dumpling tableType `sequence` is unsupported for now") listType = listTableByShowFullTables } else { listType = getListTableTypeByConf(conf) @@ -1116,10 +1137,12 @@ func dumpTableMeta(tctx *tcontext.Context, conf *Config, conn *BaseConn, db stri } // If all columns are generated - if selectField == "" { - colTypes, err = GetColumnTypes(tctx, conn, "*", db, tbl) - } else { - colTypes, err = GetColumnTypes(tctx, conn, selectField, db, tbl) + if table.Type == TableTypeBase { + if selectField == "" { + colTypes, err = GetColumnTypes(tctx, conn, "*", db, tbl) + } else { + colTypes, err = GetColumnTypes(tctx, conn, selectField, db, tbl) + } } if err != nil { return nil, err @@ -1141,7 +1164,8 @@ func dumpTableMeta(tctx *tcontext.Context, conf *Config, conn *BaseConn, db stri if conf.NoSchemas { return meta, nil } - if table.Type == TableTypeView { + switch table.Type { + case TableTypeView: viewName := table.Name createTableSQL, createViewSQL, err1 := ShowCreateView(tctx, conn, db, viewName) if err1 != nil { @@ -1150,7 +1174,16 @@ func dumpTableMeta(tctx *tcontext.Context, conf *Config, conn *BaseConn, db stri meta.showCreateTable = createTableSQL meta.showCreateView = createViewSQL return meta, nil + case TableTypeSequence: + sequenceName := table.Name + createSequenceSQL, err2 := ShowCreateSequence(tctx, conn, db, sequenceName, conf) + if err2 != nil { + return meta, err2 + } + meta.showCreateTable = createSequenceSQL + return meta, nil } + createTableSQL, err := ShowCreateTable(tctx, conn, db, tbl) if err != nil { return nil, err diff --git a/dumpling/export/main_test.go b/dumpling/export/main_test.go index 8ea24d1c51e82..0803bf84a8203 100644 --- a/dumpling/export/main_test.go +++ b/dumpling/export/main_test.go @@ -49,6 +49,7 @@ func TestMain(m *testing.M) { RegisterMetrics(registry) opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/dumpling/export/prepare.go b/dumpling/export/prepare.go index 777b366c65a78..1d9d05304c7cf 100644 --- a/dumpling/export/prepare.go +++ b/dumpling/export/prepare.go @@ -15,11 +15,12 @@ import ( ) const ( - outputFileTemplateSchema = "schema" - outputFileTemplateTable = "table" - outputFileTemplateView = "view" - outputFileTemplateData = "data" - outputFileTemplatePolicy = "placement-policy" + outputFileTemplateSchema = "schema" + outputFileTemplateTable = "table" + outputFileTemplateView = "view" + outputFileTemplateSequence = "sequence" + outputFileTemplateData = "data" + outputFileTemplatePolicy = "placement-policy" defaultOutputFileTemplateBase = ` {{- define "objectName" -}} diff --git a/dumpling/export/retry.go b/dumpling/export/retry.go index 3facc7e296189..b1866c06065d7 100644 --- a/dumpling/export/retry.go +++ b/dumpling/export/retry.go @@ -8,7 +8,7 @@ import ( "github.com/go-sql-driver/mysql" "github.com/pingcap/errors" - "github.com/pingcap/tidb-tools/pkg/dbutil" + "github.com/pingcap/tidb/util/dbutil" "go.uber.org/zap" "github.com/pingcap/tidb/br/pkg/utils" diff --git a/dumpling/export/sql.go b/dumpling/export/sql.go index fc4383bb11ac0..430068a434021 100644 --- a/dumpling/export/sql.go +++ b/dumpling/export/sql.go @@ -20,6 +20,7 @@ import ( "go.uber.org/multierr" "go.uber.org/zap" + "github.com/pingcap/tidb/br/pkg/version" dbconfig "github.com/pingcap/tidb/config" tcontext "github.com/pingcap/tidb/dumpling/context" "github.com/pingcap/tidb/dumpling/log" @@ -174,6 +175,60 @@ func ShowCreateView(tctx *tcontext.Context, db *BaseConn, database, view string) return createTableSQL.String(), createViewSQL.String(), nil } +// ShowCreateSequence constructs the create sequence SQL for a specified sequence +// returns (createSequenceSQL, error) +func ShowCreateSequence(tctx *tcontext.Context, db *BaseConn, database, sequence string, conf *Config) (string, error) { + var oneRow [2]string + handleOneRow := func(rows *sql.Rows) error { + return rows.Scan(&oneRow[0], &oneRow[1]) + } + var ( + createSequenceSQL strings.Builder + nextNotCachedValue int64 + ) + query := fmt.Sprintf("SHOW CREATE SEQUENCE `%s`.`%s`", escapeString(database), escapeString(sequence)) + err := db.QuerySQL(tctx, handleOneRow, func() { + oneRow[0], oneRow[1] = "", "" + }, query) + if err != nil { + return "", err + } + createSequenceSQL.WriteString(oneRow[1]) + createSequenceSQL.WriteString(";\n") + + switch conf.ServerInfo.ServerType { + case version.ServerTypeTiDB: + // Get next not allocated auto increment id of the whole cluster + query := fmt.Sprintf("SHOW TABLE `%s`.`%s` NEXT_ROW_ID", escapeString(database), escapeString(sequence)) + results, err := db.QuerySQLWithColumns(tctx, []string{"NEXT_GLOBAL_ROW_ID", "ID_TYPE"}, query) + if err != nil { + return "", err + } + for _, oneRow := range results { + nextGlobalRowId, idType := oneRow[0], oneRow[1] + if idType == "SEQUENCE" { + nextNotCachedValue, _ = strconv.ParseInt(nextGlobalRowId, 10, 64) + } + } + fmt.Fprintf(&createSequenceSQL, "SELECT SETVAL(`%s`,%d);\n", escapeString(sequence), nextNotCachedValue) + case version.ServerTypeMariaDB: + var oneRow1 string + handleOneRow1 := func(rows *sql.Rows) error { + return rows.Scan(&oneRow1) + } + query := fmt.Sprintf("SELECT NEXT_NOT_CACHED_VALUE FROM `%s`.`%s`", escapeString(database), escapeString(sequence)) + err := db.QuerySQL(tctx, handleOneRow1, func() { + oneRow1 = "" + }, query) + if err != nil { + return "", err + } + nextNotCachedValue, _ = strconv.ParseInt(oneRow1, 10, 64) + fmt.Fprintf(&createSequenceSQL, "SELECT SETVAL(`%s`,%d);\n", escapeString(sequence), nextNotCachedValue) + } + return createSequenceSQL.String(), nil +} + // SetCharset builds the set charset SQLs func SetCharset(w *strings.Builder, characterSet, collationConnection string) { w.WriteString("SET @PREV_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;\n") diff --git a/dumpling/export/sql_test.go b/dumpling/export/sql_test.go index f52b3d882c155..82ba0addeab49 100644 --- a/dumpling/export/sql_test.go +++ b/dumpling/export/sql_test.go @@ -368,6 +368,46 @@ func TestShowCreateView(t *testing.T) { require.NoError(t, mock.ExpectationsWereMet()) } +func TestShowCreateSequence(t *testing.T) { + conf := defaultConfigForTest(t) + db, mock, err := sqlmock.New() + require.NoError(t, err) + defer func() { + require.NoError(t, db.Close()) + }() + + conn, err := db.Conn(context.Background()) + require.NoError(t, err) + tctx := tcontext.Background().WithLogger(appLogger) + baseConn := newBaseConn(conn, true, nil) + + conf.ServerInfo.ServerType = version.ServerTypeTiDB + mock.ExpectQuery("SHOW CREATE SEQUENCE `test`.`s`"). + WillReturnRows(sqlmock.NewRows([]string{"Sequence", "Create Sequence"}). + AddRow("s", "CREATE SEQUENCE `s` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB")) + mock.ExpectQuery("SHOW TABLE `test`.`s` NEXT_ROW_ID"). + WillReturnRows(sqlmock.NewRows([]string{"DB_NAME", "TABLE_NAME", "COLUMN_NAME", "NEXT_GLOBAL_ROW_ID", "ID_TYPE"}). + AddRow("test", "s", nil, 1001, "SEQUENCE")) + + createSequenceSQL, err := ShowCreateSequence(tctx, baseConn, "test", "s", conf) + require.NoError(t, err) + require.Equal(t, "CREATE SEQUENCE `s` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB;\nSELECT SETVAL(`s`,1001);\n", createSequenceSQL) + require.NoError(t, mock.ExpectationsWereMet()) + + conf.ServerInfo.ServerType = version.ServerTypeMariaDB + mock.ExpectQuery("SHOW CREATE SEQUENCE `test`.`s`"). + WillReturnRows(sqlmock.NewRows([]string{"Table", "Create Table"}). + AddRow("s", "CREATE SEQUENCE `s` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB")) + mock.ExpectQuery("SELECT NEXT_NOT_CACHED_VALUE FROM `test`.`s`"). + WillReturnRows(sqlmock.NewRows([]string{"next_not_cached_value"}). + AddRow(1001)) + + createSequenceSQL, err = ShowCreateSequence(tctx, baseConn, "test", "s", conf) + require.NoError(t, err) + require.Equal(t, "CREATE SEQUENCE `s` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB;\nSELECT SETVAL(`s`,1001);\n", createSequenceSQL) + require.NoError(t, mock.ExpectationsWereMet()) +} + func TestShowCreatePolicy(t *testing.T) { db, mock, err := sqlmock.New() require.NoError(t, err) diff --git a/dumpling/export/task.go b/dumpling/export/task.go index a9e5874fa350b..36d88c3e3454c 100644 --- a/dumpling/export/task.go +++ b/dumpling/export/task.go @@ -34,6 +34,14 @@ type TaskViewMeta struct { CreateViewSQL string } +// TaskSequenceMeta is a dumping sequence metadata task +type TaskSequenceMeta struct { + Task + DatabaseName string + SequenceName string + CreateSequenceSQL string +} + // TaskPolicyMeta is a dumping view metadata task type TaskPolicyMeta struct { Task @@ -77,6 +85,15 @@ func NewTaskViewMeta(dbName, tblName, createTableSQL, createViewSQL string) *Tas } } +// NewTaskSequenceMeta returns a new dumping sequence metadata task +func NewTaskSequenceMeta(dbName, tblName, createSequenceSQL string) *TaskSequenceMeta { + return &TaskSequenceMeta{ + DatabaseName: dbName, + SequenceName: tblName, + CreateSequenceSQL: createSequenceSQL, + } +} + // NewTaskPolicyMeta returns a new dumping placement policy metadata task func NewTaskPolicyMeta(policyName, createPolicySQL string) *TaskPolicyMeta { return &TaskPolicyMeta{ @@ -110,6 +127,11 @@ func (t *TaskViewMeta) Brief() string { return fmt.Sprintf("meta of view '%s'.'%s'", t.DatabaseName, t.ViewName) } +// Brief implements task.Brief +func (t *TaskSequenceMeta) Brief() string { + return fmt.Sprintf("meta of sequence '%s'.'%s'", t.DatabaseName, t.SequenceName) +} + // Brief implements task.Brief func (t *TaskPolicyMeta) Brief() string { return fmt.Sprintf("meta of placement policy '%s'", t.PolicyName) diff --git a/dumpling/export/writer.go b/dumpling/export/writer.go index ca7dd438ad756..2f0668adc580b 100644 --- a/dumpling/export/writer.go +++ b/dumpling/export/writer.go @@ -99,6 +99,8 @@ func (w *Writer) handleTask(task Task) error { return w.WriteTableMeta(t.DatabaseName, t.TableName, t.CreateTableSQL) case *TaskViewMeta: return w.WriteViewMeta(t.DatabaseName, t.ViewName, t.CreateTableSQL, t.CreateViewSQL) + case *TaskSequenceMeta: + return w.WriteSequenceMeta(t.DatabaseName, t.SequenceName, t.CreateSequenceSQL) case *TaskPolicyMeta: return w.WritePolicyMeta(t.PolicyName, t.CreatePolicySQL) case *TaskTableData: @@ -164,6 +166,16 @@ func (w *Writer) WriteViewMeta(db, view, createTableSQL, createViewSQL string) e return writeMetaToFile(tctx, db, createViewSQL, w.extStorage, fileNameView+".sql", conf.CompressType) } +// WriteSequenceMeta writes sequence meta to a file +func (w *Writer) WriteSequenceMeta(db, sequence, createSQL string) error { + tctx, conf := w.tctx, w.conf + fileName, err := (&outputFileNamer{DB: db, Table: sequence}).render(conf.OutputFileTemplate, outputFileTemplateSequence) + if err != nil { + return err + } + return writeMetaToFile(tctx, db, createSQL, w.extStorage, fileName+".sql", conf.CompressType) +} + // WriteTableData writes table data to a file with retry func (w *Writer) WriteTableData(meta TableMeta, ir TableDataIR, currentChunk int) error { tctx, conf, conn := w.tctx, w.conf, w.conn diff --git a/dumpling/tests/external_storage/run.sh b/dumpling/tests/external_storage/run.sh new file mode 100644 index 0000000000000..ab35ebc802e5e --- /dev/null +++ b/dumpling/tests/external_storage/run.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Copyright 2022 PingCAP, Inc. Licensed under Apache-2.0. + +set -eu +cur=$(cd `dirname $0`; pwd) + +DB_NAME="ext_storage" +TABLE_NAME="t" + +# Test for simple case. +run_sql "drop database if exists \`$DB_NAME\`;" +run_sql "create database \`$DB_NAME\` DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;" +run_sql "create table \`$DB_NAME\`.\`$TABLE_NAME\` (a int);" +run_sql "insert into \`$DB_NAME\`.\`$TABLE_NAME\` values (1), (2);" + +export GO_FAILPOINTS="github.com/pingcap/tidb/dumpling/export/setExtStorage=return(\"$DUMPLING_TEST_DIR/set_by_failpoint\")" +run_dumpling -f "$DB_NAME.$TABLE_NAME" -L ${DUMPLING_OUTPUT_DIR}/dumpling.log + +files=`ls $DUMPLING_TEST_DIR/set_by_failpoint | wc -l` +[ "$files" = 4 ] diff --git a/dumpling/tests/s3/import.go b/dumpling/tests/s3/import.go index 34b2df31e5459..0489be3fa7a80 100644 --- a/dumpling/tests/s3/import.go +++ b/dumpling/tests/s3/import.go @@ -62,7 +62,7 @@ func main() { return errors.Trace(err) } - query := fmt.Sprintf("insert into %s values('aaaaaaaaaa')", table) + query := fmt.Sprintf("insert into %s values('aaaaaaaaaa')", table) // nolint:gosec for i := 1; i < 10000; i++ { query += ",('aaaaaaaaaa')" } diff --git a/dumpling/tests/sequences/data/sequences.s-schema-sequence-expect.sql b/dumpling/tests/sequences/data/sequences.s-schema-sequence-expect.sql new file mode 100644 index 0000000000000..0fb6daa6fc5ad --- /dev/null +++ b/dumpling/tests/sequences/data/sequences.s-schema-sequence-expect.sql @@ -0,0 +1,3 @@ +/*!40101 SET NAMES binary*/; +CREATE SEQUENCE `s` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB; +SELECT SETVAL(`s`,1001); diff --git a/dumpling/tests/sequences/run.sh b/dumpling/tests/sequences/run.sh new file mode 100644 index 0000000000000..23449ca1119d6 --- /dev/null +++ b/dumpling/tests/sequences/run.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Copyright 2020 PingCAP, Inc. Licensed under Apache-2.0. + +set -eu + +export DUMPLING_TEST_PORT=4000 + +run_sql "drop database if exists sequences;" +run_sql "create database sequences DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;" +export DUMPLING_TEST_DATABASE="sequences" + +run_sql "create sequence s start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB;" +run_sql "select nextval(s);" + +# test --no-sequences +run_dumpling --no-sequences +file_not_exist "$DUMPLING_OUTPUT_DIR/sequences.s-schema-sequence.sql" + +rm -rf $DUMPLING_OUTPUT_DIR +run_dumpling --no-sequences=false +diff "$DUMPLING_BASE_NAME/data/sequences.s-schema-sequence-expect.sql" "$DUMPLING_OUTPUT_DIR/sequences.s-schema-sequence.sql" +file_not_exist "$DUMPLING_OUTPUT_DIR/sequences.s.000000000.sql" + +# test --no-schemas +rm -rf $DUMPLING_OUTPUT_DIR +run_dumpling --no-schemas +file_not_exist "$DUMPLING_OUTPUT_DIR/sequences-schema-create.sql" +file_not_exist "$DUMPLING_OUTPUT_DIR/sequences.s-schema-sequence.sql" +file_not_exist "$DUMPLING_OUTPUT_DIR/sequences.s.000000000.sql" diff --git a/errno/errcode.go b/errno/errcode.go index e926b9ffe53df..e061f0c25a827 100644 --- a/errno/errcode.go +++ b/errno/errcode.go @@ -1016,6 +1016,7 @@ const ( ErrInconsistentHandle = 8139 ErrInconsistentIndexedValue = 8140 ErrAssertionFailed = 8141 + ErrInstanceScope = 8142 // Error codes used by TiDB ddl package ErrUnsupportedDDLOperation = 8200 diff --git a/errno/errname.go b/errno/errname.go index ab44d3bd18860..503578504b44c 100644 --- a/errno/errname.go +++ b/errno/errname.go @@ -1014,6 +1014,7 @@ var MySQLErrName = map[uint16]*mysql.ErrMessage{ ErrInconsistentHandle: mysql.Message("writing inconsistent data in table: %s, index: %s, index-handle:%#v != record-handle:%#v, index: %#v, record: %#v", []int{2, 3, 4, 5}), ErrInconsistentIndexedValue: mysql.Message("writing inconsistent data in table: %s, index: %s, col: %s, indexed-value:{%s} != record-value:{%s}", []int{3, 4}), ErrAssertionFailed: mysql.Message("assertion failed: key: %s, assertion: %s, start_ts: %v, existing start ts: %v, existing commit ts: %v", []int{0}), + ErrInstanceScope: mysql.Message("modifying %s will require SET GLOBAL in a future version of TiDB", nil), ErrWarnOptimizerHintInvalidInteger: mysql.Message("integer value is out of range in '%s'", nil), ErrWarnOptimizerHintUnsupportedHint: mysql.Message("Optimizer hint %s is not supported by TiDB and is ignored", nil), diff --git a/errors.toml b/errors.toml index 79fcca4bbdd56..429e4d8cb4c50 100644 --- a/errors.toml +++ b/errors.toml @@ -226,6 +226,271 @@ error = ''' the system table isn't supported for restoring yet ''' +["Lighting:Restore:ErrChecksumMismatch"] +error = ''' +checksum mismatched remote vs local => (checksum: %d vs %d) (total_kvs: %d vs %d) (total_bytes:%d vs %d) +''' + +["Lightning:Checkpoint:ErrCheckpointNotFound"] +error = ''' +checkpoint not found +''' + +["Lightning:Checkpoint:ErrCleanCheckpoint"] +error = ''' +clean checkpoint error +''' + +["Lightning:Checkpoint:ErrInitCheckpoint"] +error = ''' +init checkpoint error +''' + +["Lightning:Checkpoint:ErrInvalidCheckpoint"] +error = ''' +invalid checkpoint +''' + +["Lightning:Checkpoint:ErrOpenCheckpoint"] +error = ''' +open checkpoint error +''' + +["Lightning:Checkpoint:ErrReadCheckpoint"] +error = ''' +read checkpoint error +''' + +["Lightning:Checkpoint:ErrUnknownCheckpointDriver"] +error = ''' +unknown checkpoint driver '%s' +''' + +["Lightning:Checkpoint:ErrUpdateCheckpoint"] +error = ''' +update checkpoint error +''' + +["Lightning:Common:ErrInvalidArgument"] +error = ''' +invalid argument +''' + +["Lightning:Common:ErrUnknown"] +error = ''' +unknown error +''' + +["Lightning:Common:ErrVersionMismatch"] +error = ''' +version mismatch +''' + +["Lightning:Config:ErrInvalidConfig"] +error = ''' +invalid config +''' + +["Lightning:Config:ErrInvalidSortedKVDir"] +error = ''' +invalid sorted-kv-dir '%s' for local backend, please change the config or delete the path +''' + +["Lightning:Config:ErrInvalidTLSConfig"] +error = ''' +invalid tls config +''' + +["Lightning:Config:ErrParseConfigFile"] +error = ''' +cannot parse config file '%s' +''' + +["Lightning:Config:ErrReadConfigFile"] +error = ''' +cannot read config file '%s' +''' + +["Lightning:DB:ErrDBConnect"] +error = ''' +failed to connect database +''' + +["Lightning:DB:ErrInitErrManager"] +error = ''' +init error manager error +''' + +["Lightning:DB:ErrInitMetaManager"] +error = ''' +init meta manager error +''' + +["Lightning:KV:ErrCheckKVVersion"] +error = ''' +check tikv version error +''' + +["Lightning:KV:ErrCheckMultiIngest"] +error = ''' +check multi-ingest support error +''' + +["Lightning:KV:ErrCreateKVClient"] +error = ''' +create kv client error +''' + +["Lightning:Loader:ErrInvalidSchemaFile"] +error = ''' +invalid schema file +''' + +["Lightning:Loader:ErrTableRoute"] +error = ''' +table route error +''' + +["Lightning:MetaMgr:ErrMetaMgrUnknown"] +error = ''' +unknown error occur on meta manager +''' + +["Lightning:PD:ErrCreatePDClient"] +error = ''' +create pd client error +''' + +["Lightning:PD:ErrPauseGC"] +error = ''' +pause gc error +''' + +["Lightning:PD:ErrUpdatePD"] +error = ''' +update pd error +''' + +["Lightning:PreCheck:ErrCheckCSVHeader"] +error = ''' +check csv header error +''' + +["Lightning:PreCheck:ErrCheckClusterRegion"] +error = ''' +check tikv cluster region error +''' + +["Lightning:PreCheck:ErrCheckDataSource"] +error = ''' +check data source error +''' + +["Lightning:PreCheck:ErrCheckLocalResource"] +error = ''' +check local storage resource error +''' + +["Lightning:PreCheck:ErrCheckTableEmpty"] +error = ''' +check table empty error +''' + +["Lightning:PreCheck:ErrCheckpointSchemaConflict"] +error = ''' +checkpoint schema conflict +''' + +["Lightning:PreCheck:ErrPreCheckFailed"] +error = ''' +tidb-lightning pre-check failed: %s +''' + +["Lightning:PreCheck:ErrSystemRequirementNotMet"] +error = ''' +system requirement not met +''' + +["Lightning:Restore:ErrAllocTableRowIDs"] +error = ''' +allocate table row id error +''' + +["Lightning:Restore:ErrCheckLocalFile"] +error = ''' +cannot find local file for table: %s engineDir: %s +''' + +["Lightning:Restore:ErrCreateSchema"] +error = ''' +create schema failed, table: %s, stmt: %s +''' + +["Lightning:Restore:ErrEncodeKV"] +error = ''' +encode kv error in file %s at offset %d +''' + +["Lightning:Restore:ErrInvalidMetaStatus"] +error = ''' +invalid meta status: '%s' +''' + +["Lightning:Restore:ErrInvalidSchemaStmt"] +error = ''' +invalid schema statement: '%s' +''' + +["Lightning:Restore:ErrOpenDuplicateDB"] +error = ''' +open duplicate db error +''' + +["Lightning:Restore:ErrRestoreTable"] +error = ''' +restore table %s failed +''' + +["Lightning:Restore:ErrSchemaNotExists"] +error = ''' +table `%s`.`%s` schema not found +''' + +["Lightning:Restore:ErrTableIsChecksuming"] +error = ''' +table '%s' is checksuming +''' + +["Lightning:Restore:ErrUnknownBackend"] +error = ''' +unknown backend %s +''' + +["Lightning:Restore:ErrUnknownColumns"] +error = ''' +unknown columns in header (%s) for table %s +''' + +["Lightning:Storage:ErrEmptySourceDir"] +error = ''' +data-source-dir '%s' doesn't exist or contains no files +''' + +["Lightning:Storage:ErrInvalidPermission"] +error = ''' +invalid permission +''' + +["Lightning:Storage:ErrInvalidStorageConfig"] +error = ''' +invalid data-source-dir +''' + +["Lightning:Storage:ErrStorageUnknown"] +error = ''' +unknown storage error +''' + ["admin:8003"] error = ''' TiDB admin check table failed. @@ -301,6 +566,26 @@ error = ''' Invalid default value for '%-.192s' ''' +["ddl:1069"] +error = ''' +Too many keys specified; max %d keys allowed +''' + +["ddl:1071"] +error = ''' +Specified key was too long; max key length is %d bytes +''' + +["ddl:1072"] +error = ''' +Key column '%-.192s' doesn't exist in table +''' + +["ddl:1089"] +error = ''' +Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys +''' + ["ddl:1090"] error = ''' You can't delete all columns with ALTER TABLE; use DROP TABLE instead @@ -311,6 +596,11 @@ error = ''' Can't DROP '%-.192s'; check that column/key exists ''' +["ddl:1101"] +error = ''' +BLOB/TEXT/JSON column '%-.192s' can't have a default value +''' + ["ddl:1102"] error = ''' Incorrect database name '%-.100s' @@ -336,11 +626,31 @@ error = ''' Unknown character set: '%-.64s' ''' +["ddl:1117"] +error = ''' +Too many columns +''' + +["ddl:1138"] +error = ''' +Invalid use of NULL value +''' + ["ddl:1166"] error = ''' Incorrect column name '%-.100s' ''' +["ddl:1167"] +error = ''' +The used storage engine can't index column '%-.192s' +''' + +["ddl:1170"] +error = ''' +BLOB/TEXT column '%-.192s' used in key specification without a key length +''' + ["ddl:1171"] error = ''' All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead @@ -351,6 +661,11 @@ error = ''' Can't open table ''' +["ddl:1205"] +error = ''' +Timeout waiting for data reorganization +''' + ["ddl:1214"] error = ''' The used table type doesn't support FULLTEXT indexes @@ -431,6 +746,16 @@ error = ''' In definition of view, derived table or common table expression, SELECT list and column names list have different column counts ''' +["ddl:1391"] +error = ''' +Key part '%-.192s' length cannot be 0 +''' + +["ddl:1470"] +error = ''' +String '%-.70s' is too long for %s (should be no longer than %d) +''' + ["ddl:1481"] error = ''' MAXVALUE can only be used in last partition definition @@ -491,6 +816,11 @@ error = ''' COALESCE PARTITION can only be used on HASH/KEY partitions ''' +["ddl:1512"] +error = ''' +%-.64s PARTITION can only be used on RANGE/LIST partitions +''' + ["ddl:1517"] error = ''' Duplicate partition name %-.192s @@ -531,6 +861,11 @@ error = ''' Field '%-.192s' is of a not allowed type for this type of partitioning ''' +["ddl:1688"] +error = ''' +Comment for index '%-.64s' is too long (max = %d) +''' + ["ddl:1697"] error = ''' VALUES value for partition '%-.64s' must have type INT @@ -566,6 +901,11 @@ error = ''' Duplicate foreign key constraint name '%s' ''' +["ddl:1828"] +error = ''' +Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' +''' + ["ddl:1846"] error = ''' %s is not supported. Reason: %s. Try %s. @@ -576,16 +916,36 @@ error = ''' Expression of generated column '%s' contains a disallowed function. ''' +["ddl:3104"] +error = ''' +Cannot define foreign key with %s clause on a generated column. +''' + ["ddl:3106"] error = ''' '%s' is not supported for generated columns. ''' +["ddl:3107"] +error = ''' +Generated column can refer only to generated columns defined prior to it. +''' + +["ddl:3108"] +error = ''' +Column '%s' has a generated column dependency. +''' + ["ddl:3109"] error = ''' Generated column '%s' cannot refer to auto-increment column. ''' +["ddl:3152"] +error = ''' +JSON column '%-.192s' cannot be used in key specification. +''' + ["ddl:3505"] error = ''' Too long enumeration/set value for column %s. @@ -596,6 +956,16 @@ error = ''' A primary key index cannot be invisible ''' +["ddl:3593"] +error = ''' +You cannot use the window function '%s' in this context.' +''' + +["ddl:3753"] +error = ''' +Cannot create an expression index on a function that returns a JSON or GEOMETRY value +''' + ["ddl:3754"] error = ''' Expression index '%s' cannot refer to an auto-increment column @@ -606,11 +976,21 @@ error = ''' The primary key cannot be an expression index ''' +["ddl:3757"] +error = ''' +Cannot create an expression index on an expression that returns a BLOB or TEXT. Please consider using CAST +''' + ["ddl:3758"] error = ''' Expression of expression index '%s' contains a disallowed function ''' +["ddl:3761"] +error = ''' +The used storage engine cannot index the expression '%s' +''' + ["ddl:3762"] error = ''' Expression index on a column is not supported. Consider using a regular index instead @@ -621,11 +1001,21 @@ error = ''' Expression of generated column '%s' cannot refer to a row value ''' +["ddl:3780"] +error = ''' +Referencing column '%s' in foreign key constraint '%s' are incompatible +''' + ["ddl:3800"] error = ''' Expression of expression index '%s' cannot refer to a row value ''' +["ddl:3837"] +error = ''' +Column '%s' has an expression index dependency and cannot be dropped or renamed +''' + ["ddl:4135"] error = ''' Sequence '%-.64s.%-.64s' has run out @@ -658,7 +1048,32 @@ error = ''' ["ddl:8200"] error = ''' -Unsupported partition by range columns +Unsupported shard_row_id_bits for table with primary key as row id +''' + +["ddl:8201"] +error = ''' +TiDB server is not a DDL owner +''' + +["ddl:8202"] +error = ''' +Cannot decode %s value, because %v +''' + +["ddl:8203"] +error = ''' +Invalid DDL worker +''' + +["ddl:8204"] +error = ''' +Invalid DDL job +''' + +["ddl:8207"] +error = ''' +Invalid storage current version: %d ''' ["ddl:8210"] @@ -666,6 +1081,26 @@ error = ''' Invalid %!s(MISSING) state: %!v(MISSING) ''' +["ddl:8211"] +error = ''' +Reorg worker panic +''' + +["ddl:8212"] +error = ''' +Failed to split region ranges: %s +''' + +["ddl:8213"] +error = ''' +Version %d of DDL job is greater than current one: %d +''' + +["ddl:8214"] +error = ''' +Cancelled DDL job +''' + ["ddl:8215"] error = ''' Failed to repair table: %s @@ -941,6 +1376,11 @@ error = ''' data inconsistency in table: %s, index: %s, col: %s, handle: %#v, index-values:%#v != record-values:%#v, compare err:%#v ''' +["executor:8142"] +error = ''' +modifying %s will require SET GLOBAL in a future version of TiDB +''' + ["executor:8212"] error = ''' Failed to split region ranges: %s diff --git a/executor/adapter.go b/executor/adapter.go index 368d31e18560a..62c5ec29a6fd8 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -728,6 +728,7 @@ func UpdateForUpdateTS(seCtx sessionctx.Context, newForUpdateTS uint64) error { } seCtx.GetSessionVars().TxnCtx.SetForUpdateTS(newForUpdateTS) txn.SetOption(kv.SnapshotTS, seCtx.GetSessionVars().TxnCtx.GetForUpdateTS()) + seCtx.GetSessionVars().TxnCtx.LastRcReadTs = newForUpdateTS return nil } @@ -1171,6 +1172,17 @@ func getEncodedPlan(sctx sessionctx.Context, p plannercore.Plan, genHint bool) ( } if genHint { hints := plannercore.GenHintsFromPhysicalPlan(p) + for _, tableHint := range sctx.GetSessionVars().StmtCtx.OriginalTableHints { + // some hints like 'memory_quota' cannot be extracted from the PhysicalPlan directly, + // so we have to iterate all hints from the customer and keep some other necessary hints. + switch tableHint.HintName.L { + case "memory_quota", "use_toja", "no_index_merge", "max_execution_time", + plannercore.HintAggToCop, plannercore.HintIgnoreIndex, + plannercore.HintReadFromStorage, plannercore.HintLimitToCop: + hints = append(hints, tableHint) + } + } + hintStr = hint.RestoreOptimizerHints(hints) sctx.GetSessionVars().StmtCtx.SetPlanHint(hintStr) } diff --git a/executor/admin.go b/executor/admin.go index 600fb48f6b970..abbef043b4819 100644 --- a/executor/admin.go +++ b/executor/admin.go @@ -35,7 +35,6 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" - "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/ranger" "github.com/pingcap/tidb/util/timeutil" @@ -295,15 +294,11 @@ func (e *RecoverIndexExec) buildTableScan(ctx context.Context, txn kv.Transactio func buildRecoverIndexKeyRanges(sctx *stmtctx.StatementContext, tid int64, startHandle kv.Handle) ([]kv.KeyRange, error) { var startKey []byte if startHandle == nil { - startKey = tablecodec.EncodeRowKey(tid, []byte{codec.NilFlag}) + startKey = tablecodec.GenTableRecordPrefix(tid).Next() } else { - startKey = tablecodec.EncodeRowKey(tid, startHandle.Next().Encoded()) + startKey = tablecodec.EncodeRowKey(tid, startHandle.Encoded()).PrefixNext() } - maxVal, err := codec.EncodeKey(sctx, nil, types.MaxValueDatum()) - if err != nil { - return nil, errors.Trace(err) - } - endKey := tablecodec.EncodeRowKey(tid, maxVal) + endKey := tablecodec.GenTableRecordPrefix(tid).PrefixNext() return []kv.KeyRange{{StartKey: startKey, EndKey: endKey}}, nil } @@ -344,6 +339,9 @@ func (e *RecoverIndexExec) backfillIndex(ctx context.Context) (int64, int64, err break } currentHandle = result.currentHandle + if currentHandle.Next().Compare(result.currentHandle) <= 0 { + break // There is no more handles in the table. + } } return totalAddedCnt, totalScanCnt, nil } diff --git a/executor/admin_test.go b/executor/admin_test.go index a3b39e4e48791..3a89fdb0894b1 100644 --- a/executor/admin_test.go +++ b/executor/admin_test.go @@ -165,6 +165,7 @@ func TestAdminCheckIndexInCacheTable(t *testing.T) { tk.MustExec("admin check table cache_admin_test;") tk.MustExec("admin check index cache_admin_test c1;") tk.MustExec("admin check index cache_admin_test c2;") + tk.MustExec("alter table cache_admin_test nocache;") tk.MustExec("drop table if exists cache_admin_test;") tk.MustExec(`drop table if exists check_index_test;`) @@ -175,6 +176,7 @@ func TestAdminCheckIndexInCacheTable(t *testing.T) { result.Check(testkit.Rows("1 ef 3", "2 cd 2")) result = tk.MustQuery("admin check index check_index_test a_b (3, 5);") result.Check(testkit.Rows("-1 hi 4", "1 ef 3")) + tk.MustExec("alter table check_index_test nocache;") tk.MustExec("drop table if exists check_index_test;") tk.MustExec("drop table if exists cache_admin_table_with_index_test;") @@ -185,8 +187,12 @@ func TestAdminCheckIndexInCacheTable(t *testing.T) { tk.MustExec("alter table cache_admin_table_without_index_test cache") tk.MustExec("admin checksum table cache_admin_table_with_index_test;") tk.MustExec("admin checksum table cache_admin_table_without_index_test;") + + tk.MustExec("alter table cache_admin_table_with_index_test nocache;") + tk.MustExec("alter table cache_admin_table_without_index_test nocache;") tk.MustExec("drop table if exists cache_admin_table_with_index_test,cache_admin_table_without_index_test;") } + func TestAdminRecoverIndex(t *testing.T) { store, domain, clean := testkit.CreateMockStoreAndDomain(t) defer clean() @@ -478,6 +484,18 @@ func TestAdminRecoverIndex1(t *testing.T) { tk.MustExec("admin check index admin_test `primary`") } +// https://github.com/pingcap/tidb/issues/32915. +func TestAdminRecoverIndexEdge(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(id bigint(20) primary key, col varchar(255) unique key);") + tk.MustExec("insert into t values(9223372036854775807, 'test');") + tk.MustQuery("admin recover index t col;").Check(testkit.Rows("0 1")) +} + func TestAdminCleanupIndex(t *testing.T) { store, domain, clean := testkit.CreateMockStoreAndDomain(t) defer clean() diff --git a/executor/aggfuncs/main_test.go b/executor/aggfuncs/main_test.go index 5ff0437f1e59f..de63aaa396469 100644 --- a/executor/aggfuncs/main_test.go +++ b/executor/aggfuncs/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/executor/aggregate_test.go b/executor/aggregate_test.go index 9be71b793ee3f..5d2e45cb5b3ce 100644 --- a/executor/aggregate_test.go +++ b/executor/aggregate_test.go @@ -798,7 +798,7 @@ func TestOnlyFullGroupBy(t *testing.T) { // tk.MustQuery("select * from (select * from t) as e group by a") // tk.MustQuery("select * from (select * from t) as e group by b,d") // err = tk.ExecToErr("select * from (select * from t) as e group by b,c") - // c.Assert(terror.ErrorEqual(err, plannercore.ErrFieldNotInGroupBy), IsTrue) + // require.Truef(t, terror.ErrorEqual(err, plannercore.ErrFieldNotInGroupBy), "err %v", err) // test order by tk.MustQuery("select c from t group by c,d order by d") @@ -927,18 +927,6 @@ func TestHaving(t *testing.T) { tk.MustQuery("select 1 from t group by c1 having sum(abs(c2 + c3)) = c1").Check(testkit.Rows("1")) } -func TestIssue26496(t *testing.T) { - store, clean := testkit.CreateMockStore(t) - defer clean() - tk := testkit.NewTestKit(t, store) - tk.MustExec("use test") - - tk.MustExec("drop table if exists UK_NSPRE_19416") - tk.MustExec("CREATE TABLE `UK_NSPRE_19416` ( `COL1` binary(20) DEFAULT NULL, `COL2` varchar(20) DEFAULT NULL, `COL4` datetime DEFAULT NULL, `COL3` bigint(20) DEFAULT NULL, `COL5` float DEFAULT NULL, UNIQUE KEY `UK_COL1` (`COL1`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin") - tk.MustExec("insert into `UK_NSPRE_19416`(col1) values (0xc5b428e2ebc1b78f0b183899a8df55c88a333f86), (0x004dad637b37cc4a9742484ab93f97ede2ab8bd5), (0x550c4a4390ba14fd6d382dd29063e10210c99381)") - tk.MustQuery("select t1.col1, count(t2.col1) from UK_NSPRE_19416 as t1 left join UK_NSPRE_19416 as t2 on t1.col1 = t2.col1 where t1.col1 in (0x550C4A4390BA14FD6D382DD29063E10210C99381, 0x004DAD637B37CC4A9742484AB93F97EDE2AB8BD5, 0xC5B428E2EBC1B78F0B183899A8DF55C88A333F86) group by t1.col1, t2.col1 having t1.col1 in (0x9B4B48FEBA9225BACF8F9ADEAEE810AEC26DC7A2, 0x25A6C4FAD832F8E0267AAA504CFAE767565C8B84, 0xE26E5B0080EC5A8156DACE67D13B239500E540E6)").Check(nil) -} - func TestAggEliminator(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() diff --git a/executor/analyze.go b/executor/analyze.go index 9ac68e9223021..dc2c0b70cd111 100644 --- a/executor/analyze.go +++ b/executor/analyze.go @@ -50,6 +50,7 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/collate" @@ -59,6 +60,7 @@ import ( "github.com/pingcap/tidb/util/timeutil" "github.com/pingcap/tipb/go-tipb" "github.com/tikv/client-go/v2/tikv" + atomicutil "go.uber.org/atomic" "go.uber.org/zap" ) @@ -68,7 +70,7 @@ var _ Executor = &AnalyzeExec{} type AnalyzeExec struct { baseExecutor tasks []*analyzeTask - wg *sync.WaitGroup + wg util.WaitGroupWrapper opts map[ast.AnalyzeOptionType]uint64 OptionsMap map[int64]core.V2AnalyzeOptions } @@ -92,17 +94,25 @@ func (e *AnalyzeExec) Next(ctx context.Context, req *chunk.Chunk) error { } taskCh := make(chan *analyzeTask, len(e.tasks)) resultsCh := make(chan *statistics.AnalyzeResults, len(e.tasks)) - e.wg.Add(concurrency) + if len(e.tasks) < concurrency { + concurrency = len(e.tasks) + } for i := 0; i < concurrency; i++ { - go e.analyzeWorker(taskCh, resultsCh, i == 0) + e.wg.Run(func() { e.analyzeWorker(taskCh, resultsCh) }) } for _, task := range e.tasks { statistics.AddNewAnalyzeJob(task.job) } + failpoint.Inject("mockKillPendingAnalyzeJob", func() { + domain.GetDomain(e.ctx).SysProcTracker().KillSysProcess(util.GetAutoAnalyzeProcID()) + }) for _, task := range e.tasks { taskCh <- task } close(taskCh) + e.wg.Wait() + close(resultsCh) + statsHandle := domain.GetDomain(e.ctx).StatsHandle() panicCnt := 0 @@ -187,6 +197,9 @@ func (e *AnalyzeExec) Next(ctx context.Context, req *chunk.Chunk) error { for _, task := range e.tasks { statistics.MoveToHistory(task.job) } + failpoint.Inject("mockKillFinishedAnalyzeJob", func() { + domain.GetDomain(e.ctx).SysProcTracker().KillSysProcess(util.GetAutoAnalyzeProcID()) + }) if err != nil { return err } @@ -324,7 +337,7 @@ type analyzeTask struct { var errAnalyzeWorkerPanic = errors.New("analyze worker panic") -func (e *AnalyzeExec) analyzeWorker(taskCh <-chan *analyzeTask, resultsCh chan<- *statistics.AnalyzeResults, isCloseChanThread bool) { +func (e *AnalyzeExec) analyzeWorker(taskCh <-chan *analyzeTask, resultsCh chan<- *statistics.AnalyzeResults) { var task *analyzeTask defer func() { if r := recover(); r != nil { @@ -338,11 +351,6 @@ func (e *AnalyzeExec) analyzeWorker(taskCh <-chan *analyzeTask, resultsCh chan<- Job: task.job, } } - e.wg.Done() - if isCloseChanThread { - e.wg.Wait() - close(resultsCh) - } }() for { var ok bool @@ -575,6 +583,15 @@ func (e *AnalyzeIndexExec) buildStatsFromResult(result distsql.SelectResult, nee statsVer = int(*e.analyzePB.IdxReq.Version) } for { + failpoint.Inject("mockKillRunningAnalyzeIndexJob", func() { + domain.GetDomain(e.ctx).SysProcTracker().KillSysProcess(util.GetAutoAnalyzeProcID()) + }) + if atomic.LoadUint32(&e.ctx.GetSessionVars().Killed) == 1 { + return nil, nil, nil, nil, errors.Trace(ErrQueryInterrupted) + } + failpoint.Inject("mockSlowAnalyzeIndex", func() { + time.Sleep(1000 * time.Second) + }) data, err := result.NextRaw(context.TODO()) if err != nil { return nil, nil, nil, nil, err @@ -687,8 +704,11 @@ func analyzeColumnsPushdown(colExec *AnalyzeColumnsExec) *statistics.AnalyzeResu // subIndexWorkerWg is better to be initialized in handleNDVForSpecialIndexes, however if we do so, golang would // report unexpected/unreasonable data race error on subIndexWorkerWg when running TestAnalyzeVirtualCol test // case with `-race` flag now. - colExec.subIndexWorkerWg = &sync.WaitGroup{} - go colExec.handleNDVForSpecialIndexes(specialIndexes, idxNDVPushDownCh) + var wg util.WaitGroupWrapper + wg.Run(func() { + colExec.handleNDVForSpecialIndexes(specialIndexes, idxNDVPushDownCh) + }) + defer wg.Wait() count, hists, topns, fmSketches, extStats, err := colExec.buildSamplingStats(ranges, collExtStats, specialIndexesOffsets, idxNDVPushDownCh) if err != nil { return &statistics.AnalyzeResults{Err: err, Job: colExec.job} @@ -800,9 +820,8 @@ type AnalyzeColumnsExec struct { indexes []*model.IndexInfo core.AnalyzeInfo - subIndexWorkerWg *sync.WaitGroup - samplingBuilderWg *sync.WaitGroup - samplingMergeWg *sync.WaitGroup + samplingBuilderWg *notifyErrorWaitGroupWrapper + samplingMergeWg *util.WaitGroupWrapper schemaForVirtualColEval *expression.Schema baseCount int64 @@ -890,9 +909,18 @@ func (e AnalyzeColumnsExec) decodeSampleDataWithVirtualColumn( return nil } -func readDataAndSendTask(handler *tableResultHandler, mergeTaskCh chan []byte) error { +func readDataAndSendTask(ctx sessionctx.Context, handler *tableResultHandler, mergeTaskCh chan []byte) error { defer close(mergeTaskCh) for { + failpoint.Inject("mockKillRunningV2AnalyzeJob", func() { + domain.GetDomain(ctx).SysProcTracker().KillSysProcess(util.GetAutoAnalyzeProcID()) + }) + if atomic.LoadUint32(&ctx.GetSessionVars().Killed) == 1 { + return errors.Trace(ErrQueryInterrupted) + } + failpoint.Inject("mockSlowAnalyzeV2", func() { + time.Sleep(1000 * time.Second) + }) data, err := handler.nextRaw(context.TODO()) if err != nil { return errors.Trace(err) @@ -939,12 +967,12 @@ func (e *AnalyzeColumnsExec) buildSamplingStats( } mergeResultCh := make(chan *samplingMergeResult, statsConcurrency) mergeTaskCh := make(chan []byte, statsConcurrency) - e.samplingMergeWg = &sync.WaitGroup{} + e.samplingMergeWg = &util.WaitGroupWrapper{} e.samplingMergeWg.Add(statsConcurrency) for i := 0; i < statsConcurrency; i++ { go e.subMergeWorker(mergeResultCh, mergeTaskCh, l, i == 0) } - if err = readDataAndSendTask(e.resultHandler, mergeTaskCh); err != nil { + if err = readDataAndSendTask(e.ctx, e.resultHandler, mergeTaskCh); err != nil { return 0, nil, nil, nil, nil, err } @@ -1012,13 +1040,16 @@ func (e *AnalyzeColumnsExec) buildSamplingStats( fmSketches = make([]*statistics.FMSketch, 0, totalLen) buildResultChan := make(chan error, totalLen) buildTaskChan := make(chan *samplingBuildTask, totalLen) - e.samplingBuilderWg = &sync.WaitGroup{} - e.samplingBuilderWg.Add(statsConcurrency) + if totalLen < statsConcurrency { + statsConcurrency = totalLen + } + e.samplingBuilderWg = newNotifyErrorWaitGroupWrapper(buildResultChan) sampleCollectors := make([]*statistics.SampleCollector, len(e.colsInfo)) + exitCh := make(chan struct{}) + e.samplingBuilderWg.Add(statsConcurrency) for i := 0; i < statsConcurrency; i++ { - go e.subBuildWorker(buildResultChan, buildTaskChan, hists, topns, sampleCollectors, i == 0) + e.samplingBuilderWg.Run(func() { e.subBuildWorker(buildResultChan, buildTaskChan, hists, topns, sampleCollectors, exitCh) }) } - for i, col := range e.colsInfo { buildTaskChan <- &samplingBuildTask{ id: col.ID, @@ -1032,6 +1063,8 @@ func (e *AnalyzeColumnsExec) buildSamplingStats( indexPushedDownResult := <-idxNDVPushDownCh if indexPushedDownResult.err != nil { + close(exitCh) + e.samplingBuilderWg.Wait() return 0, nil, nil, nil, nil, indexPushedDownResult.err } for _, offset := range indexesWithVirtualColOffsets { @@ -1106,9 +1139,13 @@ func (e *AnalyzeColumnsExec) handleNDVForSpecialIndexes(indexInfos []*model.Inde statistics.AddNewAnalyzeJob(task.job) } resultsCh := make(chan *statistics.AnalyzeResults, len(tasks)) - e.subIndexWorkerWg.Add(statsConcurrncy) + if len(tasks) < statsConcurrncy { + statsConcurrncy = len(tasks) + } + var subIndexWorkerWg = NewAnalyzeResultsNotifyWaitGroupWrapper(resultsCh) + subIndexWorkerWg.Add(statsConcurrncy) for i := 0; i < statsConcurrncy; i++ { - go e.subIndexWorkerForNDV(taskCh, resultsCh, i == 0) + subIndexWorkerWg.Run(func() { e.subIndexWorkerForNDV(taskCh, resultsCh) }) } for _, task := range tasks { taskCh <- task @@ -1142,25 +1179,20 @@ func (e *AnalyzeColumnsExec) handleNDVForSpecialIndexes(indexInfos []*model.Inde } // subIndexWorker receive the task for each index and return the result for them. -func (e *AnalyzeColumnsExec) subIndexWorkerForNDV(taskCh chan *analyzeTask, resultsCh chan *statistics.AnalyzeResults, isFirstToCloseCh bool) { +func (e *AnalyzeColumnsExec) subIndexWorkerForNDV(taskCh chan *analyzeTask, resultsCh chan *statistics.AnalyzeResults) { var task *analyzeTask defer func() { if r := recover(); r != nil { buf := make([]byte, 4096) stackSize := runtime.Stack(buf, false) buf = buf[:stackSize] - logutil.BgLogger().Error("analyze worker panicked", zap.String("stack", string(buf))) + logutil.BgLogger().Error("analyze worker panicked", zap.Any("recover", r), zap.String("stack", string(buf))) metrics.PanicCounter.WithLabelValues(metrics.LabelAnalyze).Inc() resultsCh <- &statistics.AnalyzeResults{ Err: errAnalyzeWorkerPanic, Job: task.job, } } - e.subIndexWorkerWg.Done() - if isFirstToCloseCh { - e.subIndexWorkerWg.Wait() - close(resultsCh) - } }() for { var ok bool @@ -1307,21 +1339,16 @@ type samplingBuildTask struct { slicePos int } -func (e *AnalyzeColumnsExec) subBuildWorker(resultCh chan error, taskCh chan *samplingBuildTask, hists []*statistics.Histogram, topns []*statistics.TopN, collectors []*statistics.SampleCollector, isClosedChanThread bool) { +func (e *AnalyzeColumnsExec) subBuildWorker(resultCh chan error, taskCh chan *samplingBuildTask, hists []*statistics.Histogram, topns []*statistics.TopN, collectors []*statistics.SampleCollector, exitCh chan struct{}) { defer func() { if r := recover(); r != nil { buf := make([]byte, 4096) stackSize := runtime.Stack(buf, false) buf = buf[:stackSize] - logutil.BgLogger().Error("analyze worker panicked", zap.String("stack", string(buf))) + logutil.BgLogger().Error("analyze worker panicked", zap.Any("recover", r), zap.String("stack", string(buf))) metrics.PanicCounter.WithLabelValues(metrics.LabelAnalyze).Inc() resultCh <- errAnalyzeWorkerPanic } - e.samplingBuilderWg.Done() - if isClosedChanThread { - e.samplingBuilderWg.Wait() - close(resultCh) - } }() failpoint.Inject("mockAnalyzeSamplingBuildWorkerPanic", func() { panic("failpoint triggered") @@ -1329,93 +1356,97 @@ func (e *AnalyzeColumnsExec) subBuildWorker(resultCh chan error, taskCh chan *sa colLen := len(e.colsInfo) workLoop: for { - task, ok := <-taskCh - if !ok { - break - } - var collector *statistics.SampleCollector - if task.isColumn { - if e.colsInfo[task.slicePos].IsGenerated() && !e.colsInfo[task.slicePos].GeneratedStored { - hists[task.slicePos] = nil - topns[task.slicePos] = nil - continue + select { + case task, ok := <-taskCh: + if !ok { + break workLoop } - sampleItems := make([]*statistics.SampleItem, 0, task.rootRowCollector.Base().Samples.Len()) - for j, row := range task.rootRowCollector.Base().Samples { - if row.Columns[task.slicePos].IsNull() { + var collector *statistics.SampleCollector + if task.isColumn { + if e.colsInfo[task.slicePos].IsGenerated() && !e.colsInfo[task.slicePos].GeneratedStored { + hists[task.slicePos] = nil + topns[task.slicePos] = nil continue } - val := row.Columns[task.slicePos] - ft := e.colsInfo[task.slicePos].FieldType - // When it's new collation data, we need to use its collate key instead of original value because only - // the collate key can ensure the correct ordering. - // This is also corresponding to similar operation in (*statistics.Column).GetColumnRowCount(). - if ft.EvalType() == types.ETString && ft.Tp != mysql.TypeEnum && ft.Tp != mysql.TypeSet { - val.SetBytes(collate.GetCollator(ft.Collate).Key(val.GetString())) + sampleItems := make([]*statistics.SampleItem, 0, task.rootRowCollector.Base().Samples.Len()) + for j, row := range task.rootRowCollector.Base().Samples { + if row.Columns[task.slicePos].IsNull() { + continue + } + val := row.Columns[task.slicePos] + ft := e.colsInfo[task.slicePos].FieldType + // When it's new collation data, we need to use its collate key instead of original value because only + // the collate key can ensure the correct ordering. + // This is also corresponding to similar operation in (*statistics.Column).GetColumnRowCount(). + if ft.EvalType() == types.ETString && ft.Tp != mysql.TypeEnum && ft.Tp != mysql.TypeSet { + val.SetBytes(collate.GetCollator(ft.Collate).Key(val.GetString())) + } + sampleItems = append(sampleItems, &statistics.SampleItem{ + Value: val, + Ordinal: j, + }) } - sampleItems = append(sampleItems, &statistics.SampleItem{ - Value: val, - Ordinal: j, - }) - } - collector = &statistics.SampleCollector{ - Samples: sampleItems, - NullCount: task.rootRowCollector.Base().NullCount[task.slicePos], - Count: task.rootRowCollector.Base().Count - task.rootRowCollector.Base().NullCount[task.slicePos], - FMSketch: task.rootRowCollector.Base().FMSketches[task.slicePos], - TotalSize: task.rootRowCollector.Base().TotalSizes[task.slicePos], - } - } else { - var tmpDatum types.Datum - var err error - idx := e.indexes[task.slicePos-colLen] - sampleItems := make([]*statistics.SampleItem, 0, task.rootRowCollector.Base().Samples.Len()) - for _, row := range task.rootRowCollector.Base().Samples { - if len(idx.Columns) == 1 && row.Columns[idx.Columns[0].Offset].IsNull() { - continue + collector = &statistics.SampleCollector{ + Samples: sampleItems, + NullCount: task.rootRowCollector.Base().NullCount[task.slicePos], + Count: task.rootRowCollector.Base().Count - task.rootRowCollector.Base().NullCount[task.slicePos], + FMSketch: task.rootRowCollector.Base().FMSketches[task.slicePos], + TotalSize: task.rootRowCollector.Base().TotalSizes[task.slicePos], } + } else { + var tmpDatum types.Datum + var err error + idx := e.indexes[task.slicePos-colLen] + sampleItems := make([]*statistics.SampleItem, 0, task.rootRowCollector.Base().Samples.Len()) + for _, row := range task.rootRowCollector.Base().Samples { + if len(idx.Columns) == 1 && row.Columns[idx.Columns[0].Offset].IsNull() { + continue + } - b := make([]byte, 0, 8) - for _, col := range idx.Columns { - if col.Length != types.UnspecifiedLength { - row.Columns[col.Offset].Copy(&tmpDatum) - ranger.CutDatumByPrefixLen(&tmpDatum, col.Length, &e.colsInfo[col.Offset].FieldType) - b, err = codec.EncodeKey(e.ctx.GetSessionVars().StmtCtx, b, tmpDatum) + b := make([]byte, 0, 8) + for _, col := range idx.Columns { + if col.Length != types.UnspecifiedLength { + row.Columns[col.Offset].Copy(&tmpDatum) + ranger.CutDatumByPrefixLen(&tmpDatum, col.Length, &e.colsInfo[col.Offset].FieldType) + b, err = codec.EncodeKey(e.ctx.GetSessionVars().StmtCtx, b, tmpDatum) + if err != nil { + resultCh <- err + continue workLoop + } + continue + } + b, err = codec.EncodeKey(e.ctx.GetSessionVars().StmtCtx, b, row.Columns[col.Offset]) if err != nil { resultCh <- err continue workLoop } - continue - } - b, err = codec.EncodeKey(e.ctx.GetSessionVars().StmtCtx, b, row.Columns[col.Offset]) - if err != nil { - resultCh <- err - continue workLoop } + sampleItems = append(sampleItems, &statistics.SampleItem{ + Value: types.NewBytesDatum(b), + }) + } + collector = &statistics.SampleCollector{ + Samples: sampleItems, + NullCount: task.rootRowCollector.Base().NullCount[task.slicePos], + Count: task.rootRowCollector.Base().Count - task.rootRowCollector.Base().NullCount[task.slicePos], + FMSketch: task.rootRowCollector.Base().FMSketches[task.slicePos], + TotalSize: task.rootRowCollector.Base().TotalSizes[task.slicePos], } - sampleItems = append(sampleItems, &statistics.SampleItem{ - Value: types.NewBytesDatum(b), - }) } - collector = &statistics.SampleCollector{ - Samples: sampleItems, - NullCount: task.rootRowCollector.Base().NullCount[task.slicePos], - Count: task.rootRowCollector.Base().Count - task.rootRowCollector.Base().NullCount[task.slicePos], - FMSketch: task.rootRowCollector.Base().FMSketches[task.slicePos], - TotalSize: task.rootRowCollector.Base().TotalSizes[task.slicePos], + if task.isColumn { + collectors[task.slicePos] = collector } + hist, topn, err := statistics.BuildHistAndTopN(e.ctx, int(e.opts[ast.AnalyzeOptNumBuckets]), int(e.opts[ast.AnalyzeOptNumTopN]), task.id, collector, task.tp, task.isColumn) + if err != nil { + resultCh <- err + continue + } + hists[task.slicePos] = hist + topns[task.slicePos] = topn + resultCh <- nil + case <-exitCh: + return } - if task.isColumn { - collectors[task.slicePos] = collector - } - hist, topn, err := statistics.BuildHistAndTopN(e.ctx, int(e.opts[ast.AnalyzeOptNumBuckets]), int(e.opts[ast.AnalyzeOptNumTopN]), task.id, collector, task.tp, task.isColumn) - if err != nil { - resultCh <- err - continue - } - hists[task.slicePos] = hist - topns[task.slicePos] = topn - resultCh <- nil } } @@ -1456,6 +1487,15 @@ func (e *AnalyzeColumnsExec) buildStats(ranges []*ranger.Range, needExtStats boo } } for { + failpoint.Inject("mockKillRunningV1AnalyzeJob", func() { + domain.GetDomain(e.ctx).SysProcTracker().KillSysProcess(util.GetAutoAnalyzeProcID()) + }) + if atomic.LoadUint32(&e.ctx.GetSessionVars().Killed) == 1 { + return nil, nil, nil, nil, nil, errors.Trace(ErrQueryInterrupted) + } + failpoint.Inject("mockSlowAnalyzeV1", func() { + time.Sleep(1000 * time.Second) + }) data, err1 := e.resultHandler.nextRaw(context.TODO()) if err1 != nil { return nil, nil, nil, nil, nil, err1 @@ -2280,3 +2320,67 @@ func analyzePKIncremental(colExec *analyzePKIncrementalExec) *statistics.Analyze Snapshot: colExec.snapshot, } } + +// analyzeResultsNotifyWaitGroupWrapper is a wrapper for sync.WaitGroup +// Please add all goroutine count when to `Add` to avoid exiting in advance. +type analyzeResultsNotifyWaitGroupWrapper struct { + sync.WaitGroup + notify chan *statistics.AnalyzeResults + cnt atomicutil.Uint64 +} + +// NewAnalyzeResultsNotifyWaitGroupWrapper is to create analyzeResultsNotifyWaitGroupWrapper +func NewAnalyzeResultsNotifyWaitGroupWrapper(notify chan *statistics.AnalyzeResults) *analyzeResultsNotifyWaitGroupWrapper { + return &analyzeResultsNotifyWaitGroupWrapper{ + notify: notify, + cnt: *atomicutil.NewUint64(0), + } +} + +// Run runs a function in a goroutine and calls done when function returns. +// Please DO NOT use panic in the cb function. +func (w *analyzeResultsNotifyWaitGroupWrapper) Run(exec func()) { + old := w.cnt.Inc() - 1 + go func(cnt uint64) { + defer func() { + w.Done() + if cnt == 0 { + w.Wait() + close(w.notify) + } + }() + exec() + }(old) +} + +// notifyErrorWaitGroupWrapper is a wrapper for sync.WaitGroup +// Please add all goroutine count when to `Add` to avoid exiting in advance. +type notifyErrorWaitGroupWrapper struct { + sync.WaitGroup + notify chan error + cnt atomicutil.Uint64 +} + +// newNotifyErrorWaitGroupWrapper is to create notifyErrorWaitGroupWrapper +func newNotifyErrorWaitGroupWrapper(notify chan error) *notifyErrorWaitGroupWrapper { + return ¬ifyErrorWaitGroupWrapper{ + notify: notify, + cnt: *atomicutil.NewUint64(0), + } +} + +// Run runs a function in a goroutine and calls done when function returns. +// Please DO NOT use panic in the cb function. +func (w *notifyErrorWaitGroupWrapper) Run(exec func()) { + old := w.cnt.Inc() - 1 + go func(cnt uint64) { + defer func() { + w.Done() + if cnt == 0 { + w.Wait() + close(w.notify) + } + }() + exec() + }(old) +} diff --git a/executor/analyze_test.go b/executor/analyze_test.go index 0be814d76a068..1b210646036f1 100644 --- a/executor/analyze_test.go +++ b/executor/analyze_test.go @@ -660,6 +660,7 @@ func TestFailedAnalyzeRequest(t *testing.T) { tk.MustExec("set @@tidb_analyze_version = 1") require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/executor/buildStatsFromResult", `return(true)`)) _, err := tk.Exec("analyze table t") + require.NotNil(t, err) require.Equal(t, "mock buildStatsFromResult error", err.Error()) require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/executor/buildStatsFromResult")) } @@ -950,14 +951,14 @@ func TestAdjustSampleRateNote(t *testing.T) { result := tk.MustQuery("show stats_meta where table_name = 't'") require.Equal(t, "220000", result.Rows()[0][5]) tk.MustExec("analyze table t") - tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Analyze use auto adjusted sample rate 0.500000 for table test.t.")) + tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Analyze use auto adjusted sample rate 0.500000 for table test.t")) tk.MustExec("insert into t values(1),(1),(1)") require.NoError(t, statsHandle.DumpStatsDeltaToKV(handle.DumpAll)) require.NoError(t, statsHandle.Update(is)) result = tk.MustQuery("show stats_meta where table_name = 't'") require.Equal(t, "3", result.Rows()[0][5]) tk.MustExec("analyze table t") - tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.")) + tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t")) } func TestFastAnalyze4GlobalStats(t *testing.T) { @@ -976,7 +977,7 @@ func TestFastAnalyze4GlobalStats(t *testing.T) { tk.MustExec("create table test_fast_gstats(a int, b int) PARTITION BY HASH(a) PARTITIONS 2;") tk.MustExec("insert into test_fast_gstats values(1,1),(3,3),(4,4),(2,2),(5,5);") err := tk.ExecToErr("analyze table test_fast_gstats;") - require.EqualError(t, err, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently.") + require.EqualError(t, err, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently") } func TestAnalyzeIndex(t *testing.T) { @@ -1012,17 +1013,6 @@ func TestAnalyzeIncremental(t *testing.T) { tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set @@tidb_analyze_version = 1") - tk.Session().GetSessionVars().EnableStreaming = false - testAnalyzeIncremental(tk, t, dom) -} - -func TestAnalyzeIncrementalStreaming(t *testing.T) { - t.Skip("unistore hasn't support streaming yet.") - store, dom, clean := testkit.CreateMockStoreAndDomain(t) - defer clean() - tk := testkit.NewTestKit(t, store) - tk.MustExec("use test") - tk.Session().GetSessionVars().EnableStreaming = true testAnalyzeIncremental(tk, t, dom) } @@ -1219,7 +1209,7 @@ func TestSmallTableAnalyzeV2(t *testing.T) { tk.MustExec("create table small_table_inject_pd(a int)") tk.MustExec("insert into small_table_inject_pd values(1), (2), (3), (4), (5)") tk.MustExec("analyze table small_table_inject_pd") - tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.small_table_inject_pd.")) + tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.small_table_inject_pd")) tk.MustExec(` create table small_table_inject_pd_with_partition( a int @@ -1231,9 +1221,9 @@ create table small_table_inject_pd_with_partition( tk.MustExec("insert into small_table_inject_pd_with_partition values(1), (6), (11)") tk.MustExec("analyze table small_table_inject_pd_with_partition") tk.MustQuery("show warnings").Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.small_table_inject_pd_with_partition's partition p0.", - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.small_table_inject_pd_with_partition's partition p1.", - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.small_table_inject_pd_with_partition's partition p2.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.small_table_inject_pd_with_partition's partition p0", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.small_table_inject_pd_with_partition's partition p1", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.small_table_inject_pd_with_partition's partition p2", )) require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/executor/calcSampleRateByStorageCount")) } @@ -1845,8 +1835,8 @@ func TestAnalyzeColumnsWithPrimaryKey(t *testing.T) { case model.ColumnList: tk.MustExec("analyze table t columns a with 2 topn, 2 buckets") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.", - "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t", + "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats", )) case model.PredicateColumns: originalVal := tk.MustQuery("select @@tidb_enable_column_tracking").Rows()[0][0].(string) @@ -1914,8 +1904,8 @@ func TestAnalyzeColumnsWithIndex(t *testing.T) { case model.ColumnList: tk.MustExec("analyze table t columns c with 2 topn, 2 buckets") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.", - "Warning 1105 Columns b,d are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t", + "Warning 1105 Columns b,d are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats", )) case model.PredicateColumns: originalVal := tk.MustQuery("select @@tidb_enable_column_tracking").Rows()[0][0].(string) @@ -1992,8 +1982,8 @@ func TestAnalyzeColumnsWithClusteredIndex(t *testing.T) { case model.ColumnList: tk.MustExec("analyze table t columns c with 2 topn, 2 buckets") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.", - "Warning 1105 Columns b,d are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t", + "Warning 1105 Columns b,d are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats", )) case model.PredicateColumns: originalVal := tk.MustQuery("select @@tidb_enable_column_tracking").Rows()[0][0].(string) @@ -2074,9 +2064,9 @@ func TestAnalyzeColumnsWithDynamicPartitionTable(t *testing.T) { case model.ColumnList: tk.MustExec("analyze table t columns a with 2 topn, 2 buckets") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p0.", - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p1.", - "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p0", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p1", + "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats", )) case model.PredicateColumns: originalVal := tk.MustQuery("select @@tidb_enable_column_tracking").Rows()[0][0].(string) @@ -2199,9 +2189,9 @@ func TestAnalyzeColumnsWithStaticPartitionTable(t *testing.T) { case model.ColumnList: tk.MustExec("analyze table t columns a with 2 topn, 2 buckets") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p0.", - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p1.", - "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p0", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p1", + "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats", )) case model.PredicateColumns: originalVal := tk.MustQuery("select @@tidb_enable_column_tracking").Rows()[0][0].(string) @@ -2305,8 +2295,8 @@ func TestAnalyzeColumnsWithExtendedStats(t *testing.T) { case model.ColumnList: tk.MustExec("analyze table t columns b with 2 topn, 2 buckets") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.", - "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t", + "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats", )) case model.PredicateColumns: originalVal := tk.MustQuery("select @@tidb_enable_column_tracking").Rows()[0][0].(string) @@ -2376,8 +2366,8 @@ func TestAnalyzeColumnsWithVirtualColumnIndex(t *testing.T) { case model.ColumnList: tk.MustExec("analyze table t columns b with 2 topn, 2 buckets") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.", - "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t", + "Warning 1105 Columns c are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats", )) case model.PredicateColumns: originalVal := tk.MustQuery("select @@tidb_enable_column_tracking").Rows()[0][0].(string) @@ -2524,8 +2514,8 @@ func TestAnalyzeColumnsErrorAndWarning(t *testing.T) { // If no predicate column is collected, analyze predicate columns gives a warning and falls back to analyze all columns. tk.MustExec("analyze table t predicate columns") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.", - "Warning 1105 No predicate column has been collected yet for table test.t so all columns are analyzed.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t", + "Warning 1105 No predicate column has been collected yet for table test.t so all columns are analyzed", )) rows := tk.MustQuery("show column_stats_usage where db_name = 'test' and table_name = 't' and last_analyzed_at is not null").Rows() require.Equal(t, 2, len(rows)) @@ -2549,8 +2539,8 @@ func TestAnalyzeColumnsErrorAndWarning(t *testing.T) { tk.MustExec("analyze table t predicate columns") } tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.", - "Warning 1105 Table test.t has version 1 statistics so all the columns must be analyzed to overwrite the current statistics.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t", + "Warning 1105 Table test.t has version 1 statistics so all the columns must be analyzed to overwrite the current statistics", )) }(val) } @@ -2612,3 +2602,207 @@ func TestRecordHistoryStatsAfterAnalyze(t *testing.T) { // 5. historical stats must be equal to the current stats require.JSONEq(t, string(jsOrigin), string(jsCur)) } + +func TestRecordHistoryStatsMetaAfterAnalyze(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("set @@tidb_analyze_version = 2") + tk.MustExec("set global tidb_enable_historical_stats = 0") + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("analyze table test.t") + + h := dom.StatsHandle() + is := dom.InfoSchema() + tableInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + + // 1. switch off the tidb_enable_historical_stats, and there is no record in table `mysql.stats_meta_history` + tk.MustQuery(fmt.Sprintf("select count(*) from mysql.stats_meta_history where table_id = '%d'", tableInfo.Meta().ID)).Check(testkit.Rows("0")) + // insert demo tuples, and there is no record either. + insertNums := 5 + for i := 0; i < insertNums; i++ { + tk.MustExec("insert into test.t (a,b) values (1,1), (2,2), (3,3)") + err := h.DumpStatsDeltaToKV(handle.DumpDelta) + require.NoError(t, err) + } + tk.MustQuery(fmt.Sprintf("select count(*) from mysql.stats_meta_history where table_id = '%d'", tableInfo.Meta().ID)).Check(testkit.Rows("0")) + + // 2. switch on the tidb_enable_historical_stats and insert tuples to produce count/modifyCount delta change. + tk.MustExec("set global tidb_enable_historical_stats = 1") + defer tk.MustExec("set global tidb_enable_historical_stats = 0") + + for i := 0; i < insertNums; i++ { + tk.MustExec("insert into test.t (a,b) values (1,1), (2,2), (3,3)") + err := h.DumpStatsDeltaToKV(handle.DumpDelta) + require.NoError(t, err) + } + tk.MustQuery(fmt.Sprintf("select modify_count, count from mysql.stats_meta_history where table_id = '%d' order by create_time", tableInfo.Meta().ID)).Sort().Check( + testkit.Rows("18 18", "21 21", "24 24", "27 27", "30 30")) +} + +func checkAnalyzeStatus(t *testing.T, tk *testkit.TestKit, expectedJobInfo, expectedStatus, comment string, timeLimit int64) { + rows := tk.MustQuery("show analyze status where table_schema = 'test' and table_name = 't' and partition_name = ''").Rows() + require.Equal(t, 1, len(rows), comment) + require.Equal(t, expectedJobInfo, rows[0][3], comment) + require.Equal(t, expectedStatus, rows[0][7], comment) + if timeLimit <= 0 { + return + } + const layout = "2006-01-02 15:04:05" + startTime, err := time.Parse(layout, rows[0][5].(string)) + require.NoError(t, err, comment) + endTime, err := time.Parse(layout, rows[0][6].(string)) + require.NoError(t, err, comment) + require.Less(t, endTime.Sub(startTime), time.Duration(timeLimit)*time.Second, comment) +} + +func testKillAutoAnalyze(t *testing.T, ver int) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + oriStart := tk.MustQuery("select @@tidb_auto_analyze_start_time").Rows()[0][0].(string) + oriEnd := tk.MustQuery("select @@tidb_auto_analyze_end_time").Rows()[0][0].(string) + handle.AutoAnalyzeMinCnt = 0 + defer func() { + handle.AutoAnalyzeMinCnt = 1000 + tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_start_time='%v'", oriStart)) + tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_end_time='%v'", oriEnd)) + }() + tk.MustExec(fmt.Sprintf("set @@tidb_analyze_version = %v", ver)) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, b int)") + tk.MustExec("insert into t values (1,2), (3,4)") + is := dom.InfoSchema() + h := dom.StatsHandle() + require.NoError(t, h.DumpStatsDeltaToKV(handle.DumpAll)) + tk.MustExec("analyze table t") + tk.MustExec("insert into t values (5,6), (7,8), (9, 10)") + require.NoError(t, h.DumpStatsDeltaToKV(handle.DumpAll)) + require.NoError(t, h.Update(is)) + table, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + tableInfo := table.Meta() + lastVersion := h.GetTableStats(tableInfo).Version + tk.MustExec("set global tidb_auto_analyze_start_time='00:00 +0000'") + tk.MustExec("set global tidb_auto_analyze_end_time='23:59 +0000'") + jobInfo := "auto analyze " + if ver == 1 { + jobInfo += "columns" + } else { + jobInfo += "table" + } + // kill auto analyze when it is pending/running/finished + for _, status := range []string{"pending", "running", "finished"} { + func() { + comment := fmt.Sprintf("kill %v analyze job", status) + statistics.ClearHistoryJobs() + mockAnalyzeStatus := "github.com/pingcap/tidb/executor/mockKill" + strings.Title(status) + if status == "running" { + mockAnalyzeStatus += "V" + strconv.Itoa(ver) + } + mockAnalyzeStatus += "AnalyzeJob" + require.NoError(t, failpoint.Enable(mockAnalyzeStatus, "return")) + defer func() { + require.NoError(t, failpoint.Disable(mockAnalyzeStatus)) + }() + if status == "pending" || status == "running" { + mockSlowAnalyze := "github.com/pingcap/tidb/executor/mockSlowAnalyzeV" + strconv.Itoa(ver) + require.NoError(t, failpoint.Enable(mockSlowAnalyze, "return")) + defer func() { + require.NoError(t, failpoint.Disable(mockSlowAnalyze)) + }() + } + require.True(t, h.HandleAutoAnalyze(is), comment) + currentVersion := h.GetTableStats(tableInfo).Version + if status == "finished" { + // If we kill a finished job, after kill command the status is still finished and the table stats are updated. + checkAnalyzeStatus(t, tk, jobInfo, "finished", comment, -1) + require.Greater(t, currentVersion, lastVersion, comment) + } else { + // If we kill a pending/running job, after kill command the status is failed and the table stats are not updated. + // We expect the killed analyze stops quickly. Specifically, end_time - start_time < 10s. + checkAnalyzeStatus(t, tk, jobInfo, "failed", comment, 10) + require.Equal(t, currentVersion, lastVersion, comment) + } + }() + } +} + +func TestKillAutoAnalyzeV1(t *testing.T) { + testKillAutoAnalyze(t, 1) +} + +func TestKillAutoAnalyzeV2(t *testing.T) { + testKillAutoAnalyze(t, 2) +} + +func TestKillAutoAnalyzeIndex(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + oriStart := tk.MustQuery("select @@tidb_auto_analyze_start_time").Rows()[0][0].(string) + oriEnd := tk.MustQuery("select @@tidb_auto_analyze_end_time").Rows()[0][0].(string) + handle.AutoAnalyzeMinCnt = 0 + defer func() { + handle.AutoAnalyzeMinCnt = 1000 + tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_start_time='%v'", oriStart)) + tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_end_time='%v'", oriEnd)) + }() + tk.MustExec("set @@tidb_analyze_version = 1") + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, b int)") + tk.MustExec("insert into t values (1,2), (3,4)") + is := dom.InfoSchema() + h := dom.StatsHandle() + require.NoError(t, h.DumpStatsDeltaToKV(handle.DumpAll)) + tk.MustExec("analyze table t") + tk.MustExec("alter table t add index idx(b)") + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + tblInfo := tbl.Meta() + lastVersion := h.GetTableStats(tblInfo).Version + tk.MustExec("set global tidb_auto_analyze_start_time='00:00 +0000'") + tk.MustExec("set global tidb_auto_analyze_end_time='23:59 +0000'") + const jobInfo = "auto analyze index idx" + // kill auto analyze when it is pending/running/finished + for _, status := range []string{"pending", "running", "finished"} { + func() { + comment := fmt.Sprintf("kill %v analyze job", status) + statistics.ClearHistoryJobs() + mockAnalyzeStatus := "github.com/pingcap/tidb/executor/mockKill" + strings.Title(status) + if status == "running" { + mockAnalyzeStatus += "AnalyzeIndexJob" + } else { + mockAnalyzeStatus += "AnalyzeJob" + } + require.NoError(t, failpoint.Enable(mockAnalyzeStatus, "return")) + defer func() { + require.NoError(t, failpoint.Disable(mockAnalyzeStatus)) + }() + if status == "pending" || status == "running" { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/executor/mockSlowAnalyzeIndex", "return")) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/executor/mockSlowAnalyzeIndex")) + }() + } + require.True(t, h.HandleAutoAnalyze(dom.InfoSchema()), comment) + currentVersion := h.GetTableStats(tblInfo).Version + if status == "finished" { + // If we kill a finished job, after kill command the status is still finished and the index stats are updated. + checkAnalyzeStatus(t, tk, jobInfo, "finished", comment, -1) + require.Greater(t, currentVersion, lastVersion, comment) + } else { + // If we kill a pending/running job, after kill command the status is failed and the index stats are not updated. + // We expect the killed analyze stops quickly. Specifically, end_time - start_time < 10s. + checkAnalyzeStatus(t, tk, jobInfo, "failed", comment, 10) + require.Equal(t, currentVersion, lastVersion, comment) + } + }() + } +} diff --git a/executor/batch_point_get.go b/executor/batch_point_get.go index 871d6452257f9..8abf8843b26bf 100644 --- a/executor/batch_point_get.go +++ b/executor/batch_point_get.go @@ -117,6 +117,9 @@ func (e *BatchPointGetExec) Open(context.Context) error { } else { snapshot = e.ctx.GetSnapshotWithTS(e.snapshotTS) } + if e.ctx.GetSessionVars().StmtCtx.RCCheckTS { + snapshot.SetOption(kv.IsolationLevel, kv.RCCheckTS) + } if e.cacheTable != nil { snapshot = cacheTableSnapshot{snapshot, e.cacheTable} } @@ -129,7 +132,7 @@ func (e *BatchPointGetExec) Open(context.Context) error { stmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) } replicaReadType := e.ctx.GetSessionVars().GetReplicaRead() - if replicaReadType.IsFollowerRead() { + if replicaReadType.IsFollowerRead() && !e.ctx.GetSessionVars().StmtCtx.RCCheckTS { snapshot.SetOption(kv.ReplicaRead, replicaReadType) } snapshot.SetOption(kv.TaskID, stmtCtx.TaskID) diff --git a/executor/bind.go b/executor/bind.go index 08f2b7bc6e523..aed1ee3460e68 100644 --- a/executor/bind.go +++ b/executor/bind.go @@ -37,6 +37,7 @@ type SQLBindExec struct { db string isGlobal bool bindAst ast.StmtNode + newStatus string } // Next implements the Executor Next interface. @@ -55,6 +56,8 @@ func (e *SQLBindExec) Next(ctx context.Context, req *chunk.Chunk) error { return e.evolveBindings() case plannercore.OpReloadBindings: return e.reloadBindings() + case plannercore.OpSetBindingStatus: + return e.setBindingStatus() default: return errors.Errorf("unsupported SQL bind operation: %v", e.sqlBindOp) } @@ -77,6 +80,23 @@ func (e *SQLBindExec) dropSQLBind() error { return domain.GetDomain(e.ctx).BindHandle().DropBindRecord(e.normdOrigSQL, e.db, bindInfo) } +func (e *SQLBindExec) setBindingStatus() error { + var bindInfo *bindinfo.Binding + if e.bindSQL != "" { + bindInfo = &bindinfo.Binding{ + BindSQL: e.bindSQL, + Charset: e.charset, + Collation: e.collation, + } + } + ok, err := domain.GetDomain(e.ctx).BindHandle().SetBindRecordStatus(e.normdOrigSQL, bindInfo, e.newStatus) + if err == nil && !ok { + warningMess := errors.New("There are no bindings can be set the status. Please check the SQL text") + e.ctx.GetSessionVars().StmtCtx.AppendWarning(warningMess) + } + return err +} + func (e *SQLBindExec) createSQLBind() error { // For audit log, SQLBindExec execute "explain" statement internally, save and recover stmtctx // is necessary to avoid 'create binding' been recorded as 'explain'. @@ -89,7 +109,7 @@ func (e *SQLBindExec) createSQLBind() error { BindSQL: e.bindSQL, Charset: e.charset, Collation: e.collation, - Status: bindinfo.Using, + Status: bindinfo.Enabled, Source: bindinfo.Manual, } record := &bindinfo.BindRecord{ diff --git a/executor/brie.go b/executor/brie.go index 3920254e2b869..be4cb1a54d7df 100644 --- a/executor/brie.go +++ b/executor/brie.go @@ -15,6 +15,7 @@ package executor import ( + "bytes" "context" "net/url" "strings" @@ -25,13 +26,6 @@ import ( "github.com/pingcap/errors" backuppb "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/kvproto/pkg/encryptionpb" - filter "github.com/pingcap/tidb-tools/pkg/table-filter" - "github.com/pingcap/tidb/parser/ast" - "github.com/pingcap/tidb/parser/model" - "github.com/pingcap/tidb/parser/mysql" - "github.com/pingcap/tidb/parser/terror" - pd "github.com/tikv/pd/client" - "github.com/pingcap/tidb/br/pkg/glue" "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/br/pkg/task" @@ -40,6 +34,11 @@ import ( "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/meta/autoid" + "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" @@ -47,7 +46,9 @@ import ( "github.com/pingcap/tidb/util/printer" "github.com/pingcap/tidb/util/sem" "github.com/pingcap/tidb/util/sqlexec" + filter "github.com/pingcap/tidb/util/table-filter" "github.com/tikv/client-go/v2/oracle" + pd "github.com/tikv/pd/client" ) const clearInterval = 10 * time.Minute @@ -285,9 +286,9 @@ func (b *executorBuilder) buildBRIE(s *ast.BRIEStmt, schema *expression.Schema) cfg.TableFilter = filter.All() } - if tidbCfg.LowerCaseTableNames != 0 { - cfg.TableFilter = filter.CaseInsensitive(cfg.TableFilter) - } + // table options are stored in original case, but comparison + // is expected to be performed insensitive. + cfg.TableFilter = filter.CaseInsensitive(cfg.TableFilter) switch s.Kind { case ast.BRIEKindBackup: @@ -475,6 +476,12 @@ func (gs *tidbGlueSession) ExecuteInternal(ctx context.Context, sql string, args // CreateDatabase implements glue.Session func (gs *tidbGlueSession) CreateDatabase(ctx context.Context, schema *model.DBInfo) error { d := domain.GetDomain(gs.se).DDL() + // 512 is defaultCapOfCreateTable. + result := bytes.NewBuffer(make([]byte, 0, 512)) + if err := ConstructResultOfShowCreateDatabase(gs.se, schema, true, result); err != nil { + return err + } + gs.se.SetValue(sessionctx.QueryString, result.String()) schema = schema.Clone() if len(schema.Charset) == 0 { schema.Charset = mysql.DefaultCharset @@ -486,6 +493,13 @@ func (gs *tidbGlueSession) CreateDatabase(ctx context.Context, schema *model.DBI func (gs *tidbGlueSession) CreateTable(ctx context.Context, dbName model.CIStr, table *model.TableInfo) error { d := domain.GetDomain(gs.se).DDL() + // 512 is defaultCapOfCreateTable. + result := bytes.NewBuffer(make([]byte, 0, 512)) + if err := ConstructResultOfShowCreateTable(gs.se, table, autoid.Allocators{}, result); err != nil { + return err + } + gs.se.SetValue(sessionctx.QueryString, result.String()) + // Clone() does not clone partitions yet :( table = table.Clone() if table.Partition != nil { @@ -497,10 +511,23 @@ func (gs *tidbGlueSession) CreateTable(ctx context.Context, dbName model.CIStr, return d.CreateTableWithInfo(gs.se, dbName, table, ddl.OnExistIgnore) } +// CreatePlacementPolicy implements glue.Session +func (gs *tidbGlueSession) CreatePlacementPolicy(ctx context.Context, policy *model.PolicyInfo) error { + gs.se.SetValue(sessionctx.QueryString, ConstructResultOfShowCreatePlacementPolicy(policy)) + d := domain.GetDomain(gs.se).DDL() + // the default behaviour is ignoring duplicated policy during restore. + return d.CreatePlacementPolicyWithInfo(gs.se, policy, ddl.OnExistIgnore) +} + // Close implements glue.Session func (gs *tidbGlueSession) Close() { } +// GetGlobalVariables implements glue.Session. +func (gs *tidbGlueSession) GetGlobalVariable(name string) (string, error) { + return gs.se.GetSessionVars().GlobalVarsAccessor.GetTiDBTableValue(name) +} + // Open implements glue.Glue func (gs *tidbGlueSession) Open(string, pd.SecurityOption) (kv.Storage, error) { return gs.se.GetStore(), nil diff --git a/executor/builder.go b/executor/builder.go index 7ff7b3445bfff..d5881f6fd4a49 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -152,7 +152,6 @@ func (b *MockExecutorBuilder) Build(p plannercore.Plan) Executor { } func (b *executorBuilder) build(p plannercore.Plan) Executor { - var e Executor switch v := p.(type) { case nil: return nil @@ -267,13 +266,13 @@ func (b *executorBuilder) build(p plannercore.Plan) Executor { case *plannercore.Analyze: return b.buildAnalyze(v) case *plannercore.PhysicalTableReader: - e = b.buildTableReader(v) + return b.buildTableReader(v) case *plannercore.PhysicalTableSample: return b.buildTableSample(v) case *plannercore.PhysicalIndexReader: - e = b.buildIndexReader(v) + return b.buildIndexReader(v) case *plannercore.PhysicalIndexLookUpReader: - e = b.buildIndexLookUpReader(v) + return b.buildIndexLookUpReader(v) case *plannercore.PhysicalWindow: return b.buildWindow(v) case *plannercore.PhysicalShuffle: @@ -304,57 +303,6 @@ func (b *executorBuilder) build(p plannercore.Plan) Executor { b.err = ErrUnknownPlan.GenWithStack("Unknown Plan %T", p) return nil } - - if tblExec, ok := e.(dataSourceExecutor); ok { - tbl := tblExec.Table() - tableInfo := tbl.Meta() - // When reading from a cached table, check whether it satisfies the conditions of read cache. - if tableInfo.TableCacheStatusType == model.TableCacheStatusEnable { - physicalPlan := p.(plannercore.PhysicalPlan) - return b.buildCachedTableExecutor(tbl, physicalPlan, e) - } - } - - return e -} - -// buildCachedTableExecutor adds an UnionScan to the original Executor to make the reader read from table cache. -func (b *executorBuilder) buildCachedTableExecutor(tbl table.Table, p plannercore.PhysicalPlan, e Executor) Executor { - if b.ctx.GetSessionVars().SnapshotTS != 0 || b.ctx.GetSessionVars().StmtCtx.IsStaleness { - return e - } - - cachedTable := tbl.(table.CachedTable) - startTS, err := b.getSnapshotTS() - if err != nil { - b.err = errors.Trace(err) - return nil - } - - leaseDuration := time.Duration(variable.TableCacheLease.Load()) * time.Second - sessionVars := b.ctx.GetSessionVars() - // Use the TS of the transaction to determine whether the cache can be used. - cacheData := cachedTable.TryReadFromCache(startTS, leaseDuration) - if cacheData != nil { - sessionVars.StmtCtx.ReadFromTableCache = true - switch raw := e.(type) { - case *TableReaderExecutor: - raw.dummy = true - case *IndexReaderExecutor: - raw.dummy = true - case *IndexLookUpExecutor: - raw.dummy = true - } - us := plannercore.PhysicalUnionScan{CacheTable: cacheData}.Init(b.ctx, nil, -1) - us.SetChildren(p) - e = b.buildUnionScanFromReader(e, us) - } else { - if !b.inUpdateStmt && !b.inDeleteStmt && !b.inInsertStmt && !sessionVars.StmtCtx.InExplainStmt { - store := b.ctx.GetStore() - cachedTable.UpdateLockForRead(context.Background(), store, startTS, leaseDuration) - } - } - return e } func (b *executorBuilder) buildCancelDDLJobs(v *plannercore.CancelDDLJobs) Executor { @@ -362,14 +310,6 @@ func (b *executorBuilder) buildCancelDDLJobs(v *plannercore.CancelDDLJobs) Execu baseExecutor: newBaseExecutor(b.ctx, v.Schema(), v.ID()), jobIDs: v.JobIDs, } - // Run within a new transaction. If it runs within the session transaction, commit failure won't be reported to the user. - errInTxn := kv.RunInNewTxn(context.Background(), e.ctx.GetStore(), true, func(ctx context.Context, txn kv.Transaction) (err error) { - e.errs, err = admin.CancelJobs(txn, e.jobIDs) - return - }) - if errInTxn != nil { - b.err = errInTxn - } return e } @@ -555,7 +495,7 @@ func (b *executorBuilder) buildRecoverIndex(v *plannercore.RecoverIndex) Executo idxName := strings.ToLower(v.IndexName) index := tables.GetWritableIndexByName(idxName, t) if index == nil { - b.err = errors.Errorf("index `%v` is not found in table `%v`.", v.IndexName, v.Table.Name.O) + b.err = errors.Errorf("index `%v` is not found in table `%v`", v.IndexName, v.Table.Name.O) return nil } e := &RecoverIndexExec{ @@ -615,7 +555,7 @@ func (b *executorBuilder) buildCleanupIndex(v *plannercore.CleanupIndex) Executo } if index == nil { - b.err = errors.Errorf("index `%v` is not found in table `%v`.", v.IndexName, v.Table.Name.O) + b.err = errors.Errorf("index `%v` is not found in table `%v`", v.IndexName, v.Table.Name.O) return nil } e := &CleanupIndexExec{ @@ -717,10 +657,10 @@ func (b *executorBuilder) buildSelectLock(v *plannercore.PhysicalLock) Executor return src } e := &SelectLockExec{ - baseExecutor: newBaseExecutor(b.ctx, v.Schema(), v.ID(), src), - Lock: v.Lock, - tblID2Handle: v.TblID2Handle, - partitionedTable: v.PartitionedTable, + baseExecutor: newBaseExecutor(b.ctx, v.Schema(), v.ID(), src), + Lock: v.Lock, + tblID2Handle: v.TblID2Handle, + tblID2PhysTblIDCol: v.TblID2PhysTblIDCol, } // filter out temporary tables because they do not store any record in tikv and should not write any lock @@ -736,16 +676,6 @@ func (b *executorBuilder) buildSelectLock(v *plannercore.PhysicalLock) Executor } } - if len(e.partitionedTable) > 0 { - schema := v.Schema() - e.tblID2PIDColumnIndex = make(map[int64]int) - for i := 0; i < len(v.ExtraPIDInfo.Columns); i++ { - col := v.ExtraPIDInfo.Columns[i] - tblID := v.ExtraPIDInfo.TblIDs[i] - offset := schema.ColumnIndex(col) - e.tblID2PIDColumnIndex[tblID] = offset - } - } return e } @@ -1136,7 +1066,6 @@ func (b *executorBuilder) buildUnionScanFromReader(reader Executor, v *plannerco return x } us := &UnionScanExec{baseExecutor: newBaseExecutor(b.ctx, v.Schema(), v.ID(), reader)} - us.cacheTable = v.CacheTable // Get the handle column index of the below Plan. us.belowHandleCols = v.HandleCols us.mutableRow = chunk.MutRowFromTypes(retTypes(us)) @@ -1152,6 +1081,13 @@ func (b *executorBuilder) buildUnionScanFromReader(reader Executor, v *plannerco us.collators = append(us.collators, collate.GetCollator(tp.Collate)) } + startTS, err := b.getSnapshotTS() + sessionVars := b.ctx.GetSessionVars() + if err != nil { + b.err = err + return nil + } + switch x := reader.(type) { case *TableReaderExecutor: us.desc = x.desc @@ -1159,6 +1095,7 @@ func (b *executorBuilder) buildUnionScanFromReader(reader Executor, v *plannerco us.columns = x.columns us.table = x.table us.virtualColumnIndex = x.virtualColumnIndex + us.handleCachedTable(b, x, sessionVars, startTS) case *IndexReaderExecutor: us.desc = x.desc for _, ic := range x.index.Columns { @@ -1172,6 +1109,7 @@ func (b *executorBuilder) buildUnionScanFromReader(reader Executor, v *plannerco us.conditions, us.conditionsWithVirCol = plannercore.SplitSelCondsWithVirtualColumn(v.Conditions) us.columns = x.columns us.table = x.table + us.handleCachedTable(b, x, sessionVars, startTS) case *IndexLookUpExecutor: us.desc = x.desc for _, ic := range x.index.Columns { @@ -1186,6 +1124,7 @@ func (b *executorBuilder) buildUnionScanFromReader(reader Executor, v *plannerco us.columns = x.columns us.table = x.table us.virtualColumnIndex = buildVirtualColumnIndex(us.Schema(), us.columns) + us.handleCachedTable(b, x, sessionVars, startTS) case *IndexMergeReaderExecutor: // IndexMergeReader doesn't care order for now. So we will not set desc and useIndex. us.conditions, us.conditionsWithVirCol = plannercore.SplitSelCondsWithVirtualColumn(v.Conditions) @@ -1199,6 +1138,31 @@ func (b *executorBuilder) buildUnionScanFromReader(reader Executor, v *plannerco return us } +type bypassDataSourceExecutor interface { + dataSourceExecutor + setDummy() +} + +func (us *UnionScanExec) handleCachedTable(b *executorBuilder, x bypassDataSourceExecutor, vars *variable.SessionVars, startTS uint64) { + tbl := x.Table() + if tbl.Meta().TableCacheStatusType == model.TableCacheStatusEnable { + cachedTable := tbl.(table.CachedTable) + // Determine whether the cache can be used. + leaseDuration := time.Duration(variable.TableCacheLease.Load()) * time.Second + cacheData := cachedTable.TryReadFromCache(startTS, leaseDuration) + if cacheData != nil { + vars.StmtCtx.ReadFromTableCache = true + x.setDummy() + us.cacheTable = cacheData + } else { + if !b.inUpdateStmt && !b.inDeleteStmt && !b.inInsertStmt && !vars.StmtCtx.InExplainStmt { + store := b.ctx.GetStore() + cachedTable.UpdateLockForRead(context.Background(), store, startTS, leaseDuration) + } + } + } +} + // buildMergeJoin builds MergeJoinExec executor. func (b *executorBuilder) buildMergeJoin(v *plannercore.PhysicalMergeJoin) Executor { leftExec := b.build(v.Children()[0]) @@ -2131,7 +2095,7 @@ func getAssignFlag(ctx sessionctx.Context, v *plannercore.Update, schemaLen int) } for _, assign := range v.OrderedList { if !ctx.GetSessionVars().AllowWriteRowID && assign.Col.ID == model.ExtraHandleID { - return nil, errors.Errorf("insert, update and replace statements for _tidb_rowid are not supported.") + return nil, errors.Errorf("insert, update and replace statements for _tidb_rowid are not supported") } tblIdx, found := v.TblColPosInfos.FindTblIdx(assign.Col.Index) if found { @@ -2204,6 +2168,15 @@ func (b *executorBuilder) refreshForUpdateTSForRC() error { defer func() { b.snapshotTS = b.ctx.GetSessionVars().TxnCtx.GetForUpdateTS() }() + // The first time read-consistency read is executed and `RcReadCheckTS` is enabled, try to use + // the last valid ts as the for update read ts. + if b.ctx.GetSessionVars().StmtCtx.RCCheckTS { + rcReadTS := b.ctx.GetSessionVars().TxnCtx.LastRcReadTs + if rcReadTS == 0 { + rcReadTS = b.ctx.GetSessionVars().TxnCtx.StartTS + } + return UpdateForUpdateTS(b.ctx, rcReadTS) + } future := b.ctx.GetSessionVars().TxnCtx.GetStmtFutureForRC() if future == nil { return nil @@ -2385,7 +2358,7 @@ func (b *executorBuilder) buildAnalyzeSamplingPushdown(task plannercore.AnalyzeC *sampleRate = b.getAdjustedSampleRate(b.ctx, task) if task.PartitionName != "" { sc.AppendNote(errors.Errorf( - "Analyze use auto adjusted sample rate %f for table %s.%s's partition %s.", + "Analyze use auto adjusted sample rate %f for table %s.%s's partition %s", *sampleRate, task.DBName, task.TableName, @@ -2393,7 +2366,7 @@ func (b *executorBuilder) buildAnalyzeSamplingPushdown(task plannercore.AnalyzeC )) } else { sc.AppendNote(errors.Errorf( - "Analyze use auto adjusted sample rate %f for table %s.%s.", + "Analyze use auto adjusted sample rate %f for table %s.%s", *sampleRate, task.DBName, task.TableName, @@ -2726,7 +2699,6 @@ func (b *executorBuilder) buildAnalyze(v *plannercore.Analyze) Executor { e := &AnalyzeExec{ baseExecutor: newBaseExecutor(b.ctx, v.Schema(), v.ID()), tasks: make([]*analyzeTask, 0, len(v.ColTasks)+len(v.IdxTasks)), - wg: &sync.WaitGroup{}, opts: v.Opts, OptionsMap: v.OptionsMap, } @@ -3137,7 +3109,10 @@ func buildNoRangeTableReader(b *executorBuilder, v *plannercore.PhysicalTableRea if err != nil { return nil, err } - ts := v.GetTableScan() + ts, err := v.GetTableScan() + if err != nil { + return nil, err + } if err = b.validCanReadTemporaryOrCacheTable(ts.Table); err != nil { return nil, err } @@ -3168,10 +3143,7 @@ func buildNoRangeTableReader(b *executorBuilder, v *plannercore.PhysicalTableRea plans: v.TablePlans, tablePlan: v.GetTablePlan(), storeType: v.StoreType, - batchCop: v.BatchCop, - } - if tbl.Meta().Partition != nil { - e.extraPIDColumnIndex = extraPIDColumnIndex(v.Schema()) + batchCop: v.ReadReqType == plannercore.BatchCop, } e.buildVirtualColumnInfo() if containsLimit(dagReq.Executors) { @@ -3203,15 +3175,6 @@ func buildNoRangeTableReader(b *executorBuilder, v *plannercore.PhysicalTableRea return e, nil } -func extraPIDColumnIndex(schema *expression.Schema) offsetOptional { - for idx, col := range schema.Columns { - if col.ID == model.ExtraPidColID { - return newOffset(idx) - } - } - return 0 -} - func (b *executorBuilder) buildMPPGather(v *plannercore.PhysicalTableReader) Executor { startTs, err := b.getSnapshotTS() if err != nil { @@ -3247,13 +3210,16 @@ func (b *executorBuilder) buildTableReader(v *plannercore.PhysicalTableReader) E if useMPPExecution(b.ctx, v) { return b.buildMPPGather(v) } + ts, err := v.GetTableScan() + if err != nil { + b.err = err + return nil + } ret, err := buildNoRangeTableReader(b, v) if err != nil { b.err = err return nil } - - ts := v.GetTableScan() if err = b.validCanReadTemporaryOrCacheTable(ts.Table); err != nil { b.err = err return nil @@ -3618,9 +3584,6 @@ func buildNoRangeIndexLookUpReader(b *executorBuilder, v *plannercore.PhysicalIn tblPlans: v.TablePlans, PushedLimit: v.PushedLimit, } - if ok, _ := ts.IsPartition(); ok { - e.extraPIDColumnIndex = extraPIDColumnIndex(v.Schema()) - } if containsLimit(indexReq.Executors) { e.feedback = statistics.NewQueryFeedback(0, nil, 0, is.Desc) @@ -3921,26 +3884,37 @@ func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Conte return nil, err } tbInfo := e.table.Meta() - if v.IsCommonHandle { - if tbInfo.GetPartitionInfo() == nil || !builder.ctx.GetSessionVars().UseDynamicPartitionPrune() { + if tbInfo.GetPartitionInfo() == nil || !builder.ctx.GetSessionVars().UseDynamicPartitionPrune() { + if v.IsCommonHandle { kvRanges, err := buildKvRangesForIndexJoin(e.ctx, getPhysicalTableID(e.table), -1, lookUpContents, indexRanges, keyOff2IdxOff, cwc, memTracker, interruptSignal) if err != nil { return nil, err } return builder.buildTableReaderFromKvRanges(ctx, e, kvRanges) } - - tbl, _ := builder.is.TableByID(tbInfo.ID) - pt := tbl.(table.PartitionedTable) - pe, err := tbl.(interface { - PartitionExpr() (*tables.PartitionExpr, error) - }).PartitionExpr() - if err != nil { - return nil, err - } - var kvRanges []kv.KeyRange + handles, _ := dedupHandles(lookUpContents) + return builder.buildTableReaderFromHandles(ctx, e, handles, canReorderHandles) + } + tbl, _ := builder.is.TableByID(tbInfo.ID) + pt := tbl.(table.PartitionedTable) + pe, err := tbl.(interface { + PartitionExpr() (*tables.PartitionExpr, error) + }).PartitionExpr() + if err != nil { + return nil, err + } + partitionInfo := &v.PartitionInfo + usedPartitionList, err := partitionPruning(e.ctx, pt, partitionInfo.PruningConds, partitionInfo.PartitionNames, partitionInfo.Columns, partitionInfo.ColumnNames) + if err != nil { + return nil, err + } + usedPartitions := make(map[int64]table.PhysicalTable, len(usedPartitionList)) + for _, p := range usedPartitionList { + usedPartitions[p.GetPhysicalID()] = p + } + var kvRanges []kv.KeyRange + if v.IsCommonHandle { if len(lookUpContents) > 0 && keyColumnsIncludeAllPartitionColumns(lookUpContents[0].keyCols, pe) { - // In this case we can use dynamic partition pruning. locateKey := make([]types.Datum, e.Schema().Len()) kvRanges = make([]kv.KeyRange, 0, len(lookUpContents)) for _, content := range lookUpContents { @@ -3952,6 +3926,9 @@ func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Conte return nil, err } pid := p.GetPhysicalID() + if _, ok := usedPartitions[pid]; !ok { + continue + } tmp, err := buildKvRangesForIndexJoin(e.ctx, pid, -1, []*indexJoinLookUpContent{content}, indexRanges, keyOff2IdxOff, cwc, nil, interruptSignal) if err != nil { return nil, err @@ -3959,15 +3936,9 @@ func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Conte kvRanges = append(kvRanges, tmp...) } } else { - partitionInfo := &v.PartitionInfo - partitions, err := partitionPruning(e.ctx, pt, partitionInfo.PruningConds, partitionInfo.PartitionNames, partitionInfo.Columns, partitionInfo.ColumnNames) - if err != nil { - return nil, err - } - kvRanges = make([]kv.KeyRange, 0, len(partitions)*len(lookUpContents)) - for _, p := range partitions { - pid := p.GetPhysicalID() - tmp, err := buildKvRangesForIndexJoin(e.ctx, pid, -1, lookUpContents, indexRanges, keyOff2IdxOff, cwc, memTracker, interruptSignal) + kvRanges = make([]kv.KeyRange, 0, len(usedPartitions)*len(lookUpContents)) + for _, p := range usedPartitionList { + tmp, err := buildKvRangesForIndexJoin(e.ctx, p.GetPhysicalID(), -1, lookUpContents, indexRanges, keyOff2IdxOff, cwc, memTracker, interruptSignal) if err != nil { return nil, err } @@ -3978,22 +3949,7 @@ func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Conte } handles, lookUpContents := dedupHandles(lookUpContents) - if tbInfo.GetPartitionInfo() == nil { - return builder.buildTableReaderFromHandles(ctx, e, handles, canReorderHandles) - } - if !builder.ctx.GetSessionVars().UseDynamicPartitionPrune() { - return builder.buildTableReaderFromHandles(ctx, e, handles, canReorderHandles) - } - tbl, _ := builder.is.TableByID(tbInfo.ID) - pt := tbl.(table.PartitionedTable) - pe, err := tbl.(interface { - PartitionExpr() (*tables.PartitionExpr, error) - }).PartitionExpr() - if err != nil { - return nil, err - } - var kvRanges []kv.KeyRange if len(lookUpContents) > 0 && keyColumnsIncludeAllPartitionColumns(lookUpContents[0].keyCols, pe) { locateKey := make([]types.Datum, e.Schema().Len()) kvRanges = make([]kv.KeyRange, 0, len(lookUpContents)) @@ -4006,19 +3962,16 @@ func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Conte return nil, err } pid := p.GetPhysicalID() + if _, ok := usedPartitions[pid]; !ok { + continue + } handle := kv.IntHandle(content.keys[0].GetInt64()) tmp := distsql.TableHandlesToKVRanges(pid, []kv.Handle{handle}) kvRanges = append(kvRanges, tmp...) } } else { - partitionInfo := &v.PartitionInfo - partitions, err := partitionPruning(e.ctx, pt, partitionInfo.PruningConds, partitionInfo.PartitionNames, partitionInfo.Columns, partitionInfo.ColumnNames) - if err != nil { - return nil, err - } - for _, p := range partitions { - pid := p.GetPhysicalID() - tmp := distsql.TableHandlesToKVRanges(pid, handles) + for _, p := range usedPartitionList { + tmp := distsql.TableHandlesToKVRanges(p.GetPhysicalID(), handles) kvRanges = append(kvRanges, tmp...) } } @@ -4066,7 +4019,7 @@ func (h kvRangeBuilderFromRangeAndPartition) buildKeyRangeSeparately(ranges []*r return pids, ret, nil } -func (h kvRangeBuilderFromRangeAndPartition) buildKeyRange(_ int64, ranges []*ranger.Range) ([]kv.KeyRange, error) { +func (h kvRangeBuilderFromRangeAndPartition) buildKeyRange(ranges []*ranger.Range) ([]kv.KeyRange, error) { var ret []kv.KeyRange for _, p := range h.partitions { pid := p.GetPhysicalID() @@ -4553,6 +4506,7 @@ func (b *executorBuilder) buildSQLBindExec(v *plannercore.SQLBindPlan) Executor db: v.Db, isGlobal: v.IsGlobal, bindAst: v.BindStmt, + newStatus: v.NewStatus, } return e } diff --git a/executor/change.go b/executor/change.go index 7233863501660..a261cbf9c14c9 100644 --- a/executor/change.go +++ b/executor/change.go @@ -19,9 +19,9 @@ import ( "strings" "github.com/pingcap/errors" - "github.com/pingcap/tidb-tools/tidb-binlog/node" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/tidb-binlog/node" "github.com/pingcap/tidb/util/chunk" ) diff --git a/executor/chunk_size_control_test.go b/executor/chunk_size_control_test.go index 310e5092695bd..bae8614e5ab3d 100644 --- a/executor/chunk_size_control_test.go +++ b/executor/chunk_size_control_test.go @@ -19,33 +19,32 @@ import ( "fmt" "strings" "sync" + "testing" "time" - . "github.com/pingcap/check" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/tablecodec" + "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" - "github.com/pingcap/tidb/util/testkit" + "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/testutils" "github.com/tikv/client-go/v2/tikv" "github.com/tikv/client-go/v2/tikvrpc" ) -var ( - _ = Suite(&testChunkSizeControlSuite{}) -) - +// nolint: unused, deadcode type testSlowClient struct { sync.RWMutex tikv.Client regionDelay map[uint64]time.Duration } +// nolint: unused, deadcode func (c *testSlowClient) SendRequest(ctx context.Context, addr string, req *tikvrpc.Request, timeout time.Duration) (*tikvrpc.Response, error) { regionID := req.RegionId delay := c.GetDelay(regionID) @@ -55,12 +54,14 @@ func (c *testSlowClient) SendRequest(ctx context.Context, addr string, req *tikv return c.Client.SendRequest(ctx, addr, req, timeout) } +// nolint: unused, deadcode func (c *testSlowClient) SetDelay(regionID uint64, dur time.Duration) { c.Lock() defer c.Unlock() c.regionDelay[regionID] = dur } +// nolint: unused, deadcode func (c *testSlowClient) GetDelay(regionID uint64) time.Duration { c.RLock() defer c.RUnlock() @@ -72,9 +73,9 @@ func manipulateCluster(cluster testutils.Cluster, splitKeys [][]byte) []uint64 { if len(splitKeys) == 0 { return nil } - region, _ := cluster.GetRegionByKey(splitKeys[0]) + region, _, _ := cluster.GetRegionByKey(splitKeys[0]) for _, key := range splitKeys { - if r, _ := cluster.GetRegionByKey(key); r.Id != region.Id { + if r, _, _ := cluster.GetRegionByKey(key); r.Id != region.Id { panic("all split keys should belong to the same region") } } @@ -95,146 +96,138 @@ func generateTableSplitKeyForInt(tid int64, splitNum []int) [][]byte { return results } -func generateIndexSplitKeyForInt(tid, idx int64, splitNum []int) [][]byte { - results := make([][]byte, 0, len(splitNum)) - for _, num := range splitNum { - d := new(types.Datum) - d.SetInt64(int64(num)) - b, err := codec.EncodeKey(nil, nil, *d) - if err != nil { - panic(err) - } - results = append(results, tablecodec.EncodeIndexSeekKey(tid, idx, b)) - } - return results -} - -type testChunkSizeControlKit struct { - store kv.Storage - dom *domain.Domain - tk *testkit.TestKit - client *testSlowClient - cluster testutils.Cluster -} - -type testChunkSizeControlSuite struct { - m map[string]*testChunkSizeControlKit -} - -func (s *testChunkSizeControlSuite) SetUpSuite(c *C) { - c.Skip("not stable because coprocessor may result in goroutine leak") - tableSQLs := map[string]string{} - tableSQLs["Limit&TableScan"] = "create table t (a int, primary key (a))" - tableSQLs["Limit&IndexScan"] = "create table t (a int, index idx_a(a))" - - s.m = make(map[string]*testChunkSizeControlKit) - for name, sql := range tableSQLs { - // BootstrapSession is not thread-safe, so we have to prepare all resources in SetUp. - kit := new(testChunkSizeControlKit) - s.m[name] = kit - kit.client = &testSlowClient{regionDelay: make(map[uint64]time.Duration)} - - var err error - kit.store, err = mockstore.NewMockStore( - mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithSingleStore(c) - kit.cluster = c - }), - mockstore.WithClientHijacker(func(c tikv.Client) tikv.Client { - kit.client.Client = c - return kit.client - }), - ) - c.Assert(err, IsNil) - - // init domain - kit.dom, err = session.BootstrapSession(kit.store) - c.Assert(err, IsNil) - - // create the test table - kit.tk = testkit.NewTestKitWithInit(c, kit.store) - kit.tk.MustExec(sql) - } -} - -func (s *testChunkSizeControlSuite) getKit(name string) ( - kv.Storage, *domain.Domain, *testkit.TestKit, *testSlowClient, testutils.Cluster) { - x := s.m[name] - return x.store, x.dom, x.tk, x.client, x.cluster -} - -func (s *testChunkSizeControlSuite) TestLimitAndTableScan(c *C) { - _, dom, tk, client, cluster := s.getKit("Limit&TableScan") - defer client.Close() - tbl, err := dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) +func TestLimitAndTableScan(t *testing.T) { + t.Skip("not stable because coprocessor may result in goroutine leak") + kit, clean := createChunkSizeControlKit(t, "create table t (a int, primary key (a))") + defer clean() + tbl, err := kit.dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) tid := tbl.Meta().ID // construct two regions split by 100 splitKeys := generateTableSplitKeyForInt(tid, []int{100}) - regionIDs := manipulateCluster(cluster, splitKeys) + regionIDs := manipulateCluster(kit.cluster, splitKeys) noDelayThreshold := time.Millisecond * 100 delayDuration := time.Second delayThreshold := delayDuration * 9 / 10 - tk.MustExec("insert into t values (1)") // insert one record into region1, and set a delay duration - client.SetDelay(regionIDs[0], delayDuration) + kit.tk.MustExec("insert into t values (1)") // insert one record into region1, and set a delay duration + kit.client.SetDelay(regionIDs[0], delayDuration) - results := tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 1") - cost := s.parseTimeCost(c, results.Rows()[0]) - c.Assert(cost, Not(Less), delayThreshold) // have to wait for region1 + results := kit.tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 1") + cost := parseTimeCost(t, results.Rows()[0]) + require.GreaterOrEqual(t, cost, delayThreshold) // have to wait for region1 - tk.MustExec("insert into t values (101)") // insert one record into region2 - results = tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 1") - cost = s.parseTimeCost(c, results.Rows()[0]) - c.Assert(cost, Less, noDelayThreshold) // region2 return quickly + kit.tk.MustExec("insert into t values (101)") // insert one record into region2 + results = kit.tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 1") + cost = parseTimeCost(t, results.Rows()[0]) + require.Less(t, cost, noDelayThreshold) // region2 return quickly - results = tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 2") - cost = s.parseTimeCost(c, results.Rows()[0]) - c.Assert(cost, Not(Less), delayThreshold) // have to wait + results = kit.tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 2") + cost = parseTimeCost(t, results.Rows()[0]) + require.GreaterOrEqual(t, cost, delayThreshold) // have to wait } -func (s *testChunkSizeControlSuite) TestLimitAndIndexScan(c *C) { - _, dom, tk, client, cluster := s.getKit("Limit&IndexScan") - defer client.Close() - tbl, err := dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) +func TestLimitAndIndexScan(t *testing.T) { + t.Skip("not stable because coprocessor may result in goroutine leak") + kit, clean := createChunkSizeControlKit(t, "create table t (a int, index idx_a(a))") + defer clean() + tbl, err := kit.dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) tid := tbl.Meta().ID idx := tbl.Meta().Indices[0].ID // construct two regions split by 100 splitKeys := generateIndexSplitKeyForInt(tid, idx, []int{100}) - regionIDs := manipulateCluster(cluster, splitKeys) + regionIDs := manipulateCluster(kit.cluster, splitKeys) noDelayThreshold := time.Millisecond * 100 delayDuration := time.Second delayThreshold := delayDuration * 9 / 10 - tk.MustExec("insert into t values (1)") // insert one record into region1, and set a delay duration - client.SetDelay(regionIDs[0], delayDuration) + kit.tk.MustExec("insert into t values (1)") // insert one record into region1, and set a delay duration + kit.client.SetDelay(regionIDs[0], delayDuration) - results := tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 1") - cost := s.parseTimeCost(c, results.Rows()[0]) - c.Assert(cost, Not(Less), delayThreshold) // have to wait for region1 + results := kit.tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 1") + cost := parseTimeCost(t, results.Rows()[0]) + require.GreaterOrEqual(t, cost, delayThreshold) // have to wait for region1 - tk.MustExec("insert into t values (101)") // insert one record into region2 - results = tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 1") - cost = s.parseTimeCost(c, results.Rows()[0]) - c.Assert(cost, Less, noDelayThreshold) // region2 return quickly + kit.tk.MustExec("insert into t values (101)") // insert one record into region2 + results = kit.tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 1") + cost = parseTimeCost(t, results.Rows()[0]) + require.Less(t, cost, noDelayThreshold) // region2 return quickly - results = tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 2") - cost = s.parseTimeCost(c, results.Rows()[0]) - c.Assert(cost, Not(Less), delayThreshold) // have to wait + results = kit.tk.MustQuery("explain analyze select * from t where t.a > 0 and t.a < 200 limit 2") + cost = parseTimeCost(t, results.Rows()[0]) + require.GreaterOrEqual(t, cost, delayThreshold) // have to wait } -func (s *testChunkSizeControlSuite) parseTimeCost(c *C, line []interface{}) time.Duration { +// nolint: unused, deadcode +func parseTimeCost(t *testing.T, line []interface{}) time.Duration { lineStr := fmt.Sprintf("%v", line) idx := strings.Index(lineStr, "time:") - c.Assert(idx, Not(Equals), -1) + require.NotEqual(t, -1, idx) lineStr = lineStr[idx+len("time:"):] idx = strings.Index(lineStr, ",") - c.Assert(idx, Not(Equals), -1) + require.NotEqual(t, -1, idx) timeStr := lineStr[:idx] d, err := time.ParseDuration(timeStr) - c.Assert(err, IsNil) + require.NoError(t, err) return d } + +// nolint: unused, deadcode +func generateIndexSplitKeyForInt(tid, idx int64, splitNum []int) [][]byte { + results := make([][]byte, 0, len(splitNum)) + for _, num := range splitNum { + d := new(types.Datum) + d.SetInt64(int64(num)) + b, err := codec.EncodeKey(nil, nil, *d) + if err != nil { + panic(err) + } + results = append(results, tablecodec.EncodeIndexSeekKey(tid, idx, b)) + } + return results +} + +// nolint: unused, deadcode +type chunkSizeControlKit struct { + store kv.Storage + dom *domain.Domain + tk *testkit.TestKit + client *testSlowClient + cluster testutils.Cluster +} + +// nolint: unused, deadcode +func createChunkSizeControlKit(t *testing.T, sql string) (*chunkSizeControlKit, func()) { + // BootstrapSession is not thread-safe, so we have to prepare all resources in SetUp. + kit := new(chunkSizeControlKit) + kit.client = &testSlowClient{regionDelay: make(map[uint64]time.Duration)} + + var err error + kit.store, err = mockstore.NewMockStore( + mockstore.WithClusterInspector(func(c testutils.Cluster) { + mockstore.BootstrapWithSingleStore(c) + kit.cluster = c + }), + mockstore.WithClientHijacker(func(c tikv.Client) tikv.Client { + kit.client.Client = c + return kit.client + }), + ) + require.NoError(t, err) + + // init domain + kit.dom, err = session.BootstrapSession(kit.store) + require.NoError(t, err) + + // create the test table + kit.tk = testkit.NewTestKit(t, kit.store) + kit.tk.MustExec("use test") + kit.tk.MustExec(sql) + return kit, func() { + kit.dom.Close() + require.NoError(t, kit.store.Close()) + } +} diff --git a/executor/cte.go b/executor/cte.go index a9f083fa70479..7ee4a78dc417b 100644 --- a/executor/cte.go +++ b/executor/cte.go @@ -230,8 +230,6 @@ func (e *CTEExec) Close() (err error) { func (e *CTEExec) computeSeedPart(ctx context.Context) (err error) { e.curIter = 0 e.iterInTbl.SetIter(e.curIter) - // This means iterInTbl's can be read. - defer close(e.iterInTbl.GetBegCh()) chks := make([]*chunk.Chunk, 0, 10) for { if e.limitDone(e.iterInTbl) { @@ -384,7 +382,6 @@ func (e *CTEExec) setupTblsForNewIteration() (err error) { if err = e.iterInTbl.Reopen(); err != nil { return err } - defer close(e.iterInTbl.GetBegCh()) if e.isDistinct { // Already deduplicated by resTbl, adding directly is ok. for _, chk := range chks { diff --git a/executor/cte_table_reader.go b/executor/cte_table_reader.go index efd5a0387e6cb..4afd8aabbb79f 100644 --- a/executor/cte_table_reader.go +++ b/executor/cte_table_reader.go @@ -41,9 +41,6 @@ func (e *CTETableReaderExec) Open(ctx context.Context) error { func (e *CTETableReaderExec) Next(ctx context.Context, req *chunk.Chunk) (err error) { req.Reset() - // Wait until iterInTbl can be read. This is controlled by corresponding CTEExec. - <-e.iterInTbl.GetBegCh() - // We should read `iterInTbl` from the beginning when the next iteration starts. // Can not directly judge whether to start the next iteration based on e.chkIdx, // because some operators(Selection) may use forloop to read all data in `iterInTbl`. diff --git a/executor/cte_test.go b/executor/cte_test.go index 52c2e957a2e21..bfc99c0ae89e6 100644 --- a/executor/cte_test.go +++ b/executor/cte_test.go @@ -22,7 +22,9 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/types" "github.com/stretchr/testify/require" ) @@ -408,3 +410,33 @@ func TestSpillToDisk(t *testing.T) { } rows.Check(testkit.Rows(resRows...)) } + +func TestCTEExecError(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists src;") + tk.MustExec("create table src(first int, second int);") + + insertStr := fmt.Sprintf("insert into src values (%d, %d)", rand.Intn(1000), rand.Intn(1000)) + for i := 0; i < 1000; i++ { + insertStr += fmt.Sprintf(",(%d, %d)", rand.Intn(1000), rand.Intn(1000)) + } + insertStr += ";" + tk.MustExec(insertStr) + + // Increase projection concurrency and decrease chunk size + // to increase the probability of reproducing the problem. + tk.MustExec("set tidb_max_chunk_size = 32") + tk.MustExec("set tidb_projection_concurrency = 20") + for i := 0; i < 10; i++ { + err := tk.QueryToErr("with recursive cte(iter, first, second, result) as " + + "(select 1, first, second, first+second from src " + + " union all " + + "select iter+1, second, result, second+result from cte where iter < 80 )" + + "select * from cte") + require.True(t, terror.ErrorEqual(err, types.ErrOverflow)) + } +} diff --git a/executor/ddl.go b/executor/ddl.go index 10ea571b5bf31..1c940c70dff74 100644 --- a/executor/ddl.go +++ b/executor/ddl.go @@ -36,6 +36,7 @@ import ( "github.com/pingcap/tidb/util/admin" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/gcutil" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/sqlexec" @@ -185,18 +186,7 @@ func (e *DDLExec) Next(ctx context.Context, req *chunk.Chunk) (err error) { case *ast.AlterSequenceStmt: err = e.executeAlterSequence(x) case *ast.CreatePlacementPolicyStmt: - if x.OrReplace && x.IfNotExists { - err = ddl.ErrWrongUsage.GenWithStackByArgs("OR REPLACE", "IF NOT EXISTS") - break - } err = e.executeCreatePlacementPolicy(x) - if x.OrReplace && errors.ErrorEqual(err, infoschema.ErrPlacementPolicyExists) { - alterStmt := &ast.AlterPlacementPolicyStmt{ - PolicyName: x.PolicyName, - PlacementOptions: x.PlacementOptions, - } - err = e.executeAlterPlacementPolicy(alterStmt) - } case *ast.DropPlacementPolicyStmt: err = e.executeDropPlacementPolicy(x) case *ast.AlterPlacementPolicyStmt: @@ -237,7 +227,7 @@ func (e *DDLExec) executeRenameTable(s *ast.RenameTableStmt) error { if len(s.TableToTables) == 1 { oldIdent := ast.Ident{Schema: s.TableToTables[0].OldTable.Schema, Name: s.TableToTables[0].OldTable.Name} if _, ok := e.getLocalTemporaryTable(oldIdent.Schema, oldIdent.Name); ok { - return ddl.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("RENAME TABLE") + return dbterror.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("RENAME TABLE") } newIdent := ast.Ident{Schema: s.TableToTables[0].NewTable.Schema, Name: s.TableToTables[0].NewTable.Name} err = domain.GetDomain(e.ctx).DDL().RenameTable(e.ctx, oldIdent, newIdent, isAlterTable) @@ -247,7 +237,7 @@ func (e *DDLExec) executeRenameTable(s *ast.RenameTableStmt) error { for _, tables := range s.TableToTables { oldIdent := ast.Ident{Schema: tables.OldTable.Schema, Name: tables.OldTable.Name} if _, ok := e.getLocalTemporaryTable(oldIdent.Schema, oldIdent.Name); ok { - return ddl.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("RENAME TABLE") + return dbterror.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("RENAME TABLE") } newIdent := ast.Ident{Schema: tables.NewTable.Schema, Name: tables.NewTable.Name} oldIdents = append(oldIdents, oldIdent) @@ -377,7 +367,7 @@ func (e *DDLExec) executeCreateView(s *ast.CreateViewStmt) error { func (e *DDLExec) executeCreateIndex(s *ast.CreateIndexStmt) error { ident := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} if _, ok := e.getLocalTemporaryTable(ident.Schema, ident.Name); ok { - return ddl.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("CREATE INDEX") + return dbterror.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("CREATE INDEX") } err := domain.GetDomain(e.ctx).DDL().CreateIndex(e.ctx, ident, s.KeyType, model.NewCIStr(s.IndexName), @@ -548,7 +538,7 @@ func (e *DDLExec) dropLocalTemporaryTables(localTempTables []*ast.TableName) err func (e *DDLExec) executeDropIndex(s *ast.DropIndexStmt) error { ti := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} if _, ok := e.getLocalTemporaryTable(ti.Schema, ti.Name); ok { - return ddl.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("DROP INDEX") + return dbterror.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("DROP INDEX") } err := domain.GetDomain(e.ctx).DDL().DropIndex(e.ctx, ti, model.NewCIStr(s.IndexName), s.IfExists) @@ -561,7 +551,7 @@ func (e *DDLExec) executeDropIndex(s *ast.DropIndexStmt) error { func (e *DDLExec) executeAlterTable(ctx context.Context, s *ast.AlterTableStmt) error { ti := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} if _, ok := e.getLocalTemporaryTable(ti.Schema, ti.Name); ok { - return ddl.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("ALTER TABLE") + return dbterror.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("ALTER TABLE") } err := domain.GetDomain(e.ctx).DDL().AlterTable(ctx, e.ctx, ti, s.Specs) @@ -765,7 +755,7 @@ func (e *DDLExec) executeLockTables(s *ast.LockTablesStmt) error { for _, tb := range s.TableLocks { if _, ok := e.getLocalTemporaryTable(tb.Table.Schema, tb.Table.Name); ok { - return ddl.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("LOCK TABLES") + return dbterror.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("LOCK TABLES") } } @@ -784,7 +774,7 @@ func (e *DDLExec) executeUnlockTables(_ *ast.UnlockTablesStmt) error { func (e *DDLExec) executeCleanupTableLock(s *ast.CleanupTableLockStmt) error { for _, tb := range s.Tables { if _, ok := e.getLocalTemporaryTable(tb.Schema, tb.Name); ok { - return ddl.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("ADMIN CLEANUP TABLE LOCK") + return dbterror.ErrUnsupportedLocalTempTableDDL.GenWithStackByArgs("ADMIN CLEANUP TABLE LOCK") } } return domain.GetDomain(e.ctx).DDL().CleanupTableLock(e.ctx, s.Tables) diff --git a/executor/ddl_test.go b/executor/ddl_test.go index 5426c5896d33c..5a6368dab3df5 100644 --- a/executor/ddl_test.go +++ b/executor/ddl_test.go @@ -24,7 +24,6 @@ import ( "time" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/ddl" ddltestutil "github.com/pingcap/tidb/ddl/testutil" ddlutil "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/domain" @@ -45,6 +44,7 @@ import ( "github.com/pingcap/tidb/testkit/testutil" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" ) @@ -170,12 +170,12 @@ func TestCreateTable(t *testing.T) { tk.MustExec("drop table if exists test_err_multiple_collate;") _, err = tk.Exec("create table test_err_multiple_collate (a char(1) charset utf8mb4 collate utf8_unicode_ci collate utf8_general_ci) charset utf8mb4 collate utf8mb4_bin") require.Error(t, err) - require.Equal(t, ddl.ErrCollationCharsetMismatch.GenWithStackByArgs("utf8_unicode_ci", "utf8mb4").Error(), err.Error()) + require.Equal(t, dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs("utf8_unicode_ci", "utf8mb4").Error(), err.Error()) tk.MustExec("drop table if exists test_err_multiple_collate;") _, err = tk.Exec("create table test_err_multiple_collate (a char(1) collate utf8_unicode_ci collate utf8mb4_general_ci) charset utf8mb4 collate utf8mb4_bin") require.Error(t, err) - require.Equal(t, ddl.ErrCollationCharsetMismatch.GenWithStackByArgs("utf8mb4_general_ci", "utf8").Error(), err.Error()) + require.Equal(t, dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs("utf8mb4_general_ci", "utf8").Error(), err.Error()) // table option is auto-increment tk.MustExec("drop table if exists create_auto_increment_test;") @@ -236,7 +236,7 @@ func TestCreateView(t *testing.T) { tk.MustExec("create view v5 as select * from t1") tk.MustExec("create view v6 (c,d) as select * from t1") _, err = tk.Exec("create view v7 (c,d,e) as select * from t1") - require.Equal(t, ddl.ErrViewWrongList.Error(), err.Error()) + require.Equal(t, dbterror.ErrViewWrongList.Error(), err.Error()) // drop multiple views in a statement tk.MustExec("drop view v1,v2,v3,v4,v5,v6") // view with variable @@ -246,16 +246,16 @@ func TestCreateView(t *testing.T) { tk.MustExec("drop view v1") // view with different col counts _, err = tk.Exec("create view v1 (c,d,e) as select a,b from t1 ") - require.Equal(t, ddl.ErrViewWrongList.Error(), err.Error()) + require.Equal(t, dbterror.ErrViewWrongList.Error(), err.Error()) _, err = tk.Exec("create view v1 (c) as select a,b from t1 ") - require.Equal(t, ddl.ErrViewWrongList.Error(), err.Error()) + require.Equal(t, dbterror.ErrViewWrongList.Error(), err.Error()) // view with or_replace flag tk.MustExec("drop view if exists v1") tk.MustExec("create view v1 (c,d) as select a,b from t1") tk.MustExec("create or replace view v1 (c,d) as select a,b from t1 ") tk.MustExec("create table if not exists t1 (a int ,b int)") _, err = tk.Exec("create or replace view t1 as select * from t1") - require.Equal(t, ddl.ErrWrongObject.GenWithStackByArgs("test", "t1", "VIEW").Error(), err.Error()) + require.Equal(t, dbterror.ErrWrongObject.GenWithStackByArgs("test", "t1", "VIEW").Error(), err.Error()) // create view using prepare tk.MustExec(`prepare stmt from "create view v10 (x) as select 1";`) tk.MustExec("execute stmt") @@ -306,6 +306,15 @@ func TestCreateView(t *testing.T) { // Refer https://github.com/pingcap/tidb/issues/25876 err = tk.ExecToErr("create view v_stale as select * from source_table as of timestamp current_timestamp(3)") require.Truef(t, terror.ErrorEqual(err, executor.ErrViewInvalid), "err %s", err) + + // Refer https://github.com/pingcap/tidb/issues/32682 + tk.MustExec("drop view if exists v1,v2;") + tk.MustExec("drop table if exists t1;") + tk.MustExec("CREATE TABLE t1(a INT, b INT);") + err = tk.ExecToErr("CREATE DEFINER=1234567890abcdefGHIKL1234567890abcdefGHIKL@localhost VIEW v1 AS SELECT a FROM t1;") + require.Truef(t, terror.ErrorEqual(err, executor.ErrWrongStringLength), "ERROR 1470 (HY000): String '1234567890abcdefGHIKL1234567890abcdefGHIKL' is too long for user name (should be no longer than 32)") + err = tk.ExecToErr("CREATE DEFINER=some_user_name@host_1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890X VIEW v2 AS SELECT b FROM t1;") + require.Truef(t, terror.ErrorEqual(err, executor.ErrWrongStringLength), "ERROR 1470 (HY000): String 'host_1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij12345' is too long for host name (should be no longer than 255)") } func TestViewRecursion(t *testing.T) { @@ -576,11 +585,11 @@ func TestAlterTableAddColumn(t *testing.T) { tk.MustQuery("select c3 from alter_test").Check(testkit.Rows("CURRENT_TIMESTAMP")) tk.MustExec("create or replace view alter_view as select c1,c2 from alter_test") _, err = tk.Exec("alter table alter_view add column c4 varchar(50)") - require.Equal(t, ddl.ErrWrongObject.GenWithStackByArgs("test", "alter_view", "BASE TABLE").Error(), err.Error()) + require.Equal(t, dbterror.ErrWrongObject.GenWithStackByArgs("test", "alter_view", "BASE TABLE").Error(), err.Error()) tk.MustExec("drop view alter_view") tk.MustExec("create sequence alter_seq") _, err = tk.Exec("alter table alter_seq add column c int") - require.Equal(t, ddl.ErrWrongObject.GenWithStackByArgs("test", "alter_seq", "BASE TABLE").Error(), err.Error()) + require.Equal(t, dbterror.ErrWrongObject.GenWithStackByArgs("test", "alter_seq", "BASE TABLE").Error(), err.Error()) tk.MustExec("drop sequence alter_seq") } @@ -604,11 +613,11 @@ func TestAlterTableAddColumns(t *testing.T) { tk.MustQuery("select c3 from alter_test").Check(testkit.Rows("CURRENT_TIMESTAMP")) tk.MustExec("create or replace view alter_view as select c1,c2 from alter_test") _, err = tk.Exec("alter table alter_view add column (c4 varchar(50), c5 varchar(50))") - require.Equal(t, ddl.ErrWrongObject.GenWithStackByArgs("test", "alter_view", "BASE TABLE").Error(), err.Error()) + require.Equal(t, dbterror.ErrWrongObject.GenWithStackByArgs("test", "alter_view", "BASE TABLE").Error(), err.Error()) tk.MustExec("drop view alter_view") tk.MustExec("create sequence alter_seq") _, err = tk.Exec("alter table alter_seq add column (c1 int, c2 varchar(10))") - require.Equal(t, ddl.ErrWrongObject.GenWithStackByArgs("test", "alter_seq", "BASE TABLE").Error(), err.Error()) + require.Equal(t, dbterror.ErrWrongObject.GenWithStackByArgs("test", "alter_seq", "BASE TABLE").Error(), err.Error()) tk.MustExec("drop sequence alter_seq") } @@ -661,11 +670,11 @@ func TestAlterTableModifyColumn(t *testing.T) { require.Equal(t, expected, createSQL) tk.MustExec("create or replace view alter_view as select c1,c2 from mc") _, err = tk.Exec("alter table alter_view modify column c2 text") - require.Equal(t, ddl.ErrWrongObject.GenWithStackByArgs("test", "alter_view", "BASE TABLE").Error(), err.Error()) + require.Equal(t, dbterror.ErrWrongObject.GenWithStackByArgs("test", "alter_view", "BASE TABLE").Error(), err.Error()) tk.MustExec("drop view alter_view") tk.MustExec("create sequence alter_seq") _, err = tk.Exec("alter table alter_seq modify column c int") - require.Equal(t, ddl.ErrWrongObject.GenWithStackByArgs("test", "alter_seq", "BASE TABLE").Error(), err.Error()) + require.Equal(t, dbterror.ErrWrongObject.GenWithStackByArgs("test", "alter_seq", "BASE TABLE").Error(), err.Error()) tk.MustExec("drop sequence alter_seq") // test multiple collate modification in column. @@ -696,13 +705,13 @@ func TestAlterTableModifyColumn(t *testing.T) { tk.MustExec("create table err_modify_multiple_collate (a char(1) collate utf8_bin collate utf8_general_ci) charset utf8mb4 collate utf8mb4_bin") _, err = tk.Exec("alter table err_modify_multiple_collate modify column a char(1) charset utf8mb4 collate utf8_bin;") require.Error(t, err) - require.Equal(t, ddl.ErrCollationCharsetMismatch.GenWithStackByArgs("utf8_bin", "utf8mb4").Error(), err.Error()) + require.Equal(t, dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs("utf8_bin", "utf8mb4").Error(), err.Error()) tk.MustExec("drop table if exists err_modify_multiple_collate;") tk.MustExec("create table err_modify_multiple_collate (a char(1) collate utf8_bin collate utf8_general_ci) charset utf8mb4 collate utf8mb4_bin") _, err = tk.Exec("alter table err_modify_multiple_collate modify column a char(1) collate utf8_bin collate utf8mb4_bin;") require.Error(t, err) - require.Equal(t, ddl.ErrCollationCharsetMismatch.GenWithStackByArgs("utf8mb4_bin", "utf8").Error(), err.Error()) + require.Equal(t, dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs("utf8mb4_bin", "utf8").Error(), err.Error()) } @@ -957,10 +966,6 @@ func TestShardRowIDBits(t *testing.T) { require.Truef(t, autoid.ErrAutoincReadFailed.Equal(err), "err:%v", err) } -type testAutoRandomSuite struct { - *baseTestSuite -} - func TestAutoRandomBitsData(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -1325,41 +1330,41 @@ func TestIllegalFunctionCall4GeneratedColumns(t *testing.T) { require.Error(t, err) _, err = tk.Exec("create table t1 (b double generated always as (rand()) virtual);") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("b").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("b").Error(), err.Error()) _, err = tk.Exec("create table t1 (a varchar(64), b varchar(1024) generated always as (load_file(a)) virtual);") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("b").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("b").Error(), err.Error()) _, err = tk.Exec("create table t1 (a datetime generated always as (curdate()) virtual);") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("a").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("a").Error(), err.Error()) _, err = tk.Exec("create table t1 (a datetime generated always as (current_time()) virtual);") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("a").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("a").Error(), err.Error()) _, err = tk.Exec("create table t1 (a datetime generated always as (current_timestamp()) virtual);") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("a").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("a").Error(), err.Error()) _, err = tk.Exec("create table t1 (a datetime, b varchar(10) generated always as (localtime()) virtual);") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("b").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("b").Error(), err.Error()) _, err = tk.Exec("create table t1 (a varchar(1024) generated always as (uuid()) virtual);") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("a").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("a").Error(), err.Error()) _, err = tk.Exec("create table t1 (a varchar(1024), b varchar(1024) generated always as (is_free_lock(a)) virtual);") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("b").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("b").Error(), err.Error()) tk.MustExec("create table t1 (a bigint not null primary key auto_increment, b bigint, c bigint as (b + 1));") _, err = tk.Exec("alter table t1 add column d varchar(1024) generated always as (database());") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("d").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("d").Error(), err.Error()) tk.MustExec("alter table t1 add column d bigint generated always as (b + 1); ") _, err = tk.Exec("alter table t1 modify column d bigint generated always as (connection_id());") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("d").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("d").Error(), err.Error()) _, err = tk.Exec("alter table t1 change column c cc bigint generated always as (connection_id());") - require.Equal(t, ddl.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("cc").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnFunctionIsNotAllowed.GenWithStackByArgs("cc").Error(), err.Error()) } func TestGeneratedColumnRelatedDDL(t *testing.T) { @@ -1372,24 +1377,24 @@ func TestGeneratedColumnRelatedDDL(t *testing.T) { require.Error(t, err) _, err = tk.Exec("create table t1 (a bigint not null primary key auto_increment, b bigint as (a + 1));") - require.Equal(t, ddl.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs("b").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs("b").Error(), err.Error()) tk.MustExec("create table t1 (a bigint not null primary key auto_increment, b bigint, c bigint as (b + 1));") _, err = tk.Exec("alter table t1 add column d bigint generated always as (a + 1);") - require.Equal(t, ddl.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs("d").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs("d").Error(), err.Error()) tk.MustExec("alter table t1 add column d bigint generated always as (b + 1);") _, err = tk.Exec("alter table t1 modify column d bigint generated always as (a + 1);") - require.Equal(t, ddl.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs("d").Error(), err.Error()) + require.Equal(t, dbterror.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs("d").Error(), err.Error()) // This mysql compatibility check can be disabled using tidb_enable_auto_increment_in_generated tk.MustExec("set session tidb_enable_auto_increment_in_generated = 1;") tk.MustExec("alter table t1 modify column d bigint generated always as (a + 1);") _, err = tk.Exec("alter table t1 add column e bigint as (z + 1);") - require.Equal(t, ddl.ErrBadField.GenWithStackByArgs("z", "generated column function").Error(), err.Error()) + require.Equal(t, dbterror.ErrBadField.GenWithStackByArgs("z", "generated column function").Error(), err.Error()) tk.MustExec("drop table t1;") @@ -1603,7 +1608,7 @@ func TestAutoIncrementColumnErrorMessage(t *testing.T) { tk.MustExec("CREATE TABLE t1 (t1_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);") _, err = tk.Exec("CREATE INDEX idx1 ON t1 ((t1_id + t1_id));") - require.Equal(t, ddl.ErrExpressionIndexCanNotRefer.GenWithStackByArgs("idx1").Error(), err.Error()) + require.Equal(t, dbterror.ErrExpressionIndexCanNotRefer.GenWithStackByArgs("idx1").Error(), err.Error()) // This mysql compatibility check can be disabled using tidb_enable_auto_increment_in_generated tk.MustExec("SET SESSION tidb_enable_auto_increment_in_generated = 1;") diff --git a/executor/delete.go b/executor/delete.go index 2d4425653c090..c327236ee0f18 100644 --- a/executor/delete.go +++ b/executor/delete.go @@ -122,7 +122,7 @@ func (e *DeleteExec) deleteSingleTableByChunk(ctx context.Context) error { datumRow := make([]types.Datum, 0, len(fields)) for i, field := range fields { - if columns[i].ID == model.ExtraPidColID { + if columns[i].ID == model.ExtraPidColID || columns[i].ID == model.ExtraPhysTblID { continue } @@ -159,6 +159,9 @@ func (e *DeleteExec) doBatchDelete(ctx context.Context) error { func (e *DeleteExec) composeTblRowMap(tblRowMap tableRowMapType, colPosInfos []plannercore.TblColPosInfo, joinedRow []types.Datum) error { // iterate all the joined tables, and got the copresonding rows in joinedRow. for _, info := range colPosInfos { + if unmatchedOuterRow(info, joinedRow) { + continue + } if tblRowMap[info.TblID] == nil { tblRowMap[info.TblID] = kv.NewHandleMap() } diff --git a/executor/distsql.go b/executor/distsql.go index e0ac2cfb04063..25a0c8612c0c2 100644 --- a/executor/distsql.go +++ b/executor/distsql.go @@ -207,16 +207,20 @@ func (e *IndexReaderExecutor) Table() table.Table { return e.table } +func (e *IndexReaderExecutor) setDummy() { + e.dummy = true +} + // Close clears all resources hold by current object. func (e *IndexReaderExecutor) Close() (err error) { - if e.dummy { - return nil - } - if e.result != nil { err = e.result.Close() } e.result = nil + e.kvRanges = e.kvRanges[:0] + if e.dummy { + return nil + } e.ctx.StoreQueryFeedback(e.feedback) return err } @@ -346,7 +350,7 @@ type IndexLookUpExecutor struct { partitionTableMode bool // if this executor is accessing a partition table prunedPartitions []table.PhysicalTable // partition tables need to access partitionRangeMap map[int64][]*ranger.Range - partitionKVRanges [][]kv.KeyRange // kvRanges of each partition table + partitionKVRanges [][]kv.KeyRange // kvRanges of each prunedPartitions // All fields above are immutable. @@ -386,9 +390,6 @@ type IndexLookUpExecutor struct { stats *IndexLookUpRunTimeStats - // extraPIDColumnIndex is used for partition reader to add an extra partition ID column, default -1 - extraPIDColumnIndex offsetOptional - // cancelFunc is called when close the executor cancelFunc context.CancelFunc @@ -415,6 +416,10 @@ func (e *IndexLookUpExecutor) Table() table.Table { return e.table } +func (e *IndexLookUpExecutor) setDummy() { + e.dummy = true +} + // Open implements the Executor Open interface. func (e *IndexLookUpExecutor) Open(ctx context.Context) error { var err error @@ -676,18 +681,17 @@ func (e *IndexLookUpExecutor) buildTableReader(ctx context.Context, task *lookup table = task.partitionTable } tableReaderExec := &TableReaderExecutor{ - baseExecutor: newBaseExecutor(e.ctx, e.schema, e.getTableRootPlanID()), - table: table, - dagPB: e.tableRequest, - startTS: e.startTS, - readReplicaScope: e.readReplicaScope, - isStaleness: e.isStaleness, - columns: e.columns, - streaming: e.tableStreaming, - feedback: statistics.NewQueryFeedback(0, nil, 0, false), - corColInFilter: e.corColInTblSide, - plans: e.tblPlans, - extraPIDColumnIndex: e.extraPIDColumnIndex, + baseExecutor: newBaseExecutor(e.ctx, e.schema, e.getTableRootPlanID()), + table: table, + dagPB: e.tableRequest, + startTS: e.startTS, + readReplicaScope: e.readReplicaScope, + isStaleness: e.isStaleness, + columns: e.columns, + streaming: e.tableStreaming, + feedback: statistics.NewQueryFeedback(0, nil, 0, false), + corColInFilter: e.corColInTblSide, + plans: e.tblPlans, } tableReaderExec.buildVirtualColumnInfo() tableReader, err := e.dataReaderBuilder.buildTableReaderFromHandles(ctx, tableReaderExec, task.handles, true) @@ -700,6 +704,7 @@ func (e *IndexLookUpExecutor) buildTableReader(ctx context.Context, task *lookup // Close implements Exec Close interface. func (e *IndexLookUpExecutor) Close() error { + e.kvRanges = e.kvRanges[:0] if e.dummy { return nil } diff --git a/executor/distsql_test.go b/executor/distsql_test.go index f6157ad6744ce..c8909b6c53326 100644 --- a/executor/distsql_test.go +++ b/executor/distsql_test.go @@ -97,7 +97,7 @@ func TestCopClientSend(t *testing.T) { // Split one region. key := tablecodec.EncodeRowKeyWithHandle(tblID, kv.IntHandle(500)) - region, _ := cluster.GetRegionByKey(key) + region, _, _ := cluster.GetRegionByKey(key) peerID := cluster.AllocID() cluster.Split(region.GetId(), cluster.AllocID(), key, []uint64{peerID}, peerID) diff --git a/executor/errors.go b/executor/errors.go index 1e9c2b8969b00..46d0fdd1ee62d 100644 --- a/executor/errors.go +++ b/executor/errors.go @@ -53,6 +53,7 @@ var ( ErrIllegalPrivilegeLevel = dbterror.ClassExecutor.NewStd(mysql.ErrIllegalPrivilegeLevel) ErrInvalidSplitRegionRanges = dbterror.ClassExecutor.NewStd(mysql.ErrInvalidSplitRegionRanges) ErrViewInvalid = dbterror.ClassExecutor.NewStd(mysql.ErrViewInvalid) + ErrInstanceScope = dbterror.ClassExecutor.NewStd(mysql.ErrInstanceScope) ErrBRIEBackupFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIEBackupFailed) ErrBRIERestoreFailed = dbterror.ClassExecutor.NewStd(mysql.ErrBRIERestoreFailed) @@ -64,6 +65,7 @@ var ( ErrSetPasswordAuthPlugin = dbterror.ClassExecutor.NewStd(mysql.ErrSetPasswordAuthPlugin) ErrFuncNotEnabled = dbterror.ClassExecutor.NewStdErr(mysql.ErrNotSupportedYet, parser_mysql.Message("%-.32s is not supported. To enable this experimental feature, set '%-.32s' in the configuration file.", nil)) + ErrWrongStringLength = dbterror.ClassDDL.NewStd(mysql.ErrWrongStringLength) errUnsupportedFlashbackTmpTable = dbterror.ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message("Recover/flashback table is not supported on temporary tables", nil)) errTruncateWrongInsertValue = dbterror.ClassTable.NewStdErr(mysql.ErrTruncatedWrongValue, parser_mysql.Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil)) ) diff --git a/executor/executor.go b/executor/executor.go index fa4be26da43ff..63ee80d25efda 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -320,6 +320,16 @@ type CancelDDLJobsExec struct { errs []error } +// Open implements the Executor Open interface. +func (e *CancelDDLJobsExec) Open(ctx context.Context) error { + // We want to use a global transaction to execute the admin command, so we don't use e.ctx here. + errInTxn := kv.RunInNewTxn(context.Background(), e.ctx.GetStore(), true, func(ctx context.Context, txn kv.Transaction) (err error) { + e.errs, err = admin.CancelJobs(txn, e.jobIDs) + return + }) + return errInTxn +} + // Next implements the Executor Next interface. func (e *CancelDDLJobsExec) Next(ctx context.Context, req *chunk.Chunk) error { req.GrowAndReset(e.maxChunkSize) @@ -930,21 +940,47 @@ type SelectLockExec struct { Lock *ast.SelectLockInfo keys []kv.Key + // The children may be a join of multiple tables, so we need a map. tblID2Handle map[int64][]plannercore.HandleCols - // All the partition tables in the children of this executor. - partitionedTable []table.PartitionedTable + // When SelectLock work on a partition table, we need the partition ID + // (Physical Table ID) instead of the 'logical' table ID to calculate + // the lock KV. In that case, the Physical Table ID is extracted + // from the row key in the store and as an extra column in the chunk row. + + // tblID2PhyTblIDCol is used for partitioned tables. + // The child executor need to return an extra column containing + // the Physical Table ID (i.e. from which partition the row came from) + // Used during building + tblID2PhysTblIDCol map[int64]*expression.Column - // When SelectLock work on the partition table, we need the partition ID - // instead of table ID to calculate the lock KV. In that case, partition ID is store as an - // extra column in the chunk row. - // tblID2PIDColumnIndex stores the column index in the chunk row. The children may be join - // of multiple tables, so the map struct is used. - tblID2PIDColumnIndex map[int64]int + // Used during execution + // Map from logic tableID to column index where the physical table id is stored + // For dynamic prune mode, model.ExtraPhysTblID columns are requested from + // storage and used for physical table id + // For static prune mode, model.ExtraPhysTblID is still sent to storage/Protobuf + // but could be filled in by the partitions TableReaderExecutor + // due to issues with chunk handling between the TableReaderExecutor and the + // SelectReader result. + tblID2PhysTblIDColIdx map[int64]int } // Open implements the Executor Open interface. func (e *SelectLockExec) Open(ctx context.Context) error { + if len(e.tblID2PhysTblIDCol) > 0 { + e.tblID2PhysTblIDColIdx = make(map[int64]int) + cols := e.Schema().Columns + for i := len(cols) - 1; i >= 0; i-- { + if cols[i].ID == model.ExtraPhysTblID { + for tblID, col := range e.tblID2PhysTblIDCol { + if cols[i].UniqueID == col.UniqueID { + e.tblID2PhysTblIDColIdx[tblID] = i + break + } + } + } + } + } return e.baseExecutor.Open(ctx) } @@ -963,23 +999,17 @@ func (e *SelectLockExec) Next(ctx context.Context, req *chunk.Chunk) error { if req.NumRows() > 0 { iter := chunk.NewIterator4Chunk(req) for row := iter.Begin(); row != iter.End(); row = iter.Next() { - - for id, cols := range e.tblID2Handle { - physicalID := id - if len(e.partitionedTable) > 0 { - // Replace the table ID with partition ID. - // The partition ID is returned as an extra column from the table reader. - if offset, ok := e.tblID2PIDColumnIndex[id]; ok { - physicalID = row.GetInt64(offset) - } - } - + for tblID, cols := range e.tblID2Handle { for _, col := range cols { handle, err := col.BuildHandle(row) if err != nil { return err } - e.keys = append(e.keys, tablecodec.EncodeRowKeyWithHandle(physicalID, handle)) + physTblID := tblID + if physTblColIdx, ok := e.tblID2PhysTblIDColIdx[tblID]; ok { + physTblID = row.GetInt64(physTblColIdx) + } + e.keys = append(e.keys, tablecodec.EncodeRowKeyWithHandle(physTblID, handle)) } } } @@ -992,16 +1022,8 @@ func (e *SelectLockExec) Next(ctx context.Context, req *chunk.Chunk) error { lockWaitTime = int64(e.Lock.WaitSec) * 1000 } - if len(e.tblID2Handle) > 0 { - for id := range e.tblID2Handle { - e.updateDeltaForTableID(id) - } - } - if len(e.partitionedTable) > 0 { - for _, p := range e.partitionedTable { - pid := p.Meta().ID - e.updateDeltaForTableID(pid) - } + for id := range e.tblID2Handle { + e.updateDeltaForTableID(id) } return doLockKeys(ctx, e.ctx, newLockCtx(e.ctx.GetSessionVars(), lockWaitTime, len(e.keys)), e.keys...) @@ -1859,6 +1881,11 @@ func ResetContextOfStmt(ctx sessionctx.Context, s ast.StmtNode) (err error) { sc.NotFillCache = !opts.SQLCache } sc.WeakConsistency = isWeakConsistencyRead(ctx, stmt) + // Try to mark the `RCCheckTS` flag for the first time execution of in-transaction read requests + // using read-consistency isolation level. + if NeedSetRCCheckTSFlag(ctx, stmt) { + sc.RCCheckTS = true + } case *ast.SetOprStmt: sc.InSelectStmt = true sc.OverflowAsWarning = true @@ -1984,3 +2011,13 @@ func isWeakConsistencyRead(ctx sessionctx.Context, node ast.Node) bool { return sessionVars.ConnectionID > 0 && sessionVars.ReadConsistency.IsWeak() && plannercore.IsAutoCommitTxn(ctx) && plannercore.IsReadOnly(node, sessionVars) } + +// NeedSetRCCheckTSFlag checks whether it's needed to set `RCCheckTS` flag in current stmtctx. +func NeedSetRCCheckTSFlag(ctx sessionctx.Context, node ast.Node) bool { + sessionVars := ctx.GetSessionVars() + if sessionVars.ConnectionID > 0 && sessionVars.RcReadCheckTS && sessionVars.InTxn() && + sessionVars.IsPessimisticReadConsistency() && !sessionVars.RetryInfo.Retrying && plannercore.IsReadOnly(node, sessionVars) { + return true + } + return false +} diff --git a/executor/executor_issue_test.go b/executor/executor_issue_test.go new file mode 100644 index 0000000000000..a844a4666734c --- /dev/null +++ b/executor/executor_issue_test.go @@ -0,0 +1,1246 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 executor_test + +import ( + "context" + "fmt" + "math/rand" + "strings" + "testing" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/parser/auth" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/statistics" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/util" + "github.com/stretchr/testify/require" +) + +func TestIssue23993(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + // Real cast to time should return NULL + tk.MustExec("drop table if exists t_issue_23993") + tk.MustExec("create table t_issue_23993(a double)") + tk.MustExec("insert into t_issue_23993 values(-790822912)") + tk.MustQuery("select cast(a as time) from t_issue_23993").Check(testkit.Rows("")) + tk.MustQuery("select a from t_issue_23993 where cast(a as time)").Check(testkit.Rows()) + // Int cast to time should return NULL + tk.MustExec("drop table if exists t_issue_23993") + tk.MustExec("create table t_issue_23993(a int)") + tk.MustExec("insert into t_issue_23993 values(-790822912)") + tk.MustQuery("select cast(a as time) from t_issue_23993").Check(testkit.Rows("")) + tk.MustQuery("select a from t_issue_23993 where cast(a as time)").Check(testkit.Rows()) + // Decimal cast to time should return NULL + tk.MustExec("drop table if exists t_issue_23993") + tk.MustExec("create table t_issue_23993(a decimal)") + tk.MustExec("insert into t_issue_23993 values(-790822912)") + tk.MustQuery("select cast(a as time) from t_issue_23993").Check(testkit.Rows("")) + tk.MustQuery("select a from t_issue_23993 where cast(a as time)").Check(testkit.Rows()) + // String cast to time should not return NULL + tk.MustExec("drop table if exists t_issue_23993") + tk.MustExec("create table t_issue_23993(a varchar(255))") + tk.MustExec("insert into t_issue_23993 values('-790822912')") + tk.MustQuery("select cast(a as time) from t_issue_23993").Check(testkit.Rows("-838:59:59")) + tk.MustQuery("select a from t_issue_23993 where cast(a as time)").Check(testkit.Rows("-790822912")) +} + +func TestIssue22201(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustQuery("SELECT HEX(WEIGHT_STRING('ab' AS BINARY(1000000000000000000)));").Check(testkit.Rows("")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1301 Result of cast_as_binary() was larger than max_allowed_packet (67108864) - truncated")) + tk.MustQuery("SELECT HEX(WEIGHT_STRING('ab' AS char(1000000000000000000)));").Check(testkit.Rows("")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1301 Result of weight_string() was larger than max_allowed_packet (67108864) - truncated")) +} + +func TestIssue22941(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists m, mp") + tk.MustExec(`CREATE TABLE m ( + mid varchar(50) NOT NULL, + ParentId varchar(50) DEFAULT NULL, + PRIMARY KEY (mid), + KEY ind_bm_parent (ParentId,mid) + )`) + // mp should have more columns than m + tk.MustExec(`CREATE TABLE mp ( + mpid bigint(20) unsigned NOT NULL DEFAULT '0', + mid varchar(50) DEFAULT NULL COMMENT '模块主键', + sid int, + PRIMARY KEY (mpid) + );`) + + tk.MustExec(`insert into mp values("1","1","0");`) + tk.MustExec(`insert into m values("0", "0");`) + rs := tk.MustQuery(`SELECT ( SELECT COUNT(1) FROM m WHERE ParentId = c.mid ) expand, bmp.mpid, bmp.mpid IS NULL,bmp.mpid IS NOT NULL, sid FROM m c LEFT JOIN mp bmp ON c.mid = bmp.mid WHERE c.ParentId = '0'`) + rs.Check(testkit.Rows("1 1 0 ")) + + rs = tk.MustQuery(`SELECT bmp.mpid, bmp.mpid IS NULL,bmp.mpid IS NOT NULL FROM m c LEFT JOIN mp bmp ON c.mid = bmp.mid WHERE c.ParentId = '0'`) + rs.Check(testkit.Rows(" 1 0")) +} + +func TestIssue23609(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("CREATE TABLE `t1` (\n `a` timestamp NULL DEFAULT NULL,\n `b` year(4) DEFAULT NULL,\n KEY `a` (`a`),\n KEY `b` (`b`)\n)") + tk.MustExec("insert into t1 values(\"2002-10-03 04:28:53\",2000), (\"2002-10-03 04:28:53\",2002), (NULL, 2002)") + tk.MustQuery("select /*+ inl_join (x,y) */ * from t1 x cross join t1 y on x.a=y.b").Check(testkit.Rows()) + tk.MustQuery("select * from t1 x cross join t1 y on x.a>y.b order by x.a, x.b, y.a, y.b").Check(testkit.Rows("2002-10-03 04:28:53 2000 2002", "2002-10-03 04:28:53 2000 2002-10-03 04:28:53 2000", "2002-10-03 04:28:53 2000 2002-10-03 04:28:53 2002", "2002-10-03 04:28:53 2002 2002", "2002-10-03 04:28:53 2002 2002-10-03 04:28:53 2000", "2002-10-03 04:28:53 2002 2002-10-03 04:28:53 2002")) + tk.MustQuery("select * from t1 where a = b").Check(testkit.Rows()) + tk.MustQuery("select * from t1 where a < b").Check(testkit.Rows()) + require.Equal(t, uint16(0), tk.Session().GetSessionVars().StmtCtx.WarningCount()) +} + +func TestIssue24091(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + defer tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a int) partition by hash (a div 0) partitions 10;") + tk.MustExec("insert into t values (NULL);") + + tk.MustQuery("select null div 0;").Check(testkit.Rows("")) + tk.MustQuery("select * from t;").Check(testkit.Rows("")) +} + +func TestIssue24210(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + // for ProjectionExec + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/executor/mockProjectionExecBaseExecutorOpenReturnedError", `return(true)`)) + err := tk.ExecToErr("select a from (select 1 as a, 2 as b) t") + require.EqualError(t, err, "mock ProjectionExec.baseExecutor.Open returned error") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/executor/mockProjectionExecBaseExecutorOpenReturnedError")) + + // for HashAggExec + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/executor/mockHashAggExecBaseExecutorOpenReturnedError", `return(true)`)) + err = tk.ExecToErr("select sum(a) from (select 1 as a, 2 as b) t group by b") + require.EqualError(t, err, "mock HashAggExec.baseExecutor.Open returned error") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/executor/mockHashAggExecBaseExecutorOpenReturnedError")) + + // for StreamAggExec + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/executor/mockStreamAggExecBaseExecutorOpenReturnedError", `return(true)`)) + err = tk.ExecToErr("select sum(a) from (select 1 as a, 2 as b) t") + require.EqualError(t, err, "mock StreamAggExec.baseExecutor.Open returned error") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/executor/mockStreamAggExecBaseExecutorOpenReturnedError")) + + // for SelectionExec + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/executor/mockSelectionExecBaseExecutorOpenReturnedError", `return(true)`)) + err = tk.ExecToErr("select * from (select rand() as a) t where a > 0") + require.EqualError(t, err, "mock SelectionExec.baseExecutor.Open returned error") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/executor/mockSelectionExecBaseExecutorOpenReturnedError")) +} + +func TestIssue25506(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists tbl_3, tbl_23") + tk.MustExec("create table tbl_3 (col_15 bit(20))") + tk.MustExec("insert into tbl_3 values (0xFFFF)") + tk.MustExec("insert into tbl_3 values (0xFF)") + tk.MustExec("create table tbl_23 (col_15 bit(15))") + tk.MustExec("insert into tbl_23 values (0xF)") + tk.MustQuery("(select col_15 from tbl_23) union all (select col_15 from tbl_3 for update) order by col_15").Check(testkit.Rows("\x00\x00\x0F", "\x00\x00\xFF", "\x00\xFF\xFF")) +} + +func TestIssue26348(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("drop table if exists t") + tk.MustExec(`CREATE TABLE t ( +a varchar(8) DEFAULT NULL, +b varchar(8) DEFAULT NULL, +c decimal(20,2) DEFAULT NULL, +d decimal(15,8) DEFAULT NULL +);`) + tk.MustExec(`insert into t values(20210606, 20210606, 50000.00, 5.04600000);`) + tk.MustQuery(`select a * c *(d/36000) from t;`).Check(testkit.Rows("141642663.71666598")) + tk.MustQuery(`select cast(a as double) * cast(c as double) *cast(d/36000 as double) from t;`).Check(testkit.Rows("141642663.71666598")) + tk.MustQuery("select 20210606*50000.00*(5.04600000/36000)").Check(testkit.Rows("141642663.71666599297980")) + + // differs from MySQL cause constant-fold . + tk.MustQuery("select \"20210606\"*50000.00*(5.04600000/36000)").Check(testkit.Rows("141642663.71666598")) + tk.MustQuery("select cast(\"20210606\" as double)*50000.00*(5.04600000/36000)").Check(testkit.Rows("141642663.71666598")) +} + +func TestIssue26532(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustQuery("select greatest(cast(\"2020-01-01 01:01:01\" as datetime), cast(\"2019-01-01 01:01:01\" as datetime) )union select null;").Sort().Check(testkit.Rows("2020-01-01 01:01:01", "")) + tk.MustQuery("select least(cast(\"2020-01-01 01:01:01\" as datetime), cast(\"2019-01-01 01:01:01\" as datetime) )union select null;").Sort().Check(testkit.Rows("2019-01-01 01:01:01", "")) + tk.MustQuery("select greatest(\"2020-01-01 01:01:01\" ,\"2019-01-01 01:01:01\" )union select null;").Sort().Check(testkit.Rows("2020-01-01 01:01:01", "")) + tk.MustQuery("select least(\"2020-01-01 01:01:01\" , \"2019-01-01 01:01:01\" )union select null;").Sort().Check(testkit.Rows("2019-01-01 01:01:01", "")) +} + +func TestIssue25447(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1(a int, b varchar(8))") + tk.MustExec("insert into t1 values(1,'1')") + tk.MustExec("create table t2(a int , b varchar(8) GENERATED ALWAYS AS (c) VIRTUAL, c varchar(8), PRIMARY KEY (a))") + tk.MustExec("insert into t2(a) values(1)") + tk.MustQuery("select /*+ tidb_inlj(t2) */ t2.b, t1.b from t1 join t2 ON t2.a=t1.a").Check(testkit.Rows(" 1")) +} + +func TestIssue23602(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("USE test") + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + tk.MustExec("CREATE TABLE t (a bigint unsigned PRIMARY KEY)") + defer tk.MustExec("DROP TABLE t") + tk.MustExec("INSERT INTO t VALUES (0),(1),(2),(3),(18446744073709551600),(18446744073709551605),(18446744073709551610),(18446744073709551615)") + tk.MustExec("ANALYZE TABLE t") + tk.MustQuery(`EXPLAIN FORMAT = 'brief' SELECT a FROM t WHERE a >= 0x1 AND a <= 0x2`).Check(testkit.Rows( + "TableReader 2.00 root data:TableRangeScan]\n" + + "[└─TableRangeScan 2.00 cop[tikv] table:t range:[1,2], keep order:false")) + tk.MustQuery(`EXPLAIN FORMAT = 'brief' SELECT a FROM t WHERE a BETWEEN 0x1 AND 0x2`).Check(testkit.Rows( + "TableReader 2.00 root data:TableRangeScan]\n" + + "[└─TableRangeScan 2.00 cop[tikv] table:t range:[1,2], keep order:false")) + tk.MustQuery("SELECT a FROM t WHERE a BETWEEN 0xFFFFFFFFFFFFFFF5 AND X'FFFFFFFFFFFFFFFA'").Check(testkit.Rows("18446744073709551605", "18446744073709551610")) +} + +func TestIssue28935(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("set @@tidb_enable_vectorized_expression=true") + tk.MustQuery(`select trim(leading from " a "), trim(both from " a "), trim(trailing from " a ")`).Check(testkit.Rows("a a a")) + tk.MustQuery(`select trim(leading null from " a "), trim(both null from " a "), trim(trailing null from " a ")`).Check(testkit.Rows(" ")) + tk.MustQuery(`select trim(null from " a ")`).Check(testkit.Rows("")) + + tk.MustExec("set @@tidb_enable_vectorized_expression=false") + tk.MustQuery(`select trim(leading from " a "), trim(both from " a "), trim(trailing from " a ")`).Check(testkit.Rows("a a a")) + tk.MustQuery(`select trim(leading null from " a "), trim(both null from " a "), trim(trailing null from " a ")`).Check(testkit.Rows(" ")) + tk.MustQuery(`select trim(null from " a ")`).Check(testkit.Rows("")) +} + +func TestIssue29412(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t29142_1") + tk.MustExec("drop table if exists t29142_2") + tk.MustExec("create table t29142_1(a int);") + tk.MustExec("create table t29142_2(a double);") + tk.MustExec("insert into t29142_1 value(20);") + tk.MustQuery("select sum(distinct a) as x from t29142_1 having x > some ( select a from t29142_2 where x in (a));").Check(nil) +} + +func TestIssue28650(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2;") + tk.MustExec("create table t1(a int, index(a));") + tk.MustExec("create table t2(a int, c int, b char(50), index(a,c,b));") + tk.MustExec("set tidb_enable_rate_limit_action=off;") + + var wg util.WaitGroupWrapper + sql := `explain analyze + select /*+ stream_agg(@sel_1) stream_agg(@sel_3) %s(@sel_2 t2)*/ count(1) from + ( + SELECT t2.a AS t2_external_user_ext_id, t2.b AS t2_t1_ext_id FROM t2 INNER JOIN (SELECT t1.a AS d_t1_ext_id FROM t1 GROUP BY t1.a) AS anon_1 ON anon_1.d_t1_ext_id = t2.a WHERE t2.c = 123 AND t2.b + IN ("%s") ) tmp` + + sqls := make([]string, 2) + wg.Run(func() { + inElems := make([]string, 1000) + for i := 0; i < len(inElems); i++ { + inElems[i] = fmt.Sprintf("wm_%dbDgAAwCD-v1QB%dxky-g_dxxQCw", rand.Intn(100), rand.Intn(100)) + } + sqls[0] = fmt.Sprintf(sql, "inl_join", strings.Join(inElems, "\",\"")) + sqls[1] = fmt.Sprintf(sql, "inl_hash_join", strings.Join(inElems, "\",\"")) + }) + + tk.MustExec("insert into t1 select rand()*400;") + for i := 0; i < 10; i++ { + tk.MustExec("insert into t1 select rand()*400 from t1;") + } + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionCancel + }) + defer func() { + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionLog + }) + }() + wg.Wait() + for _, sql := range sqls { + tk.MustExec("set @@tidb_mem_quota_query = 1073741824") // 1GB + require.Nil(t, tk.QueryToErr(sql)) + tk.MustExec("set @@tidb_mem_quota_query = 33554432") // 32MB, out of memory during executing + require.True(t, strings.Contains(tk.QueryToErr(sql).Error(), "Out Of Memory Quota!")) + tk.MustExec("set @@tidb_mem_quota_query = 65536") // 64KB, out of memory during building the plan + func() { + defer func() { + r := recover() + require.NotNil(t, r) + err := errors.Errorf("%v", r) + require.True(t, strings.Contains(err.Error(), "Out Of Memory Quota!")) + }() + tk.MustExec(sql) + }() + } +} + +func TestIssue30289(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + fpName := "github.com/pingcap/tidb/executor/issue30289" + require.NoError(t, failpoint.Enable(fpName, `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable(fpName)) + }() + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int)") + err := tk.QueryToErr("select /*+ hash_join(t1) */ * from t t1 join t t2 on t1.a=t2.a") + require.Regexp(t, "issue30289 build return error", err.Error()) +} + +func TestIssue29498(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("DROP TABLE IF EXISTS t1;") + tk.MustExec("CREATE TABLE t1 (t3 TIME(3), d DATE, t TIME);") + tk.MustExec("INSERT INTO t1 VALUES ('00:00:00.567', '2002-01-01', '00:00:02');") + + res := tk.MustQuery("SELECT CONCAT(IFNULL(t3, d)) AS col1 FROM t1;") + row := res.Rows()[0][0].(string) + require.Equal(t, mysql.MaxDatetimeWidthNoFsp+3+1, len(row)) + require.Equal(t, "00:00:00.567", row[len(row)-12:]) + + res = tk.MustQuery("SELECT IFNULL(t3, d) AS col1 FROM t1;") + row = res.Rows()[0][0].(string) + require.Equal(t, mysql.MaxDatetimeWidthNoFsp+3+1, len(row)) + require.Equal(t, "00:00:00.567", row[len(row)-12:]) + + res = tk.MustQuery("SELECT CONCAT(IFNULL(t, d)) AS col1 FROM t1;") + row = res.Rows()[0][0].(string) + require.Equal(t, mysql.MaxDatetimeWidthNoFsp, len(row)) + require.Equal(t, "00:00:02", row[len(row)-8:]) + + res = tk.MustQuery("SELECT IFNULL(t, d) AS col1 FROM t1;") + row = res.Rows()[0][0].(string) + require.Equal(t, mysql.MaxDatetimeWidthNoFsp, len(row)) + require.Equal(t, "00:00:02", row[len(row)-8:]) + + res = tk.MustQuery("SELECT CONCAT(xx) FROM (SELECT t3 AS xx FROM t1 UNION SELECT d FROM t1) x ORDER BY -xx LIMIT 1;") + row = res.Rows()[0][0].(string) + require.Equal(t, mysql.MaxDatetimeWidthNoFsp+3+1, len(row)) + require.Equal(t, "00:00:00.567", row[len(row)-12:]) + + res = tk.MustQuery("SELECT CONCAT(CASE WHEN d IS NOT NULL THEN t3 ELSE d END) AS col1 FROM t1;") + row = res.Rows()[0][0].(string) + require.Equal(t, mysql.MaxDatetimeWidthNoFsp+3+1, len(row)) + require.Equal(t, "00:00:00.567", row[len(row)-12:]) +} + +func TestIssue30971(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1 (id int);") + tk.MustExec("create table t2 (id int, c int);") + + testCases := []struct { + sql string + fields int + }{ + // Fix a bug that the column length field returned to client is incorrect using MySQL prepare protocol. + {"select * from t1 union select 1 from t1", 1}, + {"select c from t2 union select * from t1", 1}, + {"select * from t1", 1}, + {"select * from t2 where c in (select * from t1)", 2}, + {"insert into t1 values (?)", 0}, + {"update t1 set id = ?", 0}, + } + for _, test := range testCases { + _, _, fields, err := tk.Session().PrepareStmt(test.sql) + require.NoError(t, err) + require.Len(t, fields, test.fields) + } +} + +func TestIndexJoin31494(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("drop table if exists t1, t2;") + tk.MustExec("create table t1(a int(11) default null, b int(11) default null, key(b));") + insertStr := "insert into t1 values(1, 1)" + for i := 1; i < 32768; i++ { + insertStr += fmt.Sprintf(", (%d, %d)", i, i) + } + tk.MustExec(insertStr) + tk.MustExec("create table t2(a int(11) default null, b int(11) default null, c int(11) default null)") + insertStr = "insert into t2 values(1, 1, 1)" + for i := 1; i < 32768; i++ { + insertStr += fmt.Sprintf(", (%d, %d, %d)", i, i, i) + } + tk.MustExec(insertStr) + sm := &mockSessionManager1{ + PS: make([]*util.ProcessInfo, 0), + } + tk.Session().SetSessionManager(sm) + dom.ExpensiveQueryHandle().SetSessionManager(sm) + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionCancel + }) + require.True(t, tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil)) + tk.MustExec("set @@tidb_mem_quota_query=2097152;") + // This bug will be reproduced in 10 times. + for i := 0; i < 10; i++ { + err := tk.QueryToErr("select /*+ inl_join(t1) */ * from t1 right join t2 on t1.b=t2.b;") + require.Error(t, err) + require.Regexp(t, "Out Of Memory Quota!.*", err.Error()) + err = tk.QueryToErr("select /*+ inl_hash_join(t1) */ * from t1 right join t2 on t1.b=t2.b;") + require.Error(t, err) + require.Regexp(t, "Out Of Memory Quota!.*", err.Error()) + } +} + +// Details at https://github.com/pingcap/tidb/issues/31038 +func TestFix31038(t *testing.T) { + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.EnableCollectExecutionInfo = false + }) + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t123") + tk.MustExec("create table t123 (id int);") + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/store/copr/disable-collect-execution", `return(true)`)) + tk.MustQuery("select * from t123;") + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/copr/disable-collect-execution")) +} + +func TestFix31530(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk2.MustExec("use test") + defer func() { + tk.MustExec("drop table if exists t1") + }() + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (id int primary key, v int)") + tk.MustExec("insert into t1 values(1, 10)") + tk.MustExec("begin pessimistic") + tk.MustQuery("select * from t1").Check(testkit.Rows("1 10")) + + // update t1 before session1 transaction not finished + tk2.MustExec("update t1 set v=11 where id=1") + + tk.MustQuery("(select 'a' as c, id, v from t1 for update) union all (select 'b', id, v from t1) order by c").Check(testkit.Rows("a 1 11", "b 1 10")) + tk.MustQuery("(select 'a' as c, id, v from t1) union all (select 'b', id, v from t1 for update) order by c").Check(testkit.Rows("a 1 10", "b 1 11")) + tk.MustQuery("(select 'a' as c, id, v from t1 where id=1 for update) union all (select 'b', id, v from t1 where id=1) order by c").Check(testkit.Rows("a 1 11", "b 1 10")) + tk.MustQuery("(select 'a' as c, id, v from t1 where id=1) union all (select 'b', id, v from t1 where id=1 for update) order by c").Check(testkit.Rows("a 1 10", "b 1 11")) + tk.MustExec("rollback") +} + +func TestFix31537(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec(`CREATE TABLE trade ( + t_id bigint(16) NOT NULL AUTO_INCREMENT, + t_dts datetime NOT NULL, + t_st_id char(4) NOT NULL, + t_tt_id char(3) NOT NULL, + t_is_cash tinyint(1) NOT NULL, + t_s_symb char(15) NOT NULL, + t_qty mediumint(7) NOT NULL, + t_bid_price decimal(8,2) NOT NULL, + t_ca_id bigint(12) NOT NULL, + t_exec_name varchar(49) NOT NULL, + t_trade_price decimal(8,2) DEFAULT NULL, + t_chrg decimal(10,2) NOT NULL, + t_comm decimal(10,2) NOT NULL, + t_tax decimal(10,2) NOT NULL, + t_lifo tinyint(1) NOT NULL, + PRIMARY KEY (t_id) /*T![clustered_index] CLUSTERED */, + KEY i_t_ca_id_dts (t_ca_id,t_dts), + KEY i_t_s_symb_dts (t_s_symb,t_dts), + CONSTRAINT fk_trade_st FOREIGN KEY (t_st_id) REFERENCES status_type (st_id), + CONSTRAINT fk_trade_tt FOREIGN KEY (t_tt_id) REFERENCES trade_type (tt_id), + CONSTRAINT fk_trade_s FOREIGN KEY (t_s_symb) REFERENCES security (s_symb), + CONSTRAINT fk_trade_ca FOREIGN KEY (t_ca_id) REFERENCES customer_account (ca_id) +) ;`) + tk.MustExec(`CREATE TABLE trade_history ( + th_t_id bigint(16) NOT NULL, + th_dts datetime NOT NULL, + th_st_id char(4) NOT NULL, + PRIMARY KEY (th_t_id,th_st_id) /*T![clustered_index] NONCLUSTERED */, + KEY i_th_t_id_dts (th_t_id,th_dts), + CONSTRAINT fk_trade_history_t FOREIGN KEY (th_t_id) REFERENCES trade (t_id), + CONSTRAINT fk_trade_history_st FOREIGN KEY (th_st_id) REFERENCES status_type (st_id) +); +`) + tk.MustExec(`CREATE TABLE status_type ( + st_id char(4) NOT NULL, + st_name char(10) NOT NULL, + PRIMARY KEY (st_id) /*T![clustered_index] NONCLUSTERED */ +);`) + tk.MustQuery(`trace plan SELECT T_ID, T_S_SYMB, T_QTY, ST_NAME, TH_DTS FROM ( SELECT T_ID AS ID FROM TRADE WHERE T_CA_ID = 43000014236 ORDER BY T_DTS DESC LIMIT 10 ) T, TRADE, TRADE_HISTORY, STATUS_TYPE WHERE TRADE.T_ID = ID AND TRADE_HISTORY.TH_T_ID = TRADE.T_ID AND STATUS_TYPE.ST_ID = TRADE_HISTORY.TH_ST_ID ORDER BY TH_DTS DESC LIMIT 30;`) +} + +func TestIssue30382(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@session.tidb_enable_list_partition = ON;") + tk.MustExec("drop table if exists t1, t2;") + tk.MustExec("create table t1 (c_int int, c_str varchar(40), c_decimal decimal(12, 6), primary key (c_int) , key(c_str(2)) , key(c_decimal) ) partition by list (c_int) ( partition p0 values IN (1, 5, 9, 13, 17, 21, 25, 29, 33, 37), partition p1 values IN (2, 6, 10, 14, 18, 22, 26, 30, 34, 38), partition p2 values IN (3, 7, 11, 15, 19, 23, 27, 31, 35, 39), partition p3 values IN (4, 8, 12, 16, 20, 24, 28, 32, 36, 40)) ;") + tk.MustExec("create table t2 (c_int int, c_str varchar(40), c_decimal decimal(12, 6), primary key (c_int) , key(c_str) , key(c_decimal) ) partition by hash (c_int) partitions 4;") + tk.MustExec("insert into t1 values (6, 'musing mayer', 1.280), (7, 'wizardly heisenberg', 6.589), (8, 'optimistic swirles', 9.633), (9, 'hungry haslett', 2.659), (10, 'stupefied wiles', 2.336);") + tk.MustExec("insert into t2 select * from t1 ;") + tk.MustExec("begin;") + tk.MustQuery("select * from t1 where c_str <> any (select c_str from t2 where c_decimal < 5) for update;").Sort().Check(testkit.Rows( + "10 stupefied wiles 2.336000", + "6 musing mayer 1.280000", + "7 wizardly heisenberg 6.589000", + "8 optimistic swirles 9.633000", + "9 hungry haslett 2.659000")) + tk.MustQuery("explain format = 'brief' select * from t1 where c_str <> any (select c_str from t2 where c_decimal < 5) for update;").Check(testkit.Rows( + "SelectLock 6400.00 root for update 0", + "└─HashJoin 6400.00 root CARTESIAN inner join, other cond:or(gt(Column#8, 1), or(ne(test.t1.c_str, Column#7), if(ne(Column#9, 0), NULL, 0)))", + " ├─Selection(Build) 0.80 root ne(Column#10, 0)", + " │ └─StreamAgg 1.00 root funcs:max(Column#17)->Column#7, funcs:count(distinct Column#18)->Column#8, funcs:sum(Column#19)->Column#9, funcs:count(1)->Column#10", + " │ └─Projection 3323.33 root test.t2.c_str, test.t2.c_str, cast(isnull(test.t2.c_str), decimal(20,0) BINARY)->Column#19", + " │ └─TableReader 3323.33 root partition:all data:Selection", + " │ └─Selection 3323.33 cop[tikv] lt(test.t2.c_decimal, 5)", + " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", + " └─TableReader(Probe) 8000.00 root partition:all data:Selection", + " └─Selection 8000.00 cop[tikv] if(isnull(test.t1.c_str), NULL, 1)", + " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo")) + tk.MustExec("commit") +} + +func Test12201(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists e") + tk.MustExec("create table e (e enum('a', 'b'))") + tk.MustExec("insert into e values ('a'), ('b')") + tk.MustQuery("select * from e where case 1 when 0 then e end").Check(testkit.Rows()) + tk.MustQuery("select * from e where case 1 when 1 then e end").Check(testkit.Rows("a", "b")) + tk.MustQuery("select * from e where case e when 1 then e end").Check(testkit.Rows("a")) + tk.MustQuery("select * from e where case 1 when e then e end").Check(testkit.Rows("a")) +} + +func TestIssue21451(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (en enum('c', 'b', 'a'));") + tk.MustExec("insert into t values ('a'), ('b'), ('c');") + tk.MustQuery("select max(en) from t;").Check(testkit.Rows("c")) + tk.MustQuery("select min(en) from t;").Check(testkit.Rows("a")) + tk.MustQuery("select * from t order by en;").Check(testkit.Rows("c", "b", "a")) + + tk.MustExec("drop table t") + tk.MustExec("create table t(s set('c', 'b', 'a'));") + tk.MustExec("insert into t values ('a'), ('b'), ('c');") + tk.MustQuery("select max(s) from t;").Check(testkit.Rows("c")) + tk.MustQuery("select min(s) from t;").Check(testkit.Rows("a")) + + tk.MustExec("drop table t") + tk.MustExec("create table t(id int, en enum('c', 'b', 'a'))") + tk.MustExec("insert into t values (1, 'a'),(2, 'b'), (3, 'c'), (1, 'c');") + tk.MustQuery("select id, max(en) from t where id=1 group by id;").Check(testkit.Rows("1 c")) + tk.MustQuery("select id, min(en) from t where id=1 group by id;").Check(testkit.Rows("1 a")) + tk.MustExec("drop table t") + + tk.MustExec("create table t(id int, s set('c', 'b', 'a'));") + tk.MustExec("insert into t values (1, 'a'),(2, 'b'), (3, 'c'), (1, 'c');") + tk.MustQuery("select id, max(s) from t where id=1 group by id;").Check(testkit.Rows("1 c")) + tk.MustQuery("select id, min(s) from t where id=1 group by id;").Check(testkit.Rows("1 a")) + + tk.MustExec("drop table t") + tk.MustExec("create table t(e enum('e','d','c','b','a'))") + tk.MustExec("insert into t values ('e'),('d'),('c'),('b'),('a');") + tk.MustQuery("select * from t order by e limit 1;").Check(testkit.Rows("e")) + + tk.MustExec("drop table t") + tk.MustExec("create table t(s set('e', 'd', 'c', 'b', 'a'))") + tk.MustExec("insert into t values ('e'),('d'),('c'),('b'),('a');") + tk.MustQuery("select * from t order by s limit 1;").Check(testkit.Rows("e")) + tk.MustExec("drop table t") +} + +func TestIssue15563(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustQuery("select distinct 0.7544678906163867 / 0.68234634;").Check(testkit.Rows("1.10569639842486251190")) +} + +func TestIssue22231(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t_issue_22231") + tk.MustExec("create table t_issue_22231(a datetime)") + tk.MustExec("insert into t_issue_22231 values('2020--05-20 01:22:12')") + tk.MustQuery("select * from t_issue_22231 where a >= '2020-05-13 00:00:00 00:00:00' and a <= '2020-05-28 23:59:59 00:00:00'").Check(testkit.Rows("2020-05-20 01:22:12")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1292 Truncated incorrect datetime value: '2020-05-13 00:00:00 00:00:00'", "Warning 1292 Truncated incorrect datetime value: '2020-05-28 23:59:59 00:00:00'")) + + tk.MustQuery("select cast('2020-10-22 10:31-10:12' as datetime)").Check(testkit.Rows("2020-10-22 10:31:10")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1292 Truncated incorrect datetime value: '2020-10-22 10:31-10:12'")) + tk.MustQuery("select cast('2020-05-28 23:59:59 00:00:00' as datetime)").Check(testkit.Rows("2020-05-28 23:59:59")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1292 Truncated incorrect datetime value: '2020-05-28 23:59:59 00:00:00'")) + tk.MustExec("drop table if exists t_issue_22231") +} + +// TestIssue2612 is related with https://github.com/pingcap/tidb/issues/2612 +func TestIssue2612(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec(`drop table if exists t`) + tk.MustExec(`create table t ( + create_at datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + finish_at datetime NOT NULL DEFAULT '1000-01-01 00:00:00');`) + tk.MustExec(`insert into t values ('2016-02-13 15:32:24', '2016-02-11 17:23:22');`) + rs, err := tk.Exec(`select timediff(finish_at, create_at) from t;`) + require.NoError(t, err) + req := rs.NewChunk(nil) + err = rs.Next(context.Background(), req) + require.NoError(t, err) + require.Equal(t, "-46:09:02", req.GetRow(0).GetDuration(0, 0).String()) + require.Nil(t, rs.Close()) +} + +// TestIssue345 is related with https://github.com/pingcap/tidb/issues/345 +func TestIssue345(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec(`drop table if exists t1, t2`) + tk.MustExec(`create table t1 (c1 int);`) + tk.MustExec(`create table t2 (c2 int);`) + tk.MustExec(`insert into t1 values (1);`) + tk.MustExec(`insert into t2 values (2);`) + tk.MustExec(`update t1, t2 set t1.c1 = 2, t2.c2 = 1;`) + tk.MustExec(`update t1, t2 set c1 = 2, c2 = 1;`) + tk.MustExec(`update t1 as a, t2 as b set a.c1 = 2, b.c2 = 1;`) + + // Check t1 content + r := tk.MustQuery("SELECT * FROM t1;") + r.Check(testkit.Rows("2")) + // Check t2 content + r = tk.MustQuery("SELECT * FROM t2;") + r.Check(testkit.Rows("1")) + + tk.MustExec(`update t1 as a, t2 as t1 set a.c1 = 1, t1.c2 = 2;`) + // Check t1 content + r = tk.MustQuery("SELECT * FROM t1;") + r.Check(testkit.Rows("1")) + // Check t2 content + r = tk.MustQuery("SELECT * FROM t2;") + r.Check(testkit.Rows("2")) + + _, err := tk.Exec(`update t1 as a, t2 set t1.c1 = 10;`) + require.Error(t, err) +} + +func TestIssue5055(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec(`drop table if exists t1, t2`) + tk.MustExec(`create table t1 (a int);`) + tk.MustExec(`create table t2 (a int);`) + tk.MustExec(`insert into t1 values(1);`) + tk.MustExec(`insert into t2 values(1);`) + result := tk.MustQuery("select tbl1.* from (select t1.a, 1 from t1) tbl1 left join t2 tbl2 on tbl1.a = tbl2.a order by tbl1.a desc limit 1;") + result.Check(testkit.Rows("1 1")) +} + +// TestIssue4024 This tests https://github.com/pingcap/tidb/issues/4024 +func TestIssue4024(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database test2") + tk.MustExec("use test2") + tk.MustExec("create table t(a int)") + tk.MustExec("insert into t values(1)") + tk.MustExec("use test") + tk.MustExec("create table t(a int)") + tk.MustExec("insert into t values(1)") + tk.MustExec("update t, test2.t set test2.t.a=2") + tk.MustQuery("select * from t").Check(testkit.Rows("1")) + tk.MustQuery("select * from test2.t").Check(testkit.Rows("2")) + tk.MustExec("update test.t, test2.t set test.t.a=3") + tk.MustQuery("select * from t").Check(testkit.Rows("3")) + tk.MustQuery("select * from test2.t").Check(testkit.Rows("2")) +} + +func TestIssue5666(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("set @@profiling=1") + tk.MustQuery("SELECT QUERY_ID, SUM(DURATION) AS SUM_DURATION FROM INFORMATION_SCHEMA.PROFILING GROUP BY QUERY_ID;").Check(testkit.Rows("0 0")) +} + +func TestIssue5341(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("drop table if exists test.t") + tk.MustExec("create table test.t(a char)") + tk.MustExec("insert into test.t value('a')") + tk.MustQuery("select * from test.t where a < 1 order by a limit 0;").Check(testkit.Rows()) +} + +func TestIssue16921(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a float);") + tk.MustExec("create index a on t(a);") + tk.MustExec("insert into t values (1.0), (NULL), (0), (2.0);") + tk.MustQuery("select `a` from `t` use index (a) where !`a`;").Check(testkit.Rows("0")) + tk.MustQuery("select `a` from `t` ignore index (a) where !`a`;").Check(testkit.Rows("0")) + tk.MustQuery("select `a` from `t` use index (a) where `a`;").Check(testkit.Rows("1", "2")) + tk.MustQuery("select `a` from `t` ignore index (a) where `a`;").Check(testkit.Rows("1", "2")) + tk.MustQuery("select a from t use index (a) where not a is true;").Check(testkit.Rows("", "0")) + tk.MustQuery("select a from t use index (a) where not not a is true;").Check(testkit.Rows("1", "2")) + tk.MustQuery("select a from t use index (a) where not not a;").Check(testkit.Rows("1", "2")) + tk.MustQuery("select a from t use index (a) where not not not a is true;").Check(testkit.Rows("", "0")) + tk.MustQuery("select a from t use index (a) where not not not a;").Check(testkit.Rows("0")) +} + +func TestIssue19100(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2;") + tk.MustExec("create table t1 (c decimal);") + tk.MustExec("create table t2 (c decimal, key(c));") + tk.MustExec("insert into t1 values (null);") + tk.MustExec("insert into t2 values (null);") + tk.MustQuery("select count(*) from t1 where not c;").Check(testkit.Rows("0")) + tk.MustQuery("select count(*) from t2 where not c;").Check(testkit.Rows("0")) + tk.MustQuery("select count(*) from t1 where c;").Check(testkit.Rows("0")) + tk.MustQuery("select count(*) from t2 where c;").Check(testkit.Rows("0")) +} + +func TestIssue27232(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a timestamp)") + tk.MustExec("insert into t values (\"1970-07-23 10:04:59\"), (\"2038-01-19 03:14:07\")") + tk.MustQuery("select * from t where date_sub(a, interval 10 month) = date_sub(\"1970-07-23 10:04:59\", interval 10 month)").Check(testkit.Rows("1970-07-23 10:04:59")) + tk.MustQuery("select * from t where timestampadd(hour, 1, a ) = timestampadd(hour, 1, \"2038-01-19 03:14:07\")").Check(testkit.Rows("2038-01-19 03:14:07")) +} + +func TestIssue15718(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists tt;") + tk.MustExec("create table tt(a decimal(10, 0), b varchar(1), c time);") + tk.MustExec("insert into tt values(0, '2', null), (7, null, '1122'), (NULL, 'w', null), (NULL, '2', '3344'), (NULL, NULL, '0'), (7, 'f', '33');") + tk.MustQuery("select a and b as d, a or c as e from tt;").Check(testkit.Rows("0 ", " 1", "0 ", " 1", " ", "0 1")) + + tk.MustExec("drop table if exists tt;") + tk.MustExec("create table tt(a decimal(10, 0), b varchar(1), c time);") + tk.MustExec("insert into tt values(0, '2', '123'), (7, null, '1122'), (null, 'w', null);") + tk.MustQuery("select a and b as d, a, b from tt order by d limit 1;").Check(testkit.Rows(" 7 ")) + tk.MustQuery("select b or c as d, b, c from tt order by d limit 1;").Check(testkit.Rows(" w ")) + + tk.MustExec("drop table if exists t0;") + tk.MustExec("CREATE TABLE t0(c0 FLOAT);") + tk.MustExec("INSERT INTO t0(c0) VALUES (NULL);") + tk.MustQuery("SELECT * FROM t0 WHERE NOT(0 OR t0.c0);").Check(testkit.Rows()) +} + +func TestIssue15767(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists tt;") + tk.MustExec("create table t(a int, b char);") + tk.MustExec("insert into t values (1,'s'),(2,'b'),(1,'c'),(2,'e'),(1,'a');") + tk.MustExec("insert into t select * from t;") + tk.MustExec("insert into t select * from t;") + tk.MustExec("insert into t select * from t;") + tk.MustQuery("select b, count(*) from ( select b from t order by a limit 20 offset 2) as s group by b order by b;").Check(testkit.Rows("a 6", "c 7", "s 7")) +} + +func TestIssue16025(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t0;") + tk.MustExec("CREATE TABLE t0(c0 NUMERIC PRIMARY KEY);") + tk.MustExec("INSERT IGNORE INTO t0(c0) VALUES (NULL);") + tk.MustQuery("SELECT * FROM t0 WHERE c0;").Check(testkit.Rows()) +} + +func TestIssue16854(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t;") + tk.MustExec("CREATE TABLE `t` ( `a` enum('WAITING','PRINTED','STOCKUP','CHECKED','OUTSTOCK','PICKEDUP','WILLBACK','BACKED') DEFAULT NULL)") + tk.MustExec("insert into t values(1),(2),(3),(4),(5),(6),(7);") + for i := 0; i < 7; i++ { + tk.MustExec("insert into t select * from t;") + } + tk.MustExec("set @@tidb_max_chunk_size=100;") + tk.MustQuery("select distinct a from t order by a").Check(testkit.Rows("WAITING", "PRINTED", "STOCKUP", "CHECKED", "OUTSTOCK", "PICKEDUP", "WILLBACK")) + tk.MustExec("drop table t") + + tk.MustExec("CREATE TABLE `t` ( `a` set('WAITING','PRINTED','STOCKUP','CHECKED','OUTSTOCK','PICKEDUP','WILLBACK','BACKED') DEFAULT NULL)") + tk.MustExec("insert into t values(1),(2),(3),(4),(5),(6),(7);") + for i := 0; i < 7; i++ { + tk.MustExec("insert into t select * from t;") + } + tk.MustExec("set @@tidb_max_chunk_size=100;") + tk.MustQuery("select distinct a from t order by a").Check(testkit.Rows("WAITING", "PRINTED", "WAITING,PRINTED", "STOCKUP", "WAITING,STOCKUP", "PRINTED,STOCKUP", "WAITING,PRINTED,STOCKUP")) + tk.MustExec("drop table t") +} + +func issue20975Prepare(t *testing.T, store kv.Storage) (*testkit.TestKit, *testkit.TestKit) { + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk1.MustExec("drop table if exists t1, t2") + tk2.MustExec("use test") + tk1.MustExec("create table t1(id int primary key, c int)") + tk1.MustExec("insert into t1 values(1, 10), (2, 20)") + return tk1, tk2 +} + +func TestIssue20975UpdateNoChange(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk1, tk2 := issue20975Prepare(t, store) + tk1.MustExec("begin pessimistic") + tk1.MustExec("update t1 set c=c") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") +} + +func TestIssue20975SelectForUpdate(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk1, tk2 := issue20975Prepare(t, store) + tk1.MustExec("begin") + tk1.MustExec("select * from t1 for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") +} + +func TestIssue20975SelectForUpdatePointGet(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk1, tk2 := issue20975Prepare(t, store) + tk1.MustExec("begin") + tk1.MustExec("select * from t1 where id=1 for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 where id=1 for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") +} + +func TestIssue20975SelectForUpdateBatchPointGet(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk1, tk2 := issue20975Prepare(t, store) + tk1.MustExec("begin") + tk1.MustExec("select * from t1 where id in (1, 2) for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 where id in (1, 2) for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") +} + +func issue20975PreparePartitionTable(t *testing.T, store kv.Storage) (*testkit.TestKit, *testkit.TestKit) { + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk1.MustExec("drop table if exists t1, t2") + tk2.MustExec("use test") + tk1.MustExec(`create table t1(id int primary key, c int) partition by range (id) ( + partition p1 values less than (10), + partition p2 values less than (20) + )`) + tk1.MustExec("insert into t1 values(1, 10), (2, 20), (11, 30), (12, 40)") + return tk1, tk2 +} + +func TestIssue20975UpdateNoChangeWithPartitionTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk1, tk2 := issue20975PreparePartitionTable(t, store) + + tk1.MustExec("begin pessimistic") + tk1.MustExec("update t1 set c=c") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") +} + +func TestIssue20975SelectForUpdateWithPartitionTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk1, tk2 := issue20975PreparePartitionTable(t, store) + tk1.MustExec("begin") + tk1.MustExec("select * from t1 for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") +} + +func TestIssue20975SelectForUpdatePointGetWithPartitionTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk1, tk2 := issue20975PreparePartitionTable(t, store) + tk1.MustExec("begin") + tk1.MustExec("select * from t1 where id=1 for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin") + tk1.MustExec("select * from t1 where id=12 for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 where id=1 for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 where id=12 for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") +} + +func TestIssue20975SelectForUpdateBatchPointGetWithPartitionTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk1, tk2 := issue20975PreparePartitionTable(t, store) + tk1.MustExec("begin") + tk1.MustExec("select * from t1 where id in (1, 2) for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin") + tk1.MustExec("select * from t1 where id in (11, 12) for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") + + tk1.MustExec("begin") + tk1.MustExec("select * from t1 where id in (1, 11) for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 where id in (1, 2) for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 where id in (11, 12) for update") + tk2.MustExec("create table t2(a int)") + tk1.MustExec("commit") + + tk1.MustExec("begin pessimistic") + tk1.MustExec("select * from t1 where id in (1, 11) for update") + tk2.MustExec("drop table t2") + tk1.MustExec("commit") +} + +func TestIssue20305(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t2 (a year(4))") + tk.MustExec("insert into t2 values(69)") + tk.MustQuery("select * from t2 where a <= 69").Check(testkit.Rows("2069")) + // the following test is a regression test that matches MySQL's behavior. + tk.MustExec("drop table if exists t3") + tk.MustExec("CREATE TABLE `t3` (`y` year DEFAULT NULL, `a` int DEFAULT NULL)") + tk.MustExec("INSERT INTO `t3` VALUES (2069, 70), (2010, 11), (2155, 2156), (2069, 69)") + tk.MustQuery("SELECT * FROM `t3` where y <= a").Check(testkit.Rows("2155 2156")) +} + +func TestIssue22817(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t3") + tk.MustExec("create table t3 (a year)") + tk.MustExec("insert into t3 values (1991), (\"1992\"), (\"93\"), (94)") + tk.MustQuery("select * from t3 where a >= NULL").Check(testkit.Rows()) +} + +func TestIssue13953(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE `t` (`id` int(11) DEFAULT NULL, `tp_bigint` bigint(20) DEFAULT NULL )") + tk.MustExec("insert into t values(0,1),(1,9215570218099803537)") + tk.MustQuery("select A.tp_bigint,B.id from t A join t B on A.id < B.id * 16 where A.tp_bigint = B.id;").Check( + testkit.Rows("1 1")) +} + +func Test17780(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t0") + tk.MustExec("create table t0 (c0 double)") + tk.MustExec("insert into t0 values (1e30)") + tk.MustExec("update t0 set c0=0 where t0.c0 like 0") + // the update should not affect c0 + tk.MustQuery("select count(*) from t0 where c0 = 0").Check(testkit.Rows("0")) +} + +func TestIssue9918(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a year)") + tk.MustExec("insert into t values(0)") + tk.MustQuery("select cast(a as char) from t").Check(testkit.Rows("0000")) +} + +func Test13004(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + // see https://dev.mysql.com/doc/refman/5.6/en/date-and-time-literals.html, timestamp here actually produces a datetime + tk.MustQuery("SELECT TIMESTAMP '9999-01-01 00:00:00'").Check(testkit.Rows("9999-01-01 00:00:00")) +} + +func Test12178(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists ta") + tk.MustExec("create table ta(id decimal(60,2))") + tk.MustExec("insert into ta values (JSON_EXTRACT('{\"c\": \"1234567890123456789012345678901234567890123456789012345\"}', '$.c'))") + tk.MustQuery("select * from ta").Check(testkit.Rows("1234567890123456789012345678901234567890123456789012345.00")) +} + +func Test11883(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (f1 json)") + tk.MustExec("insert into t1(f1) values ('\"asd\"'),('\"asdf\"'),('\"asasas\"')") + tk.MustQuery("select f1 from t1 where json_extract(f1,\"$\") in (\"asd\",\"asasas\",\"asdf\")").Check(testkit.Rows("\"asd\"", "\"asdf\"", "\"asasas\"")) + tk.MustQuery("select f1 from t1 where json_extract(f1, '$') = 'asd'").Check(testkit.Rows("\"asd\"")) + // MySQL produces empty row for the following SQL, I doubt it should be MySQL's bug. + tk.MustQuery("select f1 from t1 where case json_extract(f1,\"$\") when \"asd\" then 1 else 0 end").Check(testkit.Rows("\"asd\"")) + tk.MustExec("delete from t1") + tk.MustExec("insert into t1 values ('{\"a\": 1}')") + // the first value in the tuple should be interpreted as string instead of JSON, so no row will be returned + tk.MustQuery("select f1 from t1 where f1 in ('{\"a\": 1}', 'asdf', 'asdf')").Check(testkit.Rows()) + // and if we explicitly cast it into a JSON value, the check will pass + tk.MustQuery("select f1 from t1 where f1 in (cast('{\"a\": 1}' as JSON), 'asdf', 'asdf')").Check(testkit.Rows("{\"a\": 1}")) + tk.MustQuery("select json_extract('\"asd\"', '$') = 'asd'").Check(testkit.Rows("1")) + tk.MustQuery("select json_extract('\"asd\"', '$') <=> 'asd'").Check(testkit.Rows("1")) + tk.MustQuery("select json_extract('\"asd\"', '$') <> 'asd'").Check(testkit.Rows("0")) + tk.MustQuery("select json_extract('{\"f\": 1.0}', '$.f') = 1.0").Check(testkit.Rows("1")) + tk.MustQuery("select json_extract('{\"f\": 1.0}', '$.f') = '1.0'").Check(testkit.Rows("0")) + tk.MustQuery("select json_extract('{\"n\": 1}', '$') = '{\"n\": 1}'").Check(testkit.Rows("0")) + tk.MustQuery("select json_extract('{\"n\": 1}', '$') <> '{\"n\": 1}'").Check(testkit.Rows("1")) +} + +func Test15492(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, b int)") + tk.MustExec("insert into t values (2, 20), (1, 10), (3, 30)") + tk.MustQuery("select a + 1 as field1, a as field2 from t order by field1, field2 limit 2").Check(testkit.Rows("2 1", "3 2")) +} + +func TestIssue23567(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + oriProbability := statistics.FeedbackProbability.Load() + statistics.FeedbackProbability.Store(1.0) + defer func() { statistics.FeedbackProbability.Store(oriProbability) }() + failpoint.Enable("github.com/pingcap/tidb/statistics/feedbackNoNDVCollect", `return("")`) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a bigint unsigned, b int, primary key(a))") + tk.MustExec("insert into t values (1, 1), (2, 2)") + tk.MustExec("analyze table t") + // The SQL should not panic. + tk.MustQuery("select count(distinct b) from t") + failpoint.Disable("github.com/pingcap/tidb/statistics/feedbackNoNDVCollect") +} + +func TestIssue33038(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t, t1") + tk.MustExec("create table t (id int, c int as (id))") + tk.MustExec("begin") + tk.MustExec("insert into t(id) values (1),(2),(3),(4)") + tk.MustExec("insert into t(id) select id from t") + tk.MustExec("insert into t(id) select id from t") + tk.MustExec("insert into t(id) select id from t") + tk.MustExec("insert into t(id) select id from t") + tk.MustExec("insert into t(id) values (5)") + tk.MustQuery("select * from t where c = 5").Check(testkit.Rows("5 5")) + + tk.MustExec("use test") + tk.MustExec("set @@tidb_max_chunk_size=16") + tk.MustExec("create table t1 (id int, c int as (id))") + tk.MustExec("insert into t1(id) values (1),(2),(3),(4)") + tk.MustExec("insert into t1(id) select id from t1") + tk.MustExec("insert into t1(id) select id from t1") + tk.MustExec("insert into t1(id) select id from t1") + tk.MustExec("insert into t1(id) values (5)") + tk.MustExec("alter table t1 cache") + + for { + tk.MustQuery("select * from t1 where c = 5").Check(testkit.Rows("5 5")) + if tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache { + break + } + } +} + +func TestIssue33214(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (col enum('a', 'b', 'c') default null)") + tk.MustExec("insert into t values ('a'), ('b'), ('c'), (null), ('c')") + tk.MustExec("alter table t cache") + for { + tk.MustQuery("select col from t t1 where (select count(*) from t t2 where t2.col = t1.col or t2.col = 'sdf') > 1;").Check(testkit.Rows("c", "c")) + if tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache { + break + } + } +} diff --git a/executor/executor_legacy_test.go b/executor/executor_legacy_test.go new file mode 100644 index 0000000000000..311d133173112 --- /dev/null +++ b/executor/executor_legacy_test.go @@ -0,0 +1,6335 @@ +// Copyright 2015 PingCAP, Inc. +// +// 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 executor_test + +import ( + "context" + "fmt" + "math" + "net" + "os" + "reflect" + "runtime" + "strconv" + "strings" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/golang/protobuf/proto" + . "github.com/pingcap/check" + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/tidb/config" + "github.com/pingcap/tidb/ddl" + ddlutil "github.com/pingcap/tidb/ddl/util" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/domain/infosync" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/executor" + "github.com/pingcap/tidb/expression" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/meta" + "github.com/pingcap/tidb/meta/autoid" + "github.com/pingcap/tidb/parser" + "github.com/pingcap/tidb/parser/auth" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/parser/terror" + "github.com/pingcap/tidb/planner" + plannercore "github.com/pingcap/tidb/planner/core" + "github.com/pingcap/tidb/server" + "github.com/pingcap/tidb/session" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/sessionctx/stmtctx" + "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/statistics" + "github.com/pingcap/tidb/store/copr" + error2 "github.com/pingcap/tidb/store/driver/error" + "github.com/pingcap/tidb/store/mockstore" + "github.com/pingcap/tidb/store/mockstore/unistore" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/table/tables" + "github.com/pingcap/tidb/tablecodec" + testkit2 "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/admin" + "github.com/pingcap/tidb/util/deadlockhistory" + "github.com/pingcap/tidb/util/gcutil" + "github.com/pingcap/tidb/util/israce" + "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/memory" + "github.com/pingcap/tidb/util/mock" + "github.com/pingcap/tidb/util/rowcodec" + "github.com/pingcap/tidb/util/testkit" + "github.com/pingcap/tidb/util/testleak" + "github.com/pingcap/tidb/util/timeutil" + topsqlstate "github.com/pingcap/tidb/util/topsql/state" + "github.com/pingcap/tipb/go-tipb" + "github.com/stretchr/testify/require" + "github.com/tikv/client-go/v2/oracle" + "github.com/tikv/client-go/v2/testutils" + "github.com/tikv/client-go/v2/tikv" + "github.com/tikv/client-go/v2/tikvrpc" + "google.golang.org/grpc" +) + +func TestT(t *testing.T) { + CustomVerboseFlag = true + *CustomParallelSuiteFlag = true + + TestingT(t) +} + +var _ = Suite(&testSuite{&baseTestSuite{}}) +var _ = Suite(&testSuiteP1{&baseTestSuite{}}) +var _ = Suite(&testSuiteP2{&baseTestSuite{}}) +var _ = Suite(&testSuite1{}) +var _ = SerialSuites(&testSerialSuite2{}) +var _ = SerialSuites(&testSuiteWithCliBaseCharset{}) +var _ = Suite(&testSuite2{&baseTestSuite{}}) +var _ = Suite(&testSuite3{&baseTestSuite{}}) +var _ = Suite(&testSuite6{&baseTestSuite{}}) +var _ = Suite(&testSuite8{&baseTestSuite{}}) +var _ = SerialSuites(&testRecoverTable{}) +var _ = SerialSuites(&testClusterTableSuite{}) +var _ = SerialSuites(&testSplitTable{&baseTestSuite{}}) +var _ = SerialSuites(&testSerialSuite1{&baseTestSuite{}}) +var _ = SerialSuites(&testSlowQuery{&baseTestSuite{}}) +var _ = SerialSuites(&globalIndexSuite{&baseTestSuite{}}) +var _ = SerialSuites(&testSerialSuite{&baseTestSuite{}}) +var _ = SerialSuites(&testCoprCache{}) +var _ = SerialSuites(&testResourceTagSuite{&baseTestSuite{}}) + +type testSuite struct{ *baseTestSuite } +type testSuiteP1 struct{ *baseTestSuite } +type testSuiteP2 struct{ *baseTestSuite } +type testSplitTable struct{ *baseTestSuite } +type testSlowQuery struct{ *baseTestSuite } +type globalIndexSuite struct{ *baseTestSuite } +type testSerialSuite struct{ *baseTestSuite } +type testCoprCache struct { + store kv.Storage + dom *domain.Domain + cls testutils.Cluster +} +type testResourceTagSuite struct{ *baseTestSuite } + +// MockGC is used to make GC work in the test environment. +func MockGC(tk *testkit.TestKit) (string, string, string, func()) { + originGC := ddlutil.IsEmulatorGCEnable() + resetGC := func() { + if originGC { + ddlutil.EmulatorGCEnable() + } else { + ddlutil.EmulatorGCDisable() + } + } + + // disable emulator GC. + // Otherwise emulator GC will delete table record as soon as possible after execute drop table ddl. + ddlutil.EmulatorGCDisable() + gcTimeFormat := "20060102-15:04:05 -0700 MST" + timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) + timeAfterDrop := time.Now().Add(48 * 60 * 60 * time.Second).Format(gcTimeFormat) + safePointSQL := `INSERT HIGH_PRIORITY INTO mysql.tidb VALUES ('tikv_gc_safe_point', '%[1]s', '') + ON DUPLICATE KEY + UPDATE variable_value = '%[1]s'` + // clear GC variables first. + tk.MustExec("delete from mysql.tidb where variable_name in ( 'tikv_gc_safe_point','tikv_gc_enable' )") + return timeBeforeDrop, timeAfterDrop, safePointSQL, resetGC +} + +type baseTestSuite struct { + cluster testutils.Cluster + store kv.Storage + domain *domain.Domain + *parser.Parser + ctx *mock.Context // nolint:structcheck +} + +func (s *baseTestSuite) SetUpSuite(c *C) { + s.Parser = parser.New() + store, err := mockstore.NewMockStore( + mockstore.WithClusterInspector(func(c testutils.Cluster) { + mockstore.BootstrapWithSingleStore(c) + s.cluster = c + }), + ) + c.Assert(err, IsNil) + s.store = store + session.SetSchemaLease(0) + session.DisableStats4Test() + d, err := session.BootstrapSession(s.store) + c.Assert(err, IsNil) + se, err := session.CreateSession4Test(s.store) + c.Assert(err, IsNil) + se.Close() + d.SetStatsUpdating(true) + s.domain = d +} + +func (s *baseTestSuite) TearDownSuite(c *C) { + s.domain.Close() + c.Assert(s.store.Close(), IsNil) +} + +func (s *globalIndexSuite) SetUpSuite(c *C) { + s.baseTestSuite.SetUpSuite(c) + config.UpdateGlobal(func(conf *config.Config) { + conf.EnableGlobalIndex = true + }) +} + +func (s *testSuite) TearDownTest(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + r := tk.MustQuery("show tables") + for _, tb := range r.Rows() { + tableName := tb[0] + tk.MustExec(fmt.Sprintf("drop table %v", tableName)) + } +} + +func (s *testSuite3) TestAdmin(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists admin_test") + tk.MustExec("create table admin_test (c1 int, c2 int, c3 int default 1, index (c1))") + tk.MustExec("insert admin_test (c1) values (1),(2),(NULL)") + + ctx := context.Background() + // cancel DDL jobs test + r, err := tk.Exec("admin cancel ddl jobs 1") + c.Assert(err, IsNil, Commentf("err %v", err)) + req := r.NewChunk(nil) + err = r.Next(ctx, req) + c.Assert(err, IsNil) + row := req.GetRow(0) + c.Assert(row.Len(), Equals, 2) + c.Assert(row.GetString(0), Equals, "1") + c.Assert(row.GetString(1), Matches, "*DDL Job:1 not found") + + // show ddl test; + r, err = tk.Exec("admin show ddl") + c.Assert(err, IsNil) + req = r.NewChunk(nil) + err = r.Next(ctx, req) + c.Assert(err, IsNil) + row = req.GetRow(0) + c.Assert(row.Len(), Equals, 6) + txn, err := s.store.Begin() + c.Assert(err, IsNil) + ddlInfo, err := admin.GetDDLInfo(txn) + c.Assert(err, IsNil) + c.Assert(row.GetInt64(0), Equals, ddlInfo.SchemaVer) + // TODO: Pass this test. + // rowOwnerInfos := strings.Split(row.Data[1].GetString(), ",") + // ownerInfos := strings.Split(ddlInfo.Owner.String(), ",") + // c.Assert(rowOwnerInfos[0], Equals, ownerInfos[0]) + serverInfo, err := infosync.GetServerInfoByID(ctx, row.GetString(1)) + c.Assert(err, IsNil) + c.Assert(row.GetString(2), Equals, serverInfo.IP+":"+ + strconv.FormatUint(uint64(serverInfo.Port), 10)) + c.Assert(row.GetString(3), Equals, "") + req = r.NewChunk(nil) + err = r.Next(ctx, req) + c.Assert(err, IsNil) + c.Assert(req.NumRows() == 0, IsTrue) + err = txn.Rollback() + c.Assert(err, IsNil) + + // show DDL jobs test + r, err = tk.Exec("admin show ddl jobs") + c.Assert(err, IsNil) + req = r.NewChunk(nil) + err = r.Next(ctx, req) + c.Assert(err, IsNil) + row = req.GetRow(0) + c.Assert(row.Len(), Equals, 12) + txn, err = s.store.Begin() + c.Assert(err, IsNil) + historyJobs, err := admin.GetHistoryDDLJobs(txn, admin.DefNumHistoryJobs) + c.Assert(len(historyJobs), Greater, 1) + c.Assert(len(row.GetString(1)), Greater, 0) + c.Assert(err, IsNil) + c.Assert(row.GetInt64(0), Equals, historyJobs[0].ID) + c.Assert(err, IsNil) + + r, err = tk.Exec("admin show ddl jobs 20") + c.Assert(err, IsNil) + req = r.NewChunk(nil) + err = r.Next(ctx, req) + c.Assert(err, IsNil) + row = req.GetRow(0) + c.Assert(row.Len(), Equals, 12) + c.Assert(row.GetInt64(0), Equals, historyJobs[0].ID) + c.Assert(err, IsNil) + + // show DDL job queries test + tk.MustExec("use test") + tk.MustExec("drop table if exists admin_test2") + tk.MustExec("create table admin_test2 (c1 int, c2 int, c3 int default 1, index (c1))") + result := tk.MustQuery(`admin show ddl job queries 1, 1, 1`) + result.Check(testkit.Rows()) + result = tk.MustQuery(`admin show ddl job queries 1, 2, 3, 4`) + result.Check(testkit.Rows()) + historyJobs, err = admin.GetHistoryDDLJobs(txn, admin.DefNumHistoryJobs) + result = tk.MustQuery(fmt.Sprintf("admin show ddl job queries %d", historyJobs[0].ID)) + result.Check(testkit.Rows(historyJobs[0].Query)) + c.Assert(err, IsNil) + + // check table test + tk.MustExec("create table admin_test1 (c1 int, c2 int default 1, index (c1))") + tk.MustExec("insert admin_test1 (c1) values (21),(22)") + r, err = tk.Exec("admin check table admin_test, admin_test1") + c.Assert(err, IsNil) + c.Assert(r, IsNil) + // error table name + err = tk.ExecToErr("admin check table admin_test_error") + c.Assert(err, NotNil) + // different index values + sctx := tk.Se.(sessionctx.Context) + dom := domain.GetDomain(sctx) + is := dom.InfoSchema() + c.Assert(is, NotNil) + tb, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("admin_test")) + c.Assert(err, IsNil) + c.Assert(tb.Indices(), HasLen, 1) + _, err = tb.Indices()[0].Create(mock.NewContext(), txn, types.MakeDatums(int64(10)), kv.IntHandle(1), nil) + c.Assert(err, IsNil) + err = txn.Commit(context.Background()) + c.Assert(err, IsNil) + errAdmin := tk.ExecToErr("admin check table admin_test") + c.Assert(errAdmin, NotNil) + + if config.CheckTableBeforeDrop { + err = tk.ExecToErr("drop table admin_test") + c.Assert(err.Error(), Equals, errAdmin.Error()) + + // Drop inconsistency index. + tk.MustExec("alter table admin_test drop index c1") + tk.MustExec("admin check table admin_test") + } + // checksum table test + tk.MustExec("create table checksum_with_index (id int, count int, PRIMARY KEY(id), KEY(count))") + tk.MustExec("create table checksum_without_index (id int, count int, PRIMARY KEY(id))") + r, err = tk.Exec("admin checksum table checksum_with_index, checksum_without_index") + c.Assert(err, IsNil) + res := tk.ResultSetToResult(r, Commentf("admin checksum table")) + // Mocktikv returns 1 for every table/index scan, then we will xor the checksums of a table. + // For "checksum_with_index", we have two checksums, so the result will be 1^1 = 0. + // For "checksum_without_index", we only have one checksum, so the result will be 1. + res.Sort().Check(testkit.Rows("test checksum_with_index 0 2 2", "test checksum_without_index 1 1 1")) + + tk.MustExec("drop table if exists t1;") + tk.MustExec("CREATE TABLE t1 (c2 BOOL, PRIMARY KEY (c2));") + tk.MustExec("INSERT INTO t1 SET c2 = '0';") + tk.MustExec("ALTER TABLE t1 ADD COLUMN c3 DATETIME NULL DEFAULT '2668-02-03 17:19:31';") + tk.MustExec("ALTER TABLE t1 ADD INDEX idx2 (c3);") + tk.MustExec("ALTER TABLE t1 ADD COLUMN c4 bit(10) default 127;") + tk.MustExec("ALTER TABLE t1 ADD INDEX idx3 (c4);") + tk.MustExec("admin check table t1;") + + // Test admin show ddl jobs table name after table has been droped. + tk.MustExec("drop table if exists t1;") + re := tk.MustQuery("admin show ddl jobs 1") + rows := re.Rows() + c.Assert(len(rows), Equals, 1) + c.Assert(rows[0][2], Equals, "t1") + + // Test for reverse scan get history ddl jobs when ddl history jobs queue has multiple regions. + txn, err = s.store.Begin() + c.Assert(err, IsNil) + historyJobs, err = admin.GetHistoryDDLJobs(txn, 20) + c.Assert(err, IsNil) + + // Split region for history ddl job queues. + m := meta.NewMeta(txn) + startKey := meta.DDLJobHistoryKey(m, 0) + endKey := meta.DDLJobHistoryKey(m, historyJobs[0].ID) + s.cluster.SplitKeys(startKey, endKey, int(historyJobs[0].ID/5)) + + historyJobs2, err := admin.GetHistoryDDLJobs(txn, 20) + c.Assert(err, IsNil) + c.Assert(historyJobs, DeepEquals, historyJobs2) +} + +func (s *testSuiteP2) TestAdminShowDDLJobs(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("create database if not exists test_admin_show_ddl_jobs") + tk.MustExec("use test_admin_show_ddl_jobs") + tk.MustExec("create table t (a int);") + + re := tk.MustQuery("admin show ddl jobs 1") + row := re.Rows()[0] + c.Assert(row[1], Equals, "test_admin_show_ddl_jobs") + jobID, err := strconv.Atoi(row[0].(string)) + c.Assert(err, IsNil) + + err = kv.RunInNewTxn(context.Background(), s.store, true, func(ctx context.Context, txn kv.Transaction) error { + t := meta.NewMeta(txn) + job, err := t.GetHistoryDDLJob(int64(jobID)) + c.Assert(err, IsNil) + c.Assert(job, NotNil) + // Test for compatibility. Old TiDB version doesn't have SchemaName field, and the BinlogInfo maybe nil. + // See PR: 11561. + job.BinlogInfo = nil + job.SchemaName = "" + err = t.AddHistoryDDLJob(job, true) + c.Assert(err, IsNil) + return nil + }) + c.Assert(err, IsNil) + + re = tk.MustQuery("admin show ddl jobs 1") + row = re.Rows()[0] + c.Assert(row[1], Equals, "test_admin_show_ddl_jobs") + + re = tk.MustQuery("admin show ddl jobs 1 where job_type='create table'") + row = re.Rows()[0] + c.Assert(row[1], Equals, "test_admin_show_ddl_jobs") + c.Assert(row[10], Equals, "") + + // Test the START_TIME and END_TIME field. + tk.MustExec(`set @@time_zone = 'Asia/Shanghai'`) + re = tk.MustQuery("admin show ddl jobs where end_time is not NULL") + row = re.Rows()[0] + createTime, err := types.ParseDatetime(nil, row[8].(string)) + c.Assert(err, IsNil) + startTime, err := types.ParseDatetime(nil, row[9].(string)) + c.Assert(err, IsNil) + endTime, err := types.ParseDatetime(nil, row[10].(string)) + c.Assert(err, IsNil) + tk.MustExec(`set @@time_zone = 'Europe/Amsterdam'`) + re = tk.MustQuery("admin show ddl jobs where end_time is not NULL") + row2 := re.Rows()[0] + c.Assert(row[8], Not(Equals), row2[8]) + c.Assert(row[9], Not(Equals), row2[9]) + c.Assert(row[10], Not(Equals), row2[10]) + createTime2, err := types.ParseDatetime(nil, row2[8].(string)) + c.Assert(err, IsNil) + startTime2, err := types.ParseDatetime(nil, row2[9].(string)) + c.Assert(err, IsNil) + endTime2, err := types.ParseDatetime(nil, row2[10].(string)) + c.Assert(err, IsNil) + loc, err := time.LoadLocation("Asia/Shanghai") + c.Assert(err, IsNil) + loc2, err := time.LoadLocation("Europe/Amsterdam") + c.Assert(err, IsNil) + t, err := createTime.GoTime(loc) + c.Assert(err, IsNil) + t2, err := createTime2.GoTime(loc2) + c.Assert(err, IsNil) + c.Assert(t.In(time.UTC), Equals, t2.In(time.UTC)) + t, err = startTime.GoTime(loc) + c.Assert(err, IsNil) + t2, err = startTime2.GoTime(loc2) + c.Assert(err, IsNil) + c.Assert(t.In(time.UTC), Equals, t2.In(time.UTC)) + t, err = endTime.GoTime(loc) + c.Assert(err, IsNil) + t2, err = endTime2.GoTime(loc2) + c.Assert(err, IsNil) + c.Assert(t.In(time.UTC), Equals, t2.In(time.UTC)) +} + +func (s *testSuiteP2) TestAdminShowDDLJobsInfo(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("drop database if exists test_admin_show_ddl_jobs") + tk.MustExec("drop placement policy if exists x") + tk.MustExec("drop placement policy if exists y") + defer func() { + tk.MustExec("drop database if exists test_admin_show_ddl_jobs") + tk.MustExec("drop placement policy if exists x") + tk.MustExec("drop placement policy if exists y") + }() + + // Test for issue: https://github.com/pingcap/tidb/issues/29915 + tk.MustExec("create placement policy x followers=4;") + tk.MustExec("create placement policy y " + + "PRIMARY_REGION=\"cn-east-1\" " + + "REGIONS=\"cn-east-1, cn-east-2\" " + + "FOLLOWERS=2") + tk.MustExec("create database if not exists test_admin_show_ddl_jobs") + tk.MustExec("use test_admin_show_ddl_jobs") + + tk.MustExec("create table t (a int);") + tk.MustExec("create table t1 (a int);") + + tk.MustExec("alter table t placement policy x;") + c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "alter table placement") + + tk.MustExec("rename table t to tt, t1 to tt1") + c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "rename tables") + + tk.MustExec("create table tt2 (c int) PARTITION BY RANGE (c) " + + "(PARTITION p0 VALUES LESS THAN (6)," + + "PARTITION p1 VALUES LESS THAN (11)," + + "PARTITION p2 VALUES LESS THAN (16)," + + "PARTITION p3 VALUES LESS THAN (21));") + tk.MustExec("alter table tt2 partition p0 placement policy y") + c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "alter table partition placement") + + tk.MustExec("alter table tt1 cache") + c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "alter table cache") + tk.MustExec("alter table tt1 nocache") + c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "alter table nocache") +} + +func (s *testSuiteP2) TestAdminChecksumOfPartitionedTable(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("USE test;") + tk.MustExec("DROP TABLE IF EXISTS admin_checksum_partition_test;") + tk.MustExec("CREATE TABLE admin_checksum_partition_test (a INT) PARTITION BY HASH(a) PARTITIONS 4;") + tk.MustExec("INSERT INTO admin_checksum_partition_test VALUES (1), (2);") + + r := tk.MustQuery("ADMIN CHECKSUM TABLE admin_checksum_partition_test;") + r.Check(testkit.Rows("test admin_checksum_partition_test 1 5 5")) +} + +type testCase struct { + data1 []byte + data2 []byte + expected []string + restData []byte + expectedMsg string +} + +func checkCases(tests []testCase, ld *executor.LoadDataInfo, + t *testing.T, tk *testkit2.TestKit, ctx sessionctx.Context, selectSQL, deleteSQL string) { + origin := ld.IgnoreLines + for _, tt := range tests { + ld.IgnoreLines = origin + require.Nil(t, ctx.NewTxn(context.Background())) + ctx.GetSessionVars().StmtCtx.DupKeyAsWarning = true + ctx.GetSessionVars().StmtCtx.BadNullAsWarning = true + ctx.GetSessionVars().StmtCtx.InLoadDataStmt = true + ctx.GetSessionVars().StmtCtx.InDeleteStmt = false + data, reachLimit, err1 := ld.InsertData(context.Background(), tt.data1, tt.data2) + require.NoError(t, err1) + require.False(t, reachLimit) + err1 = ld.CheckAndInsertOneBatch(context.Background(), ld.GetRows(), ld.GetCurBatchCnt()) + require.NoError(t, err1) + ld.SetMaxRowsInBatch(20000) + if tt.restData == nil { + require.Len(t, data, 0, "data1:%v, data2:%v, data:%v", string(tt.data1), string(tt.data2), string(data)) + } else { + require.Equal(t, tt.restData, data, "data1:%v, data2:%v, data:%v", string(tt.data1), string(tt.data2), string(data)) + } + ld.SetMessage() + require.Equal(t, tt.expectedMsg, tk.Session().LastMessage()) + ctx.StmtCommit() + txn, err := ctx.Txn(true) + require.NoError(t, err) + err = txn.Commit(context.Background()) + require.NoError(t, err) + r := tk.MustQuery(selectSQL) + r.Check(testkit.RowsWithSep("|", tt.expected...)) + tk.MustExec(deleteSQL) + } +} + +func (s *testSuiteP2) TestUnion(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + + testSQL := `drop table if exists union_test; create table union_test(id int);` + tk.MustExec(testSQL) + + testSQL = `drop table if exists union_test;` + tk.MustExec(testSQL) + testSQL = `create table union_test(id int);` + tk.MustExec(testSQL) + testSQL = `insert union_test values (1),(2)` + tk.MustExec(testSQL) + + testSQL = `select * from (select id from union_test union select id from union_test) t order by id;` + r := tk.MustQuery(testSQL) + r.Check(testkit.Rows("1", "2")) + + r = tk.MustQuery("select 1 union all select 1") + r.Check(testkit.Rows("1", "1")) + + r = tk.MustQuery("select 1 union all select 1 union select 1") + r.Check(testkit.Rows("1")) + + r = tk.MustQuery("select 1 as a union (select 2) order by a limit 1") + r.Check(testkit.Rows("1")) + + r = tk.MustQuery("select 1 as a union (select 2) order by a limit 1, 1") + r.Check(testkit.Rows("2")) + + r = tk.MustQuery("select id from union_test union all (select 1) order by id desc") + r.Check(testkit.Rows("2", "1", "1")) + + r = tk.MustQuery("select id as a from union_test union (select 1) order by a desc") + r.Check(testkit.Rows("2", "1")) + + r = tk.MustQuery(`select null as a union (select "abc") order by a`) + r.Check(testkit.Rows("", "abc")) + + r = tk.MustQuery(`select "abc" as a union (select 1) order by a`) + r.Check(testkit.Rows("1", "abc")) + + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (c int, d int)") + tk.MustExec("insert t1 values (NULL, 1)") + tk.MustExec("insert t1 values (1, 1)") + tk.MustExec("insert t1 values (1, 2)") + tk.MustExec("drop table if exists t2") + tk.MustExec("create table t2 (c int, d int)") + tk.MustExec("insert t2 values (1, 3)") + tk.MustExec("insert t2 values (1, 1)") + tk.MustExec("drop table if exists t3") + tk.MustExec("create table t3 (c int, d int)") + tk.MustExec("insert t3 values (3, 2)") + tk.MustExec("insert t3 values (4, 3)") + r = tk.MustQuery(`select sum(c1), c2 from (select c c1, d c2 from t1 union all select d c1, c c2 from t2 union all select c c1, d c2 from t3) x group by c2 order by c2`) + r.Check(testkit.Rows("5 1", "4 2", "4 3")) + + tk.MustExec("drop table if exists t1, t2, t3") + tk.MustExec("create table t1 (a int primary key)") + tk.MustExec("create table t2 (a int primary key)") + tk.MustExec("create table t3 (a int primary key)") + tk.MustExec("insert t1 values (7), (8)") + tk.MustExec("insert t2 values (1), (9)") + tk.MustExec("insert t3 values (2), (3)") + r = tk.MustQuery("select * from t1 union all select * from t2 union all (select * from t3) order by a limit 2") + r.Check(testkit.Rows("1", "2")) + + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1 (a int)") + tk.MustExec("create table t2 (a int)") + tk.MustExec("insert t1 values (2), (1)") + tk.MustExec("insert t2 values (3), (4)") + r = tk.MustQuery("select * from t1 union all (select * from t2) order by a limit 1") + r.Check(testkit.Rows("1")) + r = tk.MustQuery("select (select * from t1 where a != t.a union all (select * from t2 where a != t.a) order by a limit 1) from t1 t") + r.Check(testkit.Rows("1", "2")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (id int unsigned primary key auto_increment, c1 int, c2 int, index c1_c2 (c1, c2))") + tk.MustExec("insert into t (c1, c2) values (1, 1)") + tk.MustExec("insert into t (c1, c2) values (1, 2)") + tk.MustExec("insert into t (c1, c2) values (2, 3)") + r = tk.MustQuery("select * from (select * from t where t.c1 = 1 union select * from t where t.id = 1) s order by s.id") + r.Check(testkit.Rows("1 1 1", "2 1 2")) + + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t (f1 DATE)") + tk.MustExec("INSERT INTO t VALUES ('1978-11-26')") + r = tk.MustQuery("SELECT f1+0 FROM t UNION SELECT f1+0 FROM t") + r.Check(testkit.Rows("19781126")) + + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t (a int, b int)") + tk.MustExec("INSERT INTO t VALUES ('1', '1')") + r = tk.MustQuery("select b from (SELECT * FROM t UNION ALL SELECT a, b FROM t order by a) t") + r.Check(testkit.Rows("1", "1")) + + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t (a DECIMAL(4,2))") + tk.MustExec("INSERT INTO t VALUE(12.34)") + r = tk.MustQuery("SELECT 1 AS c UNION select a FROM t") + r.Sort().Check(testkit.Rows("1.00", "12.34")) + + // #issue3771 + r = tk.MustQuery("SELECT 'a' UNION SELECT CONCAT('a', -4)") + r.Sort().Check(testkit.Rows("a", "a-4")) + + // test race + tk.MustQuery("SELECT @x:=0 UNION ALL SELECT @x:=0 UNION ALL SELECT @x") + + // test field tp + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("CREATE TABLE t1 (a date)") + tk.MustExec("CREATE TABLE t2 (a date)") + tk.MustExec("SELECT a from t1 UNION select a FROM t2") + tk.MustQuery("show create table t1").Check(testkit.Rows("t1 CREATE TABLE `t1` (\n" + " `a` date DEFAULT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + + // Move from session test. + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1 (c double);") + tk.MustExec("create table t2 (c double);") + tk.MustExec("insert into t1 value (73);") + tk.MustExec("insert into t2 value (930);") + // If set unspecified column flen to 0, it will cause bug in union. + // This test is used to prevent the bug reappear. + tk.MustQuery("select c from t1 union (select c from t2) order by c").Check(testkit.Rows("73", "930")) + + // issue 5703 + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a date)") + tk.MustExec("insert into t value ('2017-01-01'), ('2017-01-02')") + r = tk.MustQuery("(select a from t where a < 0) union (select a from t where a > 0) order by a") + r.Check(testkit.Rows("2017-01-01", "2017-01-02")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int)") + tk.MustExec("insert into t value(0),(0)") + tk.MustQuery("select 1 from (select a from t union all select a from t) tmp").Check(testkit.Rows("1", "1", "1", "1")) + tk.MustQuery("select 10 as a from dual union select a from t order by a desc limit 1 ").Check(testkit.Rows("10")) + tk.MustQuery("select -10 as a from dual union select a from t order by a limit 1 ").Check(testkit.Rows("-10")) + tk.MustQuery("select count(1) from (select a from t union all select a from t) tmp").Check(testkit.Rows("4")) + + err := tk.ExecToErr("select 1 from (select a from t limit 1 union all select a from t limit 1) tmp") + c.Assert(err, NotNil) + terr := errors.Cause(err).(*terror.Error) + c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrWrongUsage)) + + err = tk.ExecToErr("select 1 from (select a from t order by a union all select a from t limit 1) tmp") + c.Assert(err, NotNil) + terr = errors.Cause(err).(*terror.Error) + c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrWrongUsage)) + + _, err = tk.Exec("(select a from t order by a) union all select a from t limit 1 union all select a from t limit 1") + c.Assert(terror.ErrorEqual(err, plannercore.ErrWrongUsage), IsTrue, Commentf("err %v", err)) + + _, err = tk.Exec("(select a from t limit 1) union all select a from t limit 1") + c.Assert(err, IsNil) + _, err = tk.Exec("(select a from t order by a) union all select a from t order by a") + c.Assert(err, IsNil) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int)") + tk.MustExec("insert into t value(1),(2),(3)") + + tk.MustQuery("(select a from t order by a limit 2) union all (select a from t order by a desc limit 2) order by a desc limit 1,2").Check(testkit.Rows("2", "2")) + tk.MustQuery("select a from t union all select a from t order by a desc limit 5").Check(testkit.Rows("3", "3", "2", "2", "1")) + tk.MustQuery("(select a from t order by a desc limit 2) union all select a from t group by a order by a").Check(testkit.Rows("1", "2", "2", "3", "3")) + tk.MustQuery("(select a from t order by a desc limit 2) union all select 33 as a order by a desc limit 2").Check(testkit.Rows("33", "3")) + + tk.MustQuery("select 1 union select 1 union all select 1").Check(testkit.Rows("1", "1")) + tk.MustQuery("select 1 union all select 1 union select 1").Check(testkit.Rows("1")) + + tk.MustExec("drop table if exists t1, t2") + tk.MustExec(`create table t1(a bigint, b bigint);`) + tk.MustExec(`create table t2(a bigint, b bigint);`) + tk.MustExec(`insert into t1 values(1, 1);`) + tk.MustExec(`insert into t1 select * from t1;`) + tk.MustExec(`insert into t1 select * from t1;`) + tk.MustExec(`insert into t1 select * from t1;`) + tk.MustExec(`insert into t1 select * from t1;`) + tk.MustExec(`insert into t1 select * from t1;`) + tk.MustExec(`insert into t1 select * from t1;`) + tk.MustExec(`insert into t2 values(1, 1);`) + tk.MustExec(`set @@tidb_init_chunk_size=2;`) + tk.MustExec(`set @@sql_mode="";`) + tk.MustQuery(`select count(*) from (select t1.a, t1.b from t1 left join t2 on t1.a=t2.a union all select t1.a, t1.a from t1 left join t2 on t1.a=t2.a) tmp;`).Check(testkit.Rows("128")) + tk.MustQuery(`select tmp.a, count(*) from (select t1.a, t1.b from t1 left join t2 on t1.a=t2.a union all select t1.a, t1.a from t1 left join t2 on t1.a=t2.a) tmp;`).Check(testkit.Rows("1 128")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("insert into t value(1 ,2)") + tk.MustQuery("select a, b from (select a, 0 as d, b from t union all select a, 0 as d, b from t) test;").Check(testkit.Rows("1 2", "1 2")) + + // #issue 8141 + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1(a int, b int)") + tk.MustExec("insert into t1 value(1,2),(1,1),(2,2),(2,2),(3,2),(3,2)") + tk.MustExec("set @@tidb_init_chunk_size=2;") + tk.MustQuery("select count(*) from (select a as c, a as d from t1 union all select a, b from t1) t;").Check(testkit.Rows("12")) + + // #issue 8189 and #issue 8199 + tk.MustExec("drop table if exists t1") + tk.MustExec("drop table if exists t2") + tk.MustExec("CREATE TABLE t1 (a int not null, b char (10) not null)") + tk.MustExec("insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c')") + tk.MustExec("CREATE TABLE t2 (a int not null, b char (10) not null)") + tk.MustExec("insert into t2 values(1,'a'),(2,'b'),(3,'c'),(3,'c')") + tk.MustQuery("select a from t1 union select a from t1 order by (select a+1);").Check(testkit.Rows("1", "2", "3")) + + // #issue 8201 + for i := 0; i < 4; i++ { + tk.MustQuery("SELECT(SELECT 0 AS a FROM dual UNION SELECT 1 AS a FROM dual ORDER BY a ASC LIMIT 1) AS dev").Check(testkit.Rows("0")) + } + + // #issue 8231 + tk.MustExec("drop table if exists t1") + tk.MustExec("CREATE TABLE t1 (uid int(1))") + tk.MustExec("INSERT INTO t1 SELECT 150") + tk.MustQuery("SELECT 'a' UNION SELECT uid FROM t1 order by 1 desc;").Check(testkit.Rows("a", "150")) + + // #issue 8196 + tk.MustExec("drop table if exists t1") + tk.MustExec("drop table if exists t2") + tk.MustExec("CREATE TABLE t1 (a int not null, b char (10) not null)") + tk.MustExec("insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c')") + tk.MustExec("CREATE TABLE t2 (a int not null, b char (10) not null)") + tk.MustExec("insert into t2 values(3,'c'),(4,'d'),(5,'f'),(6,'e')") + tk.MustExec("analyze table t1") + tk.MustExec("analyze table t2") + _, err = tk.Exec("(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by t1.b") + c.Assert(err.Error(), Equals, "[planner:1250]Table 't1' from one of the SELECTs cannot be used in global ORDER clause") + + // #issue 9900 + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b decimal(6, 3))") + tk.MustExec("insert into t values(1, 1.000)") + tk.MustQuery("select count(distinct a), sum(distinct a), avg(distinct a) from (select a from t union all select b from t) tmp;").Check(testkit.Rows("1 1.000 1.0000000")) + + // #issue 23832 + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a bit(20), b float, c double, d int)") + tk.MustExec("insert into t values(10, 10, 10, 10), (1, -1, 2, -2), (2, -2, 1, 1), (2, 1.1, 2.1, 10.1)") + tk.MustQuery("select a from t union select 10 order by a").Check(testkit.Rows("1", "2", "10")) +} + +func (s *testSuite2) TestUnionLimit(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists union_limit") + tk.MustExec("create table union_limit (id int) partition by hash(id) partitions 30") + for i := 0; i < 60; i++ { + tk.MustExec(fmt.Sprintf("insert into union_limit values (%d)", i)) + } + // Cover the code for worker count limit in the union executor. + tk.MustQuery("select * from union_limit limit 10") +} + +func (s *testSuite8) TestIndexScan(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int unique)") + tk.MustExec("insert t values (-1), (2), (3), (5), (6), (7), (8), (9)") + result := tk.MustQuery("select a from t where a < 0 or (a >= 2.1 and a < 5.1) or ( a > 5.9 and a <= 7.9) or a > '8.1'") + result.Check(testkit.Rows("-1", "3", "5", "6", "7", "9")) + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int unique)") + tk.MustExec("insert t values (0)") + result = tk.MustQuery("select NULL from t ") + result.Check(testkit.Rows("")) + // test for double read + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int unique, b int)") + tk.MustExec("insert t values (5, 0)") + tk.MustExec("insert t values (4, 0)") + tk.MustExec("insert t values (3, 0)") + tk.MustExec("insert t values (2, 0)") + tk.MustExec("insert t values (1, 0)") + tk.MustExec("insert t values (0, 0)") + result = tk.MustQuery("select * from t order by a limit 3") + result.Check(testkit.Rows("0 0", "1 0", "2 0")) + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int unique, b int)") + tk.MustExec("insert t values (0, 1)") + tk.MustExec("insert t values (1, 2)") + tk.MustExec("insert t values (2, 1)") + tk.MustExec("insert t values (3, 2)") + tk.MustExec("insert t values (4, 1)") + tk.MustExec("insert t values (5, 2)") + result = tk.MustQuery("select * from t where a < 5 and b = 1 limit 2") + result.Check(testkit.Rows("0 1", "2 1")) + tk.MustExec("drop table if exists tab1") + tk.MustExec("CREATE TABLE tab1(pk INTEGER PRIMARY KEY, col0 INTEGER, col1 FLOAT, col3 INTEGER, col4 FLOAT)") + tk.MustExec("CREATE INDEX idx_tab1_0 on tab1 (col0)") + tk.MustExec("CREATE INDEX idx_tab1_1 on tab1 (col1)") + tk.MustExec("CREATE INDEX idx_tab1_3 on tab1 (col3)") + tk.MustExec("CREATE INDEX idx_tab1_4 on tab1 (col4)") + tk.MustExec("INSERT INTO tab1 VALUES(1,37,20.85,30,10.69)") + result = tk.MustQuery("SELECT pk FROM tab1 WHERE ((col3 <= 6 OR col3 < 29 AND (col0 < 41)) OR col3 > 42) AND col1 >= 96.1 AND col3 = 30 AND col3 > 17 AND (col0 BETWEEN 36 AND 42)") + result.Check(testkit.Rows()) + tk.MustExec("drop table if exists tab1") + tk.MustExec("CREATE TABLE tab1(pk INTEGER PRIMARY KEY, a INTEGER, b INTEGER)") + tk.MustExec("CREATE INDEX idx_tab1_0 on tab1 (a)") + tk.MustExec("INSERT INTO tab1 VALUES(1,1,1)") + tk.MustExec("INSERT INTO tab1 VALUES(2,2,1)") + tk.MustExec("INSERT INTO tab1 VALUES(3,1,2)") + tk.MustExec("INSERT INTO tab1 VALUES(4,2,2)") + result = tk.MustQuery("SELECT * FROM tab1 WHERE pk <= 3 AND a = 1") + result.Check(testkit.Rows("1 1 1", "3 1 2")) + result = tk.MustQuery("SELECT * FROM tab1 WHERE pk <= 4 AND a = 1 AND b = 2") + result.Check(testkit.Rows("3 1 2")) + tk.MustExec("CREATE INDEX idx_tab1_1 on tab1 (b, a)") + result = tk.MustQuery("SELECT pk FROM tab1 WHERE b > 1") + result.Check(testkit.Rows("3", "4")) + + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t (a varchar(3), index(a))") + tk.MustExec("insert t values('aaa'), ('aab')") + result = tk.MustQuery("select * from t where a >= 'aaaa' and a < 'aabb'") + result.Check(testkit.Rows("aab")) + + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t (a int primary key, b int, c int, index(c))") + tk.MustExec("insert t values(1, 1, 1), (2, 2, 2), (4, 4, 4), (3, 3, 3), (5, 5, 5)") + // Test for double read and top n. + result = tk.MustQuery("select a from t where c >= 2 order by b desc limit 1") + result.Check(testkit.Rows("5")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a varchar(50) primary key, b int, c int, index idx(b))") + tk.MustExec("insert into t values('aa', 1, 1)") + tk.MustQuery("select * from t use index(idx) where a > 'a'").Check(testkit.Rows("aa 1 1")) + + // fix issue9636 + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE `t` (a int, KEY (a))") + result = tk.MustQuery(`SELECT * FROM (SELECT * FROM (SELECT a as d FROM t WHERE a IN ('100')) AS x WHERE x.d < "123" ) tmp_count`) + result.Check(testkit.Rows()) +} + +func (s *testSuiteP2) TestToPBExpr(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a decimal(10,6), b decimal, index idx_b (b))") + tk.MustExec("set sql_mode = ''") + tk.MustExec("insert t values (1.1, 1.1)") + tk.MustExec("insert t values (2.4, 2.4)") + tk.MustExec("insert t values (3.3, 2.7)") + result := tk.MustQuery("select * from t where a < 2.399999") + result.Check(testkit.Rows("1.100000 1")) + result = tk.MustQuery("select * from t where a > 1.5") + result.Check(testkit.Rows("2.400000 2", "3.300000 3")) + result = tk.MustQuery("select * from t where a <= 1.1") + result.Check(testkit.Rows("1.100000 1")) + result = tk.MustQuery("select * from t where b >= 3") + result.Check(testkit.Rows("3.300000 3")) + result = tk.MustQuery("select * from t where not (b = 1)") + result.Check(testkit.Rows("2.400000 2", "3.300000 3")) + result = tk.MustQuery("select * from t where b&1 = a|1") + result.Check(testkit.Rows("1.100000 1")) + result = tk.MustQuery("select * from t where b != 2 and b <=> 3") + result.Check(testkit.Rows("3.300000 3")) + result = tk.MustQuery("select * from t where b in (3)") + result.Check(testkit.Rows("3.300000 3")) + result = tk.MustQuery("select * from t where b not in (1, 2)") + result.Check(testkit.Rows("3.300000 3")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a varchar(255), b int)") + tk.MustExec("insert t values ('abc123', 1)") + tk.MustExec("insert t values ('ab123', 2)") + result = tk.MustQuery("select * from t where a like 'ab%'") + result.Check(testkit.Rows("abc123 1", "ab123 2")) + result = tk.MustQuery("select * from t where a like 'ab_12'") + result.Check(nil) + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key)") + tk.MustExec("insert t values (1)") + tk.MustExec("insert t values (2)") + result = tk.MustQuery("select * from t where not (a = 1)") + result.Check(testkit.Rows("2")) + result = tk.MustQuery("select * from t where not(not (a = 1))") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select * from t where not(a != 1 and a != 2)") + result.Check(testkit.Rows("1", "2")) +} + +func (s *testSuiteP2) TestDatumXAPI(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a decimal(10,6), b decimal, index idx_b (b))") + tk.MustExec("set sql_mode = ''") + tk.MustExec("insert t values (1.1, 1.1)") + tk.MustExec("insert t values (2.2, 2.2)") + tk.MustExec("insert t values (3.3, 2.7)") + result := tk.MustQuery("select * from t where a > 1.5") + result.Check(testkit.Rows("2.200000 2", "3.300000 3")) + result = tk.MustQuery("select * from t where b > 1.5") + result.Check(testkit.Rows("2.200000 2", "3.300000 3")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a time(3), b time, index idx_a (a))") + tk.MustExec("insert t values ('11:11:11', '11:11:11')") + tk.MustExec("insert t values ('11:11:12', '11:11:12')") + tk.MustExec("insert t values ('11:11:13', '11:11:13')") + result = tk.MustQuery("select * from t where a > '11:11:11.5'") + result.Check(testkit.Rows("11:11:12.000 11:11:12", "11:11:13.000 11:11:13")) + result = tk.MustQuery("select * from t where b > '11:11:11.5'") + result.Check(testkit.Rows("11:11:12.000 11:11:12", "11:11:13.000 11:11:13")) +} + +func (s *testSuiteP2) TestSQLMode(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a tinyint not null)") + tk.MustExec("set sql_mode = 'STRICT_TRANS_TABLES'") + _, err := tk.Exec("insert t values ()") + c.Check(err, NotNil) + + _, err = tk.Exec("insert t values ('1000')") + c.Check(err, NotNil) + + tk.MustExec("create table if not exists tdouble (a double(3,2))") + _, err = tk.Exec("insert tdouble values (10.23)") + c.Check(err, NotNil) + + tk.MustExec("set sql_mode = ''") + tk.MustExec("insert t values ()") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1364 Field 'a' doesn't have a default value")) + tk.MustExec("insert t values (null)") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1048 Column 'a' cannot be null")) + tk.MustExec("insert ignore t values (null)") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1048 Column 'a' cannot be null")) + tk.MustExec("insert t select null") + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1048 Column 'a' cannot be null")) + tk.MustExec("insert t values (1000)") + tk.MustQuery("select * from t order by a").Check(testkit.Rows("0", "0", "0", "0", "127")) + + tk.MustExec("insert tdouble values (10.23)") + tk.MustQuery("select * from tdouble").Check(testkit.Rows("9.99")) + + tk.MustExec("set sql_mode = 'STRICT_TRANS_TABLES'") + tk.MustExec("set @@global.sql_mode = ''") + + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use test") + tk2.MustExec("drop table if exists t2") + tk2.MustExec("create table t2 (a varchar(3))") + tk2.MustExec("insert t2 values ('abcd')") + tk2.MustQuery("select * from t2").Check(testkit.Rows("abc")) + + // session1 is still in strict mode. + _, err = tk.Exec("insert t2 values ('abcd')") + c.Check(err, NotNil) + // Restore original global strict mode. + tk.MustExec("set @@global.sql_mode = 'STRICT_TRANS_TABLES'") +} + +func (s *testSuiteP2) TestTableDual(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + result := tk.MustQuery("Select 1") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("Select 1 from dual") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("Select count(*) from dual") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("Select 1 from dual where 1") + result.Check(testkit.Rows("1")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int primary key)") + tk.MustQuery("select t1.* from t t1, t t2 where t1.a=t2.a and 1=0").Check(testkit.Rows()) +} + +func (s *testSuiteP2) TestTableScan(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use information_schema") + result := tk.MustQuery("select * from schemata") + // There must be these tables: information_schema, mysql, performance_schema and test. + c.Assert(len(result.Rows()), GreaterEqual, 4) + tk.MustExec("use test") + tk.MustExec("create database mytest") + rowStr1 := fmt.Sprintf("%s %s %s %s %v %v", "def", "mysql", "utf8mb4", "utf8mb4_bin", nil, nil) + rowStr2 := fmt.Sprintf("%s %s %s %s %v %v", "def", "mytest", "utf8mb4", "utf8mb4_bin", nil, nil) + tk.MustExec("use information_schema") + result = tk.MustQuery("select * from schemata where schema_name = 'mysql'") + result.Check(testkit.Rows(rowStr1)) + result = tk.MustQuery("select * from schemata where schema_name like 'my%'") + result.Check(testkit.Rows(rowStr1, rowStr2)) + result = tk.MustQuery("select 1 from tables limit 1") + result.Check(testkit.Rows("1")) +} + +func (s *testSuiteP2) TestAdapterStatement(c *C) { + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + se.GetSessionVars().TxnCtx.InfoSchema = domain.GetDomain(se).InfoSchema() + compiler := &executor.Compiler{Ctx: se} + stmtNode, err := s.ParseOneStmt("select 1", "", "") + c.Check(err, IsNil) + stmt, err := compiler.Compile(context.TODO(), stmtNode) + c.Check(err, IsNil) + c.Check(stmt.OriginText(), Equals, "select 1") + + stmtNode, err = s.ParseOneStmt("create table test.t (a int)", "", "") + c.Check(err, IsNil) + stmt, err = compiler.Compile(context.TODO(), stmtNode) + c.Check(err, IsNil) + c.Check(stmt.OriginText(), Equals, "create table test.t (a int)") +} + +func (s *testSuiteP2) TestIsPointGet(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use mysql") + ctx := tk.Se.(sessionctx.Context) + tests := map[string]bool{ + "select * from help_topic where name='aaa'": false, + "select 1 from help_topic where name='aaa'": false, + "select * from help_topic where help_topic_id=1": true, + "select * from help_topic where help_category_id=1": false, + } + + for sqlStr, result := range tests { + stmtNode, err := s.ParseOneStmt(sqlStr, "", "") + c.Check(err, IsNil) + preprocessorReturn := &plannercore.PreprocessorReturn{} + err = plannercore.Preprocess(ctx, stmtNode, plannercore.WithPreprocessorReturn(preprocessorReturn)) + c.Check(err, IsNil) + p, _, err := planner.Optimize(context.TODO(), ctx, stmtNode, preprocessorReturn.InfoSchema) + c.Check(err, IsNil) + ret, err := plannercore.IsPointGetWithPKOrUniqueKeyByAutoCommit(ctx, p) + c.Assert(err, IsNil) + c.Assert(ret, Equals, result) + } +} + +func (s *testSuiteP2) TestClusteredIndexIsPointGet(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("drop database if exists test_cluster_index_is_point_get;") + tk.MustExec("create database test_cluster_index_is_point_get;") + tk.MustExec("use test_cluster_index_is_point_get;") + + tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a varchar(255), b int, c char(10), primary key (c, a));") + ctx := tk.Se.(sessionctx.Context) + + tests := map[string]bool{ + "select 1 from t where a='x'": false, + "select * from t where c='x'": false, + "select * from t where a='x' and c='x'": true, + "select * from t where a='x' and c='x' and b=1": false, + } + for sqlStr, result := range tests { + stmtNode, err := s.ParseOneStmt(sqlStr, "", "") + c.Check(err, IsNil) + preprocessorReturn := &plannercore.PreprocessorReturn{} + err = plannercore.Preprocess(ctx, stmtNode, plannercore.WithPreprocessorReturn(preprocessorReturn)) + c.Check(err, IsNil) + p, _, err := planner.Optimize(context.TODO(), ctx, stmtNode, preprocessorReturn.InfoSchema) + c.Check(err, IsNil) + ret, err := plannercore.IsPointGetWithPKOrUniqueKeyByAutoCommit(ctx, p) + c.Assert(err, IsNil) + c.Assert(ret, Equals, result) + } +} + +func (s *testSerialSuite) TestPointGetRepeatableRead(c *C) { + tk1 := testkit.NewTestKit(c, s.store) + tk1.MustExec("use test") + tk1.MustExec(`create table point_get (a int, b int, c int, + primary key k_a(a), + unique key k_b(b))`) + tk1.MustExec("insert into point_get values (1, 1, 1)") + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use test") + + var ( + step1 = "github.com/pingcap/tidb/executor/pointGetRepeatableReadTest-step1" + step2 = "github.com/pingcap/tidb/executor/pointGetRepeatableReadTest-step2" + ) + + c.Assert(failpoint.Enable(step1, "return"), IsNil) + c.Assert(failpoint.Enable(step2, "pause"), IsNil) + + updateWaitCh := make(chan struct{}) + go func() { + ctx := context.WithValue(context.Background(), "pointGetRepeatableReadTest", updateWaitCh) + ctx = failpoint.WithHook(ctx, func(ctx context.Context, fpname string) bool { + return fpname == step1 || fpname == step2 + }) + rs, err := tk1.Se.Execute(ctx, "select c from point_get where b = 1") + c.Assert(err, IsNil) + result := tk1.ResultSetToResultWithCtx(ctx, rs[0], Commentf("execute sql fail")) + result.Check(testkit.Rows("1")) + }() + + <-updateWaitCh // Wait `POINT GET` first time `get` + c.Assert(failpoint.Disable(step1), IsNil) + tk2.MustExec("update point_get set b = 2, c = 2 where a = 1") + c.Assert(failpoint.Disable(step2), IsNil) +} + +func (s *testSerialSuite) TestBatchPointGetRepeatableRead(c *C) { + tk1 := testkit.NewTestKit(c, s.store) + tk1.MustExec("use test") + tk1.MustExec(`create table batch_point_get (a int, b int, c int, unique key k_b(a, b, c))`) + tk1.MustExec("insert into batch_point_get values (1, 1, 1), (2, 3, 4), (3, 4, 5)") + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use test") + + var ( + step1 = "github.com/pingcap/tidb/executor/batchPointGetRepeatableReadTest-step1" + step2 = "github.com/pingcap/tidb/executor/batchPointGetRepeatableReadTest-step2" + ) + + c.Assert(failpoint.Enable(step1, "return"), IsNil) + c.Assert(failpoint.Enable(step2, "pause"), IsNil) + + updateWaitCh := make(chan struct{}) + go func() { + ctx := context.WithValue(context.Background(), "batchPointGetRepeatableReadTest", updateWaitCh) + ctx = failpoint.WithHook(ctx, func(ctx context.Context, fpname string) bool { + return fpname == step1 || fpname == step2 + }) + rs, err := tk1.Se.Execute(ctx, "select c from batch_point_get where (a, b, c) in ((1, 1, 1))") + c.Assert(err, IsNil) + result := tk1.ResultSetToResultWithCtx(ctx, rs[0], Commentf("execute sql fail")) + result.Check(testkit.Rows("1")) + }() + + <-updateWaitCh // Wait `POINT GET` first time `get` + c.Assert(failpoint.Disable(step1), IsNil) + tk2.MustExec("update batch_point_get set b = 2, c = 2 where a = 1") + c.Assert(failpoint.Disable(step2), IsNil) +} + +func (s *testSerialSuite) TestSplitRegionTimeout(c *C) { + c.Assert(failpoint.Enable("tikvclient/mockSplitRegionTimeout", `return(true)`), IsNil) + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a varchar(100),b int, index idx1(b,a))") + tk.MustExec(`split table t index idx1 by (10000,"abcd"),(10000000);`) + tk.MustExec(`set @@tidb_wait_split_region_timeout=1`) + // result 0 0 means split 0 region and 0 region finish scatter regions before timeout. + tk.MustQuery(`split table t between (0) and (10000) regions 10`).Check(testkit.Rows("0 0")) + err := failpoint.Disable("tikvclient/mockSplitRegionTimeout") + c.Assert(err, IsNil) + + // Test scatter regions timeout. + c.Assert(failpoint.Enable("tikvclient/mockScatterRegionTimeout", `return(true)`), IsNil) + tk.MustQuery(`split table t between (0) and (10000) regions 10`).Check(testkit.Rows("10 1")) + err = failpoint.Disable("tikvclient/mockScatterRegionTimeout") + c.Assert(err, IsNil) + + // Test pre-split with timeout. + tk.MustExec("drop table if exists t") + tk.MustExec("set @@global.tidb_scatter_region=1;") + c.Assert(failpoint.Enable("tikvclient/mockScatterRegionTimeout", `return(true)`), IsNil) + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) + start := time.Now() + tk.MustExec("create table t (a int, b int) partition by hash(a) partitions 5;") + c.Assert(time.Since(start).Seconds(), Less, 10.0) + err = failpoint.Disable("tikvclient/mockScatterRegionTimeout") + c.Assert(err, IsNil) +} + +func (s *testSuiteP2) TestRow(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c int, d int)") + tk.MustExec("insert t values (1, 1)") + tk.MustExec("insert t values (1, 3)") + tk.MustExec("insert t values (2, 1)") + tk.MustExec("insert t values (2, 3)") + result := tk.MustQuery("select * from t where (c, d) < (2,2)") + result.Check(testkit.Rows("1 1", "1 3", "2 1")) + result = tk.MustQuery("select * from t where (1,2,3) > (3,2,1)") + result.Check(testkit.Rows()) + result = tk.MustQuery("select * from t where row(1,2,3) > (3,2,1)") + result.Check(testkit.Rows()) + result = tk.MustQuery("select * from t where (c, d) = (select * from t where (c,d) = (1,1))") + result.Check(testkit.Rows("1 1")) + result = tk.MustQuery("select * from t where (c, d) = (select * from t k where (t.c,t.d) = (c,d))") + result.Check(testkit.Rows("1 1", "1 3", "2 1", "2 3")) + result = tk.MustQuery("select (1, 2, 3) < (2, 3, 4)") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select (2, 3, 4) <= (2, 3, 3)") + result.Check(testkit.Rows("0")) + result = tk.MustQuery("select (2, 3, 4) <= (2, 3, 4)") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select (2, 3, 4) <= (2, 1, 4)") + result.Check(testkit.Rows("0")) + result = tk.MustQuery("select (2, 3, 4) >= (2, 3, 4)") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select (2, 3, 4) = (2, 3, 4)") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select (2, 3, 4) != (2, 3, 4)") + result.Check(testkit.Rows("0")) + result = tk.MustQuery("select row(1, 1) in (row(1, 1))") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select row(1, 0) in (row(1, 1))") + result.Check(testkit.Rows("0")) + result = tk.MustQuery("select row(1, 1) in (select 1, 1)") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select row(1, 1) > row(1, 0)") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select row(1, 1) > (select 1, 0)") + result.Check(testkit.Rows("1")) + result = tk.MustQuery("select 1 > (select 1)") + result.Check(testkit.Rows("0")) + result = tk.MustQuery("select (select 1)") + result.Check(testkit.Rows("1")) + + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int)") + tk.MustExec("insert t1 values (1,2),(1,null)") + tk.MustExec("drop table if exists t2") + tk.MustExec("create table t2 (c int, d int)") + tk.MustExec("insert t2 values (0,0)") + + tk.MustQuery("select * from t2 where (1,2) in (select * from t1)").Check(testkit.Rows("0 0")) + tk.MustQuery("select * from t2 where (1,2) not in (select * from t1)").Check(testkit.Rows()) + tk.MustQuery("select * from t2 where (1,1) not in (select * from t1)").Check(testkit.Rows()) + tk.MustQuery("select * from t2 where (1,null) in (select * from t1)").Check(testkit.Rows()) + tk.MustQuery("select * from t2 where (null,null) in (select * from t1)").Check(testkit.Rows()) + + tk.MustExec("delete from t1 where a=1 and b=2") + tk.MustQuery("select (1,1) in (select * from t2) from t1").Check(testkit.Rows("0")) + tk.MustQuery("select (1,1) not in (select * from t2) from t1").Check(testkit.Rows("1")) + tk.MustQuery("select (1,1) in (select 1,1 from t2) from t1").Check(testkit.Rows("1")) + tk.MustQuery("select (1,1) not in (select 1,1 from t2) from t1").Check(testkit.Rows("0")) + + // MySQL 5.7 returns 1 for these 2 queries, which is wrong. + tk.MustQuery("select (1,null) not in (select 1,1 from t2) from t1").Check(testkit.Rows("")) + tk.MustQuery("select (t1.a,null) not in (select 1,1 from t2) from t1").Check(testkit.Rows("")) + + tk.MustQuery("select (1,null) in (select * from t1)").Check(testkit.Rows("")) + tk.MustQuery("select (1,null) not in (select * from t1)").Check(testkit.Rows("")) +} + +func (s *testSuiteP2) TestColumnName(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c int, d int)") + // disable only full group by + tk.MustExec("set sql_mode='STRICT_TRANS_TABLES'") + rs, err := tk.Exec("select 1 + c, count(*) from t") + c.Check(err, IsNil) + fields := rs.Fields() + c.Check(len(fields), Equals, 2) + c.Check(fields[0].Column.Name.L, Equals, "1 + c") + c.Check(fields[0].ColumnAsName.L, Equals, "1 + c") + c.Check(fields[1].Column.Name.L, Equals, "count(*)") + c.Check(fields[1].ColumnAsName.L, Equals, "count(*)") + c.Assert(rs.Close(), IsNil) + rs, err = tk.Exec("select (c) > all (select c from t) from t") + c.Check(err, IsNil) + fields = rs.Fields() + c.Check(len(fields), Equals, 1) + c.Check(fields[0].Column.Name.L, Equals, "(c) > all (select c from t)") + c.Check(fields[0].ColumnAsName.L, Equals, "(c) > all (select c from t)") + c.Assert(rs.Close(), IsNil) + tk.MustExec("begin") + tk.MustExec("insert t values(1,1)") + rs, err = tk.Exec("select c d, d c from t") + c.Check(err, IsNil) + fields = rs.Fields() + c.Check(len(fields), Equals, 2) + c.Check(fields[0].Column.Name.L, Equals, "c") + c.Check(fields[0].ColumnAsName.L, Equals, "d") + c.Check(fields[1].Column.Name.L, Equals, "d") + c.Check(fields[1].ColumnAsName.L, Equals, "c") + c.Assert(rs.Close(), IsNil) + // Test case for query a column of a table. + // In this case, all attributes have values. + rs, err = tk.Exec("select c as a from t as t2") + c.Check(err, IsNil) + fields = rs.Fields() + c.Check(fields[0].Column.Name.L, Equals, "c") + c.Check(fields[0].ColumnAsName.L, Equals, "a") + c.Check(fields[0].Table.Name.L, Equals, "t") + c.Check(fields[0].TableAsName.L, Equals, "t2") + c.Check(fields[0].DBName.L, Equals, "test") + c.Assert(rs.Close(), IsNil) + // Test case for query a expression which only using constant inputs. + // In this case, the table, org_table and database attributes will all be empty. + rs, err = tk.Exec("select hour(1) as a from t as t2") + c.Check(err, IsNil) + fields = rs.Fields() + c.Check(fields[0].Column.Name.L, Equals, "a") + c.Check(fields[0].ColumnAsName.L, Equals, "a") + c.Check(fields[0].Table.Name.L, Equals, "") + c.Check(fields[0].TableAsName.L, Equals, "") + c.Check(fields[0].DBName.L, Equals, "") + c.Assert(rs.Close(), IsNil) + // Test case for query a column wrapped with parentheses and unary plus. + // In this case, the column name should be its original name. + rs, err = tk.Exec("select (c), (+c), +(c), +(+(c)), ++c from t") + c.Check(err, IsNil) + fields = rs.Fields() + for i := 0; i < 5; i++ { + c.Check(fields[i].Column.Name.L, Equals, "c") + c.Check(fields[i].ColumnAsName.L, Equals, "c") + } + c.Assert(rs.Close(), IsNil) + + // Test issue https://github.com/pingcap/tidb/issues/9639 . + // Both window function and expression appear in final result field. + tk.MustExec("set @@tidb_enable_window_function = 1") + rs, err = tk.Exec("select 1+1, row_number() over() num from t") + c.Check(err, IsNil) + fields = rs.Fields() + c.Assert(fields[0].Column.Name.L, Equals, "1+1") + c.Assert(fields[0].ColumnAsName.L, Equals, "1+1") + c.Assert(fields[1].Column.Name.L, Equals, "num") + c.Assert(fields[1].ColumnAsName.L, Equals, "num") + tk.MustExec("set @@tidb_enable_window_function = 0") + c.Assert(rs.Close(), IsNil) + + rs, err = tk.Exec("select if(1,c,c) from t;") + c.Check(err, IsNil) + fields = rs.Fields() + c.Assert(fields[0].Column.Name.L, Equals, "if(1,c,c)") + // It's a compatibility issue. Should be empty instead. + c.Assert(fields[0].ColumnAsName.L, Equals, "if(1,c,c)") + c.Assert(rs.Close(), IsNil) +} + +func (s *testSuiteP2) TestSelectVar(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (d int)") + tk.MustExec("insert into t values(1), (2), (1)") + // This behavior is different from MySQL. + result := tk.MustQuery("select @a, @a := d+1 from t") + result.Check(testkit.Rows(" 2", "2 3", "3 2")) + // Test for PR #10658. + tk.MustExec("select SQL_BIG_RESULT d from t group by d") + tk.MustExec("select SQL_SMALL_RESULT d from t group by d") + tk.MustExec("select SQL_BUFFER_RESULT d from t group by d") +} + +func (s *testSuiteP2) TestHistoryRead(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists history_read") + tk.MustExec("create table history_read (a int)") + tk.MustExec("insert history_read values (1)") + + // For mocktikv, safe point is not initialized, we manually insert it for snapshot to use. + safePointName := "tikv_gc_safe_point" + safePointValue := "20060102-15:04:05 -0700" + safePointComment := "All versions after safe point can be accessed. (DO NOT EDIT)" + updateSafePoint := fmt.Sprintf(`INSERT INTO mysql.tidb VALUES ('%[1]s', '%[2]s', '%[3]s') + ON DUPLICATE KEY + UPDATE variable_value = '%[2]s', comment = '%[3]s'`, safePointName, safePointValue, safePointComment) + tk.MustExec(updateSafePoint) + + // Set snapshot to a time before save point will fail. + _, err := tk.Exec("set @@tidb_snapshot = '2006-01-01 15:04:05.999999'") + c.Assert(terror.ErrorEqual(err, variable.ErrSnapshotTooOld), IsTrue, Commentf("err %v", err)) + // SnapshotTS Is not updated if check failed. + c.Assert(tk.Se.GetSessionVars().SnapshotTS, Equals, uint64(0)) + + // Setting snapshot to a time in the future will fail. (One day before the 2038 problem) + _, err = tk.Exec("set @@tidb_snapshot = '2038-01-18 03:14:07'") + c.Assert(err, ErrorMatches, "cannot set read timestamp to a future time") + // SnapshotTS Is not updated if check failed. + c.Assert(tk.Se.GetSessionVars().SnapshotTS, Equals, uint64(0)) + + curVer1, _ := s.store.CurrentVersion(kv.GlobalTxnScope) + time.Sleep(time.Millisecond) + snapshotTime := time.Now() + time.Sleep(time.Millisecond) + curVer2, _ := s.store.CurrentVersion(kv.GlobalTxnScope) + tk.MustExec("insert history_read values (2)") + tk.MustQuery("select * from history_read").Check(testkit.Rows("1", "2")) + tk.MustExec("set @@tidb_snapshot = '" + snapshotTime.Format("2006-01-02 15:04:05.999999") + "'") + ctx := tk.Se.(sessionctx.Context) + snapshotTS := ctx.GetSessionVars().SnapshotTS + c.Assert(snapshotTS, Greater, curVer1.Ver) + c.Assert(snapshotTS, Less, curVer2.Ver) + tk.MustQuery("select * from history_read").Check(testkit.Rows("1")) + _, err = tk.Exec("insert history_read values (2)") + c.Assert(err, NotNil) + _, err = tk.Exec("update history_read set a = 3 where a = 1") + c.Assert(err, NotNil) + _, err = tk.Exec("delete from history_read where a = 1") + c.Assert(err, NotNil) + tk.MustExec("set @@tidb_snapshot = ''") + tk.MustQuery("select * from history_read").Check(testkit.Rows("1", "2")) + tk.MustExec("insert history_read values (3)") + tk.MustExec("update history_read set a = 4 where a = 3") + tk.MustExec("delete from history_read where a = 1") + + time.Sleep(time.Millisecond) + snapshotTime = time.Now() + time.Sleep(time.Millisecond) + tk.MustExec("alter table history_read add column b int") + tk.MustExec("insert history_read values (8, 8), (9, 9)") + tk.MustQuery("select * from history_read order by a").Check(testkit.Rows("2 ", "4 ", "8 8", "9 9")) + tk.MustExec("set @@tidb_snapshot = '" + snapshotTime.Format("2006-01-02 15:04:05.999999") + "'") + tk.MustQuery("select * from history_read order by a").Check(testkit.Rows("2", "4")) + tsoStr := strconv.FormatUint(oracle.GoTimeToTS(snapshotTime), 10) + + tk.MustExec("set @@tidb_snapshot = '" + tsoStr + "'") + tk.MustQuery("select * from history_read order by a").Check(testkit.Rows("2", "4")) + + tk.MustExec("set @@tidb_snapshot = ''") + tk.MustQuery("select * from history_read order by a").Check(testkit.Rows("2 ", "4 ", "8 8", "9 9")) +} + +func (s *testSuite2) TestLowResolutionTSORead(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("set @@autocommit=1") + tk.MustExec("use test") + tk.MustExec("drop table if exists low_resolution_tso") + tk.MustExec("create table low_resolution_tso(a int)") + tk.MustExec("insert low_resolution_tso values (1)") + + // enable low resolution tso + c.Assert(tk.Se.GetSessionVars().LowResolutionTSO, IsFalse) + _, err := tk.Exec("set @@tidb_low_resolution_tso = 'on'") + c.Assert(err, IsNil) + c.Assert(tk.Se.GetSessionVars().LowResolutionTSO, IsTrue) + + time.Sleep(3 * time.Second) + tk.MustQuery("select * from low_resolution_tso").Check(testkit.Rows("1")) + _, err = tk.Exec("update low_resolution_tso set a = 2") + c.Assert(err, NotNil) + tk.MustExec("set @@tidb_low_resolution_tso = 'off'") + tk.MustExec("update low_resolution_tso set a = 2") + tk.MustQuery("select * from low_resolution_tso").Check(testkit.Rows("2")) +} + +func (s *testSuite2) TestStaleReadFutureTime(c *C) { + tk := testkit.NewTestKit(c, s.store) + // Setting tx_read_ts to a time in the future will fail. (One day before the 2038 problem) + _, err := tk.Exec("set @@tx_read_ts = '2038-01-18 03:14:07'") + c.Assert(err, ErrorMatches, "cannot set read timestamp to a future time") + // TxnReadTS Is not updated if check failed. + c.Assert(tk.Se.GetSessionVars().TxnReadTS.PeakTxnReadTS(), Equals, uint64(0)) +} + +func (s *testSuite) TestScanControlSelection(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int primary key, b int, c int, index idx_b(b))") + tk.MustExec("insert into t values (1, 1, 1), (2, 1, 1), (3, 1, 2), (4, 2, 3)") + tk.MustQuery("select (select count(1) k from t s where s.b = t1.c) from t t1").Sort().Check(testkit.Rows("0", "1", "3", "3")) +} + +func (s *testSuite) TestSimpleDAG(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int primary key, b int, c int)") + tk.MustExec("insert into t values (1, 1, 1), (2, 1, 1), (3, 1, 2), (4, 2, 3)") + tk.MustQuery("select a from t").Check(testkit.Rows("1", "2", "3", "4")) + tk.MustQuery("select * from t where a = 4").Check(testkit.Rows("4 2 3")) + tk.MustQuery("select a from t limit 1").Check(testkit.Rows("1")) + tk.MustQuery("select a from t order by a desc").Check(testkit.Rows("4", "3", "2", "1")) + tk.MustQuery("select a from t order by a desc limit 1").Check(testkit.Rows("4")) + tk.MustQuery("select a from t order by b desc limit 1").Check(testkit.Rows("4")) + tk.MustQuery("select a from t where a < 3").Check(testkit.Rows("1", "2")) + tk.MustQuery("select a from t where b > 1").Check(testkit.Rows("4")) + tk.MustQuery("select a from t where b > 1 and a < 3").Check(testkit.Rows()) + tk.MustQuery("select count(*) from t where b > 1 and a < 3").Check(testkit.Rows("0")) + tk.MustQuery("select count(*) from t").Check(testkit.Rows("4")) + tk.MustQuery("select count(*), c from t group by c order by c").Check(testkit.Rows("2 1", "1 2", "1 3")) + tk.MustQuery("select sum(c) as s from t group by b order by s").Check(testkit.Rows("3", "4")) + tk.MustQuery("select avg(a) as s from t group by b order by s").Check(testkit.Rows("2.0000", "4.0000")) + tk.MustQuery("select sum(distinct c) from t group by b").Check(testkit.Rows("3", "3")) + + tk.MustExec("create index i on t(c,b)") + tk.MustQuery("select a from t where c = 1").Check(testkit.Rows("1", "2")) + tk.MustQuery("select a from t where c = 1 and a < 2").Check(testkit.Rows("1")) + tk.MustQuery("select a from t where c = 1 order by a limit 1").Check(testkit.Rows("1")) + tk.MustQuery("select count(*) from t where c = 1 ").Check(testkit.Rows("2")) + tk.MustExec("create index i1 on t(b)") + tk.MustQuery("select c from t where b = 2").Check(testkit.Rows("3")) + tk.MustQuery("select * from t where b = 2").Check(testkit.Rows("4 2 3")) + tk.MustQuery("select count(*) from t where b = 1").Check(testkit.Rows("3")) + tk.MustQuery("select * from t where b = 1 and a > 1 limit 1").Check(testkit.Rows("2 1 1")) + + // Test time push down. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (id int, c1 datetime);") + tk.MustExec("insert into t values (1, '2015-06-07 12:12:12')") + tk.MustQuery("select id from t where c1 = '2015-06-07 12:12:12'").Check(testkit.Rows("1")) + + // Test issue 17816 + tk.MustExec("drop table if exists t0") + tk.MustExec("CREATE TABLE t0(c0 INT)") + tk.MustExec("INSERT INTO t0 VALUES (100000)") + tk.MustQuery("SELECT * FROM t0 WHERE NOT SPACE(t0.c0)").Check(testkit.Rows("100000")) +} + +func (s *testSuite) TestTimestampTimeZone(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (ts timestamp)") + tk.MustExec("set time_zone = '+00:00'") + tk.MustExec("insert into t values ('2017-04-27 22:40:42')") + // The timestamp will get different value if time_zone session variable changes. + tests := []struct { + timezone string + expect string + }{ + {"+10:00", "2017-04-28 08:40:42"}, + {"-6:00", "2017-04-27 16:40:42"}, + } + for _, tt := range tests { + tk.MustExec(fmt.Sprintf("set time_zone = '%s'", tt.timezone)) + tk.MustQuery("select * from t").Check(testkit.Rows(tt.expect)) + } + + // For issue https://github.com/pingcap/tidb/issues/3467 + tk.MustExec("drop table if exists t1") + tk.MustExec(`CREATE TABLE t1 ( + id bigint(20) NOT NULL AUTO_INCREMENT, + uid int(11) DEFAULT NULL, + datetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + ip varchar(128) DEFAULT NULL, + PRIMARY KEY (id), + KEY i_datetime (datetime), + KEY i_userid (uid) + );`) + tk.MustExec(`INSERT INTO t1 VALUES (123381351,1734,"2014-03-31 08:57:10","127.0.0.1");`) + r := tk.MustQuery("select datetime from t1;") // Cover TableReaderExec + r.Check(testkit.Rows("2014-03-31 08:57:10")) + r = tk.MustQuery("select datetime from t1 where datetime='2014-03-31 08:57:10';") + r.Check(testkit.Rows("2014-03-31 08:57:10")) // Cover IndexReaderExec + r = tk.MustQuery("select * from t1 where datetime='2014-03-31 08:57:10';") + r.Check(testkit.Rows("123381351 1734 2014-03-31 08:57:10 127.0.0.1")) // Cover IndexLookupExec + + // For issue https://github.com/pingcap/tidb/issues/3485 + tk.MustExec("set time_zone = 'Asia/Shanghai'") + tk.MustExec("drop table if exists t1") + tk.MustExec(`CREATE TABLE t1 ( + id bigint(20) NOT NULL AUTO_INCREMENT, + datetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id) + );`) + tk.MustExec(`INSERT INTO t1 VALUES (123381351,"2014-03-31 08:57:10");`) + r = tk.MustQuery(`select * from t1 where datetime="2014-03-31 08:57:10";`) + r.Check(testkit.Rows("123381351 2014-03-31 08:57:10")) + tk.MustExec(`alter table t1 add key i_datetime (datetime);`) + r = tk.MustQuery(`select * from t1 where datetime="2014-03-31 08:57:10";`) + r.Check(testkit.Rows("123381351 2014-03-31 08:57:10")) + r = tk.MustQuery(`select * from t1;`) + r.Check(testkit.Rows("123381351 2014-03-31 08:57:10")) + r = tk.MustQuery("select datetime from t1 where datetime='2014-03-31 08:57:10';") + r.Check(testkit.Rows("2014-03-31 08:57:10")) +} + +func (s *testSuite) TestTimestampDefaultValueTimeZone(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("set time_zone = '+08:00'") + tk.MustExec(`create table t (a int, b timestamp default "2019-01-17 14:46:14")`) + tk.MustExec("insert into t set a=1") + r := tk.MustQuery(`show create table t`) + r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '2019-01-17 14:46:14'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("set time_zone = '+00:00'") + tk.MustExec("insert into t set a=2") + r = tk.MustQuery(`show create table t`) + r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '2019-01-17 06:46:14'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + r = tk.MustQuery(`select a,b from t order by a`) + r.Check(testkit.Rows("1 2019-01-17 06:46:14", "2 2019-01-17 06:46:14")) + // Test the column's version is greater than ColumnInfoVersion1. + sctx := tk.Se.(sessionctx.Context) + is := domain.GetDomain(sctx).InfoSchema() + c.Assert(is, NotNil) + tb, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + c.Assert(err, IsNil) + tb.Cols()[1].Version = model.ColumnInfoVersion1 + 1 + tk.MustExec("insert into t set a=3") + r = tk.MustQuery(`select a,b from t order by a`) + r.Check(testkit.Rows("1 2019-01-17 06:46:14", "2 2019-01-17 06:46:14", "3 2019-01-17 06:46:14")) + tk.MustExec("delete from t where a=3") + // Change time zone back. + tk.MustExec("set time_zone = '+08:00'") + r = tk.MustQuery(`select a,b from t order by a`) + r.Check(testkit.Rows("1 2019-01-17 14:46:14", "2 2019-01-17 14:46:14")) + tk.MustExec("set time_zone = '-08:00'") + r = tk.MustQuery(`show create table t`) + r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '2019-01-16 22:46:14'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + + // test zero default value in multiple time zone. + defer tk.MustExec(fmt.Sprintf("set @@sql_mode='%s'", tk.MustQuery("select @@sql_mode").Rows()[0][0])) + tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';") + tk.MustExec("drop table if exists t") + tk.MustExec("set time_zone = '+08:00'") + tk.MustExec(`create table t (a int, b timestamp default "0000-00-00 00")`) + tk.MustExec("insert into t set a=1") + r = tk.MustQuery(`show create table t`) + r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '0000-00-00 00:00:00'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("set time_zone = '+00:00'") + tk.MustExec("insert into t set a=2") + r = tk.MustQuery(`show create table t`) + r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '0000-00-00 00:00:00'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + tk.MustExec("set time_zone = '-08:00'") + tk.MustExec("insert into t set a=3") + r = tk.MustQuery(`show create table t`) + r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '0000-00-00 00:00:00'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) + r = tk.MustQuery(`select a,b from t order by a`) + r.Check(testkit.Rows("1 0000-00-00 00:00:00", "2 0000-00-00 00:00:00", "3 0000-00-00 00:00:00")) + + // test add timestamp column default current_timestamp. + tk.MustExec(`drop table if exists t`) + tk.MustExec(`set time_zone = 'Asia/Shanghai'`) + tk.MustExec(`create table t (a int)`) + tk.MustExec(`insert into t set a=1`) + tk.MustExec(`alter table t add column b timestamp not null default current_timestamp;`) + timeIn8 := tk.MustQuery("select b from t").Rows()[0][0] + tk.MustExec(`set time_zone = '+00:00'`) + timeIn0 := tk.MustQuery("select b from t").Rows()[0][0] + c.Assert(timeIn8 != timeIn0, IsTrue, Commentf("%v == %v", timeIn8, timeIn0)) + datumTimeIn8, err := expression.GetTimeValue(tk.Se, timeIn8, mysql.TypeTimestamp, 0) + c.Assert(err, IsNil) + tIn8To0 := datumTimeIn8.GetMysqlTime() + timeZoneIn8, err := time.LoadLocation("Asia/Shanghai") + c.Assert(err, IsNil) + err = tIn8To0.ConvertTimeZone(timeZoneIn8, time.UTC) + c.Assert(err, IsNil) + c.Assert(timeIn0 == tIn8To0.String(), IsTrue, Commentf("%v != %v", timeIn0, tIn8To0.String())) + + // test add index. + tk.MustExec(`alter table t add index(b);`) + tk.MustExec("admin check table t") + tk.MustExec(`set time_zone = '+05:00'`) + tk.MustExec("admin check table t") + + // 1. add a timestamp general column + // 2. add the index + tk.MustExec(`drop table if exists t`) + // change timezone + tk.MustExec(`set time_zone = 'Asia/Shanghai'`) + tk.MustExec(`create table t(a timestamp default current_timestamp)`) + tk.MustExec(`insert into t set a=now()`) + tk.MustExec(`alter table t add column b timestamp as (a+1) virtual;`) + // change timezone + tk.MustExec(`set time_zone = '+05:00'`) + tk.MustExec(`insert into t set a=now()`) + tk.MustExec(`alter table t add index(b);`) + tk.MustExec("admin check table t") + tk.MustExec(`set time_zone = '-03:00'`) + tk.MustExec("admin check table t") +} + +func (s *testSuite) TestTiDBCurrentTS(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustQuery("select @@tidb_current_ts").Check(testkit.Rows("0")) + tk.MustExec("begin") + rows := tk.MustQuery("select @@tidb_current_ts").Rows() + tsStr := rows[0][0].(string) + txn, err := tk.Se.Txn(true) + c.Assert(err, IsNil) + c.Assert(tsStr, Equals, fmt.Sprintf("%d", txn.StartTS())) + tk.MustExec("begin") + rows = tk.MustQuery("select @@tidb_current_ts").Rows() + newTsStr := rows[0][0].(string) + txn, err = tk.Se.Txn(true) + c.Assert(err, IsNil) + c.Assert(newTsStr, Equals, fmt.Sprintf("%d", txn.StartTS())) + c.Assert(newTsStr, Not(Equals), tsStr) + tk.MustExec("commit") + tk.MustQuery("select @@tidb_current_ts").Check(testkit.Rows("0")) + + _, err = tk.Exec("set @@tidb_current_ts = '1'") + c.Assert(terror.ErrorEqual(err, variable.ErrIncorrectScope), IsTrue, Commentf("err %v", err)) +} + +func (s *testSuite) TestTiDBLastTxnInfo(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key)") + tk.MustQuery("select @@tidb_last_txn_info").Check(testkit.Rows("")) + + tk.MustExec("insert into t values (1)") + rows1 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(rows1[0][0].(string), Greater, "0") + c.Assert(rows1[0][0].(string), Less, rows1[0][1].(string)) + + tk.MustExec("begin") + tk.MustQuery("select a from t where a = 1").Check(testkit.Rows("1")) + rows2 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), @@tidb_current_ts").Rows() + tk.MustExec("commit") + rows3 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(rows2[0][0], Equals, rows1[0][0]) + c.Assert(rows2[0][1], Equals, rows1[0][1]) + c.Assert(rows3[0][0], Equals, rows1[0][0]) + c.Assert(rows3[0][1], Equals, rows1[0][1]) + c.Assert(rows2[0][1], Less, rows2[0][2]) + + tk.MustExec("begin") + tk.MustExec("update t set a = a + 1 where a = 1") + rows4 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), @@tidb_current_ts").Rows() + tk.MustExec("commit") + rows5 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(rows4[0][0], Equals, rows1[0][0]) + c.Assert(rows4[0][1], Equals, rows1[0][1]) + c.Assert(rows4[0][2], Equals, rows5[0][0]) + c.Assert(rows4[0][1], Less, rows4[0][2]) + c.Assert(rows4[0][2], Less, rows5[0][1]) + + tk.MustExec("begin") + tk.MustExec("update t set a = a + 1 where a = 2") + tk.MustExec("rollback") + rows6 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(rows6[0][0], Equals, rows5[0][0]) + c.Assert(rows6[0][1], Equals, rows5[0][1]) + + tk.MustExec("begin optimistic") + tk.MustExec("insert into t values (2)") + _, err := tk.Exec("commit") + c.Assert(err, NotNil) + rows7 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), json_extract(@@tidb_last_txn_info, '$.error')").Rows() + c.Assert(rows7[0][0], Greater, rows5[0][0]) + c.Assert(rows7[0][1], Equals, "0") + c.Assert(strings.Contains(err.Error(), rows7[0][1].(string)), IsTrue) + + _, err = tk.Exec("set @@tidb_last_txn_info = '{}'") + c.Assert(terror.ErrorEqual(err, variable.ErrIncorrectScope), IsTrue, Commentf("err %v", err)) +} + +func (s *testSerialSuite) TestTiDBLastTxnInfoCommitMode(c *C) { + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.TiKVClient.AsyncCommit.SafeWindow = time.Second + }) + + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key, v int)") + tk.MustExec("insert into t values (1, 1)") + + tk.MustExec("set @@tidb_enable_async_commit = 1") + tk.MustExec("set @@tidb_enable_1pc = 0") + tk.MustExec("update t set v = v + 1 where a = 1") + rows := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() + c.Log(rows) + c.Assert(rows[0][0], Equals, `"async_commit"`) + c.Assert(rows[0][1], Equals, "false") + c.Assert(rows[0][2], Equals, "false") + + tk.MustExec("set @@tidb_enable_async_commit = 0") + tk.MustExec("set @@tidb_enable_1pc = 1") + tk.MustExec("update t set v = v + 1 where a = 1") + rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() + c.Assert(rows[0][0], Equals, `"1pc"`) + c.Assert(rows[0][1], Equals, "false") + c.Assert(rows[0][2], Equals, "false") + + tk.MustExec("set @@tidb_enable_async_commit = 0") + tk.MustExec("set @@tidb_enable_1pc = 0") + tk.MustExec("update t set v = v + 1 where a = 1") + rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() + c.Assert(rows[0][0], Equals, `"2pc"`) + c.Assert(rows[0][1], Equals, "false") + c.Assert(rows[0][2], Equals, "false") + + c.Assert(failpoint.Enable("tikvclient/invalidMaxCommitTS", "return"), IsNil) + defer func() { + c.Assert(failpoint.Disable("tikvclient/invalidMaxCommitTS"), IsNil) + }() + + tk.MustExec("set @@tidb_enable_async_commit = 1") + tk.MustExec("set @@tidb_enable_1pc = 0") + tk.MustExec("update t set v = v + 1 where a = 1") + rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() + c.Log(rows) + c.Assert(rows[0][0], Equals, `"2pc"`) + c.Assert(rows[0][1], Equals, "true") + c.Assert(rows[0][2], Equals, "false") + + tk.MustExec("set @@tidb_enable_async_commit = 0") + tk.MustExec("set @@tidb_enable_1pc = 1") + tk.MustExec("update t set v = v + 1 where a = 1") + rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() + c.Log(rows) + c.Assert(rows[0][0], Equals, `"2pc"`) + c.Assert(rows[0][1], Equals, "false") + c.Assert(rows[0][2], Equals, "true") + + tk.MustExec("set @@tidb_enable_async_commit = 1") + tk.MustExec("set @@tidb_enable_1pc = 1") + tk.MustExec("update t set v = v + 1 where a = 1") + rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() + c.Log(rows) + c.Assert(rows[0][0], Equals, `"2pc"`) + c.Assert(rows[0][1], Equals, "true") + c.Assert(rows[0][2], Equals, "true") +} + +func (s *testSuite) TestTiDBLastQueryInfo(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key, v int)") + tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.start_ts')").Check(testkit.Rows("0 0")) + + toUint64 := func(str interface{}) uint64 { + res, err := strconv.ParseUint(str.(string), 10, 64) + c.Assert(err, IsNil) + return res + } + + tk.MustExec("select * from t") + rows := tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() + c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) + c.Assert(rows[0][0], Equals, rows[0][1]) + + tk.MustExec("insert into t values (1, 10)") + rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() + c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) + c.Assert(rows[0][0], Equals, rows[0][1]) + // tidb_last_txn_info is still valid after checking query info. + rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() + c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) + c.Assert(rows[0][0].(string), Less, rows[0][1].(string)) + + tk.MustExec("begin pessimistic") + tk.MustExec("select * from t") + rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() + c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) + c.Assert(rows[0][0], Equals, rows[0][1]) + + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use test") + tk2.MustExec("update t set v = 11 where a = 1") + + tk.MustExec("select * from t") + rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() + c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) + c.Assert(rows[0][0], Equals, rows[0][1]) + + tk.MustExec("update t set v = 12 where a = 1") + rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() + c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) + c.Assert(toUint64(rows[0][0]), Less, toUint64(rows[0][1])) + + tk.MustExec("commit") + + tk.MustExec("set transaction isolation level read committed") + tk.MustExec("begin pessimistic") + tk.MustExec("select * from t") + rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() + c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) + c.Assert(toUint64(rows[0][0]), Less, toUint64(rows[0][1])) + + tk.MustExec("rollback") +} + +func (s *testSuite) TestSelectForUpdate(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk1 := testkit.NewTestKit(c, s.store) + tk1.MustExec("use test") + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use test") + + tk.MustExec("drop table if exists t, t1") + + txn, err := tk.Se.Txn(true) + c.Assert(kv.ErrInvalidTxn.Equal(err), IsTrue) + c.Assert(txn.Valid(), IsFalse) + tk.MustExec("create table t (c1 int, c2 int, c3 int)") + tk.MustExec("insert t values (11, 2, 3)") + tk.MustExec("insert t values (12, 2, 3)") + tk.MustExec("insert t values (13, 2, 3)") + + tk.MustExec("create table t1 (c1 int)") + tk.MustExec("insert t1 values (11)") + + // conflict + tk1.MustExec("begin") + tk1.MustQuery("select * from t where c1=11 for update") + + tk2.MustExec("begin") + tk2.MustExec("update t set c2=211 where c1=11") + tk2.MustExec("commit") + + _, err = tk1.Exec("commit") + c.Assert(err, NotNil) + + // no conflict for subquery. + tk1.MustExec("begin") + tk1.MustQuery("select * from t where exists(select null from t1 where t1.c1=t.c1) for update") + + tk2.MustExec("begin") + tk2.MustExec("update t set c2=211 where c1=12") + tk2.MustExec("commit") + + tk1.MustExec("commit") + + // not conflict + tk1.MustExec("begin") + tk1.MustQuery("select * from t where c1=11 for update") + + tk2.MustExec("begin") + tk2.MustExec("update t set c2=22 where c1=12") + tk2.MustExec("commit") + + tk1.MustExec("commit") + + // not conflict, auto commit + tk1.MustExec("set @@autocommit=1;") + tk1.MustQuery("select * from t where c1=11 for update") + + tk2.MustExec("begin") + tk2.MustExec("update t set c2=211 where c1=11") + tk2.MustExec("commit") + + tk1.MustExec("commit") + + // conflict + tk1.MustExec("begin") + tk1.MustQuery("select * from (select * from t for update) t join t1 for update") + + tk2.MustExec("begin") + tk2.MustExec("update t1 set c1 = 13") + tk2.MustExec("commit") + + _, err = tk1.Exec("commit") + c.Assert(err, NotNil) + +} + +func (s *testSuite) TestSelectForUpdateOf(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk1 := testkit.NewTestKit(c, s.store) + tk1.MustExec("use test") + + tk.MustExec("drop table if exists t, t1") + tk.MustExec("create table t (i int)") + tk.MustExec("create table t1 (i int)") + tk.MustExec("insert t values (1)") + tk.MustExec("insert t1 values (1)") + + tk.MustExec("begin pessimistic") + tk.MustQuery("select * from t, t1 where t.i = t1.i for update of t").Check(testkit.Rows("1 1")) + + tk1.MustExec("begin pessimistic") + + // no lock for t + tk1.MustQuery("select * from t1 for update").Check(testkit.Rows("1")) + + // meet lock for t1 + err := tk1.ExecToErr("select * from t for update nowait") + c.Assert(terror.ErrorEqual(err, error2.ErrLockAcquireFailAndNoWaitSet), IsTrue, Commentf("error: ", err)) + + // t1 rolled back, tk1 acquire the lock + tk.MustExec("rollback") + tk1.MustQuery("select * from t for update nowait").Check(testkit.Rows("1")) + + tk1.MustExec("rollback") +} + +func (s *testSuite) TestEmptyEnum(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (e enum('Y', 'N'))") + tk.MustExec("set sql_mode='STRICT_TRANS_TABLES'") + _, err := tk.Exec("insert into t values (0)") + c.Assert(terror.ErrorEqual(err, types.ErrTruncated), IsTrue, Commentf("err %v", err)) + _, err = tk.Exec("insert into t values ('abc')") + c.Assert(terror.ErrorEqual(err, types.ErrTruncated), IsTrue, Commentf("err %v", err)) + + tk.MustExec("set sql_mode=''") + tk.MustExec("insert into t values (0)") + tk.MustQuery("select * from t").Check(testkit.Rows("")) + tk.MustExec("insert into t values ('abc')") + tk.MustQuery("select * from t").Check(testkit.Rows("", "")) + tk.MustExec("insert into t values (null)") + tk.MustQuery("select * from t").Check(testkit.Rows("", "", "")) + + // Test https://github.com/pingcap/tidb/issues/29525. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (id int auto_increment primary key, c1 enum('a', '', 'c'));") + tk.MustExec("insert into t(c1) values (0);") + tk.MustQuery("select id, c1+0, c1 from t;").Check(testkit.Rows("1 0 ")) + tk.MustExec("alter table t change c1 c1 enum('a', '') not null;") + tk.MustQuery("select id, c1+0, c1 from t;").Check(testkit.Rows("1 0 ")) + tk.MustExec("insert into t(c1) values (0);") + tk.MustQuery("select id, c1+0, c1 from t;").Check(testkit.Rows("1 0 ", "2 0 ")) +} + +const ( + checkDDLAddIndexPriority = 1 +) + +type checkRequestClient struct { + tikv.Client + priority kvrpcpb.CommandPri + lowPriorityCnt uint32 + mu struct { + sync.RWMutex + checkFlags uint32 + } +} + +func (c *checkRequestClient) getCheckPriority() kvrpcpb.CommandPri { + return (kvrpcpb.CommandPri)(atomic.LoadInt32((*int32)(&c.priority))) +} + +func (c *checkRequestClient) SendRequest(ctx context.Context, addr string, req *tikvrpc.Request, timeout time.Duration) (*tikvrpc.Response, error) { + resp, err := c.Client.SendRequest(ctx, addr, req, timeout) + c.mu.RLock() + checkFlags := c.mu.checkFlags + c.mu.RUnlock() + if checkFlags == checkDDLAddIndexPriority { + if req.Type == tikvrpc.CmdScan { + if c.getCheckPriority() != req.Priority { + return nil, errors.New("fail to set priority") + } + } else if req.Type == tikvrpc.CmdPrewrite { + if c.getCheckPriority() == kvrpcpb.CommandPri_Low { + atomic.AddUint32(&c.lowPriorityCnt, 1) + } + } + } + return resp, err +} + +type testSuiteWithCliBaseCharset struct { + testSuiteWithCliBase +} + +type testSuiteWithCliBase struct { + store kv.Storage + dom *domain.Domain + cli *checkRequestClient +} + +type testSuite1 struct { + testSuiteWithCliBase +} + +type testSerialSuite2 struct { + testSuiteWithCliBase +} + +func (s *testSuiteWithCliBase) SetUpSuite(c *C) { + cli := &checkRequestClient{} + hijackClient := func(c tikv.Client) tikv.Client { + cli.Client = c + return cli + } + s.cli = cli + + var err error + s.store, err = mockstore.NewMockStore( + mockstore.WithClientHijacker(hijackClient), + ) + c.Assert(err, IsNil) + session.SetStatsLease(0) + s.dom, err = session.BootstrapSession(s.store) + c.Assert(err, IsNil) + s.dom.SetStatsUpdating(true) +} + +func (s *testSuiteWithCliBase) TearDownSuite(c *C) { + s.dom.Close() + s.store.Close() +} + +func (s *testSuiteWithCliBase) TearDownTest(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + r := tk.MustQuery("show tables") + for _, tb := range r.Rows() { + tableName := tb[0] + tk.MustExec(fmt.Sprintf("drop table %v", tableName)) + } +} + +func (s *testSuite1) TestAlterTableComment(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t_1") + tk.MustExec("create table t_1 (c1 int, c2 int, c3 int default 1, index (c1)) comment = 'test table';") + tk.MustExec("alter table `t_1` comment 'this is table comment';") + result := tk.MustQuery("select table_comment from information_schema.tables where table_name = 't_1';") + result.Check(testkit.Rows("this is table comment")) + tk.MustExec("alter table `t_1` comment 'table t comment';") + result = tk.MustQuery("select table_comment from information_schema.tables where table_name = 't_1';") + result.Check(testkit.Rows("table t comment")) +} + +func (s *testSuite) TestTimezonePushDown(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table t (ts timestamp)") + defer tk.MustExec("drop table t") + tk.MustExec(`insert into t values ("2018-09-13 10:02:06")`) + + systemTZ := timeutil.SystemLocation() + c.Assert(systemTZ.String(), Not(Equals), "System") + c.Assert(systemTZ.String(), Not(Equals), "Local") + ctx := context.Background() + count := 0 + ctx1 := context.WithValue(ctx, "CheckSelectRequestHook", func(req *kv.Request) { + count += 1 + dagReq := new(tipb.DAGRequest) + err := proto.Unmarshal(req.Data, dagReq) + c.Assert(err, IsNil) + c.Assert(dagReq.GetTimeZoneName(), Equals, systemTZ.String()) + }) + _, err := tk.Se.Execute(ctx1, `select * from t where ts = "2018-09-13 10:02:06"`) + c.Assert(err, IsNil) + + tk.MustExec(`set time_zone="System"`) + _, err = tk.Se.Execute(ctx1, `select * from t where ts = "2018-09-13 10:02:06"`) + c.Assert(err, IsNil) + + c.Assert(count, Equals, 2) // Make sure the hook function is called. +} + +func (s *testSuite) TestNotFillCacheFlag(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table t (id int primary key)") + defer tk.MustExec("drop table t") + tk.MustExec("insert into t values (1)") + + tests := []struct { + sql string + expect bool + }{ + {"select SQL_NO_CACHE * from t", true}, + {"select SQL_CACHE * from t", false}, + {"select * from t", false}, + } + count := 0 + ctx := context.Background() + for _, test := range tests { + ctx1 := context.WithValue(ctx, "CheckSelectRequestHook", func(req *kv.Request) { + count++ + if req.NotFillCache != test.expect { + c.Errorf("sql=%s, expect=%v, get=%v", test.sql, test.expect, req.NotFillCache) + } + }) + rs, err := tk.Se.Execute(ctx1, test.sql) + c.Assert(err, IsNil) + tk.ResultSetToResult(rs[0], Commentf("sql: %v", test.sql)) + } + c.Assert(count, Equals, len(tests)) // Make sure the hook function is called. +} + +func (s *testSuite) TestHandleTransfer(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table t(a int, index idx(a))") + tk.MustExec("insert into t values(1), (2), (4)") + tk.MustExec("begin") + tk.MustExec("update t set a = 3 where a = 4") + // test table scan read whose result need handle. + tk.MustQuery("select * from t ignore index(idx)").Check(testkit.Rows("1", "2", "3")) + tk.MustExec("insert into t values(4)") + // test single read whose result need handle + tk.MustQuery("select * from t use index(idx)").Check(testkit.Rows("1", "2", "3", "4")) + tk.MustQuery("select * from t use index(idx) order by a desc").Check(testkit.Rows("4", "3", "2", "1")) + tk.MustExec("update t set a = 5 where a = 3") + tk.MustQuery("select * from t use index(idx)").Check(testkit.Rows("1", "2", "4", "5")) + tk.MustExec("commit") + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int, index idx(a))") + tk.MustExec("insert into t values(3, 3), (1, 1), (2, 2)") + // Second test double read. + tk.MustQuery("select * from t use index(idx) order by a").Check(testkit.Rows("1 1", "2 2", "3 3")) +} + +func (s *testSuite) TestBit(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 bit(2))") + tk.MustExec("insert into t values (0), (1), (2), (3)") + _, err := tk.Exec("insert into t values (4)") + c.Assert(err, NotNil) + _, err = tk.Exec("insert into t values ('a')") + c.Assert(err, NotNil) + r, err := tk.Exec("select * from t where c1 = 2") + c.Assert(err, IsNil) + req := r.NewChunk(nil) + err = r.Next(context.Background(), req) + c.Assert(err, IsNil) + c.Assert(types.BinaryLiteral(req.GetRow(0).GetBytes(0)), DeepEquals, types.NewBinaryLiteralFromUint(2, -1)) + r.Close() + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 bit(31))") + tk.MustExec("insert into t values (0x7fffffff)") + _, err = tk.Exec("insert into t values (0x80000000)") + c.Assert(err, NotNil) + _, err = tk.Exec("insert into t values (0xffffffff)") + c.Assert(err, NotNil) + tk.MustExec("insert into t values ('123')") + tk.MustExec("insert into t values ('1234')") + _, err = tk.Exec("insert into t values ('12345)") + c.Assert(err, NotNil) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 bit(62))") + tk.MustExec("insert into t values ('12345678')") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 bit(61))") + _, err = tk.Exec("insert into t values ('12345678')") + c.Assert(err, NotNil) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 bit(32))") + tk.MustExec("insert into t values (0x7fffffff)") + tk.MustExec("insert into t values (0xffffffff)") + _, err = tk.Exec("insert into t values (0x1ffffffff)") + c.Assert(err, NotNil) + tk.MustExec("insert into t values ('1234')") + _, err = tk.Exec("insert into t values ('12345')") + c.Assert(err, NotNil) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 bit(64))") + tk.MustExec("insert into t values (0xffffffffffffffff)") + tk.MustExec("insert into t values ('12345678')") + _, err = tk.Exec("insert into t values ('123456789')") + c.Assert(err, NotNil) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c1 bit(64))") + tk.MustExec("insert into t values (0xffffffffffffffff)") + tk.MustExec("insert into t values ('12345678')") + tk.MustQuery("select * from t where c1").Check(testkit.Rows("\xff\xff\xff\xff\xff\xff\xff\xff", "12345678")) +} + +func (s *testSuite) TestEnum(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c enum('a', 'b', 'c'))") + tk.MustExec("insert into t values ('a'), (2), ('c')") + tk.MustQuery("select * from t where c = 'a'").Check(testkit.Rows("a")) + + tk.MustQuery("select c + 1 from t where c = 2").Check(testkit.Rows("3")) + + tk.MustExec("delete from t") + tk.MustExec("insert into t values ()") + tk.MustExec("insert into t values (null), ('1')") + tk.MustQuery("select c + 1 from t where c = 1").Check(testkit.Rows("2")) + + tk.MustExec("delete from t") + tk.MustExec("insert into t values(1), (2), (3)") + tk.MustQuery("select * from t where c").Check(testkit.Rows("a", "b", "c")) +} + +func (s *testSuite) TestSet(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (c set('a', 'b', 'c'))") + tk.MustExec("insert into t values ('a'), (2), ('c'), ('a,b'), ('b,a')") + tk.MustQuery("select * from t where c = 'a'").Check(testkit.Rows("a")) + + tk.MustQuery("select * from t where c = 'a,b'").Check(testkit.Rows("a,b", "a,b")) + + tk.MustQuery("select c + 1 from t where c = 2").Check(testkit.Rows("3")) + + tk.MustExec("delete from t") + tk.MustExec("insert into t values ()") + tk.MustExec("insert into t values (null), ('1')") + tk.MustQuery("select c + 1 from t where c = 1").Check(testkit.Rows("2")) + + tk.MustExec("delete from t") + tk.MustExec("insert into t values(3)") + tk.MustQuery("select * from t where c").Check(testkit.Rows("a,b")) +} + +func (s *testSuite) TestSubqueryInValues(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (id int, name varchar(20))") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (gid int)") + + tk.MustExec("insert into t1 (gid) value (1)") + tk.MustExec("insert into t (id, name) value ((select gid from t1) ,'asd')") + tk.MustQuery("select * from t").Check(testkit.Rows("1 asd")) +} + +func (s *testSuite) TestEnhancedRangeAccess(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key, b int)") + tk.MustExec("insert into t values(1, 2), (2, 1)") + tk.MustQuery("select * from t where (a = 1 and b = 2) or (a = 2 and b = 1)").Check(testkit.Rows("1 2", "2 1")) + tk.MustQuery("select * from t where (a = 1 and b = 1) or (a = 2 and b = 2)").Check(nil) +} + +// TestMaxInt64Handle Issue #4810 +func (s *testSuite) TestMaxInt64Handle(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(id bigint, PRIMARY KEY (id))") + tk.MustExec("insert into t values(9223372036854775807)") + tk.MustExec("select * from t where id = 9223372036854775807") + tk.MustQuery("select * from t where id = 9223372036854775807;").Check(testkit.Rows("9223372036854775807")) + tk.MustQuery("select * from t").Check(testkit.Rows("9223372036854775807")) + _, err := tk.Exec("insert into t values(9223372036854775807)") + c.Assert(err, NotNil) + tk.MustExec("delete from t where id = 9223372036854775807") + tk.MustQuery("select * from t").Check(nil) +} + +func (s *testSuite) TestTableScanWithPointRanges(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(id int, PRIMARY KEY (id))") + tk.MustExec("insert into t values(1), (5), (10)") + tk.MustQuery("select * from t where id in(1, 2, 10)").Check(testkit.Rows("1", "10")) +} + +func (s *testSuite) TestUnsignedPk(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(id bigint unsigned primary key)") + var num1, num2 uint64 = math.MaxInt64 + 1, math.MaxInt64 + 2 + tk.MustExec(fmt.Sprintf("insert into t values(%v), (%v), (1), (2)", num1, num2)) + num1Str := strconv.FormatUint(num1, 10) + num2Str := strconv.FormatUint(num2, 10) + tk.MustQuery("select * from t order by id").Check(testkit.Rows("1", "2", num1Str, num2Str)) + tk.MustQuery("select * from t where id not in (2)").Check(testkit.Rows(num1Str, num2Str, "1")) + tk.MustExec("drop table t") + tk.MustExec("create table t(a bigint unsigned primary key, b int, index idx(b))") + tk.MustExec("insert into t values(9223372036854775808, 1), (1, 1)") + tk.MustQuery("select * from t use index(idx) where b = 1 and a < 2").Check(testkit.Rows("1 1")) + tk.MustQuery("select * from t use index(idx) where b = 1 order by b, a").Check(testkit.Rows("1 1", "9223372036854775808 1")) +} + +func (s *testSuite) TestSignedCommonHandle(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + + tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(k1 int, k2 int, primary key(k1, k2))") + tk.MustExec("insert into t(k1, k2) value(-100, 1), (-50, 1), (0, 0), (1, 1), (3, 3)") + tk.MustQuery("select k1 from t order by k1").Check(testkit.Rows("-100", "-50", "0", "1", "3")) + tk.MustQuery("select k1 from t order by k1 desc").Check(testkit.Rows("3", "1", "0", "-50", "-100")) + tk.MustQuery("select k1 from t where k1 < -51").Check(testkit.Rows("-100")) + tk.MustQuery("select k1 from t where k1 < -1").Check(testkit.Rows("-100", "-50")) + tk.MustQuery("select k1 from t where k1 <= 0").Check(testkit.Rows("-100", "-50", "0")) + tk.MustQuery("select k1 from t where k1 < 2").Check(testkit.Rows("-100", "-50", "0", "1")) + tk.MustQuery("select k1 from t where k1 < -1 and k1 > -90").Check(testkit.Rows("-50")) +} + +func (s *testSuite) TestContainDotColumn(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists test.t1") + tk.MustExec("create table test.t1(t1.a char)") + tk.MustExec("drop table if exists t2") + tk.MustExec("create table t2(a char, t2.b int)") + + tk.MustExec("drop table if exists t3") + _, err := tk.Exec("create table t3(s.a char);") + terr := errors.Cause(err).(*terror.Error) + c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrWrongTableName)) +} + +func (s *testSuite) TestCheckIndex(c *C) { + s.ctx = mock.NewContext() + s.ctx.Store = s.store + se, err := session.CreateSession4Test(s.store) + c.Assert(err, IsNil) + defer se.Close() + + _, err = se.Execute(context.Background(), "create database test_admin") + c.Assert(err, IsNil) + _, err = se.Execute(context.Background(), "use test_admin") + c.Assert(err, IsNil) + _, err = se.Execute(context.Background(), "create table t (pk int primary key, c int default 1, c1 int default 1, unique key c(c))") + c.Assert(err, IsNil) + is := s.domain.InfoSchema() + db := model.NewCIStr("test_admin") + dbInfo, ok := is.SchemaByName(db) + c.Assert(ok, IsTrue) + tblName := model.NewCIStr("t") + tbl, err := is.TableByName(db, tblName) + c.Assert(err, IsNil) + tbInfo := tbl.Meta() + + alloc := autoid.NewAllocator(s.store, dbInfo.ID, tbInfo.ID, false, autoid.RowIDAllocType) + tb, err := tables.TableFromMeta(autoid.NewAllocators(alloc), tbInfo) + c.Assert(err, IsNil) + + _, err = se.Execute(context.Background(), "admin check index t c") + c.Assert(err, IsNil) + + _, err = se.Execute(context.Background(), "admin check index t C") + c.Assert(err, IsNil) + + // set data to: + // index data (handle, data): (1, 10), (2, 20) + // table data (handle, data): (1, 10), (2, 20) + recordVal1 := types.MakeDatums(int64(1), int64(10), int64(11)) + recordVal2 := types.MakeDatums(int64(2), int64(20), int64(21)) + c.Assert(s.ctx.NewTxn(context.Background()), IsNil) + _, err = tb.AddRecord(s.ctx, recordVal1) + c.Assert(err, IsNil) + _, err = tb.AddRecord(s.ctx, recordVal2) + c.Assert(err, IsNil) + txn, err := s.ctx.Txn(true) + c.Assert(err, IsNil) + c.Assert(txn.Commit(context.Background()), IsNil) + + mockCtx := mock.NewContext() + idx := tb.Indices()[0] + sc := &stmtctx.StatementContext{TimeZone: time.Local} + + _, err = se.Execute(context.Background(), "admin check index t idx_inexistent") + c.Assert(strings.Contains(err.Error(), "not exist"), IsTrue) + + // set data to: + // index data (handle, data): (1, 10), (2, 20), (3, 30) + // table data (handle, data): (1, 10), (2, 20), (4, 40) + txn, err = s.store.Begin() + c.Assert(err, IsNil) + _, err = idx.Create(mockCtx, txn, types.MakeDatums(int64(30)), kv.IntHandle(3), nil) + c.Assert(err, IsNil) + key := tablecodec.EncodeRowKey(tb.Meta().ID, kv.IntHandle(4).Encoded()) + setColValue(c, txn, key, types.NewDatum(int64(40))) + err = txn.Commit(context.Background()) + c.Assert(err, IsNil) + _, err = se.Execute(context.Background(), "admin check index t c") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[admin:8223]data inconsistency in table: t, index: c, handle: 3, index-values:\"handle: 3, values: [KindInt64 30 KindInt64 3]\" != record-values:\"\"") + + // set data to: + // index data (handle, data): (1, 10), (2, 20), (3, 30), (4, 40) + // table data (handle, data): (1, 10), (2, 20), (4, 40) + txn, err = s.store.Begin() + c.Assert(err, IsNil) + _, err = idx.Create(mockCtx, txn, types.MakeDatums(int64(40)), kv.IntHandle(4), nil) + c.Assert(err, IsNil) + err = txn.Commit(context.Background()) + c.Assert(err, IsNil) + _, err = se.Execute(context.Background(), "admin check index t c") + c.Assert(strings.Contains(err.Error(), "table count 3 != index(c) count 4"), IsTrue) + + // set data to: + // index data (handle, data): (1, 10), (4, 40) + // table data (handle, data): (1, 10), (2, 20), (4, 40) + txn, err = s.store.Begin() + c.Assert(err, IsNil) + err = idx.Delete(sc, txn, types.MakeDatums(int64(30)), kv.IntHandle(3)) + c.Assert(err, IsNil) + err = idx.Delete(sc, txn, types.MakeDatums(int64(20)), kv.IntHandle(2)) + c.Assert(err, IsNil) + err = txn.Commit(context.Background()) + c.Assert(err, IsNil) + _, err = se.Execute(context.Background(), "admin check index t c") + c.Assert(strings.Contains(err.Error(), "table count 3 != index(c) count 2"), IsTrue) + + // TODO: pass the case below: + // set data to: + // index data (handle, data): (1, 10), (4, 40), (2, 30) + // table data (handle, data): (1, 10), (2, 20), (4, 40) +} + +func setColValue(c *C, txn kv.Transaction, key kv.Key, v types.Datum) { + row := []types.Datum{v, {}} + colIDs := []int64{2, 3} + sc := &stmtctx.StatementContext{TimeZone: time.Local} + rd := rowcodec.Encoder{Enable: true} + value, err := tablecodec.EncodeRow(sc, row, colIDs, nil, nil, &rd) + c.Assert(err, IsNil) + err = txn.Set(key, value) + c.Assert(err, IsNil) +} + +func (s *testSuite) TestCheckTable(c *C) { + tk := testkit.NewTestKit(c, s.store) + + // Test 'admin check table' when the table has a unique index with null values. + tk.MustExec("use test") + tk.MustExec("drop table if exists admin_test;") + tk.MustExec("create table admin_test (c1 int, c2 int, c3 int default 1, index (c1), unique key(c2));") + tk.MustExec("insert admin_test (c1, c2) values (1, 1), (2, 2), (NULL, NULL);") + tk.MustExec("admin check table admin_test;") +} + +func (s *testSuite) TestCheckTableClusterIndex(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test;") + tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + tk.MustExec("drop table if exists admin_test;") + tk.MustExec("create table admin_test (c1 int, c2 int, c3 int default 1, primary key (c1, c2), index (c1), unique key(c2));") + tk.MustExec("insert admin_test (c1, c2) values (1, 1), (2, 2), (3, 3);") + tk.MustExec("admin check table admin_test;") +} + +func (s *testSuite) TestCoprocessorStreamingFlag(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + tk.MustExec("create table t (id int, value int, index idx(id))") + // Add some data to make statistics work. + for i := 0; i < 100; i++ { + tk.MustExec(fmt.Sprintf("insert into t values (%d, %d)", i, i)) + } + + tests := []struct { + sql string + expect bool + }{ + {"select * from t", true}, // TableReader + {"select * from t where id = 5", true}, // IndexLookup + {"select * from t where id > 5", true}, // Filter + {"select * from t limit 3", false}, // Limit + {"select avg(id) from t", false}, // Aggregate + {"select * from t order by value limit 3", false}, // TopN + } + + ctx := context.Background() + for _, test := range tests { + ctx1 := context.WithValue(ctx, "CheckSelectRequestHook", func(req *kv.Request) { + if req.Streaming != test.expect { + c.Errorf("sql=%s, expect=%v, get=%v", test.sql, test.expect, req.Streaming) + } + }) + rs, err := tk.Se.Execute(ctx1, test.sql) + c.Assert(err, IsNil) + tk.ResultSetToResult(rs[0], Commentf("sql: %v", test.sql)) + } +} + +func (s *testSuite) TestIncorrectLimitArg(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec(`use test;`) + tk.MustExec(`drop table if exists t;`) + tk.MustExec(`create table t(a bigint);`) + tk.MustExec(`prepare stmt1 from 'select * from t limit ?';`) + tk.MustExec(`prepare stmt2 from 'select * from t limit ?, ?';`) + tk.MustExec(`set @a = -1;`) + tk.MustExec(`set @b = 1;`) + + var err error + _, err = tk.Se.Execute(context.TODO(), `execute stmt1 using @a;`) + c.Assert(err.Error(), Equals, `[planner:1210]Incorrect arguments to LIMIT`) + + _, err = tk.Se.Execute(context.TODO(), `execute stmt2 using @b, @a;`) + c.Assert(err.Error(), Equals, `[planner:1210]Incorrect arguments to LIMIT`) +} + +func (s *testSuite) TestLimit(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test;`) + tk.MustExec(`drop table if exists t;`) + tk.MustExec(`create table t(a bigint, b bigint);`) + tk.MustExec(`insert into t values(1, 1), (2, 2), (3, 30), (4, 40), (5, 5), (6, 6);`) + tk.MustQuery(`select * from t order by a limit 1, 1;`).Check(testkit.Rows( + "2 2", + )) + tk.MustQuery(`select * from t order by a limit 1, 2;`).Check(testkit.Rows( + "2 2", + "3 30", + )) + tk.MustQuery(`select * from t order by a limit 1, 3;`).Check(testkit.Rows( + "2 2", + "3 30", + "4 40", + )) + tk.MustQuery(`select * from t order by a limit 1, 4;`).Check(testkit.Rows( + "2 2", + "3 30", + "4 40", + "5 5", + )) + + // test inline projection + tk.MustQuery(`select a from t where a > 0 limit 1, 1;`).Check(testkit.Rows( + "2", + )) + tk.MustQuery(`select a from t where a > 0 limit 1, 2;`).Check(testkit.Rows( + "2", + "3", + )) + tk.MustQuery(`select b from t where a > 0 limit 1, 3;`).Check(testkit.Rows( + "2", + "30", + "40", + )) + tk.MustQuery(`select b from t where a > 0 limit 1, 4;`).Check(testkit.Rows( + "2", + "30", + "40", + "5", + )) + + // test @@tidb_init_chunk_size=2 + tk.MustExec(`set @@tidb_init_chunk_size=2;`) + tk.MustQuery(`select * from t where a > 0 limit 2, 1;`).Check(testkit.Rows( + "3 30", + )) + tk.MustQuery(`select * from t where a > 0 limit 2, 2;`).Check(testkit.Rows( + "3 30", + "4 40", + )) + tk.MustQuery(`select * from t where a > 0 limit 2, 3;`).Check(testkit.Rows( + "3 30", + "4 40", + "5 5", + )) + tk.MustQuery(`select * from t where a > 0 limit 2, 4;`).Check(testkit.Rows( + "3 30", + "4 40", + "5 5", + "6 6", + )) + + // test inline projection + tk.MustQuery(`select a from t order by a limit 2, 1;`).Check(testkit.Rows( + "3", + )) + tk.MustQuery(`select b from t order by a limit 2, 2;`).Check(testkit.Rows( + "30", + "40", + )) + tk.MustQuery(`select a from t order by a limit 2, 3;`).Check(testkit.Rows( + "3", + "4", + "5", + )) + tk.MustQuery(`select b from t order by a limit 2, 4;`).Check(testkit.Rows( + "30", + "40", + "5", + "6", + )) +} + +func (s *testSuite3) TestYearTypeDeleteIndex(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a YEAR, PRIMARY KEY(a));") + tk.MustExec("insert into t set a = '2151';") + tk.MustExec("delete from t;") + tk.MustExec("admin check table t") +} + +func (s *testSuite3) TestForSelectScopeInUnion(c *C) { + // A union B for update, the "for update" option belongs to union statement, so + // it should works on both A and B. + tk1 := testkit.NewTestKit(c, s.store) + tk2 := testkit.NewTestKit(c, s.store) + tk1.MustExec("use test") + tk1.MustExec("drop table if exists t") + tk1.MustExec("create table t(a int)") + tk1.MustExec("insert into t values (1)") + + tk1.MustExec("begin") + // 'For update' would act on the second select. + tk1.MustQuery("select 1 as a union select a from t for update") + + tk2.MustExec("use test") + tk2.MustExec("update t set a = a + 1") + + // As tk1 use select 'for update', it should detect conflict and fail. + _, err := tk1.Exec("commit") + c.Assert(err, NotNil) + + tk1.MustExec("begin") + tk1.MustQuery("select 1 as a union select a from t limit 5 for update") + tk1.MustQuery("select 1 as a union select a from t order by a for update") + + tk2.MustExec("update t set a = a + 1") + + _, err = tk1.Exec("commit") + c.Assert(err, NotNil) +} + +func (s *testSuite3) TestUnsignedDecimalOverflow(c *C) { + tests := []struct { + input interface{} + hasErr bool + err string + }{{ + -1, + true, + "Out of range value for column", + }, { + "-1.1e-1", + true, + "Out of range value for column", + }, { + -1.1, + true, + "Out of range value for column", + }, { + -0, + false, + "", + }, + } + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a decimal(10,2) unsigned)") + for _, t := range tests { + res, err := tk.Exec("insert into t values (?)", t.input) + if res != nil { + defer res.Close() + } + if t.hasErr { + c.Assert(err, NotNil) + c.Assert(strings.Contains(err.Error(), t.err), IsTrue) + } else { + c.Assert(err, IsNil) + } + if res != nil { + c.Assert(res.Close(), IsNil) + } + } + + tk.MustExec("set sql_mode=''") + tk.MustExec("delete from t") + tk.MustExec("insert into t values (?)", -1) + r := tk.MustQuery("select a from t limit 1") + r.Check(testkit.Rows("0.00")) +} + +func (s *testSuite3) TestIndexJoinTableDualPanic(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists a") + tk.MustExec("create table a (f1 int, f2 varchar(32), primary key (f1))") + tk.MustExec("insert into a (f1,f2) values (1,'a'), (2,'b'), (3,'c')") + // TODO here: index join cause the data race of txn. + tk.MustQuery("select /*+ inl_merge_join(a) */ a.* from a inner join (select 1 as k1,'k2-1' as k2) as k on a.f1=k.k1;"). + Check(testkit.Rows("1 a")) +} + +func (s *testSuite3) TestSortLeftJoinWithNullColumnInRightChildPanic(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1(a int)") + tk.MustExec("create table t2(a int)") + tk.MustExec("insert into t1(a) select 1;") + tk.MustQuery("select b.n from t1 left join (select a as a, null as n from t2) b on b.a = t1.a order by t1.a"). + Check(testkit.Rows("")) +} + +func (s *testSuite6) TestUpdateJoin(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2, t3, t4, t5, t6, t7") + tk.MustExec("create table t1(k int, v int)") + tk.MustExec("create table t2(k int, v int)") + tk.MustExec("create table t3(id int auto_increment, k int, v int, primary key(id))") + tk.MustExec("create table t4(k int, v int)") + tk.MustExec("create table t5(v int, k int, primary key(k))") + tk.MustExec("insert into t1 values (1, 1)") + tk.MustExec("insert into t4 values (3, 3)") + tk.MustExec("create table t6 (id int, v longtext)") + tk.MustExec("create table t7 (x int, id int, v longtext, primary key(id))") + + // test the normal case that update one row for a single table. + tk.MustExec("update t1 set v = 0 where k = 1") + tk.MustQuery("select k, v from t1 where k = 1").Check(testkit.Rows("1 0")) + + // test the case that the table with auto_increment or none-null columns as the right table of left join. + tk.MustExec("update t1 left join t3 on t1.k = t3.k set t1.v = 1") + tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 1")) + tk.MustQuery("select id, k, v from t3").Check(testkit.Rows()) + + // test left join and the case that the right table has no matching record but has updated the right table columns. + tk.MustExec("update t1 left join t2 on t1.k = t2.k set t1.v = t2.v, t2.v = 3") + tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 ")) + tk.MustQuery("select k, v from t2").Check(testkit.Rows()) + + // test the case that the update operation in the left table references data in the right table while data of the right table columns is modified. + tk.MustExec("update t1 left join t2 on t1.k = t2.k set t2.v = 3, t1.v = t2.v") + tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 ")) + tk.MustQuery("select k, v from t2").Check(testkit.Rows()) + + // test right join and the case that the left table has no matching record but has updated the left table columns. + tk.MustExec("update t2 right join t1 on t2.k = t1.k set t2.v = 4, t1.v = 0") + tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 0")) + tk.MustQuery("select k, v from t2").Check(testkit.Rows()) + + // test the case of right join and left join at the same time. + tk.MustExec("update t1 left join t2 on t1.k = t2.k right join t4 on t4.k = t2.k set t1.v = 4, t2.v = 4, t4.v = 4") + tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 0")) + tk.MustQuery("select k, v from t2").Check(testkit.Rows()) + tk.MustQuery("select k, v from t4").Check(testkit.Rows("3 4")) + + // test normal left join and the case that the right table has matching rows. + tk.MustExec("insert t2 values (1, 10)") + tk.MustExec("update t1 left join t2 on t1.k = t2.k set t2.v = 11") + tk.MustQuery("select k, v from t2").Check(testkit.Rows("1 11")) + + // test the case of continuously joining the same table and updating the unmatching records. + tk.MustExec("update t1 t11 left join t2 on t11.k = t2.k left join t1 t12 on t2.v = t12.k set t12.v = 233, t11.v = 111") + tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 111")) + tk.MustQuery("select k, v from t2").Check(testkit.Rows("1 11")) + + // test the left join case that the left table has records but all records are null. + tk.MustExec("delete from t1") + tk.MustExec("delete from t2") + tk.MustExec("insert into t1 values (null, null)") + tk.MustExec("update t1 left join t2 on t1.k = t2.k set t1.v = 1") + tk.MustQuery("select k, v from t1").Check(testkit.Rows(" 1")) + + // test the case that the right table of left join has an primary key. + tk.MustExec("insert t5 values(0, 0)") + tk.MustExec("update t1 left join t5 on t1.k = t5.k set t1.v = 2") + tk.MustQuery("select k, v from t1").Check(testkit.Rows(" 2")) + tk.MustQuery("select k, v from t5").Check(testkit.Rows("0 0")) + + tk.MustExec("insert into t6 values (1, NULL)") + tk.MustExec("insert into t7 values (5, 1, 'a')") + tk.MustExec("update t6, t7 set t6.v = t7.v where t6.id = t7.id and t7.x = 5") + tk.MustQuery("select v from t6").Check(testkit.Rows("a")) + + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1(id int primary key, v int, gv int GENERATED ALWAYS AS (v * 2) STORED)") + tk.MustExec("create table t2(id int, v int)") + tk.MustExec("update t1 tt1 inner join (select count(t1.id) a, t1.id from t1 left join t2 on t1.id = t2.id group by t1.id) x on tt1.id = x.id set tt1.v = tt1.v + x.a") +} + +func (s *testSuite3) TestMaxOneRow(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t1`) + tk.MustExec(`drop table if exists t2`) + tk.MustExec(`create table t1(a double, b double);`) + tk.MustExec(`create table t2(a double, b double);`) + tk.MustExec(`insert into t1 values(1, 1), (2, 2), (3, 3);`) + tk.MustExec(`insert into t2 values(0, 0);`) + tk.MustExec(`set @@tidb_init_chunk_size=1;`) + rs, err := tk.Exec(`select (select t1.a from t1 where t1.a > t2.a) as a from t2;`) + c.Assert(err, IsNil) + + err = rs.Next(context.TODO(), rs.NewChunk(nil)) + c.Assert(err.Error(), Equals, "[executor:1242]Subquery returns more than 1 row") + + c.Assert(rs.Close(), IsNil) +} + +func (s *testSuiteP2) TestCurrentTimestampValueSelection(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t,t1") + + tk.MustExec("create table t (id int, t0 timestamp null default current_timestamp, t1 timestamp(1) null default current_timestamp(1), t2 timestamp(2) null default current_timestamp(2) on update current_timestamp(2))") + tk.MustExec("insert into t (id) values (1)") + rs := tk.MustQuery("select t0, t1, t2 from t where id = 1") + t0 := rs.Rows()[0][0].(string) + t1 := rs.Rows()[0][1].(string) + t2 := rs.Rows()[0][2].(string) + c.Assert(len(strings.Split(t0, ".")), Equals, 1) + c.Assert(len(strings.Split(t1, ".")[1]), Equals, 1) + c.Assert(len(strings.Split(t2, ".")[1]), Equals, 2) + tk.MustQuery("select id from t where t0 = ?", t0).Check(testkit.Rows("1")) + tk.MustQuery("select id from t where t1 = ?", t1).Check(testkit.Rows("1")) + tk.MustQuery("select id from t where t2 = ?", t2).Check(testkit.Rows("1")) + time.Sleep(time.Second) + tk.MustExec("update t set t0 = now() where id = 1") + rs = tk.MustQuery("select t2 from t where id = 1") + newT2 := rs.Rows()[0][0].(string) + c.Assert(newT2 != t2, IsTrue) + + tk.MustExec("create table t1 (id int, a timestamp, b timestamp(2), c timestamp(3))") + tk.MustExec("insert into t1 (id, a, b, c) values (1, current_timestamp(2), current_timestamp, current_timestamp(3))") + rs = tk.MustQuery("select a, b, c from t1 where id = 1") + a := rs.Rows()[0][0].(string) + b := rs.Rows()[0][1].(string) + d := rs.Rows()[0][2].(string) + c.Assert(len(strings.Split(a, ".")), Equals, 1) + c.Assert(strings.Split(b, ".")[1], Equals, "00") + c.Assert(len(strings.Split(d, ".")[1]), Equals, 3) +} + +func (s *testSuite3) TestRowID(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t`) + tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeIntOnly + tk.MustExec(`create table t(a varchar(10), b varchar(10), c varchar(1), index idx(a, b, c));`) + tk.MustExec(`insert into t values('a', 'b', 'c');`) + tk.MustExec(`insert into t values('a', 'b', 'c');`) + tk.MustQuery(`select b, _tidb_rowid from t use index(idx) where a = 'a';`).Check(testkit.Rows( + `b 1`, + `b 2`, + )) + tk.MustExec(`begin;`) + tk.MustExec(`select * from t for update`) + tk.MustQuery(`select distinct b from t use index(idx) where a = 'a';`).Check(testkit.Rows(`b`)) + tk.MustExec(`commit;`) + + tk.MustExec(`drop table if exists t`) + tk.MustExec(`create table t(a varchar(5) primary key)`) + tk.MustExec(`insert into t values('a')`) + tk.MustQuery("select *, _tidb_rowid from t use index(`primary`) where _tidb_rowid=1").Check(testkit.Rows("a 1")) +} + +func (s *testSuite3) TestDoSubquery(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t`) + tk.MustExec(`create table t(a int)`) + _, err := tk.Exec(`do 1 in (select * from t)`) + c.Assert(err, IsNil, Commentf("err %v", err)) + tk.MustExec(`insert into t values(1)`) + r, err := tk.Exec(`do 1 in (select * from t)`) + c.Assert(err, IsNil, Commentf("err %v", err)) + c.Assert(r, IsNil, Commentf("result of Do not empty")) +} + +func (s *testSuite3) TestSubqueryTableAlias(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t`) + + tk.MustExec("set sql_mode = ''") + tk.MustGetErrCode("select a, b from (select 1 a) ``, (select 2 b) ``;", mysql.ErrDerivedMustHaveAlias) + tk.MustGetErrCode("select a, b from (select 1 a) `x`, (select 2 b) `x`;", mysql.ErrNonuniqTable) + tk.MustGetErrCode("select a, b from (select 1 a), (select 2 b);", mysql.ErrDerivedMustHaveAlias) + // ambiguous column name + tk.MustGetErrCode("select a from (select 1 a) ``, (select 2 a) ``;", mysql.ErrDerivedMustHaveAlias) + tk.MustGetErrCode("select a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonuniqTable) + tk.MustGetErrCode("select x.a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonuniqTable) + tk.MustGetErrCode("select a from (select 1 a), (select 2 a);", mysql.ErrDerivedMustHaveAlias) + + tk.MustExec("set sql_mode = 'oracle';") + tk.MustQuery("select a, b from (select 1 a) ``, (select 2 b) ``;").Check(testkit.Rows("1 2")) + tk.MustQuery("select a, b from (select 1 a) `x`, (select 2 b) `x`;").Check(testkit.Rows("1 2")) + tk.MustQuery("select a, b from (select 1 a), (select 2 b);").Check(testkit.Rows("1 2")) + // ambiguous column name + tk.MustGetErrCode("select a from (select 1 a) ``, (select 2 a) ``;", mysql.ErrNonUniq) + tk.MustGetErrCode("select a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonUniq) + tk.MustGetErrCode("select x.a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonUniq) + tk.MustGetErrCode("select a from (select 1 a), (select 2 a);", mysql.ErrNonUniq) +} + +func (s *testSerialSuite) TestTSOFail(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t`) + tk.MustExec(`create table t(a int)`) + + c.Assert(failpoint.Enable("github.com/pingcap/tidb/session/mockGetTSFail", "return"), IsNil) + ctx := failpoint.WithHook(context.Background(), func(ctx context.Context, fpname string) bool { + return fpname == "github.com/pingcap/tidb/session/mockGetTSFail" + }) + _, err := tk.Se.Execute(ctx, `select * from t`) + c.Assert(err, NotNil) + c.Assert(failpoint.Disable("github.com/pingcap/tidb/session/mockGetTSFail"), IsNil) +} + +func (s *testSuite3) TestSelectHashPartitionTable(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists th`) + tk.MustExec("set @@session.tidb_enable_table_partition = '1';") + tk.MustExec(`create table th (a int, b int) partition by hash(a) partitions 3;`) + defer tk.MustExec(`drop table if exists th`) + tk.MustExec(`insert into th values (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8);`) + tk.MustExec("insert into th values (-1,-1),(-2,-2),(-3,-3),(-4,-4),(-5,-5),(-6,-6),(-7,-7),(-8,-8);") + tk.MustQuery("select b from th order by a").Check(testkit.Rows("-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5", "6", "7", "8")) + tk.MustQuery(" select * from th where a=-2;").Check(testkit.Rows("-2 -2")) + tk.MustQuery(" select * from th where a=5;").Check(testkit.Rows("5 5")) +} + +func (s *testSuite) TestSelectView(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table view_t (a int,b int)") + tk.MustExec("insert into view_t values(1,2)") + tk.MustExec("create definer='root'@'localhost' view view1 as select * from view_t") + tk.MustExec("create definer='root'@'localhost' view view2(c,d) as select * from view_t") + tk.MustExec("create definer='root'@'localhost' view view3(c,d) as select a,b from view_t") + tk.MustExec("create definer='root'@'localhost' view view4 as select * from (select * from (select * from view_t) tb1) tb;") + tk.MustQuery("select * from view1;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view2;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view3;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view4;").Check(testkit.Rows("1 2")) + tk.MustExec("drop table view_t;") + tk.MustExec("create table view_t(c int,d int)") + err := tk.ExecToErr("select * from view1") + c.Assert(err.Error(), Equals, "[planner:1356]View 'test.view1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them") + err = tk.ExecToErr("select * from view2") + c.Assert(err.Error(), Equals, "[planner:1356]View 'test.view2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them") + err = tk.ExecToErr("select * from view3") + c.Assert(err.Error(), Equals, plannercore.ErrViewInvalid.GenWithStackByArgs("test", "view3").Error()) + tk.MustExec("drop table view_t;") + tk.MustExec("create table view_t(a int,b int,c int)") + tk.MustExec("insert into view_t values(1,2,3)") + tk.MustQuery("select * from view1;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view2;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view3;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view4;").Check(testkit.Rows("1 2")) + tk.MustExec("alter table view_t drop column a") + tk.MustExec("alter table view_t add column a int after b") + tk.MustExec("update view_t set a=1;") + tk.MustQuery("select * from view1;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view2;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view3;").Check(testkit.Rows("1 2")) + tk.MustQuery("select * from view4;").Check(testkit.Rows("1 2")) + tk.MustExec("drop table view_t;") + tk.MustExec("drop view view1,view2,view3,view4;") + + tk.MustExec("set @@tidb_enable_window_function = 1") + defer func() { + tk.MustExec("set @@tidb_enable_window_function = 0") + }() + tk.MustExec("create table t(a int, b int)") + tk.MustExec("insert into t values (1,1),(1,2),(2,1),(2,2)") + tk.MustExec("create definer='root'@'localhost' view v as select a, first_value(a) over(rows between 1 preceding and 1 following), last_value(a) over(rows between 1 preceding and 1 following) from t") + result := tk.MustQuery("select * from v") + result.Check(testkit.Rows("1 1 1", "1 1 2", "2 1 2", "2 2 2")) + tk.MustExec("drop view v;") +} + +type testSuite2 struct { + *baseTestSuite +} + +func (s *testSuite2) TearDownTest(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + r := tk.MustQuery("show full tables") + for _, tb := range r.Rows() { + tableName := tb[0] + if tb[1] == "VIEW" { + tk.MustExec(fmt.Sprintf("drop view %v", tableName)) + } else if tb[1] == "SEQUENCE" { + tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) + } else { + tk.MustExec(fmt.Sprintf("drop table %v", tableName)) + } + } +} + +type testSuite3 struct { + *baseTestSuite +} + +func (s *testSuite3) TearDownTest(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + r := tk.MustQuery("show full tables") + for _, tb := range r.Rows() { + tableName := tb[0] + if tb[1] == "VIEW" { + tk.MustExec(fmt.Sprintf("drop view %v", tableName)) + } else if tb[1] == "SEQUENCE" { + tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) + } else { + tk.MustExec(fmt.Sprintf("drop table %v", tableName)) + } + } +} + +type testSuite6 struct { + *baseTestSuite +} + +func (s *testSuite6) TearDownTest(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + r := tk.MustQuery("show full tables") + for _, tb := range r.Rows() { + tableName := tb[0] + if tb[1] == "VIEW" { + tk.MustExec(fmt.Sprintf("drop view %v", tableName)) + } else if tb[1] == "SEQUENCE" { + tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) + } else { + tk.MustExec(fmt.Sprintf("drop table %v", tableName)) + } + } +} + +type testSuite8 struct { + *baseTestSuite +} + +func (s *testSuite8) TearDownTest(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + r := tk.MustQuery("show full tables") + for _, tb := range r.Rows() { + tableName := tb[0] + if tb[1] == "VIEW" { + tk.MustExec(fmt.Sprintf("drop view %v", tableName)) + } else if tb[1] == "SEQUENCE" { + tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) + } else { + tk.MustExec(fmt.Sprintf("drop table %v", tableName)) + } + } +} + +type testSerialSuite1 struct { + *baseTestSuite +} + +func (s *testSerialSuite1) TearDownTest(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + r := tk.MustQuery("show full tables") + for _, tb := range r.Rows() { + tableName := tb[0] + if tb[1] == "VIEW" { + tk.MustExec(fmt.Sprintf("drop view %v", tableName)) + } else if tb[1] == "SEQUENCE" { + tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) + } else { + tk.MustExec(fmt.Sprintf("drop table %v", tableName)) + } + } +} + +func (s *testSuiteP2) TestStrToDateBuiltin(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustQuery(`select str_to_date('20190101','%Y%m%d%!') from dual`).Check(testkit.Rows("2019-01-01")) + tk.MustQuery(`select str_to_date('20190101','%Y%m%d%f') from dual`).Check(testkit.Rows("2019-01-01 00:00:00.000000")) + tk.MustQuery(`select str_to_date('20190101','%Y%m%d%H%i%s') from dual`).Check(testkit.Rows("2019-01-01 00:00:00")) + tk.MustQuery(`select str_to_date('18/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('a18/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('69/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("2069-10-22")) + tk.MustQuery(`select str_to_date('70/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("1970-10-22")) + tk.MustQuery(`select str_to_date('8/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("2008-10-22")) + tk.MustQuery(`select str_to_date('8/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("2008-10-22")) + tk.MustQuery(`select str_to_date('18/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('a18/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('69/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("2069-10-22")) + tk.MustQuery(`select str_to_date('70/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("1970-10-22")) + tk.MustQuery(`select str_to_date('018/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("0018-10-22")) + tk.MustQuery(`select str_to_date('2018/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('018/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('18/10/22','%y0/%m/%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('18/10/22','%Y0/%m/%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('18a/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('18a/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('20188/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('2018510522','%Y5%m5%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('2018^10^22','%Y^%m^%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('2018@10@22','%Y@%m@%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('2018%10%22','%Y%%m%%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('2018(10(22','%Y(%m(%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('2018\10\22','%Y\%m\%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('2018=10=22','%Y=%m=%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('2018+10+22','%Y+%m+%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('2018_10_22','%Y_%m_%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('69510522','%y5%m5%d') from dual`).Check(testkit.Rows("2069-10-22")) + tk.MustQuery(`select str_to_date('69^10^22','%y^%m^%d') from dual`).Check(testkit.Rows("2069-10-22")) + tk.MustQuery(`select str_to_date('18@10@22','%y@%m@%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('18%10%22','%y%%m%%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('18(10(22','%y(%m(%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('18\10\22','%y\%m\%d') from dual`).Check(testkit.Rows("")) + tk.MustQuery(`select str_to_date('18+10+22','%y+%m+%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('18=10=22','%y=%m=%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`select str_to_date('18_10_22','%y_%m_%d') from dual`).Check(testkit.Rows("2018-10-22")) + tk.MustQuery(`SELECT STR_TO_DATE('2020-07-04 11:22:33 PM', '%Y-%m-%d %r')`).Check(testkit.Rows("2020-07-04 23:22:33")) + tk.MustQuery(`SELECT STR_TO_DATE('2020-07-04 12:22:33 AM', '%Y-%m-%d %r')`).Check(testkit.Rows("2020-07-04 00:22:33")) + tk.MustQuery(`SELECT STR_TO_DATE('2020-07-04 12:22:33', '%Y-%m-%d %T')`).Check(testkit.Rows("2020-07-04 12:22:33")) + tk.MustQuery(`SELECT STR_TO_DATE('2020-07-04 00:22:33', '%Y-%m-%d %T')`).Check(testkit.Rows("2020-07-04 00:22:33")) +} + +func (s *testSuiteP2) TestAddDateBuiltinWithWarnings(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("set @@sql_mode='NO_ZERO_DATE'") + result := tk.MustQuery(`select date_add('2001-01-00', interval -2 hour);`) + result.Check(testkit.Rows("")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '2001-01-00'")) +} + +func (s *testSuiteP2) TestStrToDateBuiltinWithWarnings(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("set @@sql_mode='NO_ZERO_DATE'") + tk.MustExec("use test") + tk.MustQuery(`SELECT STR_TO_DATE('0000-1-01', '%Y-%m-%d');`).Check(testkit.Rows("")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1411 Incorrect datetime value: '0000-1-01' for function str_to_date")) +} + +func (s *testSuiteP2) TestReadPartitionedTable(c *C) { + // Test three reader on partitioned table. + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists pt") + tk.MustExec("create table pt (a int, b int, index i_b(b)) partition by range (a) (partition p1 values less than (2), partition p2 values less than (4), partition p3 values less than (6))") + for i := 0; i < 6; i++ { + tk.MustExec(fmt.Sprintf("insert into pt values(%d, %d)", i, i)) + } + // Table reader + tk.MustQuery("select * from pt order by a").Check(testkit.Rows("0 0", "1 1", "2 2", "3 3", "4 4", "5 5")) + // Index reader + tk.MustQuery("select b from pt where b = 3").Check(testkit.Rows("3")) + // Index lookup + tk.MustQuery("select a from pt where b = 3").Check(testkit.Rows("3")) +} + +func testGetTableByName(c *C, ctx sessionctx.Context, db, table string) table.Table { + dom := domain.GetDomain(ctx) + // Make sure the table schema is the new schema. + err := dom.Reload() + c.Assert(err, IsNil) + tbl, err := dom.InfoSchema().TableByName(model.NewCIStr(db), model.NewCIStr(table)) + c.Assert(err, IsNil) + return tbl +} + +func (s *testSuiteP2) TestIssue10435(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1(i int, j int, k int)") + tk.MustExec("insert into t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4)") + tk.MustExec("INSERT INTO t1 SELECT 10*i,j,5*j FROM t1 UNION SELECT 20*i,j,5*j FROM t1 UNION SELECT 30*i,j,5*j FROM t1") + + tk.MustExec("set @@session.tidb_enable_window_function=1") + tk.MustQuery("SELECT SUM(i) OVER W FROM t1 WINDOW w AS (PARTITION BY j ORDER BY i) ORDER BY 1+SUM(i) OVER w").Check( + testkit.Rows("1", "2", "3", "4", "11", "22", "31", "33", "44", "61", "62", "93", "122", "124", "183", "244"), + ) +} + +func (s *testSerialSuite2) TestUnsignedFeedback(c *C) { + tk := testkit.NewTestKit(c, s.store) + oriProbability := statistics.FeedbackProbability.Load() + statistics.FeedbackProbability.Store(1.0) + defer func() { statistics.FeedbackProbability.Store(oriProbability) }() + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a bigint unsigned, b int, primary key(a))") + tk.MustExec("insert into t values (1,1),(2,2)") + tk.MustExec("analyze table t") + tk.MustQuery("select count(distinct b) from t").Check(testkit.Rows("2")) + result := tk.MustQuery("explain analyze select count(distinct b) from t") + c.Assert(result.Rows()[2][4], Equals, "table:t") + c.Assert(result.Rows()[2][6], Equals, "keep order:false") +} + +func (s *testSuiteWithCliBaseCharset) TestCharsetFeature(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + + tk.MustExec("set names gbk;") + tk.MustQuery("select @@character_set_connection;").Check(testkit.Rows("gbk")) + tk.MustQuery("select @@collation_connection;").Check(testkit.Rows("gbk_chinese_ci")) + tk.MustExec("set @@character_set_client=gbk;") + tk.MustQuery("select @@character_set_client;").Check(testkit.Rows("gbk")) + tk.MustExec("set names utf8mb4;") + tk.MustExec("set @@character_set_connection=gbk;") + tk.MustQuery("select @@character_set_connection;").Check(testkit.Rows("gbk")) + tk.MustQuery("select @@collation_connection;").Check(testkit.Rows("gbk_chinese_ci")) + + tk.MustGetErrCode("select _gbk 'a';", errno.ErrUnknownCharacterSet) + + tk.MustExec("use test") + tk.MustExec("create table t1(a char(10) charset gbk);") + tk.MustExec("create table t2(a char(10) charset gbk collate gbk_bin);") + tk.MustExec("create table t3(a char(10)) charset gbk;") + tk.MustExec("alter table t3 add column b char(10) charset gbk;") + tk.MustQuery("show create table t3").Check(testkit.Rows("t3 CREATE TABLE `t3` (\n" + + " `a` char(10) DEFAULT NULL,\n" + + " `b` char(10) DEFAULT NULL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci", + )) + tk.MustExec("create table t4(a char(10));") + tk.MustExec("alter table t4 add column b char(10) charset gbk;") + tk.MustQuery("show create table t4").Check(testkit.Rows("t4 CREATE TABLE `t4` (\n" + + " `a` char(10) DEFAULT NULL,\n" + + " `b` char(10) CHARACTER SET gbk COLLATE gbk_chinese_ci DEFAULT NULL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", + )) + tk.MustExec("create table t5(a char(20), b char(20) charset utf8, c binary) charset gbk collate gbk_bin;") + + tk.MustExec("create database test_gbk charset gbk;") + tk.MustExec("use test_gbk") + tk.MustExec("create table t1(a char(10));") + tk.MustQuery("show create table t1").Check(testkit.Rows("t1 CREATE TABLE `t1` (\n" + + " `a` char(10) DEFAULT NULL\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci", + )) +} + +func (s *testSuiteWithCliBaseCharset) TestCharsetFeatureCollation(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t" + + "(ascii_char char(10) character set ascii," + + "gbk_char char(10) character set gbk collate gbk_bin," + + "latin_char char(10) character set latin1," + + "utf8mb4_char char(10) character set utf8mb4)", + ) + tk.MustExec("insert into t values ('a', 'a', 'a', 'a'), ('a', '啊', '€', 'ㅂ');") + tk.MustQuery("select collation(concat(ascii_char, gbk_char)) from t;").Check(testkit.Rows("gbk_bin", "gbk_bin")) + tk.MustQuery("select collation(concat(gbk_char, ascii_char)) from t;").Check(testkit.Rows("gbk_bin", "gbk_bin")) + tk.MustQuery("select collation(concat(utf8mb4_char, gbk_char)) from t;").Check(testkit.Rows("utf8mb4_bin", "utf8mb4_bin")) + tk.MustQuery("select collation(concat(gbk_char, utf8mb4_char)) from t;").Check(testkit.Rows("utf8mb4_bin", "utf8mb4_bin")) + tk.MustQuery("select collation(concat('啊', convert('啊' using gbk) collate gbk_bin));").Check(testkit.Rows("gbk_bin")) + tk.MustQuery("select collation(concat(_latin1 'a', convert('啊' using gbk) collate gbk_bin));").Check(testkit.Rows("gbk_bin")) + + tk.MustGetErrCode("select collation(concat(latin_char, gbk_char)) from t;", mysql.ErrCantAggregate2collations) + tk.MustGetErrCode("select collation(concat(convert('€' using latin1), convert('啊' using gbk) collate gbk_bin));", mysql.ErrCantAggregate2collations) + tk.MustGetErrCode("select collation(concat(utf8mb4_char, gbk_char collate gbk_bin)) from t;", mysql.ErrCantAggregate2collations) + tk.MustGetErrCode("select collation(concat('ㅂ', convert('啊' using gbk) collate gbk_bin));", mysql.ErrCantAggregate2collations) + tk.MustGetErrCode("select collation(concat(ascii_char collate ascii_bin, gbk_char)) from t;", mysql.ErrCantAggregate2collations) +} + +func (s *testSuiteWithCliBaseCharset) TestCharsetWithPrefixIndex(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a char(20) charset gbk, b char(20) charset gbk, primary key (a(2)));") + tk.MustExec("insert into t values ('a', '中文'), ('中文', '中文'), ('一二三', '一二三'), ('b', '一二三');") + tk.MustQuery("select * from t").Check(testkit.Rows("a 中文", "中文 中文", "一二三 一二三", "b 一二三")) + tk.MustExec("drop table t") + tk.MustExec("create table t(a char(20) charset gbk, b char(20) charset gbk, unique index idx_a(a(2)));") + tk.MustExec("insert into t values ('a', '中文'), ('中文', '中文'), ('一二三', '一二三'), ('b', '一二三');") + tk.MustQuery("select * from t").Check(testkit.Rows("a 中文", "中文 中文", "一二三 一二三", "b 一二三")) +} + +func (s *testSuite) TestSummaryFailedUpdate(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int as(-a))") + tk.MustExec("insert into t(a) values(1), (3), (7)") + sm := &mockSessionManager1{ + PS: make([]*util.ProcessInfo, 0), + } + tk.Se.SetSessionManager(sm) + s.domain.ExpensiveQueryHandle().SetSessionManager(sm) + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionCancel + }) + c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) + tk.MustExec("set @@tidb_mem_quota_query=1") + err := tk.ExecToErr("update t set t.a = t.a - 1 where t.a in (select a from t where a < 4)") + c.Assert(err, NotNil) + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + tk.MustExec("set @@tidb_mem_quota_query=1000000000") + tk.MustQuery("select stmt_type from information_schema.statements_summary where digest_text = 'update `t` set `t` . `a` = `t` . `a` - ? where `t` . `a` in ( select `a` from `t` where `a` < ? )'").Check(testkit.Rows("Update")) +} + +func (s *testSuite) TestOOMPanicAction(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key, b double);") + tk.MustExec("insert into t values (1,1)") + sm := &mockSessionManager1{ + PS: make([]*util.ProcessInfo, 0), + } + tk.Se.SetSessionManager(sm) + s.domain.ExpensiveQueryHandle().SetSessionManager(sm) + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionCancel + }) + tk.MustExec("set @@tidb_mem_quota_query=1;") + err := tk.QueryToErr("select sum(b) from t group by a;") + c.Assert(err, NotNil) + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + + // Test insert from select oom panic. + tk.MustExec("drop table if exists t,t1") + tk.MustExec("create table t (a bigint);") + tk.MustExec("create table t1 (a bigint);") + tk.MustExec("set @@tidb_mem_quota_query=200;") + _, err = tk.Exec("insert into t1 values (1),(2),(3),(4),(5);") + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + _, err = tk.Exec("replace into t1 values (1),(2),(3),(4),(5);") + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + tk.MustExec("set @@tidb_mem_quota_query=10000") + tk.MustExec("insert into t1 values (1),(2),(3),(4),(5);") + tk.MustExec("set @@tidb_mem_quota_query=10;") + _, err = tk.Exec("insert into t select a from t1 order by a desc;") + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + _, err = tk.Exec("replace into t select a from t1 order by a desc;") + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + + tk.MustExec("set @@tidb_mem_quota_query=10000") + tk.MustExec("insert into t values (1),(2),(3),(4),(5);") + // Set the memory quota to 244 to make this SQL panic during the DeleteExec + // instead of the TableReaderExec. + tk.MustExec("set @@tidb_mem_quota_query=244;") + _, err = tk.Exec("delete from t") + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + + tk.MustExec("set @@tidb_mem_quota_query=10000;") + tk.MustExec("delete from t1") + tk.MustExec("insert into t1 values(1)") + tk.MustExec("insert into t values (1),(2),(3),(4),(5);") + tk.MustExec("set @@tidb_mem_quota_query=244;") + _, err = tk.Exec("delete t, t1 from t join t1 on t.a = t1.a") + c.Assert(err, NotNil) + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") + + tk.MustExec("set @@tidb_mem_quota_query=100000;") + tk.MustExec("truncate table t") + tk.MustExec("insert into t values(1),(2),(3)") + // set the memory to quota to make the SQL panic during UpdateExec instead + // of TableReader. + tk.MustExec("set @@tidb_mem_quota_query=244;") + _, err = tk.Exec("update t set a = 4") + c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") +} + +type testRecoverTable struct { + store kv.Storage + dom *domain.Domain + cluster testutils.Cluster + cli *regionProperityClient +} + +func (s *testRecoverTable) SetUpSuite(c *C) { + cli := ®ionProperityClient{} + hijackClient := func(c tikv.Client) tikv.Client { + cli.Client = c + return cli + } + s.cli = cli + + var err error + s.store, err = mockstore.NewMockStore( + mockstore.WithClientHijacker(hijackClient), + mockstore.WithClusterInspector(func(c testutils.Cluster) { + mockstore.BootstrapWithSingleStore(c) + s.cluster = c + }), + ) + c.Assert(err, IsNil) + s.dom, err = session.BootstrapSession(s.store) + c.Assert(err, IsNil) +} + +func (s *testRecoverTable) TearDownSuite(c *C) { + s.dom.Close() + s.store.Close() +} + +func (s *testRecoverTable) TestRecoverTable(c *C) { + c.Assert(failpoint.Enable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange", `return(true)`), IsNil) + defer func() { + err := failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange") + c.Assert(err, IsNil) + }() + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("create database if not exists test_recover") + tk.MustExec("use test_recover") + tk.MustExec("drop table if exists t_recover") + tk.MustExec("create table t_recover (a int);") + + timeBeforeDrop, timeAfterDrop, safePointSQL, resetGC := MockGC(tk) + defer resetGC() + + tk.MustExec("insert into t_recover values (1),(2),(3)") + tk.MustExec("drop table t_recover") + + // if GC safe point is not exists in mysql.tidb + _, err := tk.Exec("recover table t_recover") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "can not get 'tikv_gc_safe_point'") + // set GC safe point + tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) + + // Should recover, and we can drop it straight away. + tk.MustExec("recover table t_recover") + tk.MustExec("drop table t_recover") + + err = gcutil.EnableGC(tk.Se) + c.Assert(err, IsNil) + + // recover job is before GC safe point + tk.MustExec(fmt.Sprintf(safePointSQL, timeAfterDrop)) + _, err = tk.Exec("recover table t_recover") + c.Assert(err, NotNil) + c.Assert(strings.Contains(err.Error(), "Can't find dropped/truncated table 't_recover' in GC safe point"), Equals, true) + + // set GC safe point + tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) + // if there is a new table with the same name, should return failed. + tk.MustExec("create table t_recover (a int);") + _, err = tk.Exec("recover table t_recover") + c.Assert(err.Error(), Equals, infoschema.ErrTableExists.GenWithStackByArgs("t_recover").Error()) + + // drop the new table with the same name, then recover table. + tk.MustExec("rename table t_recover to t_recover2") + + // do recover table. + tk.MustExec("recover table t_recover") + + // check recover table meta and data record. + tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3")) + // check recover table autoID. + tk.MustExec("insert into t_recover values (4),(5),(6)") + tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) + // check rebase auto id. + tk.MustQuery("select a,_tidb_rowid from t_recover;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 5003")) + + // recover table by none exits job. + _, err = tk.Exec(fmt.Sprintf("recover table by job %d", 10000000)) + c.Assert(err, NotNil) + + // Disable GC by manual first, then after recover table, the GC enable status should also be disabled. + err = gcutil.DisableGC(tk.Se) + c.Assert(err, IsNil) + + tk.MustExec("delete from t_recover where a > 1") + tk.MustExec("drop table t_recover") + + tk.MustExec("recover table t_recover") + + // check recover table meta and data record. + tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1")) + // check recover table autoID. + tk.MustExec("insert into t_recover values (7),(8),(9)") + tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "7", "8", "9")) + + // Recover truncate table. + tk.MustExec("truncate table t_recover") + tk.MustExec("rename table t_recover to t_recover_new") + tk.MustExec("recover table t_recover") + tk.MustExec("insert into t_recover values (10)") + tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "7", "8", "9", "10")) + + // Test for recover one table multiple time. + tk.MustExec("drop table t_recover") + tk.MustExec("flashback table t_recover to t_recover_tmp") + _, err = tk.Exec("recover table t_recover") + c.Assert(infoschema.ErrTableExists.Equal(err), IsTrue) + + gcEnable, err := gcutil.CheckGCEnable(tk.Se) + c.Assert(err, IsNil) + c.Assert(gcEnable, Equals, false) +} + +func (s *testRecoverTable) TestFlashbackTable(c *C) { + c.Assert(failpoint.Enable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange", `return(true)`), IsNil) + defer func() { + c.Assert(failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange"), IsNil) + }() + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("create database if not exists test_flashback") + tk.MustExec("use test_flashback") + tk.MustExec("drop table if exists t_flashback") + tk.MustExec("create table t_flashback (a int);") + + timeBeforeDrop, _, safePointSQL, resetGC := MockGC(tk) + defer resetGC() + + // Set GC safe point + tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) + // Set GC enable. + err := gcutil.EnableGC(tk.Se) + c.Assert(err, IsNil) + + tk.MustExec("insert into t_flashback values (1),(2),(3)") + tk.MustExec("drop table t_flashback") + + // Test flash table with not_exist_table_name name. + _, err = tk.Exec("flashback table t_not_exists") + c.Assert(err.Error(), Equals, "Can't find localTemporary/dropped/truncated table: t_not_exists in DDL history jobs") + + // Test flashback table failed by there is already a new table with the same name. + // If there is a new table with the same name, should return failed. + tk.MustExec("create table t_flashback (a int);") + _, err = tk.Exec("flashback table t_flashback") + c.Assert(err.Error(), Equals, infoschema.ErrTableExists.GenWithStackByArgs("t_flashback").Error()) + + // Drop the new table with the same name, then flashback table. + tk.MustExec("rename table t_flashback to t_flashback_tmp") + + // Test for flashback table. + tk.MustExec("flashback table t_flashback") + // Check flashback table meta and data record. + tk.MustQuery("select * from t_flashback;").Check(testkit.Rows("1", "2", "3")) + // Check flashback table autoID. + tk.MustExec("insert into t_flashback values (4),(5),(6)") + tk.MustQuery("select * from t_flashback;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) + // Check rebase auto id. + tk.MustQuery("select a,_tidb_rowid from t_flashback;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 5003")) + + // Test for flashback to new table. + tk.MustExec("drop table t_flashback") + tk.MustExec("create table t_flashback (a int);") + tk.MustExec("flashback table t_flashback to t_flashback2") + // Check flashback table meta and data record. + tk.MustQuery("select * from t_flashback2;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) + // Check flashback table autoID. + tk.MustExec("insert into t_flashback2 values (7),(8),(9)") + tk.MustQuery("select * from t_flashback2;").Check(testkit.Rows("1", "2", "3", "4", "5", "6", "7", "8", "9")) + // Check rebase auto id. + tk.MustQuery("select a,_tidb_rowid from t_flashback2;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 5003", "7 10001", "8 10002", "9 10003")) + + // Test for flashback one table multiple time. + _, err = tk.Exec("flashback table t_flashback to t_flashback4") + c.Assert(infoschema.ErrTableExists.Equal(err), IsTrue) + + // Test for flashback truncated table to new table. + tk.MustExec("truncate table t_flashback2") + tk.MustExec("flashback table t_flashback2 to t_flashback3") + // Check flashback table meta and data record. + tk.MustQuery("select * from t_flashback3;").Check(testkit.Rows("1", "2", "3", "4", "5", "6", "7", "8", "9")) + // Check flashback table autoID. + tk.MustExec("insert into t_flashback3 values (10),(11)") + tk.MustQuery("select * from t_flashback3;").Check(testkit.Rows("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11")) + // Check rebase auto id. + tk.MustQuery("select a,_tidb_rowid from t_flashback3;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 5003", "7 10001", "8 10002", "9 10003", "10 15001", "11 15002")) + + // Test for flashback drop partition table. + tk.MustExec("drop table if exists t_p_flashback") + tk.MustExec("create table t_p_flashback (a int) partition by hash(a) partitions 4;") + tk.MustExec("insert into t_p_flashback values (1),(2),(3)") + tk.MustExec("drop table t_p_flashback") + tk.MustExec("flashback table t_p_flashback") + // Check flashback table meta and data record. + tk.MustQuery("select * from t_p_flashback order by a;").Check(testkit.Rows("1", "2", "3")) + // Check flashback table autoID. + tk.MustExec("insert into t_p_flashback values (4),(5)") + tk.MustQuery("select a,_tidb_rowid from t_p_flashback order by a;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002")) + + // Test for flashback truncate partition table. + tk.MustExec("truncate table t_p_flashback") + tk.MustExec("flashback table t_p_flashback to t_p_flashback1") + // Check flashback table meta and data record. + tk.MustQuery("select * from t_p_flashback1 order by a;").Check(testkit.Rows("1", "2", "3", "4", "5")) + // Check flashback table autoID. + tk.MustExec("insert into t_p_flashback1 values (6)") + tk.MustQuery("select a,_tidb_rowid from t_p_flashback1 order by a;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 10001")) + + tk.MustExec("drop database if exists Test2") + tk.MustExec("create database Test2") + tk.MustExec("use Test2") + tk.MustExec("create table t (a int);") + tk.MustExec("insert into t values (1),(2)") + tk.MustExec("drop table t") + tk.MustExec("flashback table t") + tk.MustQuery("select a from t order by a").Check(testkit.Rows("1", "2")) + + tk.MustExec("drop table t") + tk.MustExec("drop database if exists Test3") + tk.MustExec("create database Test3") + tk.MustExec("use Test3") + tk.MustExec("create table t (a int);") + tk.MustExec("drop table t") + tk.MustExec("drop database Test3") + tk.MustExec("use Test2") + tk.MustExec("flashback table t") + tk.MustExec("insert into t values (3)") + tk.MustQuery("select a from t order by a").Check(testkit.Rows("1", "2", "3")) +} + +func (s *testRecoverTable) TestRecoverTempTable(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("create database if not exists test_recover") + tk.MustExec("use test_recover") + tk.MustExec("drop table if exists t_recover") + tk.MustExec("create global temporary table t_recover (a int) on commit delete rows;") + + tk.MustExec("use test_recover") + tk.MustExec("drop table if exists tmp2_recover") + tk.MustExec("create temporary table tmp2_recover (a int);") + + timeBeforeDrop, _, safePointSQL, resetGC := MockGC(tk) + defer resetGC() + // Set GC safe point + tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) + + tk.MustExec("drop table t_recover") + tk.MustGetErrCode("recover table t_recover;", errno.ErrUnsupportedDDLOperation) + tk.MustGetErrCode("flashback table t_recover;", errno.ErrUnsupportedDDLOperation) + tk.MustExec("drop table tmp2_recover") + tk.MustGetErrMsg("recover table tmp2_recover;", "Can't find localTemporary/dropped/truncated table: tmp2_recover in DDL history jobs") + tk.MustGetErrMsg("flashback table tmp2_recover;", "Can't find localTemporary/dropped/truncated table: tmp2_recover in DDL history jobs") +} + +func (s *testSuiteP2) TestPointGetPreparedPlan(c *C) { + tk1 := testkit.NewTestKit(c, s.store) + tk1.MustExec("drop database if exists ps_text") + defer tk1.MustExec("drop database if exists ps_text") + tk1.MustExec("create database ps_text") + tk1.MustExec("use ps_text") + + tk1.MustExec(`create table t (a int, b int, c int, + primary key k_a(a), + unique key k_b(b))`) + tk1.MustExec("insert into t values (1, 1, 1)") + tk1.MustExec("insert into t values (2, 2, 2)") + tk1.MustExec("insert into t values (3, 3, 3)") + + pspk1Id, _, _, err := tk1.Se.PrepareStmt("select * from t where a = ?") + c.Assert(err, IsNil) + tk1.Se.GetSessionVars().PreparedStmts[pspk1Id].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false + pspk2Id, _, _, err := tk1.Se.PrepareStmt("select * from t where ? = a ") + c.Assert(err, IsNil) + tk1.Se.GetSessionVars().PreparedStmts[pspk2Id].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false + + ctx := context.Background() + // first time plan generated + rs, err := tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(0)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) + + // using the generated plan but with different params + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(2)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(0)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(2)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3")) + + // unique index + psuk1Id, _, _, err := tk1.Se.PrepareStmt("select * from t where b = ? ") + c.Assert(err, IsNil) + tk1.Se.GetSessionVars().PreparedStmts[psuk1Id].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(2)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(0)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) + + // test schema changed, cached plan should be invalidated + tk1.MustExec("alter table t add column col4 int default 10 after c") + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(0)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(2)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) + + tk1.MustExec("alter table t drop index k_b") + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(2)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(0)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) + + tk1.MustExec(`insert into t values(4, 3, 3, 11)`) + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(2)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10", "4 3 3 11")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(0)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) + + tk1.MustExec("delete from t where a = 4") + tk1.MustExec("alter table t add index k_b(b)") + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(2)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(0)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) + + // use pk again + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(3)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) +} + +func (s *testSuiteP2) TestPointGetPreparedPlanWithCommitMode(c *C) { + tk1 := testkit.NewTestKit(c, s.store) + tk1.MustExec("drop database if exists ps_text") + defer tk1.MustExec("drop database if exists ps_text") + tk1.MustExec("create database ps_text") + tk1.MustExec("use ps_text") + + tk1.MustExec(`create table t (a int, b int, c int, + primary key k_a(a), + unique key k_b(b))`) + tk1.MustExec("insert into t values (1, 1, 1)") + tk1.MustExec("insert into t values (2, 2, 2)") + tk1.MustExec("insert into t values (3, 3, 3)") + + pspk1Id, _, _, err := tk1.Se.PrepareStmt("select * from t where a = ?") + c.Assert(err, IsNil) + tk1.Se.GetSessionVars().PreparedStmts[pspk1Id].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false + + ctx := context.Background() + // first time plan generated + rs, err := tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(0)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) + + // using the generated plan but with different params + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) + + // next start a non autocommit txn + tk1.MustExec("set autocommit = 0") + tk1.MustExec("begin") + // try to exec using point get plan(this plan should not go short path) + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) + + // update rows + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use ps_text") + tk2.MustExec("update t set c = c + 10 where c = 1") + + // try to point get again + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) + + // try to update in session 1 + tk1.MustExec("update t set c = c + 10 where c = 1") + _, err = tk1.Exec("commit") + c.Assert(kv.ErrWriteConflict.Equal(err), IsTrue, Commentf("error: %s", err)) + + // verify + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 11")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(2)}) + c.Assert(err, IsNil) + tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2")) + + tk2.MustQuery("select * from t where a = 1").Check(testkit.Rows("1 1 11")) +} + +func (s *testSuiteP2) TestPointUpdatePreparedPlan(c *C) { + tk1 := testkit.NewTestKit(c, s.store) + tk1.MustExec("drop database if exists pu_test") + defer tk1.MustExec("drop database if exists pu_test") + tk1.MustExec("create database pu_test") + tk1.MustExec("use pu_test") + + tk1.MustExec(`create table t (a int, b int, c int, + primary key k_a(a), + unique key k_b(b))`) + tk1.MustExec("insert into t values (1, 1, 1)") + tk1.MustExec("insert into t values (2, 2, 2)") + tk1.MustExec("insert into t values (3, 3, 3)") + + updateID1, pc, _, err := tk1.Se.PrepareStmt(`update t set c = c + 1 where a = ?`) + c.Assert(err, IsNil) + tk1.Se.GetSessionVars().PreparedStmts[updateID1].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false + c.Assert(pc, Equals, 1) + updateID2, pc, _, err := tk1.Se.PrepareStmt(`update t set c = c + 2 where ? = a`) + c.Assert(err, IsNil) + tk1.Se.GetSessionVars().PreparedStmts[updateID2].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false + c.Assert(pc, Equals, 1) + + ctx := context.Background() + // first time plan generated + rs, err := tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 4")) + + // using the generated plan but with different params + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 5")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 6")) + + // updateID2 + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID2, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 8")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID2, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 10")) + + // unique index + updUkID1, _, _, err := tk1.Se.PrepareStmt(`update t set c = c + 10 where b = ?`) + c.Assert(err, IsNil) + tk1.Se.GetSessionVars().PreparedStmts[updUkID1].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 20")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 30")) + + // test schema changed, cached plan should be invalidated + tk1.MustExec("alter table t add column col4 int default 10 after c") + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 31 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 32 10")) + + tk1.MustExec("alter table t drop index k_b") + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 42 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 52 10")) + + tk1.MustExec("alter table t add unique index k_b(b)") + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 62 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 72 10")) + + tk1.MustQuery("select * from t where a = 1").Check(testkit.Rows("1 1 1 10")) + tk1.MustQuery("select * from t where a = 2").Check(testkit.Rows("2 2 2 10")) +} + +func (s *testSuiteP2) TestPointUpdatePreparedPlanWithCommitMode(c *C) { + tk1 := testkit.NewTestKit(c, s.store) + tk1.MustExec("drop database if exists pu_test2") + defer tk1.MustExec("drop database if exists pu_test2") + tk1.MustExec("create database pu_test2") + tk1.MustExec("use pu_test2") + + tk1.MustExec(`create table t (a int, b int, c int, + primary key k_a(a), + unique key k_b(b))`) + tk1.MustExec("insert into t values (1, 1, 1)") + tk1.MustExec("insert into t values (2, 2, 2)") + tk1.MustExec("insert into t values (3, 3, 3)") + + ctx := context.Background() + updateID1, _, _, err := tk1.Se.PrepareStmt(`update t set c = c + 1 where a = ?`) + tk1.Se.GetSessionVars().PreparedStmts[updateID1].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false + c.Assert(err, IsNil) + + // first time plan generated + rs, err := tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 4")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 5")) + + // next start a non autocommit txn + tk1.MustExec("set autocommit = 0") + tk1.MustExec("begin") + // try to exec using point get plan(this plan should not go short path) + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 6")) + + // update rows + tk2 := testkit.NewTestKit(c, s.store) + tk2.MustExec("use pu_test2") + tk2.MustExec(`prepare pu2 from "update t set c = c + 2 where ? = a "`) + tk2.MustExec("set @p3 = 3") + tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 5")) + tk2.MustExec("execute pu2 using @p3") + tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 7")) + tk2.MustExec("execute pu2 using @p3") + tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 9")) + + // try to update in session 1 + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 6")) + _, err = tk1.Exec("commit") + c.Assert(kv.ErrWriteConflict.Equal(err), IsTrue, Commentf("error: %s", err)) + + // verify + tk2.MustQuery("select * from t where a = 1").Check(testkit.Rows("1 1 1")) + tk1.MustQuery("select * from t where a = 2").Check(testkit.Rows("2 2 2")) + tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 9")) + tk1.MustQuery("select * from t where a = 2").Check(testkit.Rows("2 2 2")) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 9")) + + // again next start a non autocommit txn + tk1.MustExec("set autocommit = 0") + tk1.MustExec("begin") + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 10")) + + rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) + c.Assert(rs, IsNil) + c.Assert(err, IsNil) + tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 11")) + tk1.MustExec("commit") + + tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 11")) +} + +func (s *testSuite1) TestPartitionHashCode(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec(`create table t(c1 bigint, c2 bigint, c3 bigint, primary key(c1)) + partition by hash (c1) partitions 4;`) + var wg util.WaitGroupWrapper + for i := 0; i < 5; i++ { + wg.Run(func() { + tk1 := testkit.NewTestKitWithInit(c, s.store) + for i := 0; i < 5; i++ { + tk1.MustExec("select * from t") + } + }) + } + wg.Wait() +} + +func (s *testSuite1) TestAlterDefaultValue(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t(a int, primary key(a))") + tk.MustExec("insert into t(a) values(1)") + tk.MustExec("alter table t add column b int default 1") + tk.MustExec("alter table t alter b set default 2") + tk.MustQuery("select b from t where a = 1").Check(testkit.Rows("1")) +} + +type testClusterTableSuite struct { + testSuiteWithCliBase + rpcserver *grpc.Server + listenAddr string +} + +func (s *testClusterTableSuite) SetUpSuite(c *C) { + s.testSuiteWithCliBase.SetUpSuite(c) + s.rpcserver, s.listenAddr = s.setUpRPCService(c, "127.0.0.1:0") +} + +func (s *testClusterTableSuite) setUpRPCService(c *C, addr string) (*grpc.Server, string) { + sm := &mockSessionManager1{} + sm.PS = append(sm.PS, &util.ProcessInfo{ + ID: 1, + User: "root", + Host: "127.0.0.1", + Command: mysql.ComQuery, + }) + lis, err := net.Listen("tcp", addr) + c.Assert(err, IsNil) + srv := server.NewRPCServer(config.GetGlobalConfig(), s.dom, sm) + port := lis.Addr().(*net.TCPAddr).Port + addr = fmt.Sprintf("127.0.0.1:%d", port) + go func() { + err = srv.Serve(lis) + c.Assert(err, IsNil) + }() + config.UpdateGlobal(func(conf *config.Config) { + conf.Status.StatusPort = uint(port) + }) + return srv, addr +} +func (s *testClusterTableSuite) TearDownSuite(c *C) { + if s.rpcserver != nil { + s.rpcserver.Stop() + s.rpcserver = nil + } + s.testSuiteWithCliBase.TearDownSuite(c) +} + +func (s *testClusterTableSuite) TestSlowQuery(c *C) { + logData0 := "" + logData1 := ` +# Time: 2020-02-15T18:00:01.000000+08:00 +select 1; +# Time: 2020-02-15T19:00:05.000000+08:00 +select 2;` + logData2 := ` +# Time: 2020-02-16T18:00:01.000000+08:00 +select 3; +# Time: 2020-02-16T18:00:05.000000+08:00 +select 4;` + logData3 := ` +# Time: 2020-02-16T19:00:00.000000+08:00 +select 5; +# Time: 2020-02-17T18:00:05.000000+08:00 +select 6;` + logData4 := ` +# Time: 2020-05-14T19:03:54.314615176+08:00 +select 7;` + logData := []string{logData0, logData1, logData2, logData3, logData4} + + fileName0 := "tidb-slow-2020-02-14T19-04-05.01.log" + fileName1 := "tidb-slow-2020-02-15T19-04-05.01.log" + fileName2 := "tidb-slow-2020-02-16T19-04-05.01.log" + fileName3 := "tidb-slow-2020-02-17T18-00-05.01.log" + fileName4 := "tidb-slow.log" + fileNames := []string{fileName0, fileName1, fileName2, fileName3, fileName4} + + prepareLogs(c, logData, fileNames) + defer func() { + removeFiles(fileNames) + }() + tk := testkit.NewTestKitWithInit(c, s.store) + loc, err := time.LoadLocation("Asia/Shanghai") + c.Assert(err, IsNil) + tk.Se.GetSessionVars().TimeZone = loc + tk.MustExec("use information_schema") + cases := []struct { + prepareSQL string + sql string + result []string + }{ + { + sql: "select count(*),min(time),max(time) from %s where time > '2019-01-26 21:51:00' and time < now()", + result: []string{"7|2020-02-15 18:00:01.000000|2020-05-14 19:03:54.314615"}, + }, + { + sql: "select count(*),min(time),max(time) from %s where time > '2020-02-15 19:00:00' and time < '2020-02-16 18:00:02'", + result: []string{"2|2020-02-15 19:00:05.000000|2020-02-16 18:00:01.000000"}, + }, + { + sql: "select count(*),min(time),max(time) from %s where time > '2020-02-16 18:00:02' and time < '2020-02-17 17:00:00'", + result: []string{"2|2020-02-16 18:00:05.000000|2020-02-16 19:00:00.000000"}, + }, + { + sql: "select count(*),min(time),max(time) from %s where time > '2020-02-16 18:00:02' and time < '2020-02-17 20:00:00'", + result: []string{"3|2020-02-16 18:00:05.000000|2020-02-17 18:00:05.000000"}, + }, + { + sql: "select count(*),min(time),max(time) from %s", + result: []string{"1|2020-05-14 19:03:54.314615|2020-05-14 19:03:54.314615"}, + }, + { + sql: "select count(*),min(time) from %s where time > '2020-02-16 20:00:00'", + result: []string{"1|2020-02-17 18:00:05.000000"}, + }, + { + sql: "select count(*) from %s where time > '2020-02-17 20:00:00'", + result: []string{"0"}, + }, + { + sql: "select query from %s where time > '2019-01-26 21:51:00' and time < now()", + result: []string{"select 1;", "select 2;", "select 3;", "select 4;", "select 5;", "select 6;", "select 7;"}, + }, + // Test for different timezone. + { + prepareSQL: "set @@time_zone = '+00:00'", + sql: "select time from %s where time = '2020-02-17 10:00:05.000000'", + result: []string{"2020-02-17 10:00:05.000000"}, + }, + { + prepareSQL: "set @@time_zone = '+02:00'", + sql: "select time from %s where time = '2020-02-17 12:00:05.000000'", + result: []string{"2020-02-17 12:00:05.000000"}, + }, + // Test for issue 17224 + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select time from %s where time = '2020-05-14 19:03:54.314615'", + result: []string{"2020-05-14 19:03:54.314615"}, + }, + } + for _, cas := range cases { + if len(cas.prepareSQL) > 0 { + tk.MustExec(cas.prepareSQL) + } + sql := fmt.Sprintf(cas.sql, "slow_query") + tk.MustQuery(sql).Check(testkit.RowsWithSep("|", cas.result...)) + sql = fmt.Sprintf(cas.sql, "cluster_slow_query") + tk.MustQuery(sql).Check(testkit.RowsWithSep("|", cas.result...)) + } +} + +func (s *testClusterTableSuite) TestIssue20236(c *C) { + logData0 := "" + logData1 := ` +# Time: 2020-02-15T18:00:01.000000+08:00 +select 1; +# Time: 2020-02-15T19:00:05.000000+08:00 +select 2; +# Time: 2020-02-15T20:00:05.000000+08:00` + logData2 := `select 3; +# Time: 2020-02-16T18:00:01.000000+08:00 +select 4; +# Time: 2020-02-16T18:00:05.000000+08:00 +select 5;` + logData3 := ` +# Time: 2020-02-16T19:00:00.000000+08:00 +select 6; +# Time: 2020-02-17T18:00:05.000000+08:00 +select 7; +# Time: 2020-02-17T19:00:00.000000+08:00` + logData4 := `select 8; +# Time: 2020-02-17T20:00:00.000000+08:00 +select 9 +# Time: 2020-05-14T19:03:54.314615176+08:00 +select 10;` + logData := []string{logData0, logData1, logData2, logData3, logData4} + + fileName0 := "tidb-slow-2020-02-14T19-04-05.01.log" + fileName1 := "tidb-slow-2020-02-15T19-04-05.01.log" + fileName2 := "tidb-slow-2020-02-16T19-04-05.01.log" + fileName3 := "tidb-slow-2020-02-17T18-00-05.01.log" + fileName4 := "tidb-slow.log" + fileNames := []string{fileName0, fileName1, fileName2, fileName3, fileName4} + prepareLogs(c, logData, fileNames) + defer func() { + removeFiles(fileNames) + }() + tk := testkit.NewTestKitWithInit(c, s.store) + loc, err := time.LoadLocation("Asia/Shanghai") + c.Assert(err, IsNil) + tk.Se.GetSessionVars().TimeZone = loc + tk.MustExec("use information_schema") + cases := []struct { + prepareSQL string + sql string + result []string + }{ + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select time from cluster_slow_query where time > '2020-02-17 12:00:05.000000' and time < '2020-05-14 20:00:00.000000'", + result: []string{"2020-02-17 18:00:05.000000", "2020-02-17 19:00:00.000000", "2020-05-14 19:03:54.314615"}, + }, + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select time from cluster_slow_query where time > '2020-02-17 12:00:05.000000' and time < '2020-05-14 20:00:00.000000' order by time desc", + result: []string{"2020-05-14 19:03:54.314615", "2020-02-17 19:00:00.000000", "2020-02-17 18:00:05.000000"}, + }, + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select time from cluster_slow_query where (time > '2020-02-15 18:00:00' and time < '2020-02-15 20:01:00') or (time > '2020-02-17 18:00:00' and time < '2020-05-14 20:00:00') order by time", + result: []string{"2020-02-15 18:00:01.000000", "2020-02-15 19:00:05.000000", "2020-02-17 18:00:05.000000", "2020-02-17 19:00:00.000000", "2020-05-14 19:03:54.314615"}, + }, + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select time from cluster_slow_query where (time > '2020-02-15 18:00:00' and time < '2020-02-15 20:01:00') or (time > '2020-02-17 18:00:00' and time < '2020-05-14 20:00:00') order by time desc", + result: []string{"2020-05-14 19:03:54.314615", "2020-02-17 19:00:00.000000", "2020-02-17 18:00:05.000000", "2020-02-15 19:00:05.000000", "2020-02-15 18:00:01.000000"}, + }, + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select count(*) from cluster_slow_query where time > '2020-02-15 18:00:00.000000' and time < '2020-05-14 20:00:00.000000' order by time desc", + result: []string{"9"}, + }, + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select count(*) from cluster_slow_query where (time > '2020-02-16 18:00:00' and time < '2020-05-14 20:00:00') or (time > '2020-02-17 18:00:00' and time < '2020-05-17 20:00:00')", + result: []string{"6"}, + }, + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select count(*) from cluster_slow_query where time > '2020-02-16 18:00:00.000000' and time < '2020-02-17 20:00:00.000000' order by time desc", + result: []string{"5"}, + }, + { + prepareSQL: "set @@time_zone = '+08:00'", + sql: "select time from cluster_slow_query where time > '2020-02-16 18:00:00.000000' and time < '2020-05-14 20:00:00.000000' order by time desc limit 3", + result: []string{"2020-05-14 19:03:54.314615", "2020-02-17 19:00:00.000000", "2020-02-17 18:00:05.000000"}, + }, + } + for _, cas := range cases { + if len(cas.prepareSQL) > 0 { + tk.MustExec(cas.prepareSQL) + } + tk.MustQuery(cas.sql).Check(testkit.RowsWithSep("|", cas.result...)) + } +} + +func (s *testClusterTableSuite) TestSQLDigestTextRetriever(c *C) { + tkInit := testkit.NewTestKitWithInit(c, s.store) + tkInit.MustExec("set global tidb_enable_stmt_summary = 1") + tkInit.MustQuery("select @@global.tidb_enable_stmt_summary").Check(testkit.Rows("1")) + tkInit.MustExec("drop table if exists test_sql_digest_text_retriever") + tkInit.MustExec("create table test_sql_digest_text_retriever (id int primary key, v int)") + + tk := testkit.NewTestKitWithInit(c, s.store) + c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) + tk.MustExec("insert into test_sql_digest_text_retriever values (1, 1)") + + insertNormalized, insertDigest := parser.NormalizeDigest("insert into test_sql_digest_text_retriever values (1, 1)") + _, updateDigest := parser.NormalizeDigest("update test_sql_digest_text_retriever set v = v + 1 where id = 1") + r := &expression.SQLDigestTextRetriever{ + SQLDigestsMap: map[string]string{ + insertDigest.String(): "", + updateDigest.String(): "", + }, + } + err := r.RetrieveLocal(context.Background(), tk.Se) + c.Assert(err, IsNil) + c.Assert(r.SQLDigestsMap[insertDigest.String()], Equals, insertNormalized) + c.Assert(r.SQLDigestsMap[updateDigest.String()], Equals, "") +} + +func (s *testClusterTableSuite) TestFunctionDecodeSQLDigests(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) + tk.MustExec("set global tidb_enable_stmt_summary = 1") + tk.MustQuery("select @@global.tidb_enable_stmt_summary").Check(testkit.Rows("1")) + tk.MustExec("drop table if exists test_func_decode_sql_digests") + tk.MustExec("create table test_func_decode_sql_digests(id int primary key, v int)") + + q1 := "begin" + norm1, digest1 := parser.NormalizeDigest(q1) + q2 := "select @@tidb_current_ts" + norm2, digest2 := parser.NormalizeDigest(q2) + q3 := "select id, v from test_func_decode_sql_digests where id = 1 for update" + norm3, digest3 := parser.NormalizeDigest(q3) + + // TIDB_DECODE_SQL_DIGESTS function doesn't actually do "decoding", instead it queries `statements_summary` and it's + // variations for the corresponding statements. + // Execute the statements so that the queries will be saved into statements_summary table. + tk.MustExec(q1) + // Save the ts to query the transaction from tidb_trx. + ts, err := strconv.ParseUint(tk.MustQuery(q2).Rows()[0][0].(string), 10, 64) + c.Assert(err, IsNil) + c.Assert(ts, Greater, uint64(0)) + tk.MustExec(q3) + tk.MustExec("rollback") + + // Test statements truncating. + decoded := fmt.Sprintf(`["%s","%s","%s"]`, norm1, norm2, norm3) + digests := fmt.Sprintf(`["%s","%s","%s"]`, digest1, digest2, digest3) + tk.MustQuery("select tidb_decode_sql_digests(?, 0)", digests).Check(testkit.Rows(decoded)) + // The three queries are shorter than truncate length, equal to truncate length and longer than truncate length respectively. + tk.MustQuery("select tidb_decode_sql_digests(?, ?)", digests, len(norm2)).Check(testkit.Rows( + "[\"begin\",\"select @@tidb_current_ts\",\"select `id` , `v` from `...\"]")) + + // Empty array. + tk.MustQuery("select tidb_decode_sql_digests('[]')").Check(testkit.Rows("[]")) + + // NULL + tk.MustQuery("select tidb_decode_sql_digests(null)").Check(testkit.Rows("")) + + // Array containing wrong types and not-existing digests (maps to null). + tk.MustQuery("select tidb_decode_sql_digests(?)", fmt.Sprintf(`["%s",1,null,"%s",{"a":1},[2],"%s","","abcde"]`, digest1, digest2, digest3)). + Check(testkit.Rows(fmt.Sprintf(`["%s",null,null,"%s",null,null,"%s",null,null]`, norm1, norm2, norm3))) + + // Not JSON array (throws warnings) + tk.MustQuery(`select tidb_decode_sql_digests('{"a":1}')`).Check(testkit.Rows("")) + tk.MustQuery(`show warnings`).Check(testkit.Rows(`Warning 1210 The argument can't be unmarshalled as JSON array: '{"a":1}'`)) + tk.MustQuery(`select tidb_decode_sql_digests('aabbccdd')`).Check(testkit.Rows("")) + tk.MustQuery(`show warnings`).Check(testkit.Rows(`Warning 1210 The argument can't be unmarshalled as JSON array: 'aabbccdd'`)) + + // Invalid argument count. + tk.MustGetErrCode("select tidb_decode_sql_digests('a', 1, 2)", 1582) + tk.MustGetErrCode("select tidb_decode_sql_digests()", 1582) +} + +func (s *testClusterTableSuite) TestFunctionDecodeSQLDigestsPrivilege(c *C) { + dropUserTk := testkit.NewTestKitWithInit(c, s.store) + c.Assert(dropUserTk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) + + tk := testkit.NewTestKitWithInit(c, s.store) + c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) + tk.MustExec("create user 'testuser'@'localhost'") + defer dropUserTk.MustExec("drop user 'testuser'@'localhost'") + c.Assert(tk.Se.Auth(&auth.UserIdentity{ + Username: "testuser", + Hostname: "localhost", + }, nil, nil), IsTrue) + err := tk.ExecToErr("select tidb_decode_sql_digests('[\"aa\"]')") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[expression:1227]Access denied; you need (at least one of) the PROCESS privilege(s) for this operation") + + tk = testkit.NewTestKitWithInit(c, s.store) + c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) + tk.MustExec("create user 'testuser2'@'localhost'") + defer dropUserTk.MustExec("drop user 'testuser2'@'localhost'") + tk.MustExec("grant process on *.* to 'testuser2'@'localhost'") + c.Assert(tk.Se.Auth(&auth.UserIdentity{ + Username: "testuser2", + Hostname: "localhost", + }, nil, nil), IsTrue) + _ = tk.MustQuery("select tidb_decode_sql_digests('[\"aa\"]')") +} + +func prepareLogs(c *C, logData []string, fileNames []string) { + writeFile := func(file string, data string) { + f, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) + c.Assert(err, IsNil) + _, err = f.Write([]byte(data)) + c.Assert(f.Close(), IsNil) + c.Assert(err, IsNil) + } + + for i, log := range logData { + writeFile(fileNames[i], log) + } +} + +func removeFiles(fileNames []string) { + for _, fileName := range fileNames { + os.Remove(fileName) + } +} + +// this is from jira issue #5856 +func (s *testSuite1) TestInsertValuesWithSubQuery(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t2") + tk.MustExec("create table t2(a int, b int, c int)") + defer tk.MustExec("drop table if exists t2") + + // should not reference upper scope + c.Assert(tk.ExecToErr("insert into t2 values (11, 8, (select not b))"), NotNil) + c.Assert(tk.ExecToErr("insert into t2 set a = 11, b = 8, c = (select b))"), NotNil) + + // subquery reference target table is allowed + tk.MustExec("insert into t2 values(1, 1, (select b from t2))") + tk.MustQuery("select * from t2").Check(testkit.Rows("1 1 ")) + tk.MustExec("insert into t2 set a = 1, b = 1, c = (select b+1 from t2)") + tk.MustQuery("select * from t2").Check(testkit.Rows("1 1 ", "1 1 2")) + + // insert using column should work normally + tk.MustExec("delete from t2") + tk.MustExec("insert into t2 values(2, 4, a)") + tk.MustQuery("select * from t2").Check(testkit.Rows("2 4 2")) + tk.MustExec("insert into t2 set a = 3, b = 5, c = b") + tk.MustQuery("select * from t2").Check(testkit.Rows("2 4 2", "3 5 5")) + + // issue #30626 + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int)") + // TODO: should insert success and get (81,1) from the table + err := tk.ExecToErr("insert into t values ( 81, ( select ( SELECT '1' AS `c0` WHERE '1' >= `subq_0`.`c0` ) as `c1` FROM ( SELECT '1' AS `c0` ) AS `subq_0` ) );") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "Insert's SET operation or VALUES_LIST doesn't support complex subqueries now") + err = tk.ExecToErr("insert into t set a = 81, b = (select ( SELECT '1' AS `c0` WHERE '1' >= `subq_0`.`c0` ) as `c1` FROM ( SELECT '1' AS `c0` ) AS `subq_0` );") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "Insert's SET operation or VALUES_LIST doesn't support complex subqueries now") + +} + +func (s *testSuite1) TestDIVZeroInPartitionExpr(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1(a int) partition by range (10 div a) (partition p0 values less than (10), partition p1 values less than maxvalue)") + defer tk.MustExec("drop table if exists t1") + + tk.MustExec("set @@sql_mode=''") + tk.MustExec("insert into t1 values (NULL), (0), (1)") + tk.MustExec("set @@sql_mode='STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO'") + tk.MustGetErrCode("insert into t1 values (NULL), (0), (1)", mysql.ErrDivisionByZero) +} + +func (s *testSuite1) TestInsertIntoGivenPartitionSet(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec(`create table t1( + a int(11) DEFAULT NULL, + b varchar(10) DEFAULT NULL, + UNIQUE KEY idx_a (a)) PARTITION BY RANGE (a) + (PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB, + PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB, + PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB, + PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB, + PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)`) + defer tk.MustExec("drop table if exists t1") + + // insert into + tk.MustExec("insert into t1 partition(p0) values(1, 'a'), (2, 'b')") + tk.MustQuery("select * from t1 partition(p0) order by a").Check(testkit.Rows("1 a", "2 b")) + tk.MustExec("insert into t1 partition(p0, p1) values(3, 'c'), (4, 'd')") + tk.MustQuery("select * from t1 partition(p1)").Check(testkit.Rows()) + + tk.MustGetErrMsg("insert into t1 values(1, 'a')", "[kv:1062]Duplicate entry '1' for key 'idx_a'") + tk.MustGetErrMsg("insert into t1 partition(p0, p_non_exist) values(1, 'a')", "[table:1735]Unknown partition 'p_non_exist' in table 't1'") + tk.MustGetErrMsg("insert into t1 partition(p0, p1) values(40, 'a')", "[table:1748]Found a row not matching the given partition set") + + // replace into + tk.MustExec("replace into t1 partition(p0) values(1, 'replace')") + tk.MustExec("replace into t1 partition(p0, p1) values(3, 'replace'), (4, 'replace')") + tk.MustExec("replace into t1 values(1, 'a')") + tk.MustQuery("select * from t1 partition (p0) order by a").Check(testkit.Rows("1 a", "2 b", "3 replace", "4 replace")) + + tk.MustGetErrMsg("replace into t1 partition(p0, p_non_exist) values(1, 'a')", "[table:1735]Unknown partition 'p_non_exist' in table 't1'") + tk.MustGetErrMsg("replace into t1 partition(p0, p1) values(40, 'a')", "[table:1748]Found a row not matching the given partition set") + + tk.MustExec("truncate table t1") + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b char(10))") + defer tk.MustExec("drop table if exists t") + + // insert into general table + tk.MustGetErrMsg("insert into t partition(p0, p1) values(1, 'a')", "[planner:1747]PARTITION () clause on non partitioned table") + + // insert into from select + tk.MustExec("insert into t values(1, 'a'), (2, 'b')") + tk.MustExec("insert into t1 partition(p0) select * from t") + tk.MustQuery("select * from t1 partition(p0) order by a").Check(testkit.Rows("1 a", "2 b")) + + tk.MustExec("truncate table t") + tk.MustExec("insert into t values(3, 'c'), (4, 'd')") + tk.MustExec("insert into t1 partition(p0, p1) select * from t") + tk.MustQuery("select * from t1 partition(p1) order by a").Check(testkit.Rows()) + tk.MustQuery("select * from t1 partition(p0) order by a").Check(testkit.Rows("1 a", "2 b", "3 c", "4 d")) + + tk.MustGetErrMsg("insert into t1 select 1, 'a'", "[kv:1062]Duplicate entry '1' for key 'idx_a'") + tk.MustGetErrMsg("insert into t1 partition(p0, p_non_exist) select 1, 'a'", "[table:1735]Unknown partition 'p_non_exist' in table 't1'") + tk.MustGetErrMsg("insert into t1 partition(p0, p1) select 40, 'a'", "[table:1748]Found a row not matching the given partition set") + + // replace into from select + tk.MustExec("replace into t1 partition(p0) select 1, 'replace'") + tk.MustExec("truncate table t") + tk.MustExec("insert into t values(3, 'replace'), (4, 'replace')") + tk.MustExec("replace into t1 partition(p0, p1) select * from t") + + tk.MustExec("replace into t1 select 1, 'a'") + tk.MustQuery("select * from t1 partition (p0) order by a").Check(testkit.Rows("1 a", "2 b", "3 replace", "4 replace")) + tk.MustGetErrMsg("replace into t1 partition(p0, p_non_exist) select 1, 'a'", "[table:1735]Unknown partition 'p_non_exist' in table 't1'") + tk.MustGetErrMsg("replace into t1 partition(p0, p1) select 40, 'a'", "[table:1748]Found a row not matching the given partition set") +} + +func (s *testSuite1) TestUpdateGivenPartitionSet(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1,t2,t3,t4") + tk.MustExec(`create table t1( + a int(11), + b varchar(10) DEFAULT NULL, + primary key idx_a (a)) PARTITION BY RANGE (a) + (PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB, + PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB, + PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB, + PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB, + PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)`) + + tk.MustExec(`create table t2( + a int(11) DEFAULT NULL, + b varchar(10) DEFAULT NULL) PARTITION BY RANGE (a) + (PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB, + PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB, + PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB, + PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB, + PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)`) + + tk.MustExec(`create table t3 (a int(11), b varchar(10) default null)`) + + defer tk.MustExec("drop table if exists t1,t2,t3") + tk.MustExec("insert into t3 values(1, 'a'), (2, 'b'), (11, 'c'), (21, 'd')") + err := tk.ExecToErr("update t3 partition(p0) set a = 40 where a = 2") + c.Assert(err.Error(), Equals, "[planner:1747]PARTITION () clause on non partitioned table") + + // update with primary key change + tk.MustExec("insert into t1 values(1, 'a'), (2, 'b'), (11, 'c'), (21, 'd')") + err = tk.ExecToErr("update t1 partition(p0, p1) set a = 40") + c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") + err = tk.ExecToErr("update t1 partition(p0) set a = 40 where a = 2") + c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") + // test non-exist partition. + err = tk.ExecToErr("update t1 partition (p0, p_non_exist) set a = 40") + c.Assert(err.Error(), Equals, "[table:1735]Unknown partition 'p_non_exist' in table 't1'") + // test join. + err = tk.ExecToErr("update t1 partition (p0), t3 set t1.a = 40 where t3.a = 2") + c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") + + tk.MustExec("update t1 partition(p0) set a = 3 where a = 2") + tk.MustExec("update t1 partition(p0, p3) set a = 33 where a = 1") + + // update without partition change + tk.MustExec("insert into t2 values(1, 'a'), (2, 'b'), (11, 'c'), (21, 'd')") + err = tk.ExecToErr("update t2 partition(p0, p1) set a = 40") + c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") + err = tk.ExecToErr("update t2 partition(p0) set a = 40 where a = 2") + c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") + + tk.MustExec("update t2 partition(p0) set a = 3 where a = 2") + tk.MustExec("update t2 partition(p0, p3) set a = 33 where a = 1") + + tk.MustExec("create table t4(a int primary key, b int) partition by hash(a) partitions 2") + tk.MustExec("insert into t4(a, b) values(1, 1),(2, 2),(3, 3);") + err = tk.ExecToErr("update t4 partition(p0) set a = 5 where a = 2") + c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") +} + +func (s *testSuiteP2) TestApplyCache(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test;") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a int);") + tk.MustExec("insert into t values (1),(1),(1),(1),(1),(1),(1),(1),(1);") + tk.MustExec("analyze table t;") + result := tk.MustQuery("explain analyze SELECT count(1) FROM (SELECT (SELECT min(a) FROM t as t2 WHERE t2.a > t1.a) AS a from t as t1) t;") + c.Assert(result.Rows()[1][0], Equals, "└─Apply_39") + var ( + ind int + flag bool + ) + value := (result.Rows()[1][5]).(string) + for ind = 0; ind < len(value)-5; ind++ { + if value[ind:ind+5] == "cache" { + flag = true + break + } + } + c.Assert(flag, Equals, true) + c.Assert(value[ind:], Equals, "cache:ON, cacheHitRatio:88.889%") + + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a int);") + tk.MustExec("insert into t values (1),(2),(3),(4),(5),(6),(7),(8),(9);") + tk.MustExec("analyze table t;") + result = tk.MustQuery("explain analyze SELECT count(1) FROM (SELECT (SELECT min(a) FROM t as t2 WHERE t2.a > t1.a) AS a from t as t1) t;") + c.Assert(result.Rows()[1][0], Equals, "└─Apply_39") + flag = false + value = (result.Rows()[1][5]).(string) + for ind = 0; ind < len(value)-5; ind++ { + if value[ind:ind+5] == "cache" { + flag = true + break + } + } + c.Assert(flag, Equals, true) + c.Assert(value[ind:], Equals, "cache:OFF") +} + +// For issue 17256 +func (s *testSuite) TestGenerateColumnReplace(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int as (a + 1) virtual not null, unique index idx(b));") + tk.MustExec("REPLACE INTO `t1` (`a`) VALUES (2);") + tk.MustExec("REPLACE INTO `t1` (`a`) VALUES (2);") + tk.MustQuery("select * from t1").Check(testkit.Rows("2 3")) + tk.MustExec("insert into `t1` (`a`) VALUES (2) on duplicate key update a = 3;") + tk.MustQuery("select * from t1").Check(testkit.Rows("3 4")) +} + +func (s *testSlowQuery) TestSlowQueryWithoutSlowLog(c *C) { + tk := testkit.NewTestKit(c, s.store) + originCfg := config.GetGlobalConfig() + newCfg := *originCfg + newCfg.Log.SlowQueryFile = "tidb-slow-not-exist.log" + newCfg.Log.SlowThreshold = math.MaxUint64 + config.StoreGlobalConfig(&newCfg) + defer func() { + config.StoreGlobalConfig(originCfg) + }() + tk.MustQuery("select query from information_schema.slow_query").Check(testkit.Rows()) + tk.MustQuery("select query from information_schema.slow_query where time > '2020-09-15 12:16:39' and time < now()").Check(testkit.Rows()) +} + +func (s *testSlowQuery) TestSlowQuerySensitiveQuery(c *C) { + tk := testkit.NewTestKit(c, s.store) + originCfg := config.GetGlobalConfig() + newCfg := *originCfg + + f, err := os.CreateTemp("", "tidb-slow-*.log") + c.Assert(err, IsNil) + f.Close() + newCfg.Log.SlowQueryFile = f.Name() + config.StoreGlobalConfig(&newCfg) + defer func() { + tk.MustExec("set tidb_slow_log_threshold=300;") + config.StoreGlobalConfig(originCfg) + err = os.Remove(newCfg.Log.SlowQueryFile) + c.Assert(err, IsNil) + }() + err = logutil.InitLogger(newCfg.Log.ToLogConfig()) + c.Assert(err, IsNil) + + tk.MustExec("set tidb_slow_log_threshold=0;") + tk.MustExec("drop user if exists user_sensitive;") + tk.MustExec("create user user_sensitive identified by '123456789';") + tk.MustExec("alter user 'user_sensitive'@'%' identified by 'abcdefg';") + tk.MustExec("set password for 'user_sensitive'@'%' = 'xyzuvw';") + tk.MustQuery("select query from `information_schema`.`slow_query` " + + "where (query like 'set password%' or query like 'create user%' or query like 'alter user%') " + + "and query like '%user_sensitive%' order by query;"). + Check(testkit.Rows( + "alter user {user_sensitive@% password = ***};", + "create user {user_sensitive@% password = ***};", + "set password for user user_sensitive@%;", + )) +} + +func (s *testSlowQuery) TestSlowQueryPrepared(c *C) { + tk := testkit.NewTestKit(c, s.store) + originCfg := config.GetGlobalConfig() + newCfg := *originCfg + + f, err := os.CreateTemp("", "tidb-slow-*.log") + c.Assert(err, IsNil) + f.Close() + newCfg.Log.SlowQueryFile = f.Name() + config.StoreGlobalConfig(&newCfg) + defer func() { + tk.MustExec("set tidb_slow_log_threshold=300;") + tk.MustExec("set tidb_redact_log=0;") + config.StoreGlobalConfig(originCfg) + os.Remove(newCfg.Log.SlowQueryFile) + }() + err = logutil.InitLogger(newCfg.Log.ToLogConfig()) + c.Assert(err, IsNil) + + tk.MustExec("set tidb_slow_log_threshold=0;") + tk.MustExec(`prepare mystmt1 from 'select sleep(?), 1';`) + tk.MustExec("SET @num = 0.01;") + tk.MustExec("execute mystmt1 using @num;") + tk.MustQuery("SELECT Query FROM `information_schema`.`slow_query` " + + "where query like 'select%sleep%' order by time desc limit 1"). + Check(testkit.Rows( + "select sleep(?), 1 [arguments: 0.01];", + )) + + tk.MustExec("set tidb_redact_log=1;") + tk.MustExec(`prepare mystmt2 from 'select sleep(?), 2';`) + tk.MustExec("execute mystmt2 using @num;") + tk.MustQuery("SELECT Query FROM `information_schema`.`slow_query` " + + "where query like 'select%sleep%' order by time desc limit 1"). + Check(testkit.Rows( + "select `sleep` ( ? ) , ?;", + )) +} + +func (s *testSlowQuery) TestLogSlowLogIndex(c *C) { + tk := testkit.NewTestKit(c, s.store) + f, err := os.CreateTemp("", "tidb-slow-*.log") + c.Assert(err, IsNil) + f.Close() + + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.Log.SlowQueryFile = f.Name() + }) + err = logutil.InitLogger(config.GetGlobalConfig().Log.ToLogConfig()) + c.Assert(err, IsNil) + + tk.MustExec("use test") + tk.MustExec("create table t (a int, b int,index idx(a));") + tk.MustExec("set tidb_slow_log_threshold=0;") + tk.MustQuery("select * from t use index (idx) where a in (1) union select * from t use index (idx) where a in (2,3);") + tk.MustExec("set tidb_slow_log_threshold=300;") + tk.MustQuery("select index_names from `information_schema`.`slow_query` " + + "where query like 'select%union%' limit 1"). + Check(testkit.Rows( + "[t:idx]", + )) +} + +func (s *testSlowQuery) TestSlowQuery(c *C) { + tk := testkit.NewTestKit(c, s.store) + + f, err := os.CreateTemp("", "tidb-slow-*.log") + c.Assert(err, IsNil) + _, err = f.WriteString(` +# Time: 2020-10-13T20:08:13.970563+08:00 +select * from t; +# Time: 2020-10-16T20:08:13.970563+08:00 +select * from t; +`) + c.Assert(err, IsNil) + err = f.Close() + c.Assert(err, IsNil) + executor.ParseSlowLogBatchSize = 1 + originCfg := config.GetGlobalConfig() + newCfg := *originCfg + newCfg.Log.SlowQueryFile = f.Name() + config.StoreGlobalConfig(&newCfg) + defer func() { + executor.ParseSlowLogBatchSize = 64 + config.StoreGlobalConfig(originCfg) + err = os.Remove(newCfg.Log.SlowQueryFile) + c.Assert(err, IsNil) + }() + err = logutil.InitLogger(newCfg.Log.ToLogConfig()) + c.Assert(err, IsNil) + + tk.MustQuery("select count(*) from `information_schema`.`slow_query` where time > '2020-10-16 20:08:13' and time < '2020-10-16 21:08:13'").Check(testkit.Rows("1")) + tk.MustQuery("select count(*) from `information_schema`.`slow_query` where time > '2019-10-13 20:08:13' and time < '2020-10-16 21:08:13'").Check(testkit.Rows("2")) +} + +func (s *testSerialSuite) TestKillTableReader(c *C) { + var retry = "github.com/tikv/client-go/v2/locate/mockRetrySendReqToRegion" + defer func() { + c.Assert(failpoint.Disable(retry), IsNil) + }() + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int)") + tk.MustExec("insert into t values (1),(2),(3)") + tk.MustExec("set @@tidb_distsql_scan_concurrency=1") + atomic.StoreUint32(&tk.Se.GetSessionVars().Killed, 0) + c.Assert(failpoint.Enable(retry, `return(true)`), IsNil) + wg := &sync.WaitGroup{} + wg.Add(1) + go func() { + defer wg.Done() + time.Sleep(1 * time.Second) + err := tk.QueryToErr("select * from t") + c.Assert(err, NotNil) + c.Assert(int(terror.ToSQLError(errors.Cause(err).(*terror.Error)).Code), Equals, int(executor.ErrQueryInterrupted.Code())) + }() + atomic.StoreUint32(&tk.Se.GetSessionVars().Killed, 1) + wg.Wait() +} + +func (s *testSerialSuite) TestPrevStmtDesensitization(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec(fmt.Sprintf("set @@session.%v=1", variable.TiDBRedactLog)) + defer tk.MustExec(fmt.Sprintf("set @@session.%v=0", variable.TiDBRedactLog)) + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int, unique key (a))") + tk.MustExec("begin") + tk.MustExec("insert into t values (1),(2)") + c.Assert(tk.Se.GetSessionVars().PrevStmt.String(), Equals, "insert into `t` values ( ? ) , ( ? )") + c.Assert(tk.ExecToErr("insert into t values (1)").Error(), Equals, `[kv:1062]Duplicate entry '?' for key 'a'`) +} + +func (s *testSuite) TestIssue19372(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1, t2;") + tk.MustExec("create table t1 (c_int int, c_str varchar(40), key(c_str));") + tk.MustExec("create table t2 like t1;") + tk.MustExec("insert into t1 values (1, 'a'), (2, 'b'), (3, 'c');") + tk.MustExec("insert into t2 select * from t1;") + tk.MustQuery("select (select t2.c_str from t2 where t2.c_str <= t1.c_str and t2.c_int in (1, 2) order by t2.c_str limit 1) x from t1 order by c_int;").Check(testkit.Rows("a", "a", "a")) +} + +func (s *testSerialSuite1) TestCollectCopRuntimeStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int)") + tk.MustExec("set tidb_enable_collect_execution_info=1;") + c.Assert(failpoint.Enable("tikvclient/tikvStoreRespResult", `return(true)`), IsNil) + rows := tk.MustQuery("explain analyze select * from t1").Rows() + c.Assert(len(rows), Equals, 2) + explain := fmt.Sprintf("%v", rows[0]) + c.Assert(explain, Matches, ".*rpc_num: 2, .*regionMiss:.*") + c.Assert(failpoint.Disable("tikvclient/tikvStoreRespResult"), IsNil) +} + +func (s *testSerialSuite1) TestIndexLookupRuntimeStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int, index(a))") + tk.MustExec("insert into t1 values (1,2),(2,3),(3,4)") + sql := "explain analyze select * from t1 use index(a) where a > 1;" + rows := tk.MustQuery(sql).Rows() + c.Assert(len(rows), Equals, 3) + explain := fmt.Sprintf("%v", rows[0]) + c.Assert(explain, Matches, ".*time:.*loops:.*index_task:.*table_task: {total_time.*num.*concurrency.*}.*") + indexExplain := fmt.Sprintf("%v", rows[1]) + tableExplain := fmt.Sprintf("%v", rows[2]) + c.Assert(indexExplain, Matches, ".*time:.*loops:.*cop_task:.*") + c.Assert(tableExplain, Matches, ".*time:.*loops:.*cop_task:.*") +} + +func (s *testSerialSuite1) TestHashAggRuntimeStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int)") + tk.MustExec("insert into t1 values (1,2),(2,3),(3,4)") + sql := "explain analyze SELECT /*+ HASH_AGG() */ count(*) FROM t1 WHERE a < 10;" + rows := tk.MustQuery(sql).Rows() + c.Assert(len(rows), Equals, 5) + explain := fmt.Sprintf("%v", rows[0]) + c.Assert(explain, Matches, ".*time:.*loops:.*partial_worker:{wall_time:.*concurrency:.*task_num:.*tot_wait:.*tot_exec:.*tot_time:.*max:.*p95:.*}.*final_worker:{wall_time:.*concurrency:.*task_num:.*tot_wait:.*tot_exec:.*tot_time:.*max:.*p95:.*}.*") +} + +func (s *testSerialSuite1) TestIndexMergeRuntimeStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t1") + tk.MustExec("set @@tidb_enable_index_merge = 1") + tk.MustExec("create table t1(id int primary key, a int, b int, c int, d int)") + tk.MustExec("create index t1a on t1(a)") + tk.MustExec("create index t1b on t1(b)") + tk.MustExec("insert into t1 values(1,1,1,1,1),(2,2,2,2,2),(3,3,3,3,3),(4,4,4,4,4),(5,5,5,5,5)") + sql := "explain analyze select /*+ use_index_merge(t1, primary, t1a) */ * from t1 where id < 2 or a > 4;" + rows := tk.MustQuery(sql).Rows() + c.Assert(len(rows), Equals, 4) + explain := fmt.Sprintf("%v", rows[0]) + c.Assert(explain, Matches, ".*time:.*loops:.*index_task:{fetch_handle:.*, merge:.*}.*table_task:{num.*concurrency.*fetch_row.*wait_time.*}.*") + tableRangeExplain := fmt.Sprintf("%v", rows[1]) + indexExplain := fmt.Sprintf("%v", rows[2]) + tableExplain := fmt.Sprintf("%v", rows[3]) + c.Assert(tableRangeExplain, Matches, ".*time:.*loops:.*cop_task:.*") + c.Assert(indexExplain, Matches, ".*time:.*loops:.*cop_task:.*") + c.Assert(tableExplain, Matches, ".*time:.*loops:.*cop_task:.*") + tk.MustExec("set @@tidb_enable_collect_execution_info=0;") + sql = "select /*+ use_index_merge(t1, primary, t1a) */ * from t1 where id < 2 or a > 4 order by a" + tk.MustQuery(sql).Check(testkit.Rows("1 1 1 1 1", "5 5 5 5 5")) +} + +func (s *testSuite) TestCollectDMLRuntimeStats(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int, b int, unique index (a))") + + testSQLs := []string{ + "insert ignore into t1 values (5,5);", + "insert into t1 values (5,5) on duplicate key update a=a+1;", + "replace into t1 values (5,6),(6,7)", + "update t1 set a=a+1 where a=6;", + } + + getRootStats := func() string { + info := tk.Se.ShowProcess() + c.Assert(info, NotNil) + p, ok := info.Plan.(plannercore.Plan) + c.Assert(ok, IsTrue) + stats := tk.Se.GetSessionVars().StmtCtx.RuntimeStatsColl.GetRootStats(p.ID()) + return stats.String() + } + for _, sql := range testSQLs { + tk.MustExec(sql) + c.Assert(getRootStats(), Matches, "time.*loops.*Get.*num_rpc.*total_time.*") + } + + // Test for lock keys stats. + tk.MustExec("begin pessimistic") + tk.MustExec("update t1 set b=b+1") + c.Assert(getRootStats(), Matches, "time.*lock_keys.*time.* region.* keys.* lock_rpc:.* rpc_count.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustQuery("select * from t1 for update").Check(testkit.Rows("5 6", "7 7")) + c.Assert(getRootStats(), Matches, "time.*lock_keys.*time.* region.* keys.* lock_rpc:.* rpc_count.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("insert ignore into t1 values (9,9)") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert: {total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:{BatchGet:{num_rpc:.*, total_time:.*}}}.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("insert into t1 values (10,10) on duplicate key update a=a+1") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert: {total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:{BatchGet:{num_rpc:.*, total_time:.*}.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("insert into t1 values (1,2)") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, insert:.*") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("insert ignore into t1 values(11,11) on duplicate key update `a`=`a`+1") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert: {total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:.*}") + tk.MustExec("rollback") + + tk.MustExec("begin pessimistic") + tk.MustExec("replace into t1 values (1,4)") + c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prefetch:.*, rpc:.*") + tk.MustExec("rollback") +} + +func (s *testSuite) TestIssue13758(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1 (pk int(11) primary key, a int(11) not null, b int(11), key idx_b(b), key idx_a(a))") + tk.MustExec("insert into `t1` values (1,1,0),(2,7,6),(3,2,null),(4,1,null),(5,4,5)") + tk.MustExec("create table t2 (a int)") + tk.MustExec("insert into t2 values (1),(null)") + tk.MustQuery("select (select a from t1 use index(idx_a) where b >= t2.a order by a limit 1) as field from t2").Check(testkit.Rows( + "4", + "", + )) +} + +func (s *testCoprCache) SetUpSuite(c *C) { + originConfig := config.GetGlobalConfig() + config.StoreGlobalConfig(config.NewConfig()) + defer config.StoreGlobalConfig(originConfig) + cli := ®ionProperityClient{} + hijackClient := func(c tikv.Client) tikv.Client { + cli.Client = c + return cli + } + var err error + s.store, err = mockstore.NewMockStore( + mockstore.WithClusterInspector(func(c testutils.Cluster) { + mockstore.BootstrapWithSingleStore(c) + s.cls = c + }), + mockstore.WithClientHijacker(hijackClient), + ) + c.Assert(err, IsNil) + s.dom, err = session.BootstrapSession(s.store) + c.Assert(err, IsNil) +} + +func (s *testCoprCache) TearDownSuite(c *C) { + s.dom.Close() + s.store.Close() +} + +func (s *testCoprCache) TestIntegrationCopCache(c *C) { + originConfig := config.GetGlobalConfig() + config.StoreGlobalConfig(config.NewConfig()) + defer config.StoreGlobalConfig(originConfig) + + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int primary key)") + tblInfo, err := s.dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + c.Assert(err, IsNil) + tid := tblInfo.Meta().ID + tk.MustExec(`insert into t values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)`) + tableStart := tablecodec.GenTableRecordPrefix(tid) + s.cls.SplitKeys(tableStart, tableStart.PrefixNext(), 6) + + c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/cophandler/mockCopCacheInUnistore", `return(123)`), IsNil) + defer func() { + c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/cophandler/mockCopCacheInUnistore"), IsNil) + }() + + rows := tk.MustQuery("explain analyze select * from t where t.a < 10").Rows() + c.Assert(rows[0][2], Equals, "9") + c.Assert(strings.Contains(rows[0][5].(string), "cop_task: {num: 5"), Equals, true) + c.Assert(strings.Contains(rows[0][5].(string), "copr_cache_hit_ratio: 0.00"), Equals, true) + + rows = tk.MustQuery("explain analyze select * from t").Rows() + c.Assert(rows[0][2], Equals, "12") + c.Assert(strings.Contains(rows[0][5].(string), "cop_task: {num: 6"), Equals, true) + hitRatioIdx := strings.Index(rows[0][5].(string), "copr_cache_hit_ratio:") + len("copr_cache_hit_ratio: ") + c.Assert(hitRatioIdx >= len("copr_cache_hit_ratio: "), Equals, true) + hitRatio, err := strconv.ParseFloat(rows[0][5].(string)[hitRatioIdx:hitRatioIdx+4], 64) + c.Assert(err, IsNil) + c.Assert(hitRatio > 0, Equals, true) + + // Test for cop cache disabled. + cfg := config.NewConfig() + cfg.TiKVClient.CoprCache.CapacityMB = 0 + config.StoreGlobalConfig(cfg) + rows = tk.MustQuery("explain analyze select * from t where t.a < 10").Rows() + c.Assert(rows[0][2], Equals, "9") + c.Assert(strings.Contains(rows[0][5].(string), "copr_cache: disabled"), Equals, true) +} + +func (s *testSerialSuite) TestCoprocessorOOMTicase(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec(`set @@tidb_wait_split_region_finish=1`) + // create table for non keep-order case + tk.MustExec("drop table if exists t5") + tk.MustExec("create table t5(id int)") + tk.MustQuery(`split table t5 between (0) and (10000) regions 10`).Check(testkit.Rows("9 1")) + // create table for keep-order case + tk.MustExec("drop table if exists t6") + tk.MustExec("create table t6(id int, index(id))") + tk.MustQuery(`split table t6 between (0) and (10000) regions 10`).Check(testkit.Rows("10 1")) + tk.MustQuery("split table t6 INDEX id between (0) and (10000) regions 10;").Check(testkit.Rows("10 1")) + count := 10 + for i := 0; i < count; i++ { + tk.MustExec(fmt.Sprintf("insert into t5 (id) values (%v)", i)) + tk.MustExec(fmt.Sprintf("insert into t6 (id) values (%v)", i)) + } + defer config.RestoreFunc()() + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = config.OOMActionLog + }) + testcases := []struct { + name string + sql string + }{ + { + name: "keep Order", + sql: "select id from t6 order by id", + }, + { + name: "non keep Order", + sql: "select id from t5", + }, + } + + f := func() { + for _, testcase := range testcases { + c.Log(testcase.name) + // larger than one copResponse, smaller than 2 copResponse + quota := 2*copr.MockResponseSizeForTest - 100 + se, err := session.CreateSession4Test(s.store) + c.Check(err, IsNil) + tk.Se = se + tk.MustExec("use test") + tk.MustExec(fmt.Sprintf("set @@tidb_mem_quota_query=%v;", quota)) + var expect []string + for i := 0; i < count; i++ { + expect = append(expect, fmt.Sprintf("%v", i)) + } + tk.MustQuery(testcase.sql).Sort().Check(testkit.Rows(expect...)) + // assert oom action worked by max consumed > memory quota + c.Assert(tk.Se.GetSessionVars().StmtCtx.MemTracker.MaxConsumed(), Greater, int64(quota)) + se.Close() + } + } + + // ticase-4169, trigger oom action twice after workers consuming all the data + err := failpoint.Enable("github.com/pingcap/tidb/store/copr/ticase-4169", `return(true)`) + c.Assert(err, IsNil) + f() + err = failpoint.Disable("github.com/pingcap/tidb/store/copr/ticase-4169") + c.Assert(err, IsNil) + // ticase-4170, trigger oom action twice after iterator receiving all the data. + err = failpoint.Enable("github.com/pingcap/tidb/store/copr/ticase-4170", `return(true)`) + c.Assert(err, IsNil) + f() + err = failpoint.Disable("github.com/pingcap/tidb/store/copr/ticase-4170") + c.Assert(err, IsNil) + // ticase-4171, trigger oom before reading or consuming any data + err = failpoint.Enable("github.com/pingcap/tidb/store/copr/ticase-4171", `return(true)`) + c.Assert(err, IsNil) + f() + err = failpoint.Disable("github.com/pingcap/tidb/store/copr/ticase-4171") + c.Assert(err, IsNil) +} + +func (s *testSuite) TestIssue20237(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t, s") + tk.MustExec("create table t(a date, b float)") + tk.MustExec("create table s(b float)") + tk.MustExec(`insert into t values(NULL,-37), ("2011-11-04",105), ("2013-03-02",-22), ("2006-07-02",-56), (NULL,124), (NULL,111), ("2018-03-03",-5);`) + tk.MustExec(`insert into s values(-37),(105),(-22),(-56),(124),(105),(111),(-5);`) + tk.MustQuery(`select count(distinct t.a, t.b) from t join s on t.b= s.b;`).Check(testkit.Rows("4")) +} + +func (s *testSerialSuite) TestIssue19148(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a decimal(16, 2));") + tk.MustExec("select * from t where a > any_value(a);") + ctx := tk.Se.(sessionctx.Context) + is := domain.GetDomain(ctx).InfoSchema() + tblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + c.Assert(err, IsNil) + c.Assert(int(tblInfo.Meta().Columns[0].Flag), Equals, 0) +} + +func (s *testSuite) TestIssue19667(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("CREATE TABLE t (a DATETIME)") + tk.MustExec("INSERT INTO t VALUES('1988-04-17 01:59:59')") + tk.MustQuery(`SELECT DATE_ADD(a, INTERVAL 1 SECOND) FROM t`).Check(testkit.Rows("1988-04-17 02:00:00")) +} + +func (s *testSuite) TestZeroDateTimeCompatibility(c *C) { + tk := testkit.NewTestKit(c, s.store) + + SQLs := []string{ + `select YEAR(0000-00-00), YEAR("0000-00-00")`, + `select MONTH(0000-00-00), MONTH("0000-00-00")`, + `select DAYOFMONTH(0000-00-00), DAYOFMONTH("0000-00-00")`, + `select QUARTER(0000-00-00), QUARTER("0000-00-00")`, + `select EXTRACT(DAY FROM 0000-00-00), EXTRACT(DAY FROM "0000-00-00")`, + `select EXTRACT(MONTH FROM 0000-00-00), EXTRACT(MONTH FROM "0000-00-00")`, + `select EXTRACT(YEAR FROM 0000-00-00), EXTRACT(YEAR FROM "0000-00-00")`, + `select EXTRACT(WEEK FROM 0000-00-00), EXTRACT(WEEK FROM "0000-00-00")`, + `select EXTRACT(QUARTER FROM 0000-00-00), EXTRACT(QUARTER FROM "0000-00-00")`, + } + for _, t := range SQLs { + tk.MustQuery(t).Check(testkit.Rows("0 ")) + c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) + } + + SQLs = []string{ + `select DAYOFWEEK(0000-00-00), DAYOFWEEK("0000-00-00")`, + `select DAYOFYEAR(0000-00-00), DAYOFYEAR("0000-00-00")`, + } + for _, t := range SQLs { + tk.MustQuery(t).Check(testkit.Rows(" ")) + c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(2)) + } + + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(v1 datetime, v2 datetime(3))") + tk.MustExec("insert ignore into t values(0,0)") + + SQLs = []string{ + `select YEAR(v1), YEAR(v2) from t`, + `select MONTH(v1), MONTH(v2) from t`, + `select DAYOFMONTH(v1), DAYOFMONTH(v2) from t`, + `select QUARTER(v1), QUARTER(v2) from t`, + `select EXTRACT(DAY FROM v1), EXTRACT(DAY FROM v2) from t`, + `select EXTRACT(MONTH FROM v1), EXTRACT(MONTH FROM v2) from t`, + `select EXTRACT(YEAR FROM v1), EXTRACT(YEAR FROM v2) from t`, + `select EXTRACT(WEEK FROM v1), EXTRACT(WEEK FROM v2) from t`, + `select EXTRACT(QUARTER FROM v1), EXTRACT(QUARTER FROM v2) from t`, + } + for _, t := range SQLs { + tk.MustQuery(t).Check(testkit.Rows("0 0")) + c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(0)) + } + + SQLs = []string{ + `select DAYOFWEEK(v1), DAYOFWEEK(v2) from t`, + `select DAYOFYEAR(v1), DAYOFYEAR(v2) from t`, + } + for _, t := range SQLs { + tk.MustQuery(t).Check(testkit.Rows(" ")) + c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(2)) + } +} + +// https://github.com/pingcap/tidb/issues/24165. +func (s *testSuite) TestInvalidDateValueInCreateTable(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t;") + + // Test for sql mode 'NO_ZERO_IN_DATE'. + tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE';") + tk.MustGetErrCode("create table t (a datetime default '2999-00-00 00:00:00');", errno.ErrInvalidDefault) + tk.MustExec("create table t (a datetime);") + tk.MustGetErrCode("alter table t modify column a datetime default '2999-00-00 00:00:00';", errno.ErrInvalidDefault) + tk.MustExec("drop table if exists t;") + + // Test for sql mode 'NO_ZERO_DATE'. + tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE';") + tk.MustGetErrCode("create table t (a datetime default '0000-00-00 00:00:00');", errno.ErrInvalidDefault) + tk.MustExec("create table t (a datetime);") + tk.MustGetErrCode("alter table t modify column a datetime default '0000-00-00 00:00:00';", errno.ErrInvalidDefault) + tk.MustExec("drop table if exists t;") + + // Remove NO_ZERO_DATE and NO_ZERO_IN_DATE. + tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES';") + // Test create table with zero datetime as a default value. + tk.MustExec("create table t (a datetime default '2999-00-00 00:00:00');") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a datetime default '0000-00-00 00:00:00');") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a datetime);") + tk.MustExec("alter table t modify column a datetime default '2999-00-00 00:00:00';") + tk.MustExec("alter table t modify column a datetime default '0000-00-00 00:00:00';") + tk.MustExec("drop table if exists t;") + + // Test create table with invalid datetime(02-30) as a default value. + tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES';") + tk.MustGetErrCode("create table t (a datetime default '2999-02-30 00:00:00');", errno.ErrInvalidDefault) + tk.MustExec("drop table if exists t;") + // NO_ZERO_IN_DATE and NO_ZERO_DATE have nothing to do with invalid datetime(02-30). + tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE';") + tk.MustGetErrCode("create table t (a datetime default '2999-02-30 00:00:00');", errno.ErrInvalidDefault) + tk.MustExec("drop table if exists t;") + // ALLOW_INVALID_DATES allows invalid datetime(02-30). + tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,ALLOW_INVALID_DATES';") + tk.MustExec("create table t (a datetime default '2999-02-30 00:00:00');") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a datetime);") + tk.MustExec("alter table t modify column a datetime default '2999-02-30 00:00:00';") + tk.MustExec("drop table if exists t;") +} + +func (s *testSuite) TestOOMActionPriority(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t0") + tk.MustExec("drop table if exists t1") + tk.MustExec("drop table if exists t2") + tk.MustExec("drop table if exists t3") + tk.MustExec("drop table if exists t4") + tk.MustExec("create table t0(a int)") + tk.MustExec("insert into t0 values(1)") + tk.MustExec("create table t1(a int)") + tk.MustExec("insert into t1 values(1)") + tk.MustExec("create table t2(a int)") + tk.MustExec("insert into t2 values(1)") + tk.MustExec("create table t3(a int)") + tk.MustExec("insert into t3 values(1)") + tk.MustExec("create table t4(a int)") + tk.MustExec("insert into t4 values(1)") + tk.MustQuery("select * from t0 join t1 join t2 join t3 join t4 order by t0.a").Check(testkit.Rows("1 1 1 1 1")) + action := tk.Se.GetSessionVars().StmtCtx.MemTracker.GetFallbackForTest() + // check the first 5 actions is rate limit. + for i := 0; i < 5; i++ { + c.Assert(action.GetPriority(), Equals, int64(memory.DefRateLimitPriority)) + action = action.GetFallback() + } + for action.GetFallback() != nil { + c.Assert(action.GetPriority(), Equals, int64(memory.DefSpillPriority)) + action = action.GetFallback() + } + c.Assert(action.GetPriority(), Equals, int64(memory.DefLogPriority)) +} + +func (s *testSerialSuite) TestIssue21441(c *C) { + failpoint.Enable("github.com/pingcap/tidb/executor/issue21441", `return`) + defer failpoint.Disable("github.com/pingcap/tidb/executor/issue21441") + + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int)") + tk.MustExec(`insert into t values(1),(2),(3)`) + tk.Se.GetSessionVars().InitChunkSize = 1 + tk.Se.GetSessionVars().MaxChunkSize = 1 + sql := ` +select a from t union all +select a from t union all +select a from t union all +select a from t union all +select a from t union all +select a from t union all +select a from t union all +select a from t` + tk.MustQuery(sql).Sort().Check(testkit.Rows( + "1", "1", "1", "1", "1", "1", "1", "1", + "2", "2", "2", "2", "2", "2", "2", "2", + "3", "3", "3", "3", "3", "3", "3", "3", + )) + + tk.MustQuery("select a from (" + sql + ") t order by a limit 4").Check(testkit.Rows("1", "1", "1", "1")) + tk.MustQuery("select a from (" + sql + ") t order by a limit 7, 4").Check(testkit.Rows("1", "2", "2", "2")) + + tk.MustExec("set @@tidb_executor_concurrency = 2") + c.Assert(tk.Se.GetSessionVars().UnionConcurrency(), Equals, 2) + tk.MustQuery("select a from (" + sql + ") t order by a limit 4").Check(testkit.Rows("1", "1", "1", "1")) + tk.MustQuery("select a from (" + sql + ") t order by a limit 7, 4").Check(testkit.Rows("1", "2", "2", "2")) +} + +func (s testSuite) TestTrackAggMemoryUsage(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + tk.MustExec("create table t(a int)") + tk.MustExec("insert into t values(1)") + + tk.MustExec("set tidb_track_aggregate_memory_usage = off;") + rows := tk.MustQuery("explain analyze select /*+ HASH_AGG() */ sum(a) from t").Rows() + c.Assert(rows[0][7], Equals, "N/A") + rows = tk.MustQuery("explain analyze select /*+ STREAM_AGG() */ sum(a) from t").Rows() + c.Assert(rows[0][7], Equals, "N/A") + tk.MustExec("set tidb_track_aggregate_memory_usage = on;") + rows = tk.MustQuery("explain analyze select /*+ HASH_AGG() */ sum(a) from t").Rows() + c.Assert(rows[0][7], Not(Equals), "N/A") + rows = tk.MustQuery("explain analyze select /*+ STREAM_AGG() */ sum(a) from t").Rows() + c.Assert(rows[0][7], Not(Equals), "N/A") +} + +func (s *testSerialSuite) TestTxnWriteThroughputSLI(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int key, b int)") + c.Assert(failpoint.Enable("github.com/pingcap/tidb/util/sli/CheckTxnWriteThroughput", "return(true)"), IsNil) + defer func() { + err := failpoint.Disable("github.com/pingcap/tidb/util/sli/CheckTxnWriteThroughput") + c.Assert(err, IsNil) + }() + + mustExec := func(sql string) { + tk.MustExec(sql) + tk.Se.GetTxnWriteThroughputSLI().FinishExecuteStmt(time.Second, tk.Se.AffectedRows(), tk.Se.GetSessionVars().InTxn()) + } + errExec := func(sql string) { + _, err := tk.Exec(sql) + c.Assert(err, NotNil) + tk.Se.GetTxnWriteThroughputSLI().FinishExecuteStmt(time.Second, tk.Se.AffectedRows(), tk.Se.GetSessionVars().InTxn()) + } + + // Test insert in small txn + mustExec("insert into t values (1,3),(2,4)") + writeSLI := tk.Se.GetTxnWriteThroughputSLI() + c.Assert(writeSLI.IsInvalid(), Equals, false) + c.Assert(writeSLI.IsSmallTxn(), Equals, true) + c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 2, writeSize: 58, readKeys: 0, writeKeys: 2, writeTime: 1s") + tk.Se.GetTxnWriteThroughputSLI().Reset() + + // Test insert ... select ... from + mustExec("insert into t select b, a from t") + c.Assert(writeSLI.IsInvalid(), Equals, true) + c.Assert(writeSLI.IsSmallTxn(), Equals, true) + c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: true, affectRow: 2, writeSize: 58, readKeys: 0, writeKeys: 2, writeTime: 1s") + tk.Se.GetTxnWriteThroughputSLI().Reset() + + // Test for delete + mustExec("delete from t") + c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 4, writeSize: 76, readKeys: 0, writeKeys: 4, writeTime: 1s") + tk.Se.GetTxnWriteThroughputSLI().Reset() + + // Test insert not in small txn + mustExec("begin") + for i := 0; i < 20; i++ { + mustExec(fmt.Sprintf("insert into t values (%v,%v)", i, i)) + c.Assert(writeSLI.IsSmallTxn(), Equals, true) + } + // The statement which affect rows is 0 shouldn't record into time. + mustExec("select count(*) from t") + mustExec("select * from t") + mustExec("insert into t values (20,20)") + c.Assert(writeSLI.IsSmallTxn(), Equals, false) + mustExec("commit") + c.Assert(writeSLI.IsInvalid(), Equals, false) + c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 21, writeSize: 609, readKeys: 0, writeKeys: 21, writeTime: 22s") + tk.Se.GetTxnWriteThroughputSLI().Reset() + + // Test invalid when transaction has replace ... select ... from ... statement. + mustExec("delete from t") + tk.Se.GetTxnWriteThroughputSLI().Reset() + mustExec("begin") + mustExec("insert into t values (1,3),(2,4)") + mustExec("replace into t select b, a from t") + mustExec("commit") + c.Assert(writeSLI.IsInvalid(), Equals, true) + c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: true, affectRow: 4, writeSize: 116, readKeys: 0, writeKeys: 4, writeTime: 3s") + tk.Se.GetTxnWriteThroughputSLI().Reset() + + // Test clean last failed transaction information. + err := failpoint.Disable("github.com/pingcap/tidb/util/sli/CheckTxnWriteThroughput") + c.Assert(err, IsNil) + mustExec("begin") + mustExec("insert into t values (1,3),(2,4)") + errExec("commit") + c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 0, writeSize: 0, readKeys: 0, writeKeys: 0, writeTime: 0s") + + c.Assert(failpoint.Enable("github.com/pingcap/tidb/util/sli/CheckTxnWriteThroughput", "return(true)"), IsNil) + mustExec("begin") + mustExec("insert into t values (5, 6)") + mustExec("commit") + c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 1, writeSize: 29, readKeys: 0, writeKeys: 1, writeTime: 2s") + + // Test for reset + tk.Se.GetTxnWriteThroughputSLI().Reset() + c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 0, writeSize: 0, readKeys: 0, writeKeys: 0, writeTime: 0s") +} + +func (s *testSuiteP2) TestProjectionBitType(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t(k1 int, v bit(34) DEFAULT b'111010101111001001100111101111111', primary key(k1) clustered);") + tk.MustExec("create table t1(k1 int, v bit(34) DEFAULT b'111010101111001001100111101111111', primary key(k1) nonclustered);") + tk.MustExec("insert into t(k1) select 1;") + tk.MustExec("insert into t1(k1) select 1;") + + tk.MustExec("set @@tidb_enable_vectorized_expression = 0;") + // following SQL should returns same result + tk.MustQuery("(select * from t where false) union(select * from t for update);").Check(testkit.Rows("1 \x01\xd5\xe4\xcf\u007f")) + tk.MustQuery("(select * from t1 where false) union(select * from t1 for update);").Check(testkit.Rows("1 \x01\xd5\xe4\xcf\u007f")) + + tk.MustExec("set @@tidb_enable_vectorized_expression = 1;") + tk.MustQuery("(select * from t where false) union(select * from t for update);").Check(testkit.Rows("1 \x01\xd5\xe4\xcf\u007f")) + tk.MustQuery("(select * from t1 where false) union(select * from t1 for update);").Check(testkit.Rows("1 \x01\xd5\xe4\xcf\u007f")) +} + +func (s *testSerialSuite) TestDeadlocksTable(c *C) { + deadlockhistory.GlobalDeadlockHistory.Clear() + deadlockhistory.GlobalDeadlockHistory.Resize(10) + + occurTime := time.Date(2021, 5, 10, 1, 2, 3, 456789000, time.Local) + rec := &deadlockhistory.DeadlockRecord{ + OccurTime: occurTime, + IsRetryable: false, + WaitChain: []deadlockhistory.WaitChainItem{ + { + TryLockTxn: 101, + SQLDigest: "aabbccdd", + Key: []byte("k1"), + AllSQLDigests: nil, + TxnHoldingLock: 102, + }, + { + TryLockTxn: 102, + SQLDigest: "ddccbbaa", + Key: []byte("k2"), + AllSQLDigests: []string{"sql1"}, + TxnHoldingLock: 101, + }, + }, + } + deadlockhistory.GlobalDeadlockHistory.Push(rec) + + occurTime2 := time.Date(2022, 6, 11, 2, 3, 4, 987654000, time.Local) + rec2 := &deadlockhistory.DeadlockRecord{ + OccurTime: occurTime2, + IsRetryable: true, + WaitChain: []deadlockhistory.WaitChainItem{ + { + TryLockTxn: 201, + AllSQLDigests: []string{}, + TxnHoldingLock: 202, + }, + { + TryLockTxn: 202, + AllSQLDigests: []string{"sql1", "sql2, sql3"}, + TxnHoldingLock: 203, + }, + { + TryLockTxn: 203, + TxnHoldingLock: 201, + }, + }, + } + deadlockhistory.GlobalDeadlockHistory.Push(rec2) + + // `Push` sets the record's ID, and ID in a single DeadlockHistory is monotonically increasing. We must get it here + // to know what it is. + id1 := strconv.FormatUint(rec.ID, 10) + id2 := strconv.FormatUint(rec2.ID, 10) + + c.Assert(failpoint.Enable("github.com/pingcap/tidb/expression/sqlDigestRetrieverSkipRetrieveGlobal", "return"), IsNil) + defer func() { + c.Assert(failpoint.Disable("github.com/pingcap/tidb/expression/sqlDigestRetrieverSkipRetrieveGlobal"), IsNil) + }() + + tk := testkit.NewTestKit(c, s.store) + tk.MustQuery("select * from information_schema.deadlocks").Check( + testkit.RowsWithSep("/", + id1+"/2021-05-10 01:02:03.456789/0/101/aabbccdd//6B31//102", + id1+"/2021-05-10 01:02:03.456789/0/102/ddccbbaa//6B32//101", + id2+"/2022-06-11 02:03:04.987654/1/201/////202", + id2+"/2022-06-11 02:03:04.987654/1/202/////203", + id2+"/2022-06-11 02:03:04.987654/1/203/////201", + )) +} + +func (s testSerialSuite) TestExprBlackListForEnum(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a enum('a','b','c'), b enum('a','b','c'), c int, index idx(b,a));") + tk.MustExec("insert into t values(1,1,1),(2,2,2),(3,3,3);") + + checkFuncPushDown := func(rows [][]interface{}, keyWord string) bool { + for _, line := range rows { + // Agg/Expr push down + if line[2].(string) == "cop[tikv]" && strings.Contains(line[4].(string), keyWord) { + return true + } + // access index + if line[2].(string) == "cop[tikv]" && strings.Contains(line[3].(string), keyWord) { + return true + } + } + return false + } + + // Test agg(enum) push down + tk.MustExec("insert into mysql.expr_pushdown_blacklist(name) values('enum');") + tk.MustExec("admin reload expr_pushdown_blacklist;") + rows := tk.MustQuery("desc format='brief' select /*+ HASH_AGG() */ max(a) from t;").Rows() + c.Assert(checkFuncPushDown(rows, "max"), IsFalse) + rows = tk.MustQuery("desc format='brief' select /*+ STREAM_AGG() */ max(a) from t;").Rows() + c.Assert(checkFuncPushDown(rows, "max"), IsFalse) + + tk.MustExec("delete from mysql.expr_pushdown_blacklist;") + tk.MustExec("admin reload expr_pushdown_blacklist;") + rows = tk.MustQuery("desc format='brief' select /*+ HASH_AGG() */ max(a) from t;").Rows() + c.Assert(checkFuncPushDown(rows, "max"), IsTrue) + rows = tk.MustQuery("desc format='brief' select /*+ STREAM_AGG() */ max(a) from t;").Rows() + c.Assert(checkFuncPushDown(rows, "max"), IsTrue) + + // Test expr(enum) push down + tk.MustExec("insert into mysql.expr_pushdown_blacklist(name) values('enum');") + tk.MustExec("admin reload expr_pushdown_blacklist;") + rows = tk.MustQuery("desc format='brief' select * from t where a + b;").Rows() + c.Assert(checkFuncPushDown(rows, "plus"), IsFalse) + rows = tk.MustQuery("desc format='brief' select * from t where a + b;").Rows() + c.Assert(checkFuncPushDown(rows, "plus"), IsFalse) + + tk.MustExec("delete from mysql.expr_pushdown_blacklist;") + tk.MustExec("admin reload expr_pushdown_blacklist;") + rows = tk.MustQuery("desc format='brief' select * from t where a + b;").Rows() + c.Assert(checkFuncPushDown(rows, "plus"), IsTrue) + rows = tk.MustQuery("desc format='brief' select * from t where a + b;").Rows() + c.Assert(checkFuncPushDown(rows, "plus"), IsTrue) + + // Test enum index + tk.MustExec("insert into mysql.expr_pushdown_blacklist(name) values('enum');") + tk.MustExec("admin reload expr_pushdown_blacklist;") + rows = tk.MustQuery("desc format='brief' select * from t where b = 1;").Rows() + c.Assert(checkFuncPushDown(rows, "index:idx(b)"), IsFalse) + rows = tk.MustQuery("desc format='brief' select * from t where b = 'a';").Rows() + c.Assert(checkFuncPushDown(rows, "index:idx(b)"), IsFalse) + rows = tk.MustQuery("desc format='brief' select * from t where b > 1;").Rows() + c.Assert(checkFuncPushDown(rows, "index:idx(b)"), IsFalse) + rows = tk.MustQuery("desc format='brief' select * from t where b > 'a';").Rows() + c.Assert(checkFuncPushDown(rows, "index:idx(b)"), IsFalse) + + tk.MustExec("delete from mysql.expr_pushdown_blacklist;") + tk.MustExec("admin reload expr_pushdown_blacklist;") + rows = tk.MustQuery("desc format='brief' select * from t where b = 1 and a = 1;").Rows() + c.Assert(checkFuncPushDown(rows, "index:idx(b, a)"), IsTrue) + rows = tk.MustQuery("desc format='brief' select * from t where b = 'a' and a = 'a';").Rows() + c.Assert(checkFuncPushDown(rows, "index:idx(b, a)"), IsTrue) + rows = tk.MustQuery("desc format='brief' select * from t where b = 1 and a > 1;").Rows() + c.Assert(checkFuncPushDown(rows, "index:idx(b, a)"), IsTrue) + rows = tk.MustQuery("desc format='brief' select * from t where b = 1 and a > 'a'").Rows() + c.Assert(checkFuncPushDown(rows, "index:idx(b, a)"), IsTrue) +} + +func (s *testResourceTagSuite) TestResourceGroupTag(c *C) { + if israce.RaceEnabled { + c.Skip("unstable, skip it and fix it before 20210622") + } + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a int, b int, unique index idx(a));") + tbInfo := testGetTableByName(c, tk.Se, "test", "t") + + // Enable Top SQL + topsqlstate.EnableTopSQL() + config.UpdateGlobal(func(conf *config.Config) { + conf.TopSQL.ReceiverAddress = "mock-agent" + }) + + c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/unistoreRPCClientSendHook", `return(true)`), IsNil) + defer failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/unistoreRPCClientSendHook") + + var sqlDigest, planDigest *parser.Digest + var tagLabel tipb.ResourceGroupTagLabel + checkFn := func() {} + unistore.UnistoreRPCClientSendHook = func(req *tikvrpc.Request) { + var startKey []byte + var ctx *kvrpcpb.Context + switch req.Type { + case tikvrpc.CmdGet: + request := req.Get() + startKey = request.Key + ctx = request.Context + case tikvrpc.CmdBatchGet: + request := req.BatchGet() + startKey = request.Keys[0] + ctx = request.Context + case tikvrpc.CmdPrewrite: + request := req.Prewrite() + startKey = request.Mutations[0].Key + ctx = request.Context + case tikvrpc.CmdCommit: + request := req.Commit() + startKey = request.Keys[0] + ctx = request.Context + case tikvrpc.CmdCop: + request := req.Cop() + startKey = request.Ranges[0].Start + ctx = request.Context + case tikvrpc.CmdPessimisticLock: + request := req.PessimisticLock() + startKey = request.PrimaryLock + ctx = request.Context + } + tid := tablecodec.DecodeTableID(startKey) + if tid != tbInfo.Meta().ID { + return + } + if ctx == nil { + return + } + tag := &tipb.ResourceGroupTag{} + err := tag.Unmarshal(ctx.ResourceGroupTag) + c.Assert(err, IsNil) + sqlDigest = parser.NewDigest(tag.SqlDigest) + planDigest = parser.NewDigest(tag.PlanDigest) + tagLabel = *tag.Label + checkFn() + } + + resetVars := func() { + sqlDigest = parser.NewDigest(nil) + planDigest = parser.NewDigest(nil) + } + + cases := []struct { + sql string + tagLabels map[tipb.ResourceGroupTagLabel]struct{} + ignore bool + }{ + { + sql: "insert into t values(1,1),(2,2),(3,3)", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + }, + }, + { + sql: "select * from t use index (idx) where a=1", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + }, + }, + { + sql: "select * from t use index (idx) where a in (1,2,3)", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + }, + }, + { + sql: "select * from t use index (idx) where a>1", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + }, + }, + { + sql: "select * from t where b>1", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, + }, + }, + { + sql: "select a from t use index (idx) where a>1", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + }, + }, + { + sql: "begin pessimistic", + ignore: true, + }, + { + sql: "insert into t values(4,4)", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + }, + }, + { + sql: "commit", + ignore: true, + }, + { + sql: "update t set a=5,b=5 where a=5", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + }, + }, + { + sql: "replace into t values(6,6)", + tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ + tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + }, + }, + } + for _, ca := range cases { + resetVars() + commentf := Commentf("%v", ca.sql) + + _, expectSQLDigest := parser.NormalizeDigest(ca.sql) + var expectPlanDigest *parser.Digest + checkCnt := 0 + checkFn = func() { + if ca.ignore { + return + } + if expectPlanDigest == nil { + info := tk.Se.ShowProcess() + c.Assert(info, NotNil) + p, ok := info.Plan.(plannercore.Plan) + c.Assert(ok, IsTrue) + _, expectPlanDigest = plannercore.NormalizePlan(p) + } + c.Assert(sqlDigest.String(), Equals, expectSQLDigest.String(), commentf) + c.Assert(planDigest.String(), Equals, expectPlanDigest.String()) + _, ok := ca.tagLabels[tagLabel] + c.Assert(ok, Equals, true) + checkCnt++ + } + + if strings.HasPrefix(ca.sql, "select") { + tk.MustQuery(ca.sql) + } else { + tk.MustExec(ca.sql) + } + if ca.ignore { + continue + } + c.Assert(checkCnt > 0, IsTrue, commentf) + } +} + +func (s *testSuite) TestIssue24933(c *C) { + tk := testkit.NewTestKit(c, s.store) + + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("drop view if exists v;") + tk.MustExec("create table t(a int);") + tk.MustExec("insert into t values(1), (2), (3);") + + tk.MustExec("create definer='root'@'localhost' view v as select count(*) as c1 from t;") + rows := tk.MustQuery("select * from v;") + rows.Check(testkit.Rows("3")) + + // Test subquery and outer field is wildcard. + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select count(*) from t) s;") + rows = tk.MustQuery("select * from v order by 1;") + rows.Check(testkit.Rows("3")) + + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select avg(a) from t group by a) s;") + rows = tk.MustQuery("select * from v order by 1;") + rows.Check(testkit.Rows("1.0000", "2.0000", "3.0000")) + + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select sum(a) from t group by a) s;") + rows = tk.MustQuery("select * from v order by 1;") + rows.Check(testkit.Rows("1", "2", "3")) + + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select group_concat(a) from t group by a) s;") + rows = tk.MustQuery("select * from v order by 1;") + rows.Check(testkit.Rows("1", "2", "3")) + + // Test alias names. + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select count(0) as c1 from t) s;") + rows = tk.MustQuery("select * from v order by 1;") + rows.Check(testkit.Rows("3")) + + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select count(*) as c1 from t) s;") + rows = tk.MustQuery("select * from v order by 1;") + rows.Check(testkit.Rows("3")) + + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select group_concat(a) as `concat(a)` from t group by a) s;") + rows = tk.MustQuery("select * from v order by 1;") + rows.Check(testkit.Rows("1", "2", "3")) + + // Test firstrow. + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select a from t group by a) s;") + rows = tk.MustQuery("select * from v order by 1;") + rows.Check(testkit.Rows("1", "2", "3")) + + // Test direct select. + err := tk.ExecToErr("SELECT `s`.`count(a)` FROM (SELECT COUNT(`a`) FROM `test`.`t`) AS `s`") + c.Assert(err.Error(), Equals, "[planner:1054]Unknown column 's.count(a)' in 'field list'") + + tk.MustExec("drop view v;") + tk.MustExec("create definer='root'@'localhost' view v as select * from (select count(a) from t) s;") + rows = tk.MustQuery("select * from v") + rows.Check(testkit.Rows("3")) + + // Test window function. + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(c1 int);") + tk.MustExec("insert into t values(111), (222), (333);") + tk.MustExec("drop view if exists v;") + tk.MustExec("create definer='root'@'localhost' view v as (select * from (select row_number() over (order by c1) from t) s);") + rows = tk.MustQuery("select * from v;") + rows.Check(testkit.Rows("1", "2", "3")) + tk.MustExec("drop view if exists v;") + tk.MustExec("create definer='root'@'localhost' view v as (select * from (select c1, row_number() over (order by c1) from t) s);") + rows = tk.MustQuery("select * from v;") + rows.Check(testkit.Rows("111 1", "222 2", "333 3")) + + // Test simple expr. + tk.MustExec("drop view if exists v;") + tk.MustExec("create definer='root'@'localhost' view v as (select * from (select c1 or 0 from t) s)") + rows = tk.MustQuery("select * from v;") + rows.Check(testkit.Rows("1", "1", "1")) + rows = tk.MustQuery("select `c1 or 0` from v;") + rows.Check(testkit.Rows("1", "1", "1")) + + tk.MustExec("drop view v;") +} + +func (s *testSuite) TestTableSampleTemporaryTable(c *C) { + tk := testkit.NewTestKit(c, s.store) + // For mocktikv, safe point is not initialized, we manually insert it for snapshot to use. + safePointName := "tikv_gc_safe_point" + safePointValue := "20160102-15:04:05 -0700" + safePointComment := "All versions after safe point can be accessed. (DO NOT EDIT)" + updateSafePoint := fmt.Sprintf(`INSERT INTO mysql.tidb VALUES ('%[1]s', '%[2]s', '%[3]s') + ON DUPLICATE KEY + UPDATE variable_value = '%[2]s', comment = '%[3]s'`, safePointName, safePointValue, safePointComment) + tk.MustExec(updateSafePoint) + + tk.MustExec("use test") + tk.MustExec("drop table if exists tmp1") + tk.MustExec("create global temporary table tmp1 " + + "(id int not null primary key, code int not null, value int default null, unique key code(code))" + + "on commit delete rows") + + tk.MustExec("use test") + tk.MustExec("drop table if exists tmp2") + tk.MustExec("create temporary table tmp2 (id int not null primary key, code int not null, value int default null, unique key code(code));") + + // sleep 1us to make test stale + time.Sleep(time.Microsecond) + + // test tablesample return empty for global temporary table + tk.MustQuery("select * from tmp1 tablesample regions()").Check(testkit.Rows()) + + tk.MustExec("begin") + tk.MustExec("insert into tmp1 values (1, 1, 1)") + tk.MustQuery("select * from tmp1 tablesample regions()").Check(testkit.Rows()) + tk.MustExec("commit") + + // tablesample for global temporary table should not return error for compatibility of tools like dumpling + tk.MustExec("set @@tidb_snapshot=NOW(6)") + tk.MustQuery("select * from tmp1 tablesample regions()").Check(testkit.Rows()) + + tk.MustExec("begin") + tk.MustQuery("select * from tmp1 tablesample regions()").Check(testkit.Rows()) + tk.MustExec("commit") + tk.MustExec("set @@tidb_snapshot=''") + + // test tablesample returns error for local temporary table + tk.MustGetErrMsg("select * from tmp2 tablesample regions()", "TABLESAMPLE clause can not be applied to local temporary tables") + + tk.MustExec("begin") + tk.MustExec("insert into tmp2 values (1, 1, 1)") + tk.MustGetErrMsg("select * from tmp2 tablesample regions()", "TABLESAMPLE clause can not be applied to local temporary tables") + tk.MustExec("commit") + tk.MustGetErrMsg("select * from tmp2 tablesample regions()", "TABLESAMPLE clause can not be applied to local temporary tables") +} + +func (s *testSuite) TestCTEWithIndexLookupJoinDeadLock(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table t (a int(11) default null,b int(11) default null,key b (b),key ba (b))") + tk.MustExec("create table t1 (a int(11) default null,b int(11) default null,key idx_ab (a,b),key idx_a (a),key idx_b (b))") + tk.MustExec("create table t2 (a int(11) default null,b int(11) default null,key idx_ab (a,b),key idx_a (a),key idx_b (b))") + // It's easy to reproduce this problem in 30 times execution of IndexLookUpJoin. + for i := 0; i < 30; i++ { + tk.MustExec("with cte as (with cte1 as (select * from t2 use index(idx_ab) where a > 1 and b > 1) select * from cte1) select /*+use_index(t1 idx_ab)*/ * from cte join t1 on t1.a=cte.a;") + } +} + +func (s *testSuite) TestGetResultRowsCount(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int)") + for i := 1; i <= 10; i++ { + tk.MustExec(fmt.Sprintf("insert into t values (%v)", i)) + } + cases := []struct { + sql string + row int64 + }{ + {"select * from t", 10}, + {"select * from t where a < 0", 0}, + {"select * from t where a <= 3", 3}, + {"insert into t values (11)", 0}, + {"replace into t values (12)", 0}, + {"update t set a=13 where a=12", 0}, + } + + for _, ca := range cases { + if strings.HasPrefix(ca.sql, "select") { + tk.MustQuery(ca.sql) + } else { + tk.MustExec(ca.sql) + } + info := tk.Se.ShowProcess() + c.Assert(info, NotNil) + p, ok := info.Plan.(plannercore.Plan) + c.Assert(ok, IsTrue) + cnt := executor.GetResultRowsCount(tk.Se, p) + c.Assert(ca.row, Equals, cnt, Commentf("sql: %v", ca.sql)) + } +} + +func checkFileName(s string) bool { + files := []string{ + "config.toml", + "meta.txt", + "stats/test.t_dump_single.json", + "schema/test.t_dump_single.schema.txt", + "variables.toml", + "sqls.sql", + "session_bindings.sql", + "global_bindings.sql", + "explain.txt", + } + for _, f := range files { + if strings.Compare(f, s) == 0 { + return true + } + } + return false +} + +// Test invoke Close without invoking Open before for each operators. +func (s *testSerialSuite) TestUnreasonablyClose(c *C) { + defer testleak.AfterTest(c)() + + is := infoschema.MockInfoSchema([]*model.TableInfo{plannercore.MockSignedTable(), plannercore.MockUnsignedTable()}) + se, err := session.CreateSession4Test(s.store) + c.Assert(err, IsNil) + _, err = se.Execute(context.Background(), "use test") + c.Assert(err, IsNil) + // To enable the shuffleExec operator. + _, err = se.Execute(context.Background(), "set @@tidb_merge_join_concurrency=4") + c.Assert(err, IsNil) + + var opsNeedsCovered = []plannercore.PhysicalPlan{ + &plannercore.PhysicalHashJoin{}, + &plannercore.PhysicalMergeJoin{}, + &plannercore.PhysicalIndexJoin{}, + &plannercore.PhysicalIndexHashJoin{}, + &plannercore.PhysicalTableReader{}, + &plannercore.PhysicalIndexReader{}, + &plannercore.PhysicalIndexLookUpReader{}, + &plannercore.PhysicalIndexMergeReader{}, + &plannercore.PhysicalApply{}, + &plannercore.PhysicalHashAgg{}, + &plannercore.PhysicalStreamAgg{}, + &plannercore.PhysicalLimit{}, + &plannercore.PhysicalSort{}, + &plannercore.PhysicalTopN{}, + &plannercore.PhysicalCTE{}, + &plannercore.PhysicalCTETable{}, + &plannercore.PhysicalMaxOneRow{}, + &plannercore.PhysicalProjection{}, + &plannercore.PhysicalSelection{}, + &plannercore.PhysicalTableDual{}, + &plannercore.PhysicalWindow{}, + &plannercore.PhysicalShuffle{}, + &plannercore.PhysicalUnionAll{}, + } + executorBuilder := executor.NewMockExecutorBuilderForTest(se, is, nil, math.MaxUint64, false, "global") + + var opsNeedsCoveredMask uint64 = 1< t1.a) AS a from t as t1) t", + "select /*+ hash_agg() */ count(f) from t group by a", + "select /*+ stream_agg() */ count(f) from t group by a", + "select * from t order by a, f", + "select * from t order by a, f limit 1", + "select * from t limit 1", + "select (select t1.a from t t1 where t1.a > t2.a) as a from t t2;", + "select a + 1 from t", + "select count(*) a from t having a > 1", + "select * from t where a = 1.1", + "with recursive cte1(c1) as (select 1 union select c1 + 1 from cte1 limit 5 offset 0) select * from cte1", + "select /*+use_index_merge(t, c_d_e, f)*/ * from t where c < 1 or f > 2", + "select sum(f) over (partition by f) from t", + "select /*+ merge_join(t1)*/ * from t t1 join t t2 on t1.d = t2.d", + "select a from t union all select a from t", + } { + comment := Commentf("case:%v sql:%s", i, tc) + c.Assert(err, IsNil, comment) + stmt, err := s.ParseOneStmt(tc, "", "") + c.Assert(err, IsNil, comment) + + err = se.NewTxn(context.Background()) + c.Assert(err, IsNil, comment) + p, _, err := planner.Optimize(context.TODO(), se, stmt, is) + c.Assert(err, IsNil, comment) + // This for loop level traverses the plan tree to get which operators are covered. + for child := []plannercore.PhysicalPlan{p.(plannercore.PhysicalPlan)}; len(child) != 0; { + newChild := make([]plannercore.PhysicalPlan, 0, len(child)) + for _, ch := range child { + found := false + for k, t := range opsNeedsCovered { + if reflect.TypeOf(t) == reflect.TypeOf(ch) { + opsAlreadyCoveredMask |= 1 << k + found = true + break + } + } + c.Assert(found, IsTrue, Commentf("case: %v sql: %s operator %v is not registered in opsNeedsCoveredMask", i, tc, reflect.TypeOf(ch))) + switch x := ch.(type) { + case *plannercore.PhysicalCTE: + newChild = append(newChild, x.RecurPlan) + newChild = append(newChild, x.SeedPlan) + continue + case *plannercore.PhysicalShuffle: + newChild = append(newChild, x.DataSources...) + newChild = append(newChild, x.Tails...) + continue + } + newChild = append(newChild, ch.Children()...) + } + child = newChild + } + + e := executorBuilder.Build(p) + + func() { + defer func() { + r := recover() + buf := make([]byte, 4096) + stackSize := runtime.Stack(buf, false) + buf = buf[:stackSize] + c.Assert(r, IsNil, Commentf("case: %v\n sql: %s\n error stack: %v", i, tc, string(buf))) + }() + c.Assert(e.Close(), IsNil, comment) + }() + } + // The following code is used to make sure all the operators registered + // in opsNeedsCoveredMask are covered. + commentBuf := strings.Builder{} + if opsAlreadyCoveredMask != opsNeedsCoveredMask { + for i := range opsNeedsCovered { + if opsAlreadyCoveredMask&(1<") - - // Test the START_TIME and END_TIME field. - tk.MustExec(`set @@time_zone = 'Asia/Shanghai'`) - re = tk.MustQuery("admin show ddl jobs where end_time is not NULL") - row = re.Rows()[0] - createTime, err := types.ParseDatetime(nil, row[8].(string)) - c.Assert(err, IsNil) - startTime, err := types.ParseDatetime(nil, row[9].(string)) - c.Assert(err, IsNil) - endTime, err := types.ParseDatetime(nil, row[10].(string)) - c.Assert(err, IsNil) - tk.MustExec(`set @@time_zone = 'Europe/Amsterdam'`) - re = tk.MustQuery("admin show ddl jobs where end_time is not NULL") - row2 := re.Rows()[0] - c.Assert(row[8], Not(Equals), row2[8]) - c.Assert(row[9], Not(Equals), row2[9]) - c.Assert(row[10], Not(Equals), row2[10]) - createTime2, err := types.ParseDatetime(nil, row2[8].(string)) - c.Assert(err, IsNil) - startTime2, err := types.ParseDatetime(nil, row2[9].(string)) - c.Assert(err, IsNil) - endTime2, err := types.ParseDatetime(nil, row2[10].(string)) - c.Assert(err, IsNil) - loc, err := time.LoadLocation("Asia/Shanghai") - c.Assert(err, IsNil) - loc2, err := time.LoadLocation("Europe/Amsterdam") - c.Assert(err, IsNil) - t, err := createTime.GoTime(loc) - c.Assert(err, IsNil) - t2, err := createTime2.GoTime(loc2) - c.Assert(err, IsNil) - c.Assert(t.In(time.UTC), Equals, t2.In(time.UTC)) - t, err = startTime.GoTime(loc) - c.Assert(err, IsNil) - t2, err = startTime2.GoTime(loc2) - c.Assert(err, IsNil) - c.Assert(t.In(time.UTC), Equals, t2.In(time.UTC)) - t, err = endTime.GoTime(loc) - c.Assert(err, IsNil) - t2, err = endTime2.GoTime(loc2) - c.Assert(err, IsNil) - c.Assert(t.In(time.UTC), Equals, t2.In(time.UTC)) -} - -func (s *testSuiteP2) TestAdminShowDDLJobsInfo(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_admin_show_ddl_jobs") - tk.MustExec("drop placement policy if exists x") - tk.MustExec("drop placement policy if exists y") - defer func() { - tk.MustExec("drop database if exists test_admin_show_ddl_jobs") - tk.MustExec("drop placement policy if exists x") - tk.MustExec("drop placement policy if exists y") - }() - - // Test for issue: https://github.com/pingcap/tidb/issues/29915 - tk.MustExec("create placement policy x followers=4;") - tk.MustExec("create placement policy y " + - "PRIMARY_REGION=\"cn-east-1\" " + - "REGIONS=\"cn-east-1, cn-east-2\" " + - "FOLLOWERS=2") - tk.MustExec("create database if not exists test_admin_show_ddl_jobs") - tk.MustExec("use test_admin_show_ddl_jobs") - - tk.MustExec("create table t (a int);") - tk.MustExec("create table t1 (a int);") - - tk.MustExec("alter table t placement policy x;") - c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "alter table placement") - - tk.MustExec("rename table t to tt, t1 to tt1") - c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "rename tables") - - tk.MustExec("create table tt2 (c int) PARTITION BY RANGE (c) " + - "(PARTITION p0 VALUES LESS THAN (6)," + - "PARTITION p1 VALUES LESS THAN (11)," + - "PARTITION p2 VALUES LESS THAN (16)," + - "PARTITION p3 VALUES LESS THAN (21));") - tk.MustExec("alter table tt2 partition p0 placement policy y") - c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "alter table partition placement") - - tk.MustExec("alter table tt1 cache") - c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "alter table cache") - tk.MustExec("alter table tt1 nocache") - c.Assert(tk.MustQuery("admin show ddl jobs 1").Rows()[0][3], Equals, "alter table nocache") -} - -func (s *testSuiteP2) TestAdminChecksumOfPartitionedTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("USE test;") - tk.MustExec("DROP TABLE IF EXISTS admin_checksum_partition_test;") - tk.MustExec("CREATE TABLE admin_checksum_partition_test (a INT) PARTITION BY HASH(a) PARTITIONS 4;") - tk.MustExec("INSERT INTO admin_checksum_partition_test VALUES (1), (2);") - - r := tk.MustQuery("ADMIN CHECKSUM TABLE admin_checksum_partition_test;") - r.Check(testkit.Rows("test admin_checksum_partition_test 1 5 5")) -} - -func (s *baseTestSuite) fillData(tk *testkit.TestKit, table string) { - tk.MustExec("use test") - tk.MustExec(fmt.Sprintf("create table %s(id int not null default 1, name varchar(255), PRIMARY KEY(id));", table)) - - // insert data - tk.MustExec(fmt.Sprintf("insert INTO %s VALUES (1, \"hello\");", table)) - tk.CheckExecResult(1, 0) - tk.MustExec(fmt.Sprintf("insert into %s values (2, \"hello\");", table)) - tk.CheckExecResult(1, 0) -} - -type testCase struct { - data1 []byte - data2 []byte - expected []string - restData []byte - expectedMsg string -} - -func checkCases(tests []testCase, ld *executor.LoadDataInfo, - t *testing.T, tk *testkit2.TestKit, ctx sessionctx.Context, selectSQL, deleteSQL string) { - origin := ld.IgnoreLines - for _, tt := range tests { - ld.IgnoreLines = origin - require.Nil(t, ctx.NewTxn(context.Background())) - ctx.GetSessionVars().StmtCtx.DupKeyAsWarning = true - ctx.GetSessionVars().StmtCtx.BadNullAsWarning = true - ctx.GetSessionVars().StmtCtx.InLoadDataStmt = true - ctx.GetSessionVars().StmtCtx.InDeleteStmt = false - data, reachLimit, err1 := ld.InsertData(context.Background(), tt.data1, tt.data2) - require.NoError(t, err1) - require.False(t, reachLimit) - err1 = ld.CheckAndInsertOneBatch(context.Background(), ld.GetRows(), ld.GetCurBatchCnt()) - require.NoError(t, err1) - ld.SetMaxRowsInBatch(20000) - if tt.restData == nil { - require.Len(t, data, 0, "data1:%v, data2:%v, data:%v", string(tt.data1), string(tt.data2), string(data)) - } else { - require.Equal(t, tt.restData, data, "data1:%v, data2:%v, data:%v", string(tt.data1), string(tt.data2), string(data)) - } - ld.SetMessage() - require.Equal(t, tt.expectedMsg, tk.Session().LastMessage()) - ctx.StmtCommit() - txn, err := ctx.Txn(true) - require.NoError(t, err) - err = txn.Commit(context.Background()) - require.NoError(t, err) - r := tk.MustQuery(selectSQL) - r.Check(testutil.RowsWithSep("|", tt.expected...)) - tk.MustExec(deleteSQL) - } -} - -func (s *testSuiteP1) TestSelectWithoutFrom(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestSelectWithoutFrom(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - - r := tk.MustQuery("select 1 + 2*3;") - r.Check(testkit.Rows("7")) - - r = tk.MustQuery(`select _utf8"string";`) - r.Check(testkit.Rows("string")) - - r = tk.MustQuery("select 1 order by 1;") - r.Check(testkit.Rows("1")) + tk.MustQuery("select 1 + 2*3;").Check(testkit.Rows("7")) + tk.MustQuery(`select _utf8"string";`).Check(testkit.Rows("string")) + tk.MustQuery("select 1 order by 1;").Check(testkit.Rows("1")) } // TestSelectBackslashN Issue 3685. -func (s *testSuiteP1) TestSelectBackslashN(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestSelectBackslashN(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) sql := `select \N;` - r := tk.MustQuery(sql) - r.Check(testkit.Rows("")) + tk.MustQuery(sql).Check(testkit.Rows("")) rs, err := tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields := rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "NULL") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "NULL", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select "\N";` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("N")) + tk.MustQuery(sql).Check(testkit.Rows("N")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `N`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `N`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) tk.MustExec("use test;") tk.MustExec("create table test (`\\N` int);") tk.MustExec("insert into test values (1);") tk.CheckExecResult(1, 0) sql = "select * from test;" - r = tk.MustQuery(sql) - r.Check(testkit.Rows("1")) + tk.MustQuery(sql).Check(testkit.Rows("1")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `\N`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `\N`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select \N from test;` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("")) + tk.MustQuery(sql).Check(testkit.Rows("")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(err, IsNil) - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `NULL`) - c.Assert(rs.Close(), IsNil) + require.NoError(t, err) + require.Len(t, fields, 1) + require.Equal(t, `NULL`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select (\N) from test;` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("")) + tk.MustQuery(sql).Check(testkit.Rows("")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `NULL`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `NULL`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = "select `\\N` from test;" - r = tk.MustQuery(sql) - r.Check(testkit.Rows("1")) + tk.MustQuery(sql).Check(testkit.Rows("1")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `\N`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `\N`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = "select (`\\N`) from test;" - r = tk.MustQuery(sql) - r.Check(testkit.Rows("1")) + tk.MustQuery(sql).Check(testkit.Rows("1")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `\N`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `\N`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select '\N' from test;` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("N")) + tk.MustQuery(sql).Check(testkit.Rows("N")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `N`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `N`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select ('\N') from test;` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("N")) + tk.MustQuery(sql).Check(testkit.Rows("N")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `N`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `N`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) } // TestSelectNull Issue #4053. -func (s *testSuiteP1) TestSelectNull(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestSelectNull(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) sql := `select nUll;` - r := tk.MustQuery(sql) - r.Check(testkit.Rows("")) + tk.MustQuery(sql).Check(testkit.Rows("")) rs, err := tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields := rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `NULL`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `NULL`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select (null);` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("")) + tk.MustQuery(sql).Check(testkit.Rows("")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `NULL`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `NULL`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select null+NULL;` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("")) + tk.MustQuery(sql).Check(testkit.Rows("")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(err, IsNil) - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `null+NULL`) - c.Assert(rs.Close(), IsNil) + require.NoError(t, err) + require.Len(t, fields, 1) + require.Equal(t, `null+NULL`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) } // TestSelectStringLiteral Issue #3686. -func (s *testSuiteP1) TestSelectStringLiteral(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestSelectStringLiteral(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) sql := `select 'abc';` - r := tk.MustQuery(sql) - r.Check(testkit.Rows("abc")) + tk.MustQuery(sql).Check(testkit.Rows("abc")) rs, err := tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields := rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `abc`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `abc`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select (('abc'));` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("abc")) + tk.MustQuery(sql).Check(testkit.Rows("abc")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `abc`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `abc`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select 'abc'+'def';` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("0")) + tk.MustQuery(sql).Check(testkit.Rows("0")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, `'abc'+'def'`) - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, `'abc'+'def'`, fields[0].Column.Name.O) + require.NoError(t, rs.Close()) // Below checks whether leading invalid chars are trimmed. sql = "select '\n';" - r = tk.MustQuery(sql) - r.Check(testkit.Rows("\n")) + tk.MustQuery(sql).Check(testkit.Rows("\n")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = "select '\t col';" // Lowercased letter is a valid char. rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "col") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "col", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = "select '\t Col';" // Uppercased letter is a valid char. rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "Col") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "Col", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = "select '\n\t 中文 col';" // Chinese char is a valid char. rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "中文 col") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "中文 col", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = "select ' \r\n .col';" // Punctuation is a valid char. rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, ".col") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, ".col", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = "select ' 😆col';" // Emoji is a valid char. rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "😆col") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "😆col", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) // Below checks whether trailing invalid chars are preserved. sql = `select 'abc ';` rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "abc ") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "abc ", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select ' abc 123 ';` rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "abc 123 ") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "abc 123 ", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) // Issue #4239. sql = `select 'a' ' ' 'string';` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("a string")) + tk.MustQuery(sql).Check(testkit.Rows("a string")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "a") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "a", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select 'a' " " "string";` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("a string")) + tk.MustQuery(sql).Check(testkit.Rows("a string")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "a") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "a", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select 'string' 'string';` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("stringstring")) + tk.MustQuery(sql).Check(testkit.Rows("stringstring")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "string") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "string", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select "ss" "a";` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("ssa")) + tk.MustQuery(sql).Check(testkit.Rows("ssa")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "ss") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "ss", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select "ss" "a" "b";` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("ssab")) + tk.MustQuery(sql).Check(testkit.Rows("ssab")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "ss") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "ss", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select "ss" "a" ' ' "b";` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("ssa b")) + tk.MustQuery(sql).Check(testkit.Rows("ssa b")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "ss") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "ss", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) sql = `select "ss" "a" ' ' "b" ' ' "d";` - r = tk.MustQuery(sql) - r.Check(testkit.Rows("ssa b d")) + tk.MustQuery(sql).Check(testkit.Rows("ssa b d")) rs, err = tk.Exec(sql) - c.Check(err, IsNil) + require.NoError(t, err) fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.O, Equals, "ss") - c.Assert(rs.Close(), IsNil) + require.Len(t, fields, 1) + require.Equal(t, "ss", fields[0].Column.Name.O) + require.NoError(t, rs.Close()) } -func (s *testSuiteP1) TestSelectLimit(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestSelectLimit(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - s.fillData(tk, "select_limit") + tk.MustExec("create table select_limit(id int not null default 1, name varchar(255), PRIMARY KEY(id));") + // insert data + tk.MustExec("insert INTO select_limit VALUES (1, \"hello\");") + tk.CheckExecResult(1, 0) + tk.MustExec("insert into select_limit values (2, \"hello\");") + tk.CheckExecResult(1, 0) tk.MustExec("insert INTO select_limit VALUES (3, \"hello\");") tk.CheckExecResult(1, 0) tk.MustExec("insert INTO select_limit VALUES (4, \"hello\");") tk.CheckExecResult(1, 0) - r := tk.MustQuery("select * from select_limit limit 1;") - r.Check(testkit.Rows("1 hello")) + tk.MustQuery("select * from select_limit limit 1;").Check(testkit.Rows("1 hello")) - r = tk.MustQuery("select id from (select * from select_limit limit 1) k where id != 1;") - r.Check(testkit.Rows()) + tk.MustQuery("select id from (select * from select_limit limit 1) k where id != 1;").Check(testkit.Rows()) - r = tk.MustQuery("select * from select_limit limit 18446744073709551615 offset 0;") - r.Check(testkit.Rows("1 hello", "2 hello", "3 hello", "4 hello")) + tk.MustQuery("select * from select_limit limit 18446744073709551615 offset 0;").Check(testkit.Rows("1 hello", "2 hello", "3 hello", "4 hello")) - r = tk.MustQuery("select * from select_limit limit 18446744073709551615 offset 1;") - r.Check(testkit.Rows("2 hello", "3 hello", "4 hello")) + tk.MustQuery("select * from select_limit limit 18446744073709551615 offset 1;").Check(testkit.Rows("2 hello", "3 hello", "4 hello")) - r = tk.MustQuery("select * from select_limit limit 18446744073709551615 offset 3;") - r.Check(testkit.Rows("4 hello")) + tk.MustQuery("select * from select_limit limit 18446744073709551615 offset 3;").Check(testkit.Rows("4 hello")) err := tk.ExecToErr("select * from select_limit limit 18446744073709551616 offset 3;") - c.Assert(err, NotNil) + require.Error(t, err) } -func (s *testSuiteP1) TestSelectOrderBy(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestSelectOrderBy(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - s.fillData(tk, "select_order_test") + tk.MustExec("create table select_order_test(id int not null default 1, name varchar(255), PRIMARY KEY(id));") - // Test star field - r := tk.MustQuery("select * from select_order_test where id = 1 order by id limit 1 offset 0;") - r.Check(testkit.Rows("1 hello")) - - r = tk.MustQuery("select id from select_order_test order by id desc limit 1 ") - r.Check(testkit.Rows("2")) - - r = tk.MustQuery("select id from select_order_test order by id + 1 desc limit 1 ") - r.Check(testkit.Rows("2")) + // insert data + tk.MustExec("insert INTO select_order_test VALUES (1, \"hello\");") + tk.CheckExecResult(1, 0) + tk.MustExec("insert into select_order_test values (2, \"hello\");") + tk.CheckExecResult(1, 0) + // Test star field + tk.MustQuery("select * from select_order_test where id = 1 order by id limit 1 offset 0;").Check(testkit.Rows("1 hello")) + tk.MustQuery("select id from select_order_test order by id desc limit 1 ").Check(testkit.Rows("2")) + tk.MustQuery("select id from select_order_test order by id + 1 desc limit 1 ").Check(testkit.Rows("2")) // Test limit - r = tk.MustQuery("select * from select_order_test order by name, id limit 1 offset 0;") - r.Check(testkit.Rows("1 hello")) - + tk.MustQuery("select * from select_order_test order by name, id limit 1 offset 0;").Check(testkit.Rows("1 hello")) // Test limit - r = tk.MustQuery("select id as c1, name from select_order_test order by 2, id limit 1 offset 0;") - r.Check(testkit.Rows("1 hello")) - + tk.MustQuery("select id as c1, name from select_order_test order by 2, id limit 1 offset 0;").Check(testkit.Rows("1 hello")) // Test limit overflow - r = tk.MustQuery("select * from select_order_test order by name, id limit 100 offset 0;") - r.Check(testkit.Rows("1 hello", "2 hello")) - + tk.MustQuery("select * from select_order_test order by name, id limit 100 offset 0;").Check(testkit.Rows("1 hello", "2 hello")) // Test offset overflow - r = tk.MustQuery("select * from select_order_test order by name, id limit 1 offset 100;") - r.Check(testkit.Rows()) - + tk.MustQuery("select * from select_order_test order by name, id limit 1 offset 100;").Check(testkit.Rows()) // Test limit exceeds int range. - r = tk.MustQuery("select id from select_order_test order by name, id limit 18446744073709551615;") - r.Check(testkit.Rows("1", "2")) - + tk.MustQuery("select id from select_order_test order by name, id limit 18446744073709551615;").Check(testkit.Rows("1", "2")) // Test multiple field - r = tk.MustQuery("select id, name from select_order_test where id = 1 group by id, name limit 1 offset 0;") - r.Check(testkit.Rows("1 hello")) + tk.MustQuery("select id, name from select_order_test where id = 1 group by id, name limit 1 offset 0;").Check(testkit.Rows("1 hello")) // Test limit + order by for i := 3; i <= 10; i += 1 { @@ -1095,28 +529,22 @@ func (s *testSuiteP1) TestSelectOrderBy(c *C) { tk.MustExec(fmt.Sprintf("insert INTO select_order_test VALUES (%d, \"zz\");", i)) } tk.MustExec("insert INTO select_order_test VALUES (1501, \"aa\");") - r = tk.MustQuery("select * from select_order_test order by name, id limit 1 offset 3;") - r.Check(testkit.Rows("11 hh")) + tk.MustQuery("select * from select_order_test order by name, id limit 1 offset 3;").Check(testkit.Rows("11 hh")) tk.MustExec("drop table select_order_test") tk.MustExec("drop table if exists t") tk.MustExec("create table t (c int, d int)") tk.MustExec("insert t values (1, 1)") tk.MustExec("insert t values (1, 2)") tk.MustExec("insert t values (1, 3)") - r = tk.MustQuery("select 1-d as d from t order by d;") - r.Check(testkit.Rows("-2", "-1", "0")) - r = tk.MustQuery("select 1-d as d from t order by d + 1;") - r.Check(testkit.Rows("0", "-1", "-2")) - r = tk.MustQuery("select t.d from t order by d;") - r.Check(testkit.Rows("1", "2", "3")) + tk.MustQuery("select 1-d as d from t order by d;").Check(testkit.Rows("-2", "-1", "0")) + tk.MustQuery("select 1-d as d from t order by d + 1;").Check(testkit.Rows("0", "-1", "-2")) + tk.MustQuery("select t.d from t order by d;").Check(testkit.Rows("1", "2", "3")) tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int, b int, c int)") tk.MustExec("insert t values (1, 2, 3)") - r = tk.MustQuery("select b from (select a,b from t order by a,c) t") - r.Check(testkit.Rows("2")) - r = tk.MustQuery("select b from (select a,b from t order by a,c limit 1) t") - r.Check(testkit.Rows("2")) + tk.MustQuery("select b from (select a,b from t order by a,c) t").Check(testkit.Rows("2")) + tk.MustQuery("select b from (select a,b from t order by a,c limit 1) t").Check(testkit.Rows("2")) tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int, b int, index idx(a))") tk.MustExec("insert into t values(1, 1), (2, 2)") @@ -1134,16 +562,18 @@ func (s *testSuiteP1) TestSelectOrderBy(c *C) { // Test double read which needs to keep order. tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int, b int, key b (b))") - tk.Se.GetSessionVars().IndexLookupSize = 3 + tk.Session().GetSessionVars().IndexLookupSize = 3 for i := 0; i < 10; i++ { tk.MustExec(fmt.Sprintf("insert into t values(%d, %d)", i, 10-i)) } tk.MustQuery("select a from t use index(b) order by b").Check(testkit.Rows("9", "8", "7", "6", "5", "4", "3", "2", "1", "0")) } -func (s *testSuiteP1) TestOrderBy(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("drop table if exists t") +func TestOrderBy(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") tk.MustExec("create table t (c1 int, c2 int, c3 varchar(20))") tk.MustExec("insert into t values (1, 2, 'abc'), (2, 1, 'bcd')") @@ -1164,444 +594,26 @@ func (s *testSuiteP1) TestOrderBy(c *C) { tk.MustQuery("select c1, c2 from t order by binary c3").Check(testkit.Rows("1 2", "2 1")) } -func (s *testSuiteP1) TestSelectErrorRow(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - err := tk.ExecToErr("select row(1, 1) from test") - c.Assert(err, NotNil) - - err = tk.ExecToErr("select * from test group by row(1, 1);") - c.Assert(err, NotNil) - - err = tk.ExecToErr("select * from test order by row(1, 1);") - c.Assert(err, NotNil) - - err = tk.ExecToErr("select * from test having row(1, 1);") - c.Assert(err, NotNil) - - err = tk.ExecToErr("select (select 1, 1) from test;") - c.Assert(err, NotNil) - - err = tk.ExecToErr("select * from test group by (select 1, 1);") - c.Assert(err, NotNil) - - err = tk.ExecToErr("select * from test order by (select 1, 1);") - c.Assert(err, NotNil) - - err = tk.ExecToErr("select * from test having (select 1, 1);") - c.Assert(err, NotNil) -} - -// TestIssue2612 is related with https://github.com/pingcap/tidb/issues/2612 -func (s *testSuiteP1) TestIssue2612(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec(`drop table if exists t`) - tk.MustExec(`create table t ( - create_at datetime NOT NULL DEFAULT '1000-01-01 00:00:00', - finish_at datetime NOT NULL DEFAULT '1000-01-01 00:00:00');`) - tk.MustExec(`insert into t values ('2016-02-13 15:32:24', '2016-02-11 17:23:22');`) - rs, err := tk.Exec(`select timediff(finish_at, create_at) from t;`) - c.Assert(err, IsNil) - req := rs.NewChunk(nil) - err = rs.Next(context.Background(), req) - c.Assert(err, IsNil) - c.Assert(req.GetRow(0).GetDuration(0, 0).String(), Equals, "-46:09:02") - c.Assert(rs.Close(), IsNil) -} - -// TestIssue345 is related with https://github.com/pingcap/tidb/issues/345 -func (s *testSuiteP1) TestIssue345(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec(`drop table if exists t1, t2`) - tk.MustExec(`create table t1 (c1 int);`) - tk.MustExec(`create table t2 (c2 int);`) - tk.MustExec(`insert into t1 values (1);`) - tk.MustExec(`insert into t2 values (2);`) - tk.MustExec(`update t1, t2 set t1.c1 = 2, t2.c2 = 1;`) - tk.MustExec(`update t1, t2 set c1 = 2, c2 = 1;`) - tk.MustExec(`update t1 as a, t2 as b set a.c1 = 2, b.c2 = 1;`) - - // Check t1 content - r := tk.MustQuery("SELECT * FROM t1;") - r.Check(testkit.Rows("2")) - // Check t2 content - r = tk.MustQuery("SELECT * FROM t2;") - r.Check(testkit.Rows("1")) - - tk.MustExec(`update t1 as a, t2 as t1 set a.c1 = 1, t1.c2 = 2;`) - // Check t1 content - r = tk.MustQuery("SELECT * FROM t1;") - r.Check(testkit.Rows("1")) - // Check t2 content - r = tk.MustQuery("SELECT * FROM t2;") - r.Check(testkit.Rows("2")) - - _, err := tk.Exec(`update t1 as a, t2 set t1.c1 = 10;`) - c.Assert(err, NotNil) -} - -func (s *testSuiteP1) TestIssue5055(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec(`drop table if exists t1, t2`) - tk.MustExec(`create table t1 (a int);`) - tk.MustExec(`create table t2 (a int);`) - tk.MustExec(`insert into t1 values(1);`) - tk.MustExec(`insert into t2 values(1);`) - result := tk.MustQuery("select tbl1.* from (select t1.a, 1 from t1) tbl1 left join t2 tbl2 on tbl1.a = tbl2.a order by tbl1.a desc limit 1;") - result.Check(testkit.Rows("1 1")) -} - -func (s *testSuiteWithData) TestSetOperation(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists t1, t2, t3`) - tk.MustExec(`create table t1(a int)`) - tk.MustExec(`create table t2 like t1`) - tk.MustExec(`create table t3 like t1`) - tk.MustExec(`insert into t1 values (1),(1),(2),(3),(null)`) - tk.MustExec(`insert into t2 values (1),(2),(null),(null)`) - tk.MustExec(`insert into t3 values (2),(3)`) - - var input []string - var output []struct { - SQL string - Plan []string - Res []string - } - s.testData.GetTestCases(c, &input, &output) - for i, tt := range input { - s.testData.OnRecord(func() { - output[i].SQL = tt - output[i].Plan = s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + tt).Rows()) - output[i].Res = s.testData.ConvertRowsToStrings(tk.MustQuery(tt).Sort().Rows()) - }) - tk.MustQuery("explain " + tt).Check(testkit.Rows(output[i].Plan...)) - tk.MustQuery(tt).Sort().Check(testkit.Rows(output[i].Res...)) - } -} - -func (s *testSuiteWithData) TestSetOperationOnDiffColType(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists t1, t2, t3`) - tk.MustExec(`create table t1(a int, b int)`) - tk.MustExec(`create table t2(a int, b varchar(20))`) - tk.MustExec(`create table t3(a int, b decimal(30,10))`) - tk.MustExec(`insert into t1 values (1,1),(1,1),(2,2),(3,3),(null,null)`) - tk.MustExec(`insert into t2 values (1,'1'),(2,'2'),(null,null),(null,'3')`) - tk.MustExec(`insert into t3 values (2,2.1),(3,3)`) - - var input []string - var output []struct { - SQL string - Plan []string - Res []string - } - s.testData.GetTestCases(c, &input, &output) - for i, tt := range input { - s.testData.OnRecord(func() { - output[i].SQL = tt - output[i].Plan = s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + tt).Rows()) - output[i].Res = s.testData.ConvertRowsToStrings(tk.MustQuery(tt).Sort().Rows()) - }) - tk.MustQuery("explain " + tt).Check(testkit.Rows(output[i].Plan...)) - tk.MustQuery(tt).Sort().Check(testkit.Rows(output[i].Res...)) - } -} - -// issue-23038: wrong key range of index scan for year column -func (s *testSuiteWithData) TestIndexScanWithYearCol(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (c1 year(4), c2 int, key(c1));") - tk.MustExec("insert into t values(2001, 1);") - - var input []string - var output []struct { - SQL string - Plan []string - Res []string - } - s.testData.GetTestCases(c, &input, &output) - for i, tt := range input { - s.testData.OnRecord(func() { - output[i].SQL = tt - output[i].Plan = s.testData.ConvertRowsToStrings(tk.MustQuery("explain format = 'brief' " + tt).Rows()) - output[i].Res = s.testData.ConvertRowsToStrings(tk.MustQuery(tt).Sort().Rows()) - }) - tk.MustQuery("explain format = 'brief' " + tt).Check(testkit.Rows(output[i].Plan...)) - tk.MustQuery(tt).Sort().Check(testkit.Rows(output[i].Res...)) - } -} - -func (s *testSuiteP2) TestUnion(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - testSQL := `drop table if exists union_test; create table union_test(id int);` - tk.MustExec(testSQL) - - testSQL = `drop table if exists union_test;` - tk.MustExec(testSQL) - testSQL = `create table union_test(id int);` - tk.MustExec(testSQL) - testSQL = `insert union_test values (1),(2)` - tk.MustExec(testSQL) - - testSQL = `select * from (select id from union_test union select id from union_test) t order by id;` - r := tk.MustQuery(testSQL) - r.Check(testkit.Rows("1", "2")) - - r = tk.MustQuery("select 1 union all select 1") - r.Check(testkit.Rows("1", "1")) - - r = tk.MustQuery("select 1 union all select 1 union select 1") - r.Check(testkit.Rows("1")) - - r = tk.MustQuery("select 1 as a union (select 2) order by a limit 1") - r.Check(testkit.Rows("1")) - - r = tk.MustQuery("select 1 as a union (select 2) order by a limit 1, 1") - r.Check(testkit.Rows("2")) - - r = tk.MustQuery("select id from union_test union all (select 1) order by id desc") - r.Check(testkit.Rows("2", "1", "1")) - - r = tk.MustQuery("select id as a from union_test union (select 1) order by a desc") - r.Check(testkit.Rows("2", "1")) - - r = tk.MustQuery(`select null as a union (select "abc") order by a`) - r.Check(testkit.Rows("", "abc")) - - r = tk.MustQuery(`select "abc" as a union (select 1) order by a`) - r.Check(testkit.Rows("1", "abc")) - - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (c int, d int)") - tk.MustExec("insert t1 values (NULL, 1)") - tk.MustExec("insert t1 values (1, 1)") - tk.MustExec("insert t1 values (1, 2)") - tk.MustExec("drop table if exists t2") - tk.MustExec("create table t2 (c int, d int)") - tk.MustExec("insert t2 values (1, 3)") - tk.MustExec("insert t2 values (1, 1)") - tk.MustExec("drop table if exists t3") - tk.MustExec("create table t3 (c int, d int)") - tk.MustExec("insert t3 values (3, 2)") - tk.MustExec("insert t3 values (4, 3)") - r = tk.MustQuery(`select sum(c1), c2 from (select c c1, d c2 from t1 union all select d c1, c c2 from t2 union all select c c1, d c2 from t3) x group by c2 order by c2`) - r.Check(testkit.Rows("5 1", "4 2", "4 3")) - - tk.MustExec("drop table if exists t1, t2, t3") - tk.MustExec("create table t1 (a int primary key)") - tk.MustExec("create table t2 (a int primary key)") - tk.MustExec("create table t3 (a int primary key)") - tk.MustExec("insert t1 values (7), (8)") - tk.MustExec("insert t2 values (1), (9)") - tk.MustExec("insert t3 values (2), (3)") - r = tk.MustQuery("select * from t1 union all select * from t2 union all (select * from t3) order by a limit 2") - r.Check(testkit.Rows("1", "2")) - - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1 (a int)") - tk.MustExec("create table t2 (a int)") - tk.MustExec("insert t1 values (2), (1)") - tk.MustExec("insert t2 values (3), (4)") - r = tk.MustQuery("select * from t1 union all (select * from t2) order by a limit 1") - r.Check(testkit.Rows("1")) - r = tk.MustQuery("select (select * from t1 where a != t.a union all (select * from t2 where a != t.a) order by a limit 1) from t1 t") - r.Check(testkit.Rows("1", "2")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (id int unsigned primary key auto_increment, c1 int, c2 int, index c1_c2 (c1, c2))") - tk.MustExec("insert into t (c1, c2) values (1, 1)") - tk.MustExec("insert into t (c1, c2) values (1, 2)") - tk.MustExec("insert into t (c1, c2) values (2, 3)") - r = tk.MustQuery("select * from (select * from t where t.c1 = 1 union select * from t where t.id = 1) s order by s.id") - r.Check(testkit.Rows("1 1 1", "2 1 2")) - - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE t (f1 DATE)") - tk.MustExec("INSERT INTO t VALUES ('1978-11-26')") - r = tk.MustQuery("SELECT f1+0 FROM t UNION SELECT f1+0 FROM t") - r.Check(testkit.Rows("19781126")) - - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE t (a int, b int)") - tk.MustExec("INSERT INTO t VALUES ('1', '1')") - r = tk.MustQuery("select b from (SELECT * FROM t UNION ALL SELECT a, b FROM t order by a) t") - r.Check(testkit.Rows("1", "1")) - - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE t (a DECIMAL(4,2))") - tk.MustExec("INSERT INTO t VALUE(12.34)") - r = tk.MustQuery("SELECT 1 AS c UNION select a FROM t") - r.Sort().Check(testkit.Rows("1.00", "12.34")) - - // #issue3771 - r = tk.MustQuery("SELECT 'a' UNION SELECT CONCAT('a', -4)") - r.Sort().Check(testkit.Rows("a", "a-4")) - - // test race - tk.MustQuery("SELECT @x:=0 UNION ALL SELECT @x:=0 UNION ALL SELECT @x") - - // test field tp - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("CREATE TABLE t1 (a date)") - tk.MustExec("CREATE TABLE t2 (a date)") - tk.MustExec("SELECT a from t1 UNION select a FROM t2") - tk.MustQuery("show create table t1").Check(testkit.Rows("t1 CREATE TABLE `t1` (\n" + " `a` date DEFAULT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - - // Move from session test. - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1 (c double);") - tk.MustExec("create table t2 (c double);") - tk.MustExec("insert into t1 value (73);") - tk.MustExec("insert into t2 value (930);") - // If set unspecified column flen to 0, it will cause bug in union. - // This test is used to prevent the bug reappear. - tk.MustQuery("select c from t1 union (select c from t2) order by c").Check(testkit.Rows("73", "930")) - - // issue 5703 - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a date)") - tk.MustExec("insert into t value ('2017-01-01'), ('2017-01-02')") - r = tk.MustQuery("(select a from t where a < 0) union (select a from t where a > 0) order by a") - r.Check(testkit.Rows("2017-01-01", "2017-01-02")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int)") - tk.MustExec("insert into t value(0),(0)") - tk.MustQuery("select 1 from (select a from t union all select a from t) tmp").Check(testkit.Rows("1", "1", "1", "1")) - tk.MustQuery("select 10 as a from dual union select a from t order by a desc limit 1 ").Check(testkit.Rows("10")) - tk.MustQuery("select -10 as a from dual union select a from t order by a limit 1 ").Check(testkit.Rows("-10")) - tk.MustQuery("select count(1) from (select a from t union all select a from t) tmp").Check(testkit.Rows("4")) - - err := tk.ExecToErr("select 1 from (select a from t limit 1 union all select a from t limit 1) tmp") - c.Assert(err, NotNil) - terr := errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrWrongUsage)) - - err = tk.ExecToErr("select 1 from (select a from t order by a union all select a from t limit 1) tmp") - c.Assert(err, NotNil) - terr = errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrWrongUsage)) - - _, err = tk.Exec("(select a from t order by a) union all select a from t limit 1 union all select a from t limit 1") - c.Assert(terror.ErrorEqual(err, plannercore.ErrWrongUsage), IsTrue, Commentf("err %v", err)) - - _, err = tk.Exec("(select a from t limit 1) union all select a from t limit 1") - c.Assert(err, IsNil) - _, err = tk.Exec("(select a from t order by a) union all select a from t order by a") - c.Assert(err, IsNil) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int)") - tk.MustExec("insert into t value(1),(2),(3)") - - tk.MustQuery("(select a from t order by a limit 2) union all (select a from t order by a desc limit 2) order by a desc limit 1,2").Check(testkit.Rows("2", "2")) - tk.MustQuery("select a from t union all select a from t order by a desc limit 5").Check(testkit.Rows("3", "3", "2", "2", "1")) - tk.MustQuery("(select a from t order by a desc limit 2) union all select a from t group by a order by a").Check(testkit.Rows("1", "2", "2", "3", "3")) - tk.MustQuery("(select a from t order by a desc limit 2) union all select 33 as a order by a desc limit 2").Check(testkit.Rows("33", "3")) - - tk.MustQuery("select 1 union select 1 union all select 1").Check(testkit.Rows("1", "1")) - tk.MustQuery("select 1 union all select 1 union select 1").Check(testkit.Rows("1")) - - tk.MustExec("drop table if exists t1, t2") - tk.MustExec(`create table t1(a bigint, b bigint);`) - tk.MustExec(`create table t2(a bigint, b bigint);`) - tk.MustExec(`insert into t1 values(1, 1);`) - tk.MustExec(`insert into t1 select * from t1;`) - tk.MustExec(`insert into t1 select * from t1;`) - tk.MustExec(`insert into t1 select * from t1;`) - tk.MustExec(`insert into t1 select * from t1;`) - tk.MustExec(`insert into t1 select * from t1;`) - tk.MustExec(`insert into t1 select * from t1;`) - tk.MustExec(`insert into t2 values(1, 1);`) - tk.MustExec(`set @@tidb_init_chunk_size=2;`) - tk.MustExec(`set @@sql_mode="";`) - tk.MustQuery(`select count(*) from (select t1.a, t1.b from t1 left join t2 on t1.a=t2.a union all select t1.a, t1.a from t1 left join t2 on t1.a=t2.a) tmp;`).Check(testkit.Rows("128")) - tk.MustQuery(`select tmp.a, count(*) from (select t1.a, t1.b from t1 left join t2 on t1.a=t2.a union all select t1.a, t1.a from t1 left join t2 on t1.a=t2.a) tmp;`).Check(testkit.Rows("1 128")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int, b int)") - tk.MustExec("insert into t value(1 ,2)") - tk.MustQuery("select a, b from (select a, 0 as d, b from t union all select a, 0 as d, b from t) test;").Check(testkit.Rows("1 2", "1 2")) - - // #issue 8141 - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1(a int, b int)") - tk.MustExec("insert into t1 value(1,2),(1,1),(2,2),(2,2),(3,2),(3,2)") - tk.MustExec("set @@tidb_init_chunk_size=2;") - tk.MustQuery("select count(*) from (select a as c, a as d from t1 union all select a, b from t1) t;").Check(testkit.Rows("12")) - - // #issue 8189 and #issue 8199 - tk.MustExec("drop table if exists t1") - tk.MustExec("drop table if exists t2") - tk.MustExec("CREATE TABLE t1 (a int not null, b char (10) not null)") - tk.MustExec("insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c')") - tk.MustExec("CREATE TABLE t2 (a int not null, b char (10) not null)") - tk.MustExec("insert into t2 values(1,'a'),(2,'b'),(3,'c'),(3,'c')") - tk.MustQuery("select a from t1 union select a from t1 order by (select a+1);").Check(testkit.Rows("1", "2", "3")) - - // #issue 8201 - for i := 0; i < 4; i++ { - tk.MustQuery("SELECT(SELECT 0 AS a FROM dual UNION SELECT 1 AS a FROM dual ORDER BY a ASC LIMIT 1) AS dev").Check(testkit.Rows("0")) - } - - // #issue 8231 - tk.MustExec("drop table if exists t1") - tk.MustExec("CREATE TABLE t1 (uid int(1))") - tk.MustExec("INSERT INTO t1 SELECT 150") - tk.MustQuery("SELECT 'a' UNION SELECT uid FROM t1 order by 1 desc;").Check(testkit.Rows("a", "150")) - - // #issue 8196 - tk.MustExec("drop table if exists t1") - tk.MustExec("drop table if exists t2") - tk.MustExec("CREATE TABLE t1 (a int not null, b char (10) not null)") - tk.MustExec("insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c')") - tk.MustExec("CREATE TABLE t2 (a int not null, b char (10) not null)") - tk.MustExec("insert into t2 values(3,'c'),(4,'d'),(5,'f'),(6,'e')") - tk.MustExec("analyze table t1") - tk.MustExec("analyze table t2") - _, err = tk.Exec("(select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by t1.b") - c.Assert(err.Error(), Equals, "[planner:1250]Table 't1' from one of the SELECTs cannot be used in global ORDER clause") - - // #issue 9900 - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int, b decimal(6, 3))") - tk.MustExec("insert into t values(1, 1.000)") - tk.MustQuery("select count(distinct a), sum(distinct a), avg(distinct a) from (select a from t union all select b from t) tmp;").Check(testkit.Rows("1 1.000 1.0000000")) - - // #issue 23832 - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a bit(20), b float, c double, d int)") - tk.MustExec("insert into t values(10, 10, 10, 10), (1, -1, 2, -2), (2, -2, 1, 1), (2, 1.1, 2.1, 10.1)") - tk.MustQuery("select a from t union select 10 order by a").Check(testkit.Rows("1", "2", "10")) -} - -func (s *testSuite2) TestUnionLimit(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestSelectErrorRow(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - tk.MustExec("drop table if exists union_limit") - tk.MustExec("create table union_limit (id int) partition by hash(id) partitions 30") - for i := 0; i < 60; i++ { - tk.MustExec(fmt.Sprintf("insert into union_limit values (%d)", i)) - } - // Cover the code for worker count limit in the union executor. - tk.MustQuery("select * from union_limit limit 10") + require.Error(t, tk.ExecToErr("select row(1, 1) from test")) + require.Error(t, tk.ExecToErr("select * from test group by row(1, 1);")) + require.Error(t, tk.ExecToErr("select * from test order by row(1, 1);")) + require.Error(t, tk.ExecToErr("select * from test having row(1, 1);")) + require.Error(t, tk.ExecToErr("select (select 1, 1) from test;")) + require.Error(t, tk.ExecToErr("select * from test group by (select 1, 1);")) + require.Error(t, tk.ExecToErr("select * from test order by (select 1, 1);")) + require.Error(t, tk.ExecToErr("select * from test having (select 1, 1);")) } -func (s *testSuiteP1) TestNeighbouringProj(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestNeighbouringProj(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - - tk.MustExec("drop table if exists t1, t2") tk.MustExec("create table t1(a int, b int)") tk.MustExec("create table t2(a int, b int)") tk.MustExec("insert into t1 value(1, 1), (2, 2)") @@ -1611,12 +623,13 @@ func (s *testSuiteP1) TestNeighbouringProj(c *C) { tk.MustExec("drop table if exists t") tk.MustExec("create table t(a bigint, b bigint, c bigint);") tk.MustExec("insert into t values(1, 1, 1), (2, 2, 2), (3, 3, 3);") - rs := tk.MustQuery("select cast(count(a) as signed), a as another, a from t group by a order by cast(count(a) as signed), a limit 10;") - rs.Check(testkit.Rows("1 1 1", "1 2 2", "1 3 3")) + tk.MustQuery("select cast(count(a) as signed), a as another, a from t group by a order by cast(count(a) as signed), a limit 10;").Check(testkit.Rows("1 1 1", "1 2 2", "1 3 3")) } -func (s *testSuiteP1) TestIn(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestIn(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec(`drop table if exists t`) tk.MustExec(`create table t (c1 int primary key, c2 int, key c (c2));`) @@ -1624,15 +637,16 @@ func (s *testSuiteP1) TestIn(c *C) { tk.MustExec(fmt.Sprintf("insert t values(%d, %d)", i, i)) } queryStr := `select c2 from t where c1 in ('7', '10', '112', '111', '98', '106', '100', '9', '18', '17') order by c2` - r := tk.MustQuery(queryStr) - r.Check(testkit.Rows("7", "9", "10", "17", "18", "98", "100", "106", "111", "112")) + tk.MustQuery(queryStr).Check(testkit.Rows("7", "9", "10", "17", "18", "98", "100", "106", "111", "112")) queryStr = `select c2 from t where c1 in ('7a')` tk.MustQuery(queryStr).Check(testkit.Rows("7")) } -func (s *testSuiteP1) TestTablePKisHandleScan(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestTablePKisHandleScan(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int PRIMARY KEY AUTO_INCREMENT)") @@ -1688,126 +702,43 @@ func (s *testSuiteP1) TestTablePKisHandleScan(c *C) { } for _, tt := range tests { - result := tk.MustQuery(tt.sql) - result.Check(tt.result) + tk.MustQuery(tt.sql).Check(tt.result) } } -func (s *testSuite8) TestIndexScan(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int unique)") - tk.MustExec("insert t values (-1), (2), (3), (5), (6), (7), (8), (9)") - result := tk.MustQuery("select a from t where a < 0 or (a >= 2.1 and a < 5.1) or ( a > 5.9 and a <= 7.9) or a > '8.1'") - result.Check(testkit.Rows("-1", "3", "5", "6", "7", "9")) - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int unique)") - tk.MustExec("insert t values (0)") - result = tk.MustQuery("select NULL from t ") - result.Check(testkit.Rows("")) - // test for double read - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int unique, b int)") - tk.MustExec("insert t values (5, 0)") - tk.MustExec("insert t values (4, 0)") - tk.MustExec("insert t values (3, 0)") - tk.MustExec("insert t values (2, 0)") - tk.MustExec("insert t values (1, 0)") - tk.MustExec("insert t values (0, 0)") - result = tk.MustQuery("select * from t order by a limit 3") - result.Check(testkit.Rows("0 0", "1 0", "2 0")) - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int unique, b int)") - tk.MustExec("insert t values (0, 1)") - tk.MustExec("insert t values (1, 2)") - tk.MustExec("insert t values (2, 1)") - tk.MustExec("insert t values (3, 2)") - tk.MustExec("insert t values (4, 1)") - tk.MustExec("insert t values (5, 2)") - result = tk.MustQuery("select * from t where a < 5 and b = 1 limit 2") - result.Check(testkit.Rows("0 1", "2 1")) - tk.MustExec("drop table if exists tab1") - tk.MustExec("CREATE TABLE tab1(pk INTEGER PRIMARY KEY, col0 INTEGER, col1 FLOAT, col3 INTEGER, col4 FLOAT)") - tk.MustExec("CREATE INDEX idx_tab1_0 on tab1 (col0)") - tk.MustExec("CREATE INDEX idx_tab1_1 on tab1 (col1)") - tk.MustExec("CREATE INDEX idx_tab1_3 on tab1 (col3)") - tk.MustExec("CREATE INDEX idx_tab1_4 on tab1 (col4)") - tk.MustExec("INSERT INTO tab1 VALUES(1,37,20.85,30,10.69)") - result = tk.MustQuery("SELECT pk FROM tab1 WHERE ((col3 <= 6 OR col3 < 29 AND (col0 < 41)) OR col3 > 42) AND col1 >= 96.1 AND col3 = 30 AND col3 > 17 AND (col0 BETWEEN 36 AND 42)") - result.Check(testkit.Rows()) - tk.MustExec("drop table if exists tab1") - tk.MustExec("CREATE TABLE tab1(pk INTEGER PRIMARY KEY, a INTEGER, b INTEGER)") - tk.MustExec("CREATE INDEX idx_tab1_0 on tab1 (a)") - tk.MustExec("INSERT INTO tab1 VALUES(1,1,1)") - tk.MustExec("INSERT INTO tab1 VALUES(2,2,1)") - tk.MustExec("INSERT INTO tab1 VALUES(3,1,2)") - tk.MustExec("INSERT INTO tab1 VALUES(4,2,2)") - result = tk.MustQuery("SELECT * FROM tab1 WHERE pk <= 3 AND a = 1") - result.Check(testkit.Rows("1 1 1", "3 1 2")) - result = tk.MustQuery("SELECT * FROM tab1 WHERE pk <= 4 AND a = 1 AND b = 2") - result.Check(testkit.Rows("3 1 2")) - tk.MustExec("CREATE INDEX idx_tab1_1 on tab1 (b, a)") - result = tk.MustQuery("SELECT pk FROM tab1 WHERE b > 1") - result.Check(testkit.Rows("3", "4")) - - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE t (a varchar(3), index(a))") - tk.MustExec("insert t values('aaa'), ('aab')") - result = tk.MustQuery("select * from t where a >= 'aaaa' and a < 'aabb'") - result.Check(testkit.Rows("aab")) - - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE t (a int primary key, b int, c int, index(c))") - tk.MustExec("insert t values(1, 1, 1), (2, 2, 2), (4, 4, 4), (3, 3, 3), (5, 5, 5)") - // Test for double read and top n. - result = tk.MustQuery("select a from t where c >= 2 order by b desc limit 1") - result.Check(testkit.Rows("5")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a varchar(50) primary key, b int, c int, index idx(b))") - tk.MustExec("insert into t values('aa', 1, 1)") - tk.MustQuery("select * from t use index(idx) where a > 'a'").Check(testkit.Rows("aa 1 1")) - - // fix issue9636 - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE `t` (a int, KEY (a))") - result = tk.MustQuery(`SELECT * FROM (SELECT * FROM (SELECT a as d FROM t WHERE a IN ('100')) AS x WHERE x.d < "123" ) tmp_count`) - result.Check(testkit.Rows()) -} - -func (s *testSuiteP1) TestIndexReverseOrder(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestIndexReverseOrder(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int primary key auto_increment, b int, index idx (b))") tk.MustExec("insert t (b) values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)") - result := tk.MustQuery("select b from t order by b desc") - result.Check(testkit.Rows("9", "8", "7", "6", "5", "4", "3", "2", "1", "0")) - result = tk.MustQuery("select b from t where b <3 or (b >=6 and b < 8) order by b desc") - result.Check(testkit.Rows("7", "6", "2", "1", "0")) + tk.MustQuery("select b from t order by b desc").Check(testkit.Rows("9", "8", "7", "6", "5", "4", "3", "2", "1", "0")) + tk.MustQuery("select b from t where b <3 or (b >=6 and b < 8) order by b desc").Check(testkit.Rows("7", "6", "2", "1", "0")) tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int, b int, index idx (b, a))") tk.MustExec("insert t values (0, 2), (1, 2), (2, 2), (0, 1), (1, 1), (2, 1), (0, 0), (1, 0), (2, 0)") - result = tk.MustQuery("select b, a from t order by b, a desc") - result.Check(testkit.Rows("0 2", "0 1", "0 0", "1 2", "1 1", "1 0", "2 2", "2 1", "2 0")) + tk.MustQuery("select b, a from t order by b, a desc").Check(testkit.Rows("0 2", "0 1", "0 0", "1 2", "1 1", "1 0", "2 2", "2 1", "2 0")) } -func (s *testSuiteP1) TestTableReverseOrder(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestTableReverseOrder(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int primary key auto_increment, b int)") tk.MustExec("insert t (b) values (1), (2), (3), (4), (5), (6), (7), (8), (9)") - result := tk.MustQuery("select b from t order by a desc") - result.Check(testkit.Rows("9", "8", "7", "6", "5", "4", "3", "2", "1")) - result = tk.MustQuery("select a from t where a <3 or (a >=6 and a < 8) order by a desc") - result.Check(testkit.Rows("7", "6", "2", "1")) + tk.MustQuery("select b from t order by a desc").Check(testkit.Rows("9", "8", "7", "6", "5", "4", "3", "2", "1")) + tk.MustQuery("select a from t where a <3 or (a >=6 and a < 8) order by a desc").Check(testkit.Rows("7", "6", "2", "1")) } -func (s *testSuiteP1) TestDefaultNull(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestDefaultNull(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int primary key auto_increment, b int default 1, c int)") @@ -1822,21 +753,23 @@ func (s *testSuiteP1) TestDefaultNull(c *C) { tk.MustQuery("select * from t").Check(testkit.Rows("1 1 ")) } -func (s *testSuiteP1) TestUnsignedPKColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestUnsignedPKColumn(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int unsigned primary key, b int, c int, key idx_ba (b, c, a));") tk.MustExec("insert t values (1, 1, 1)") - result := tk.MustQuery("select * from t;") - result.Check(testkit.Rows("1 1 1")) + tk.MustQuery("select * from t;").Check(testkit.Rows("1 1 1")) tk.MustExec("update t set c=2 where a=1;") - result = tk.MustQuery("select * from t where b=1;") - result.Check(testkit.Rows("1 1 2")) + tk.MustQuery("select * from t where b=1;").Check(testkit.Rows("1 1 2")) } -func (s *testSuiteP1) TestJSON(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestJSON(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists test_json") @@ -1849,63 +782,35 @@ func (s *testSuiteP1) TestJSON(c *C) { tk.MustExec(`insert into test_json (id, a) values (5, '4.0')`) tk.MustExec(`insert into test_json (id, a) values (6, '"string"')`) - result := tk.MustQuery(`select tj.a from test_json tj order by tj.id`) - result.Check(testkit.Rows(`{"a": [1, "2", {"aa": "bb"}, 4], "b": true}`, "null", "", "true", "3", "4", `"string"`)) + tk.MustQuery(`select tj.a from test_json tj order by tj.id`).Check(testkit.Rows(`{"a": [1, "2", {"aa": "bb"}, 4], "b": true}`, "null", "", "true", "3", "4", `"string"`)) // Check json_type function - result = tk.MustQuery(`select json_type(a) from test_json tj order by tj.id`) - result.Check(testkit.Rows("OBJECT", "NULL", "", "BOOLEAN", "INTEGER", "DOUBLE", "STRING")) + tk.MustQuery(`select json_type(a) from test_json tj order by tj.id`).Check(testkit.Rows("OBJECT", "NULL", "", "BOOLEAN", "INTEGER", "DOUBLE", "STRING")) // Check json compare with primitives. - result = tk.MustQuery(`select a from test_json tj where a = 3`) - result.Check(testkit.Rows("3")) - result = tk.MustQuery(`select a from test_json tj where a = 4.0`) - result.Check(testkit.Rows("4")) - result = tk.MustQuery(`select a from test_json tj where a = true`) - result.Check(testkit.Rows("true")) - result = tk.MustQuery(`select a from test_json tj where a = "string"`) - result.Check(testkit.Rows(`"string"`)) + tk.MustQuery(`select a from test_json tj where a = 3`).Check(testkit.Rows("3")) + tk.MustQuery(`select a from test_json tj where a = 4.0`).Check(testkit.Rows("4")) + tk.MustQuery(`select a from test_json tj where a = true`).Check(testkit.Rows("true")) + tk.MustQuery(`select a from test_json tj where a = "string"`).Check(testkit.Rows(`"string"`)) // Check cast(true/false as JSON). - result = tk.MustQuery(`select cast(true as JSON)`) - result.Check(testkit.Rows(`true`)) - result = tk.MustQuery(`select cast(false as JSON)`) - result.Check(testkit.Rows(`false`)) + tk.MustQuery(`select cast(true as JSON)`).Check(testkit.Rows(`true`)) + tk.MustQuery(`select cast(false as JSON)`).Check(testkit.Rows(`false`)) // Check two json grammar sugar. - result = tk.MustQuery(`select a->>'$.a[2].aa' as x, a->'$.b' as y from test_json having x is not null order by id`) - result.Check(testkit.Rows(`bb true`)) - result = tk.MustQuery(`select a->'$.a[2].aa' as x, a->>'$.b' as y from test_json having x is not null order by id`) - result.Check(testkit.Rows(`"bb" true`)) + tk.MustQuery(`select a->>'$.a[2].aa' as x, a->'$.b' as y from test_json having x is not null order by id`).Check(testkit.Rows(`bb true`)) + tk.MustQuery(`select a->'$.a[2].aa' as x, a->>'$.b' as y from test_json having x is not null order by id`).Check(testkit.Rows(`"bb" true`)) // Check some DDL limits for TEXT/BLOB/JSON column. - var err error - var terr *terror.Error - - _, err = tk.Exec(`create table test_bad_json(a json default '{}')`) - c.Assert(err, NotNil) - terr = errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrBlobCantHaveDefault)) - - _, err = tk.Exec(`create table test_bad_json(a blob default 'hello')`) - c.Assert(err, NotNil) - terr = errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrBlobCantHaveDefault)) - - _, err = tk.Exec(`create table test_bad_json(a text default 'world')`) - c.Assert(err, NotNil) - terr = errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrBlobCantHaveDefault)) + tk.MustGetErrCode(`create table test_bad_json(a json default '{}')`, mysql.ErrBlobCantHaveDefault) + tk.MustGetErrCode(`create table test_bad_json(a blob default 'hello')`, mysql.ErrBlobCantHaveDefault) + tk.MustGetErrCode(`create table test_bad_json(a text default 'world')`, mysql.ErrBlobCantHaveDefault) // check json fields cannot be used as key. - _, err = tk.Exec(`create table test_bad_json(id int, a json, key (a))`) - c.Assert(err, NotNil) - terr = errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrJSONUsedAsKey)) + tk.MustGetErrCode(`create table test_bad_json(id int, a json, key (a))`, mysql.ErrJSONUsedAsKey) // check CAST AS JSON. - result = tk.MustQuery(`select CAST('3' AS JSON), CAST('{}' AS JSON), CAST(null AS JSON)`) - result.Check(testkit.Rows(`3 {} `)) + tk.MustQuery(`select CAST('3' AS JSON), CAST('{}' AS JSON), CAST(null AS JSON)`).Check(testkit.Rows(`3 {} `)) tk.MustQuery("select a, count(1) from test_json group by a order by a").Check(testkit.Rows( " 1", @@ -1934,40 +839,38 @@ func (s *testSuiteP1) TestJSON(c *C) { // "1234567890123456789012345678901234567890123456789012345.12")) } -func (s *testSuiteP1) TestMultiUpdate(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestMultiUpdate(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec(`CREATE TABLE test_mu (a int primary key, b int, c int)`) tk.MustExec(`INSERT INTO test_mu VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)`) // Test INSERT ... ON DUPLICATE UPDATE set_lists. tk.MustExec(`INSERT INTO test_mu VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE b = 3, c = b`) - result := tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`) - result.Check(testkit.Rows(`1 3 3`, `4 5 6`, `7 8 9`)) + tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`).Check(testkit.Rows(`1 3 3`, `4 5 6`, `7 8 9`)) tk.MustExec(`INSERT INTO test_mu VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE c = 2, b = c+5`) - result = tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`) - result.Check(testkit.Rows(`1 7 2`, `4 5 6`, `7 8 9`)) + tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`).Check(testkit.Rows(`1 7 2`, `4 5 6`, `7 8 9`)) // Test UPDATE ... set_lists. tk.MustExec(`UPDATE test_mu SET b = 0, c = b WHERE a = 4`) - result = tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`) - result.Check(testkit.Rows(`1 7 2`, `4 0 5`, `7 8 9`)) + tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`).Check(testkit.Rows(`1 7 2`, `4 0 5`, `7 8 9`)) tk.MustExec(`UPDATE test_mu SET c = 8, b = c WHERE a = 4`) - result = tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`) - result.Check(testkit.Rows(`1 7 2`, `4 5 8`, `7 8 9`)) + tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`).Check(testkit.Rows(`1 7 2`, `4 5 8`, `7 8 9`)) tk.MustExec(`UPDATE test_mu SET c = b, b = c WHERE a = 7`) - result = tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`) - result.Check(testkit.Rows(`1 7 2`, `4 5 8`, `7 9 8`)) + tk.MustQuery(`SELECT * FROM test_mu ORDER BY a`).Check(testkit.Rows(`1 7 2`, `4 5 8`, `7 9 8`)) } -func (s *testSuiteP1) TestGeneratedColumnWrite(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestGeneratedColumnWrite(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - _, err := tk.Exec(`CREATE TABLE test_gc_write (a int primary key auto_increment, b int, c int as (a+8) virtual)`) - c.Assert(err.Error(), Equals, ddl.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs("c").Error()) + tk.MustGetErrMsg(`CREATE TABLE test_gc_write (a int primary key auto_increment, b int, c int as (a+8) virtual)`, dbterror.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs("c").Error()) tk.MustExec(`CREATE TABLE test_gc_write (a int primary key auto_increment, b int, c int as (b+8) virtual)`) tk.MustExec(`CREATE TABLE test_gc_write_1 (a int primary key, b int, c int)`) @@ -2004,88 +907,71 @@ func (s *testSuiteP1) TestGeneratedColumnWrite(c *C) { {`insert into test_gc_write (b, c) select a, b from test_gc_write`, mysql.ErrBadGeneratedColumn}, } for _, tt := range tests { - _, err := tk.Exec(tt.stmt) if tt.err != 0 { - c.Assert(err, NotNil, Commentf("sql is `%v`", tt.stmt)) - terr := errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(tt.err), Commentf("sql is %v", tt.stmt)) + tk.MustGetErrCode(tt.stmt, tt.err) } else { - c.Assert(err, IsNil) + tk.MustExec(tt.stmt) } } } // TestGeneratedColumnRead tests select generated columns from table. // They should be calculated from their generation expressions. -func (s *testSuiteP1) TestGeneratedColumnRead(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestGeneratedColumnRead(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec(`CREATE TABLE test_gc_read(a int primary key, b int, c int as (a+b), d int as (a*b) stored, e int as (c*2))`) - result := tk.MustQuery(`SELECT generation_expression FROM information_schema.columns WHERE table_name = 'test_gc_read' AND column_name = 'd'`) - result.Check(testkit.Rows("`a` * `b`")) + tk.MustQuery(`SELECT generation_expression FROM information_schema.columns WHERE table_name = 'test_gc_read' AND column_name = 'd'`).Check(testkit.Rows("`a` * `b`")) // Insert only column a and b, leave c and d be calculated from them. tk.MustExec(`INSERT INTO test_gc_read (a, b) VALUES (0,null),(1,2),(3,4)`) - result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`)) + tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`).Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`)) tk.MustExec(`INSERT INTO test_gc_read SET a = 5, b = 10`) - result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `5 10 15 50 30`)) + tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`).Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `5 10 15 50 30`)) tk.MustExec(`REPLACE INTO test_gc_read (a, b) VALUES (5, 6)`) - result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `5 6 11 30 22`)) + tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`).Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `5 6 11 30 22`)) tk.MustExec(`INSERT INTO test_gc_read (a, b) VALUES (5, 8) ON DUPLICATE KEY UPDATE b = 9`) - result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `5 9 14 45 28`)) + tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`).Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `5 9 14 45 28`)) // Test select only-generated-column-without-dependences. - result = tk.MustQuery(`SELECT c, d FROM test_gc_read`) - result.Check(testkit.Rows(` `, `3 2`, `7 12`, `14 45`)) + tk.MustQuery(`SELECT c, d FROM test_gc_read`).Check(testkit.Rows(` `, `3 2`, `7 12`, `14 45`)) // Test select only virtual generated column that refers to other virtual generated columns. - result = tk.MustQuery(`SELECT e FROM test_gc_read`) - result.Check(testkit.Rows(``, `6`, `14`, `28`)) + tk.MustQuery(`SELECT e FROM test_gc_read`).Check(testkit.Rows(``, `6`, `14`, `28`)) // Test order of on duplicate key update list. tk.MustExec(`INSERT INTO test_gc_read (a, b) VALUES (5, 8) ON DUPLICATE KEY UPDATE a = 6, b = a`) - result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `6 6 12 36 24`)) + tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`).Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `6 6 12 36 24`)) tk.MustExec(`INSERT INTO test_gc_read (a, b) VALUES (6, 8) ON DUPLICATE KEY UPDATE b = 8, a = b`) - result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `8 8 16 64 32`)) + tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`).Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `8 8 16 64 32`)) // Test where-conditions on virtual/stored generated columns. - result = tk.MustQuery(`SELECT * FROM test_gc_read WHERE c = 7`) - result.Check(testkit.Rows(`3 4 7 12 14`)) + tk.MustQuery(`SELECT * FROM test_gc_read WHERE c = 7`).Check(testkit.Rows(`3 4 7 12 14`)) - result = tk.MustQuery(`SELECT * FROM test_gc_read WHERE d = 64`) - result.Check(testkit.Rows(`8 8 16 64 32`)) + tk.MustQuery(`SELECT * FROM test_gc_read WHERE d = 64`).Check(testkit.Rows(`8 8 16 64 32`)) - result = tk.MustQuery(`SELECT * FROM test_gc_read WHERE e = 6`) - result.Check(testkit.Rows(`1 2 3 2 6`)) + tk.MustQuery(`SELECT * FROM test_gc_read WHERE e = 6`).Check(testkit.Rows(`1 2 3 2 6`)) // Test update where-conditions on virtual/generated columns. tk.MustExec(`UPDATE test_gc_read SET a = a + 100 WHERE c = 7`) - result = tk.MustQuery(`SELECT * FROM test_gc_read WHERE c = 107`) - result.Check(testkit.Rows(`103 4 107 412 214`)) + tk.MustQuery(`SELECT * FROM test_gc_read WHERE c = 107`).Check(testkit.Rows(`103 4 107 412 214`)) // Test update where-conditions on virtual/generated columns. tk.MustExec(`UPDATE test_gc_read m SET m.a = m.a + 100 WHERE c = 107`) - result = tk.MustQuery(`SELECT * FROM test_gc_read WHERE c = 207`) - result.Check(testkit.Rows(`203 4 207 812 414`)) + tk.MustQuery(`SELECT * FROM test_gc_read WHERE c = 207`).Check(testkit.Rows(`203 4 207 812 414`)) tk.MustExec(`UPDATE test_gc_read SET a = a - 200 WHERE d = 812`) - result = tk.MustQuery(`SELECT * FROM test_gc_read WHERE d = 12`) - result.Check(testkit.Rows(`3 4 7 12 14`)) + tk.MustQuery(`SELECT * FROM test_gc_read WHERE d = 12`).Check(testkit.Rows(`3 4 7 12 14`)) tk.MustExec(`INSERT INTO test_gc_read set a = 4, b = d + 1`) - result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, + tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`).Check(testkit.Rows(`0 `, `1 2 3 2 6`, `3 4 7 12 14`, `4 `, `8 8 16 64 32`)) tk.MustExec(`DELETE FROM test_gc_read where a = 4`) @@ -2093,75 +979,58 @@ func (s *testSuiteP1) TestGeneratedColumnRead(c *C) { tk.MustExec(`CREATE TABLE test_gc_help(a int primary key, b int, c int, d int, e int)`) tk.MustExec(`INSERT INTO test_gc_help(a, b, c, d, e) SELECT * FROM test_gc_read`) - result = tk.MustQuery(`SELECT t1.* FROM test_gc_read t1 JOIN test_gc_help t2 ON t1.c = t2.c ORDER BY t1.a`) - result.Check(testkit.Rows(`1 2 3 2 6`, `3 4 7 12 14`, `8 8 16 64 32`)) + tk.MustQuery(`SELECT t1.* FROM test_gc_read t1 JOIN test_gc_help t2 ON t1.c = t2.c ORDER BY t1.a`).Check(testkit.Rows(`1 2 3 2 6`, `3 4 7 12 14`, `8 8 16 64 32`)) - result = tk.MustQuery(`SELECT t1.* FROM test_gc_read t1 JOIN test_gc_help t2 ON t1.d = t2.d ORDER BY t1.a`) - result.Check(testkit.Rows(`1 2 3 2 6`, `3 4 7 12 14`, `8 8 16 64 32`)) + tk.MustQuery(`SELECT t1.* FROM test_gc_read t1 JOIN test_gc_help t2 ON t1.d = t2.d ORDER BY t1.a`).Check(testkit.Rows(`1 2 3 2 6`, `3 4 7 12 14`, `8 8 16 64 32`)) - result = tk.MustQuery(`SELECT t1.* FROM test_gc_read t1 JOIN test_gc_help t2 ON t1.e = t2.e ORDER BY t1.a`) - result.Check(testkit.Rows(`1 2 3 2 6`, `3 4 7 12 14`, `8 8 16 64 32`)) + tk.MustQuery(`SELECT t1.* FROM test_gc_read t1 JOIN test_gc_help t2 ON t1.e = t2.e ORDER BY t1.a`).Check(testkit.Rows(`1 2 3 2 6`, `3 4 7 12 14`, `8 8 16 64 32`)) // Test generated column in subqueries. - result = tk.MustQuery(`SELECT * FROM test_gc_read t WHERE t.a not in (SELECT t.a FROM test_gc_read t where t.c > 5)`) - result.Sort().Check(testkit.Rows(`0 `, `1 2 3 2 6`)) + tk.MustQuery(`SELECT * FROM test_gc_read t WHERE t.a not in (SELECT t.a FROM test_gc_read t where t.c > 5)`).Sort().Check(testkit.Rows(`0 `, `1 2 3 2 6`)) + tk.MustQuery(`SELECT * FROM test_gc_read t WHERE t.c in (SELECT t.c FROM test_gc_read t where t.c > 5)`).Sort().Check(testkit.Rows(`3 4 7 12 14`, `8 8 16 64 32`)) - result = tk.MustQuery(`SELECT * FROM test_gc_read t WHERE t.c in (SELECT t.c FROM test_gc_read t where t.c > 5)`) - result.Sort().Check(testkit.Rows(`3 4 7 12 14`, `8 8 16 64 32`)) - - result = tk.MustQuery(`SELECT tt.b FROM test_gc_read tt WHERE tt.a = (SELECT max(t.a) FROM test_gc_read t WHERE t.c = tt.c) ORDER BY b`) - result.Check(testkit.Rows(`2`, `4`, `8`)) + tk.MustQuery(`SELECT tt.b FROM test_gc_read tt WHERE tt.a = (SELECT max(t.a) FROM test_gc_read t WHERE t.c = tt.c) ORDER BY b`).Check(testkit.Rows(`2`, `4`, `8`)) // Test aggregation on virtual/stored generated columns. - result = tk.MustQuery(`SELECT c, sum(a) aa, max(d) dd, sum(e) ee FROM test_gc_read GROUP BY c ORDER BY aa`) - result.Check(testkit.Rows(` 0 `, `3 1 2 6`, `7 3 12 14`, `16 8 64 32`)) + tk.MustQuery(`SELECT c, sum(a) aa, max(d) dd, sum(e) ee FROM test_gc_read GROUP BY c ORDER BY aa`).Check(testkit.Rows(` 0 `, `3 1 2 6`, `7 3 12 14`, `16 8 64 32`)) - result = tk.MustQuery(`SELECT a, sum(c), sum(d), sum(e) FROM test_gc_read GROUP BY a ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 3 2 6`, `3 7 12 14`, `8 16 64 32`)) + tk.MustQuery(`SELECT a, sum(c), sum(d), sum(e) FROM test_gc_read GROUP BY a ORDER BY a`).Check(testkit.Rows(`0 `, `1 3 2 6`, `3 7 12 14`, `8 16 64 32`)) // Test multi-update on generated columns. tk.MustExec(`UPDATE test_gc_read m, test_gc_read n SET m.b = m.b + 10, n.b = n.b + 10`) - result = tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`) - result.Check(testkit.Rows(`0 `, `1 12 13 12 26`, `3 14 17 42 34`, `8 18 26 144 52`)) + tk.MustQuery(`SELECT * FROM test_gc_read ORDER BY a`).Check(testkit.Rows(`0 `, `1 12 13 12 26`, `3 14 17 42 34`, `8 18 26 144 52`)) tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int)") tk.MustExec("insert into t values(8)") tk.MustExec("update test_gc_read set a = a+1 where a in (select a from t)") - result = tk.MustQuery("select * from test_gc_read order by a") - result.Check(testkit.Rows(`0 `, `1 12 13 12 26`, `3 14 17 42 34`, `9 18 27 162 54`)) + tk.MustQuery("select * from test_gc_read order by a").Check(testkit.Rows(`0 `, `1 12 13 12 26`, `3 14 17 42 34`, `9 18 27 162 54`)) // Test different types between generation expression and generated column. tk.MustExec(`CREATE TABLE test_gc_read_cast(a VARCHAR(255), b VARCHAR(255), c INT AS (JSON_EXTRACT(a, b)), d INT AS (JSON_EXTRACT(a, b)) STORED)`) tk.MustExec(`INSERT INTO test_gc_read_cast (a, b) VALUES ('{"a": "3"}', '$.a')`) - result = tk.MustQuery(`SELECT c, d FROM test_gc_read_cast`) - result.Check(testkit.Rows(`3 3`)) + tk.MustQuery(`SELECT c, d FROM test_gc_read_cast`).Check(testkit.Rows(`3 3`)) tk.MustExec(`CREATE TABLE test_gc_read_cast_1(a VARCHAR(255), b VARCHAR(255), c ENUM("red", "yellow") AS (JSON_UNQUOTE(JSON_EXTRACT(a, b))))`) tk.MustExec(`INSERT INTO test_gc_read_cast_1 (a, b) VALUES ('{"a": "yellow"}', '$.a')`) - result = tk.MustQuery(`SELECT c FROM test_gc_read_cast_1`) - result.Check(testkit.Rows(`yellow`)) + tk.MustQuery(`SELECT c FROM test_gc_read_cast_1`).Check(testkit.Rows(`yellow`)) tk.MustExec(`CREATE TABLE test_gc_read_cast_2( a JSON, b JSON AS (a->>'$.a'))`) tk.MustExec(`INSERT INTO test_gc_read_cast_2(a) VALUES ('{"a": "{ \\\"key\\\": \\\"\\u6d4b\\\" }"}')`) - result = tk.MustQuery(`SELECT b FROM test_gc_read_cast_2`) - result.Check(testkit.Rows(`{"key": "测"}`)) + tk.MustQuery(`SELECT b FROM test_gc_read_cast_2`).Check(testkit.Rows(`{"key": "测"}`)) tk.MustExec(`CREATE TABLE test_gc_read_cast_3( a JSON, b JSON AS (a->>'$.a'), c INT AS (b * 3.14) )`) tk.MustExec(`INSERT INTO test_gc_read_cast_3(a) VALUES ('{"a": "5"}')`) - result = tk.MustQuery(`SELECT c FROM test_gc_read_cast_3`) - result.Check(testkit.Rows(`16`)) + tk.MustQuery(`SELECT c FROM test_gc_read_cast_3`).Check(testkit.Rows(`16`)) - _, err := tk.Exec(`INSERT INTO test_gc_read_cast_1 (a, b) VALUES ('{"a": "invalid"}', '$.a')`) - c.Assert(err, NotNil) + require.Error(t, tk.ExecToErr(`INSERT INTO test_gc_read_cast_1 (a, b) VALUES ('{"a": "invalid"}', '$.a')`)) // Test read generated columns after drop some irrelevant column tk.MustExec(`DROP TABLE IF EXISTS test_gc_read_m`) tk.MustExec(`CREATE TABLE test_gc_read_m (a int primary key, b int, c int as (a+1), d int as (c*2))`) tk.MustExec(`INSERT INTO test_gc_read_m(a) values (1), (2)`) tk.MustExec(`ALTER TABLE test_gc_read_m DROP b`) - result = tk.MustQuery(`SELECT * FROM test_gc_read_m`) - result.Check(testkit.Rows(`1 2 4`, `2 3 6`)) + tk.MustQuery(`SELECT * FROM test_gc_read_m`).Check(testkit.Rows(`1 2 4`, `2 3 6`)) // Test not null generated columns. tk.MustExec(`CREATE TABLE test_gc_read_1(a int primary key, b int, c int as (a+b) not null, d int as (a*b) stored)`) @@ -2175,20 +1044,19 @@ func (s *testSuiteP1) TestGeneratedColumnRead(c *C) { {`insert into test_gc_read_2(a, b) values (1, null)`, mysql.ErrBadNull}, } for _, tt := range tests { - _, err := tk.Exec(tt.stmt) if tt.err != 0 { - c.Assert(err, NotNil) - terr := errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(tt.err)) + tk.MustGetErrCode(tt.stmt, tt.err) } else { - c.Assert(err, IsNil) + tk.MustExec(tt.stmt) } } } // TestGeneratedColumnRead tests generated columns using point get and batch point get -func (s *testSuiteP1) TestGeneratedColumnPointGet(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestGeneratedColumnPointGet(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists tu") tk.MustExec("CREATE TABLE tu(a int, b int, c int GENERATED ALWAYS AS (a + b) VIRTUAL, d int as (a * b) stored, " + @@ -2215,7174 +1083,436 @@ func (s *testSuiteP1) TestGeneratedColumnPointGet(c *C) { tk.MustExec("drop table if exists tu") } -func (s *testSuiteP2) TestToPBExpr(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestUnionAutoSignedCast(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a decimal(10,6), b decimal, index idx_b (b))") - tk.MustExec("set sql_mode = ''") - tk.MustExec("insert t values (1.1, 1.1)") - tk.MustExec("insert t values (2.4, 2.4)") - tk.MustExec("insert t values (3.3, 2.7)") - result := tk.MustQuery("select * from t where a < 2.399999") - result.Check(testkit.Rows("1.100000 1")) - result = tk.MustQuery("select * from t where a > 1.5") - result.Check(testkit.Rows("2.400000 2", "3.300000 3")) - result = tk.MustQuery("select * from t where a <= 1.1") - result.Check(testkit.Rows("1.100000 1")) - result = tk.MustQuery("select * from t where b >= 3") - result.Check(testkit.Rows("3.300000 3")) - result = tk.MustQuery("select * from t where not (b = 1)") - result.Check(testkit.Rows("2.400000 2", "3.300000 3")) - result = tk.MustQuery("select * from t where b&1 = a|1") - result.Check(testkit.Rows("1.100000 1")) - result = tk.MustQuery("select * from t where b != 2 and b <=> 3") - result.Check(testkit.Rows("3.300000 3")) - result = tk.MustQuery("select * from t where b in (3)") - result.Check(testkit.Rows("3.300000 3")) - result = tk.MustQuery("select * from t where b not in (1, 2)") - result.Check(testkit.Rows("3.300000 3")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a varchar(255), b int)") - tk.MustExec("insert t values ('abc123', 1)") - tk.MustExec("insert t values ('ab123', 2)") - result = tk.MustQuery("select * from t where a like 'ab%'") - result.Check(testkit.Rows("abc123 1", "ab123 2")) - result = tk.MustQuery("select * from t where a like 'ab_12'") - result.Check(nil) - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int primary key)") - tk.MustExec("insert t values (1)") - tk.MustExec("insert t values (2)") - result = tk.MustQuery("select * from t where not (a = 1)") - result.Check(testkit.Rows("2")) - result = tk.MustQuery("select * from t where not(not (a = 1))") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select * from t where not(a != 1 and a != 2)") - result.Check(testkit.Rows("1", "2")) -} + tk.MustExec("drop table if exists t1,t2") + tk.MustExec("create table t1 (id int, i int, b bigint, d double, dd decimal)") + tk.MustExec("create table t2 (id int, i int unsigned, b bigint unsigned, d double unsigned, dd decimal unsigned)") + tk.MustExec("insert into t1 values(1, -1, -1, -1.1, -1)") + tk.MustExec("insert into t2 values(2, 1, 1, 1.1, 1)") + tk.MustQuery("select * from t1 union select * from t2 order by id"). + Check(testkit.Rows("1 -1 -1 -1.1 -1", "2 1 1 1.1 1")) + tk.MustQuery("select id, i, b, d, dd from t2 union select id, i, b, d, dd from t1 order by id"). + Check(testkit.Rows("1 -1 -1 -1.1 -1", "2 1 1 1.1 1")) + tk.MustQuery("select id, i from t2 union select id, cast(i as unsigned int) from t1 order by id"). + Check(testkit.Rows("1 18446744073709551615", "2 1")) + tk.MustQuery("select dd from t2 union all select dd from t2"). + Check(testkit.Rows("1", "1")) -func (s *testSuiteP2) TestDatumXAPI(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a decimal(10,6), b decimal, index idx_b (b))") - tk.MustExec("set sql_mode = ''") - tk.MustExec("insert t values (1.1, 1.1)") - tk.MustExec("insert t values (2.2, 2.2)") - tk.MustExec("insert t values (3.3, 2.7)") - result := tk.MustQuery("select * from t where a > 1.5") - result.Check(testkit.Rows("2.200000 2", "3.300000 3")) - result = tk.MustQuery("select * from t where b > 1.5") - result.Check(testkit.Rows("2.200000 2", "3.300000 3")) + tk.MustExec("drop table if exists t3,t4") + tk.MustExec("create table t3 (id int, v int)") + tk.MustExec("create table t4 (id int, v double unsigned)") + tk.MustExec("insert into t3 values (1, -1)") + tk.MustExec("insert into t4 values (2, 1)") + tk.MustQuery("select id, v from t3 union select id, v from t4 order by id"). + Check(testkit.Rows("1 -1", "2 1")) + tk.MustQuery("select id, v from t4 union select id, v from t3 order by id"). + Check(testkit.Rows("1 -1", "2 1")) - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a time(3), b time, index idx_a (a))") - tk.MustExec("insert t values ('11:11:11', '11:11:11')") - tk.MustExec("insert t values ('11:11:12', '11:11:12')") - tk.MustExec("insert t values ('11:11:13', '11:11:13')") - result = tk.MustQuery("select * from t where a > '11:11:11.5'") - result.Check(testkit.Rows("11:11:12.000 11:11:12", "11:11:13.000 11:11:13")) - result = tk.MustQuery("select * from t where b > '11:11:11.5'") - result.Check(testkit.Rows("11:11:12.000 11:11:12", "11:11:13.000 11:11:13")) + tk.MustExec("drop table if exists t5,t6,t7") + tk.MustExec("create table t5 (id int, v bigint unsigned)") + tk.MustExec("create table t6 (id int, v decimal)") + tk.MustExec("create table t7 (id int, v bigint)") + tk.MustExec("insert into t5 values (1, 1)") + tk.MustExec("insert into t6 values (2, -1)") + tk.MustExec("insert into t7 values (3, -1)") + tk.MustQuery("select id, v from t5 union select id, v from t6 order by id"). + Check(testkit.Rows("1 1", "2 -1")) + tk.MustQuery("select id, v from t5 union select id, v from t7 union select id, v from t6 order by id"). + Check(testkit.Rows("1 1", "2 -1", "3 -1")) } -func (s *testSuiteP2) TestSQLMode(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestUpdateClustered(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a tinyint not null)") - tk.MustExec("set sql_mode = 'STRICT_TRANS_TABLES'") - _, err := tk.Exec("insert t values ()") - c.Check(err, NotNil) - - _, err = tk.Exec("insert t values ('1000')") - c.Check(err, NotNil) - tk.MustExec("create table if not exists tdouble (a double(3,2))") - _, err = tk.Exec("insert tdouble values (10.23)") - c.Check(err, NotNil) - - tk.MustExec("set sql_mode = ''") - tk.MustExec("insert t values ()") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1364 Field 'a' doesn't have a default value")) - tk.MustExec("insert t values (null)") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1048 Column 'a' cannot be null")) - tk.MustExec("insert ignore t values (null)") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1048 Column 'a' cannot be null")) - tk.MustExec("insert t select null") - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1048 Column 'a' cannot be null")) - tk.MustExec("insert t values (1000)") - tk.MustQuery("select * from t order by a").Check(testkit.Rows("0", "0", "0", "0", "127")) - - tk.MustExec("insert tdouble values (10.23)") - tk.MustQuery("select * from tdouble").Check(testkit.Rows("9.99")) - - tk.MustExec("set sql_mode = 'STRICT_TRANS_TABLES'") - tk.MustExec("set @@global.sql_mode = ''") - - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - tk2.MustExec("drop table if exists t2") - tk2.MustExec("create table t2 (a varchar(3))") - tk2.MustExec("insert t2 values ('abcd')") - tk2.MustQuery("select * from t2").Check(testkit.Rows("abc")) - - // session1 is still in strict mode. - _, err = tk.Exec("insert t2 values ('abcd')") - c.Check(err, NotNil) - // Restore original global strict mode. - tk.MustExec("set @@global.sql_mode = 'STRICT_TRANS_TABLES'") -} - -func (s *testSuiteP2) TestTableDual(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - result := tk.MustQuery("Select 1") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("Select 1 from dual") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("Select count(*) from dual") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("Select 1 from dual where 1") - result.Check(testkit.Rows("1")) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int primary key)") - tk.MustQuery("select t1.* from t t1, t t2 where t1.a=t2.a and 1=0").Check(testkit.Rows()) -} - -func (s *testSuiteP2) TestTableScan(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use information_schema") - result := tk.MustQuery("select * from schemata") - // There must be these tables: information_schema, mysql, performance_schema and test. - c.Assert(len(result.Rows()), GreaterEqual, 4) - tk.MustExec("use test") - tk.MustExec("create database mytest") - rowStr1 := fmt.Sprintf("%s %s %s %s %v %v", "def", "mysql", "utf8mb4", "utf8mb4_bin", nil, nil) - rowStr2 := fmt.Sprintf("%s %s %s %s %v %v", "def", "mytest", "utf8mb4", "utf8mb4_bin", nil, nil) - tk.MustExec("use information_schema") - result = tk.MustQuery("select * from schemata where schema_name = 'mysql'") - result.Check(testkit.Rows(rowStr1)) - result = tk.MustQuery("select * from schemata where schema_name like 'my%'") - result.Check(testkit.Rows(rowStr1, rowStr2)) - result = tk.MustQuery("select 1 from tables limit 1") - result.Check(testkit.Rows("1")) -} - -func (s *testSuiteP2) TestAdapterStatement(c *C) { - se, err := session.CreateSession4Test(s.store) - c.Check(err, IsNil) - se.GetSessionVars().TxnCtx.InfoSchema = domain.GetDomain(se).InfoSchema() - compiler := &executor.Compiler{Ctx: se} - stmtNode, err := s.ParseOneStmt("select 1", "", "") - c.Check(err, IsNil) - stmt, err := compiler.Compile(context.TODO(), stmtNode) - c.Check(err, IsNil) - c.Check(stmt.OriginText(), Equals, "select 1") - - stmtNode, err = s.ParseOneStmt("create table test.t (a int)", "", "") - c.Check(err, IsNil) - stmt, err = compiler.Compile(context.TODO(), stmtNode) - c.Check(err, IsNil) - c.Check(stmt.OriginText(), Equals, "create table test.t (a int)") -} - -func (s *testSuiteP2) TestIsPointGet(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use mysql") - ctx := tk.Se.(sessionctx.Context) - tests := map[string]bool{ - "select * from help_topic where name='aaa'": false, - "select 1 from help_topic where name='aaa'": false, - "select * from help_topic where help_topic_id=1": true, - "select * from help_topic where help_category_id=1": false, - } - - for sqlStr, result := range tests { - stmtNode, err := s.ParseOneStmt(sqlStr, "", "") - c.Check(err, IsNil) - preprocessorReturn := &plannercore.PreprocessorReturn{} - err = plannercore.Preprocess(ctx, stmtNode, plannercore.WithPreprocessorReturn(preprocessorReturn)) - c.Check(err, IsNil) - p, _, err := planner.Optimize(context.TODO(), ctx, stmtNode, preprocessorReturn.InfoSchema) - c.Check(err, IsNil) - ret, err := plannercore.IsPointGetWithPKOrUniqueKeyByAutoCommit(ctx, p) - c.Assert(err, IsNil) - c.Assert(ret, Equals, result) - } -} - -func (s *testSuiteP2) TestClusteredIndexIsPointGet(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_cluster_index_is_point_get;") - tk.MustExec("create database test_cluster_index_is_point_get;") - tk.MustExec("use test_cluster_index_is_point_get;") - - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a varchar(255), b int, c char(10), primary key (c, a));") - ctx := tk.Se.(sessionctx.Context) - - tests := map[string]bool{ - "select 1 from t where a='x'": false, - "select * from t where c='x'": false, - "select * from t where a='x' and c='x'": true, - "select * from t where a='x' and c='x' and b=1": false, - } - for sqlStr, result := range tests { - stmtNode, err := s.ParseOneStmt(sqlStr, "", "") - c.Check(err, IsNil) - preprocessorReturn := &plannercore.PreprocessorReturn{} - err = plannercore.Preprocess(ctx, stmtNode, plannercore.WithPreprocessorReturn(preprocessorReturn)) - c.Check(err, IsNil) - p, _, err := planner.Optimize(context.TODO(), ctx, stmtNode, preprocessorReturn.InfoSchema) - c.Check(err, IsNil) - ret, err := plannercore.IsPointGetWithPKOrUniqueKeyByAutoCommit(ctx, p) - c.Assert(err, IsNil) - c.Assert(ret, Equals, result) - } -} - -func (s *testSerialSuite) TestPointGetRepeatableRead(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("use test") - tk1.MustExec(`create table point_get (a int, b int, c int, - primary key k_a(a), - unique key k_b(b))`) - tk1.MustExec("insert into point_get values (1, 1, 1)") - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - - var ( - step1 = "github.com/pingcap/tidb/executor/pointGetRepeatableReadTest-step1" - step2 = "github.com/pingcap/tidb/executor/pointGetRepeatableReadTest-step2" - ) - - c.Assert(failpoint.Enable(step1, "return"), IsNil) - c.Assert(failpoint.Enable(step2, "pause"), IsNil) - - updateWaitCh := make(chan struct{}) - go func() { - ctx := context.WithValue(context.Background(), "pointGetRepeatableReadTest", updateWaitCh) - ctx = failpoint.WithHook(ctx, func(ctx context.Context, fpname string) bool { - return fpname == step1 || fpname == step2 - }) - rs, err := tk1.Se.Execute(ctx, "select c from point_get where b = 1") - c.Assert(err, IsNil) - result := tk1.ResultSetToResultWithCtx(ctx, rs[0], Commentf("execute sql fail")) - result.Check(testkit.Rows("1")) - }() - - <-updateWaitCh // Wait `POINT GET` first time `get` - c.Assert(failpoint.Disable(step1), IsNil) - tk2.MustExec("update point_get set b = 2, c = 2 where a = 1") - c.Assert(failpoint.Disable(step2), IsNil) -} - -func (s *testSerialSuite) TestBatchPointGetRepeatableRead(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("use test") - tk1.MustExec(`create table batch_point_get (a int, b int, c int, unique key k_b(a, b, c))`) - tk1.MustExec("insert into batch_point_get values (1, 1, 1), (2, 3, 4), (3, 4, 5)") - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - - var ( - step1 = "github.com/pingcap/tidb/executor/batchPointGetRepeatableReadTest-step1" - step2 = "github.com/pingcap/tidb/executor/batchPointGetRepeatableReadTest-step2" - ) - - c.Assert(failpoint.Enable(step1, "return"), IsNil) - c.Assert(failpoint.Enable(step2, "pause"), IsNil) - - updateWaitCh := make(chan struct{}) - go func() { - ctx := context.WithValue(context.Background(), "batchPointGetRepeatableReadTest", updateWaitCh) - ctx = failpoint.WithHook(ctx, func(ctx context.Context, fpname string) bool { - return fpname == step1 || fpname == step2 - }) - rs, err := tk1.Se.Execute(ctx, "select c from batch_point_get where (a, b, c) in ((1, 1, 1))") - c.Assert(err, IsNil) - result := tk1.ResultSetToResultWithCtx(ctx, rs[0], Commentf("execute sql fail")) - result.Check(testkit.Rows("1")) - }() - - <-updateWaitCh // Wait `POINT GET` first time `get` - c.Assert(failpoint.Disable(step1), IsNil) - tk2.MustExec("update batch_point_get set b = 2, c = 2 where a = 1") - c.Assert(failpoint.Disable(step2), IsNil) -} - -func (s *testSerialSuite) TestSplitRegionTimeout(c *C) { - c.Assert(failpoint.Enable("tikvclient/mockSplitRegionTimeout", `return(true)`), IsNil) - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a varchar(100),b int, index idx1(b,a))") - tk.MustExec(`split table t index idx1 by (10000,"abcd"),(10000000);`) - tk.MustExec(`set @@tidb_wait_split_region_timeout=1`) - // result 0 0 means split 0 region and 0 region finish scatter regions before timeout. - tk.MustQuery(`split table t between (0) and (10000) regions 10`).Check(testkit.Rows("0 0")) - err := failpoint.Disable("tikvclient/mockSplitRegionTimeout") - c.Assert(err, IsNil) - - // Test scatter regions timeout. - c.Assert(failpoint.Enable("tikvclient/mockScatterRegionTimeout", `return(true)`), IsNil) - tk.MustQuery(`split table t between (0) and (10000) regions 10`).Check(testkit.Rows("10 1")) - err = failpoint.Disable("tikvclient/mockScatterRegionTimeout") - c.Assert(err, IsNil) - - // Test pre-split with timeout. - tk.MustExec("drop table if exists t") - tk.MustExec("set @@global.tidb_scatter_region=1;") - c.Assert(failpoint.Enable("tikvclient/mockScatterRegionTimeout", `return(true)`), IsNil) - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) - start := time.Now() - tk.MustExec("create table t (a int, b int) partition by hash(a) partitions 5;") - c.Assert(time.Since(start).Seconds(), Less, 10.0) - err = failpoint.Disable("tikvclient/mockScatterRegionTimeout") - c.Assert(err, IsNil) -} - -func (s *testSuiteP2) TestRow(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c int, d int)") - tk.MustExec("insert t values (1, 1)") - tk.MustExec("insert t values (1, 3)") - tk.MustExec("insert t values (2, 1)") - tk.MustExec("insert t values (2, 3)") - result := tk.MustQuery("select * from t where (c, d) < (2,2)") - result.Check(testkit.Rows("1 1", "1 3", "2 1")) - result = tk.MustQuery("select * from t where (1,2,3) > (3,2,1)") - result.Check(testkit.Rows()) - result = tk.MustQuery("select * from t where row(1,2,3) > (3,2,1)") - result.Check(testkit.Rows()) - result = tk.MustQuery("select * from t where (c, d) = (select * from t where (c,d) = (1,1))") - result.Check(testkit.Rows("1 1")) - result = tk.MustQuery("select * from t where (c, d) = (select * from t k where (t.c,t.d) = (c,d))") - result.Check(testkit.Rows("1 1", "1 3", "2 1", "2 3")) - result = tk.MustQuery("select (1, 2, 3) < (2, 3, 4)") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select (2, 3, 4) <= (2, 3, 3)") - result.Check(testkit.Rows("0")) - result = tk.MustQuery("select (2, 3, 4) <= (2, 3, 4)") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select (2, 3, 4) <= (2, 1, 4)") - result.Check(testkit.Rows("0")) - result = tk.MustQuery("select (2, 3, 4) >= (2, 3, 4)") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select (2, 3, 4) = (2, 3, 4)") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select (2, 3, 4) != (2, 3, 4)") - result.Check(testkit.Rows("0")) - result = tk.MustQuery("select row(1, 1) in (row(1, 1))") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select row(1, 0) in (row(1, 1))") - result.Check(testkit.Rows("0")) - result = tk.MustQuery("select row(1, 1) in (select 1, 1)") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select row(1, 1) > row(1, 0)") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select row(1, 1) > (select 1, 0)") - result.Check(testkit.Rows("1")) - result = tk.MustQuery("select 1 > (select 1)") - result.Check(testkit.Rows("0")) - result = tk.MustQuery("select (select 1)") - result.Check(testkit.Rows("1")) - - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int, b int)") - tk.MustExec("insert t1 values (1,2),(1,null)") - tk.MustExec("drop table if exists t2") - tk.MustExec("create table t2 (c int, d int)") - tk.MustExec("insert t2 values (0,0)") - - tk.MustQuery("select * from t2 where (1,2) in (select * from t1)").Check(testkit.Rows("0 0")) - tk.MustQuery("select * from t2 where (1,2) not in (select * from t1)").Check(testkit.Rows()) - tk.MustQuery("select * from t2 where (1,1) not in (select * from t1)").Check(testkit.Rows()) - tk.MustQuery("select * from t2 where (1,null) in (select * from t1)").Check(testkit.Rows()) - tk.MustQuery("select * from t2 where (null,null) in (select * from t1)").Check(testkit.Rows()) - - tk.MustExec("delete from t1 where a=1 and b=2") - tk.MustQuery("select (1,1) in (select * from t2) from t1").Check(testkit.Rows("0")) - tk.MustQuery("select (1,1) not in (select * from t2) from t1").Check(testkit.Rows("1")) - tk.MustQuery("select (1,1) in (select 1,1 from t2) from t1").Check(testkit.Rows("1")) - tk.MustQuery("select (1,1) not in (select 1,1 from t2) from t1").Check(testkit.Rows("0")) - - // MySQL 5.7 returns 1 for these 2 queries, which is wrong. - tk.MustQuery("select (1,null) not in (select 1,1 from t2) from t1").Check(testkit.Rows("")) - tk.MustQuery("select (t1.a,null) not in (select 1,1 from t2) from t1").Check(testkit.Rows("")) - - tk.MustQuery("select (1,null) in (select * from t1)").Check(testkit.Rows("")) - tk.MustQuery("select (1,null) not in (select * from t1)").Check(testkit.Rows("")) -} - -func (s *testSuiteP2) TestColumnName(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c int, d int)") - // disable only full group by - tk.MustExec("set sql_mode='STRICT_TRANS_TABLES'") - rs, err := tk.Exec("select 1 + c, count(*) from t") - c.Check(err, IsNil) - fields := rs.Fields() - c.Check(len(fields), Equals, 2) - c.Check(fields[0].Column.Name.L, Equals, "1 + c") - c.Check(fields[0].ColumnAsName.L, Equals, "1 + c") - c.Check(fields[1].Column.Name.L, Equals, "count(*)") - c.Check(fields[1].ColumnAsName.L, Equals, "count(*)") - c.Assert(rs.Close(), IsNil) - rs, err = tk.Exec("select (c) > all (select c from t) from t") - c.Check(err, IsNil) - fields = rs.Fields() - c.Check(len(fields), Equals, 1) - c.Check(fields[0].Column.Name.L, Equals, "(c) > all (select c from t)") - c.Check(fields[0].ColumnAsName.L, Equals, "(c) > all (select c from t)") - c.Assert(rs.Close(), IsNil) - tk.MustExec("begin") - tk.MustExec("insert t values(1,1)") - rs, err = tk.Exec("select c d, d c from t") - c.Check(err, IsNil) - fields = rs.Fields() - c.Check(len(fields), Equals, 2) - c.Check(fields[0].Column.Name.L, Equals, "c") - c.Check(fields[0].ColumnAsName.L, Equals, "d") - c.Check(fields[1].Column.Name.L, Equals, "d") - c.Check(fields[1].ColumnAsName.L, Equals, "c") - c.Assert(rs.Close(), IsNil) - // Test case for query a column of a table. - // In this case, all attributes have values. - rs, err = tk.Exec("select c as a from t as t2") - c.Check(err, IsNil) - fields = rs.Fields() - c.Check(fields[0].Column.Name.L, Equals, "c") - c.Check(fields[0].ColumnAsName.L, Equals, "a") - c.Check(fields[0].Table.Name.L, Equals, "t") - c.Check(fields[0].TableAsName.L, Equals, "t2") - c.Check(fields[0].DBName.L, Equals, "test") - c.Assert(rs.Close(), IsNil) - // Test case for query a expression which only using constant inputs. - // In this case, the table, org_table and database attributes will all be empty. - rs, err = tk.Exec("select hour(1) as a from t as t2") - c.Check(err, IsNil) - fields = rs.Fields() - c.Check(fields[0].Column.Name.L, Equals, "a") - c.Check(fields[0].ColumnAsName.L, Equals, "a") - c.Check(fields[0].Table.Name.L, Equals, "") - c.Check(fields[0].TableAsName.L, Equals, "") - c.Check(fields[0].DBName.L, Equals, "") - c.Assert(rs.Close(), IsNil) - // Test case for query a column wrapped with parentheses and unary plus. - // In this case, the column name should be its original name. - rs, err = tk.Exec("select (c), (+c), +(c), +(+(c)), ++c from t") - c.Check(err, IsNil) - fields = rs.Fields() - for i := 0; i < 5; i++ { - c.Check(fields[i].Column.Name.L, Equals, "c") - c.Check(fields[i].ColumnAsName.L, Equals, "c") - } - c.Assert(rs.Close(), IsNil) - - // Test issue https://github.com/pingcap/tidb/issues/9639 . - // Both window function and expression appear in final result field. - tk.MustExec("set @@tidb_enable_window_function = 1") - rs, err = tk.Exec("select 1+1, row_number() over() num from t") - c.Check(err, IsNil) - fields = rs.Fields() - c.Assert(fields[0].Column.Name.L, Equals, "1+1") - c.Assert(fields[0].ColumnAsName.L, Equals, "1+1") - c.Assert(fields[1].Column.Name.L, Equals, "num") - c.Assert(fields[1].ColumnAsName.L, Equals, "num") - tk.MustExec("set @@tidb_enable_window_function = 0") - c.Assert(rs.Close(), IsNil) - - rs, err = tk.Exec("select if(1,c,c) from t;") - c.Check(err, IsNil) - fields = rs.Fields() - c.Assert(fields[0].Column.Name.L, Equals, "if(1,c,c)") - // It's a compatibility issue. Should be empty instead. - c.Assert(fields[0].ColumnAsName.L, Equals, "if(1,c,c)") - c.Assert(rs.Close(), IsNil) -} - -func (s *testSuiteP2) TestSelectVar(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (d int)") - tk.MustExec("insert into t values(1), (2), (1)") - // This behavior is different from MySQL. - result := tk.MustQuery("select @a, @a := d+1 from t") - result.Check(testkit.Rows(" 2", "2 3", "3 2")) - // Test for PR #10658. - tk.MustExec("select SQL_BIG_RESULT d from t group by d") - tk.MustExec("select SQL_SMALL_RESULT d from t group by d") - tk.MustExec("select SQL_BUFFER_RESULT d from t group by d") -} - -func (s *testSuiteP2) TestHistoryRead(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists history_read") - tk.MustExec("create table history_read (a int)") - tk.MustExec("insert history_read values (1)") - - // For mocktikv, safe point is not initialized, we manually insert it for snapshot to use. - safePointName := "tikv_gc_safe_point" - safePointValue := "20060102-15:04:05 -0700" - safePointComment := "All versions after safe point can be accessed. (DO NOT EDIT)" - updateSafePoint := fmt.Sprintf(`INSERT INTO mysql.tidb VALUES ('%[1]s', '%[2]s', '%[3]s') - ON DUPLICATE KEY - UPDATE variable_value = '%[2]s', comment = '%[3]s'`, safePointName, safePointValue, safePointComment) - tk.MustExec(updateSafePoint) - - // Set snapshot to a time before save point will fail. - _, err := tk.Exec("set @@tidb_snapshot = '2006-01-01 15:04:05.999999'") - c.Assert(terror.ErrorEqual(err, variable.ErrSnapshotTooOld), IsTrue, Commentf("err %v", err)) - // SnapshotTS Is not updated if check failed. - c.Assert(tk.Se.GetSessionVars().SnapshotTS, Equals, uint64(0)) - - // Setting snapshot to a time in the future will fail. (One day before the 2038 problem) - _, err = tk.Exec("set @@tidb_snapshot = '2038-01-18 03:14:07'") - c.Assert(err, ErrorMatches, "cannot set read timestamp to a future time") - // SnapshotTS Is not updated if check failed. - c.Assert(tk.Se.GetSessionVars().SnapshotTS, Equals, uint64(0)) - - curVer1, _ := s.store.CurrentVersion(kv.GlobalTxnScope) - time.Sleep(time.Millisecond) - snapshotTime := time.Now() - time.Sleep(time.Millisecond) - curVer2, _ := s.store.CurrentVersion(kv.GlobalTxnScope) - tk.MustExec("insert history_read values (2)") - tk.MustQuery("select * from history_read").Check(testkit.Rows("1", "2")) - tk.MustExec("set @@tidb_snapshot = '" + snapshotTime.Format("2006-01-02 15:04:05.999999") + "'") - ctx := tk.Se.(sessionctx.Context) - snapshotTS := ctx.GetSessionVars().SnapshotTS - c.Assert(snapshotTS, Greater, curVer1.Ver) - c.Assert(snapshotTS, Less, curVer2.Ver) - tk.MustQuery("select * from history_read").Check(testkit.Rows("1")) - _, err = tk.Exec("insert history_read values (2)") - c.Assert(err, NotNil) - _, err = tk.Exec("update history_read set a = 3 where a = 1") - c.Assert(err, NotNil) - _, err = tk.Exec("delete from history_read where a = 1") - c.Assert(err, NotNil) - tk.MustExec("set @@tidb_snapshot = ''") - tk.MustQuery("select * from history_read").Check(testkit.Rows("1", "2")) - tk.MustExec("insert history_read values (3)") - tk.MustExec("update history_read set a = 4 where a = 3") - tk.MustExec("delete from history_read where a = 1") - - time.Sleep(time.Millisecond) - snapshotTime = time.Now() - time.Sleep(time.Millisecond) - tk.MustExec("alter table history_read add column b int") - tk.MustExec("insert history_read values (8, 8), (9, 9)") - tk.MustQuery("select * from history_read order by a").Check(testkit.Rows("2 ", "4 ", "8 8", "9 9")) - tk.MustExec("set @@tidb_snapshot = '" + snapshotTime.Format("2006-01-02 15:04:05.999999") + "'") - tk.MustQuery("select * from history_read order by a").Check(testkit.Rows("2", "4")) - tsoStr := strconv.FormatUint(oracle.GoTimeToTS(snapshotTime), 10) - - tk.MustExec("set @@tidb_snapshot = '" + tsoStr + "'") - tk.MustQuery("select * from history_read order by a").Check(testkit.Rows("2", "4")) - - tk.MustExec("set @@tidb_snapshot = ''") - tk.MustQuery("select * from history_read order by a").Check(testkit.Rows("2 ", "4 ", "8 8", "9 9")) -} - -func (s *testSuite2) TestLowResolutionTSORead(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("set @@autocommit=1") - tk.MustExec("use test") - tk.MustExec("drop table if exists low_resolution_tso") - tk.MustExec("create table low_resolution_tso(a int)") - tk.MustExec("insert low_resolution_tso values (1)") - - // enable low resolution tso - c.Assert(tk.Se.GetSessionVars().LowResolutionTSO, IsFalse) - _, err := tk.Exec("set @@tidb_low_resolution_tso = 'on'") - c.Assert(err, IsNil) - c.Assert(tk.Se.GetSessionVars().LowResolutionTSO, IsTrue) - - time.Sleep(3 * time.Second) - tk.MustQuery("select * from low_resolution_tso").Check(testkit.Rows("1")) - _, err = tk.Exec("update low_resolution_tso set a = 2") - c.Assert(err, NotNil) - tk.MustExec("set @@tidb_low_resolution_tso = 'off'") - tk.MustExec("update low_resolution_tso set a = 2") - tk.MustQuery("select * from low_resolution_tso").Check(testkit.Rows("2")) -} - -func (s *testSuite2) TestStaleReadFutureTime(c *C) { - tk := testkit.NewTestKit(c, s.store) - // Setting tx_read_ts to a time in the future will fail. (One day before the 2038 problem) - _, err := tk.Exec("set @@tx_read_ts = '2038-01-18 03:14:07'") - c.Assert(err, ErrorMatches, "cannot set read timestamp to a future time") - // TxnReadTS Is not updated if check failed. - c.Assert(tk.Se.GetSessionVars().TxnReadTS.PeakTxnReadTS(), Equals, uint64(0)) -} - -func (s *testSuite) TestScanControlSelection(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int primary key, b int, c int, index idx_b(b))") - tk.MustExec("insert into t values (1, 1, 1), (2, 1, 1), (3, 1, 2), (4, 2, 3)") - tk.MustQuery("select (select count(1) k from t s where s.b = t1.c) from t t1").Sort().Check(testkit.Rows("0", "1", "3", "3")) -} - -func (s *testSuite) TestSimpleDAG(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int primary key, b int, c int)") - tk.MustExec("insert into t values (1, 1, 1), (2, 1, 1), (3, 1, 2), (4, 2, 3)") - tk.MustQuery("select a from t").Check(testkit.Rows("1", "2", "3", "4")) - tk.MustQuery("select * from t where a = 4").Check(testkit.Rows("4 2 3")) - tk.MustQuery("select a from t limit 1").Check(testkit.Rows("1")) - tk.MustQuery("select a from t order by a desc").Check(testkit.Rows("4", "3", "2", "1")) - tk.MustQuery("select a from t order by a desc limit 1").Check(testkit.Rows("4")) - tk.MustQuery("select a from t order by b desc limit 1").Check(testkit.Rows("4")) - tk.MustQuery("select a from t where a < 3").Check(testkit.Rows("1", "2")) - tk.MustQuery("select a from t where b > 1").Check(testkit.Rows("4")) - tk.MustQuery("select a from t where b > 1 and a < 3").Check(testkit.Rows()) - tk.MustQuery("select count(*) from t where b > 1 and a < 3").Check(testkit.Rows("0")) - tk.MustQuery("select count(*) from t").Check(testkit.Rows("4")) - tk.MustQuery("select count(*), c from t group by c order by c").Check(testkit.Rows("2 1", "1 2", "1 3")) - tk.MustQuery("select sum(c) as s from t group by b order by s").Check(testkit.Rows("3", "4")) - tk.MustQuery("select avg(a) as s from t group by b order by s").Check(testkit.Rows("2.0000", "4.0000")) - tk.MustQuery("select sum(distinct c) from t group by b").Check(testkit.Rows("3", "3")) - - tk.MustExec("create index i on t(c,b)") - tk.MustQuery("select a from t where c = 1").Check(testkit.Rows("1", "2")) - tk.MustQuery("select a from t where c = 1 and a < 2").Check(testkit.Rows("1")) - tk.MustQuery("select a from t where c = 1 order by a limit 1").Check(testkit.Rows("1")) - tk.MustQuery("select count(*) from t where c = 1 ").Check(testkit.Rows("2")) - tk.MustExec("create index i1 on t(b)") - tk.MustQuery("select c from t where b = 2").Check(testkit.Rows("3")) - tk.MustQuery("select * from t where b = 2").Check(testkit.Rows("4 2 3")) - tk.MustQuery("select count(*) from t where b = 1").Check(testkit.Rows("3")) - tk.MustQuery("select * from t where b = 1 and a > 1 limit 1").Check(testkit.Rows("2 1 1")) - - // Test time push down. - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (id int, c1 datetime);") - tk.MustExec("insert into t values (1, '2015-06-07 12:12:12')") - tk.MustQuery("select id from t where c1 = '2015-06-07 12:12:12'").Check(testkit.Rows("1")) - - // Test issue 17816 - tk.MustExec("drop table if exists t0") - tk.MustExec("CREATE TABLE t0(c0 INT)") - tk.MustExec("INSERT INTO t0 VALUES (100000)") - tk.MustQuery("SELECT * FROM t0 WHERE NOT SPACE(t0.c0)").Check(testkit.Rows("100000")) -} - -func (s *testSuite) TestTimestampTimeZone(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (ts timestamp)") - tk.MustExec("set time_zone = '+00:00'") - tk.MustExec("insert into t values ('2017-04-27 22:40:42')") - // The timestamp will get different value if time_zone session variable changes. - tests := []struct { - timezone string - expect string - }{ - {"+10:00", "2017-04-28 08:40:42"}, - {"-6:00", "2017-04-27 16:40:42"}, - } - for _, tt := range tests { - tk.MustExec(fmt.Sprintf("set time_zone = '%s'", tt.timezone)) - tk.MustQuery("select * from t").Check(testkit.Rows(tt.expect)) - } - - // For issue https://github.com/pingcap/tidb/issues/3467 - tk.MustExec("drop table if exists t1") - tk.MustExec(`CREATE TABLE t1 ( - id bigint(20) NOT NULL AUTO_INCREMENT, - uid int(11) DEFAULT NULL, - datetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - ip varchar(128) DEFAULT NULL, - PRIMARY KEY (id), - KEY i_datetime (datetime), - KEY i_userid (uid) - );`) - tk.MustExec(`INSERT INTO t1 VALUES (123381351,1734,"2014-03-31 08:57:10","127.0.0.1");`) - r := tk.MustQuery("select datetime from t1;") // Cover TableReaderExec - r.Check(testkit.Rows("2014-03-31 08:57:10")) - r = tk.MustQuery("select datetime from t1 where datetime='2014-03-31 08:57:10';") - r.Check(testkit.Rows("2014-03-31 08:57:10")) // Cover IndexReaderExec - r = tk.MustQuery("select * from t1 where datetime='2014-03-31 08:57:10';") - r.Check(testkit.Rows("123381351 1734 2014-03-31 08:57:10 127.0.0.1")) // Cover IndexLookupExec - - // For issue https://github.com/pingcap/tidb/issues/3485 - tk.MustExec("set time_zone = 'Asia/Shanghai'") - tk.MustExec("drop table if exists t1") - tk.MustExec(`CREATE TABLE t1 ( - id bigint(20) NOT NULL AUTO_INCREMENT, - datetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (id) - );`) - tk.MustExec(`INSERT INTO t1 VALUES (123381351,"2014-03-31 08:57:10");`) - r = tk.MustQuery(`select * from t1 where datetime="2014-03-31 08:57:10";`) - r.Check(testkit.Rows("123381351 2014-03-31 08:57:10")) - tk.MustExec(`alter table t1 add key i_datetime (datetime);`) - r = tk.MustQuery(`select * from t1 where datetime="2014-03-31 08:57:10";`) - r.Check(testkit.Rows("123381351 2014-03-31 08:57:10")) - r = tk.MustQuery(`select * from t1;`) - r.Check(testkit.Rows("123381351 2014-03-31 08:57:10")) - r = tk.MustQuery("select datetime from t1 where datetime='2014-03-31 08:57:10';") - r.Check(testkit.Rows("2014-03-31 08:57:10")) -} - -func (s *testSuite) TestTimestampDefaultValueTimeZone(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("set time_zone = '+08:00'") - tk.MustExec(`create table t (a int, b timestamp default "2019-01-17 14:46:14")`) - tk.MustExec("insert into t set a=1") - r := tk.MustQuery(`show create table t`) - r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '2019-01-17 14:46:14'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("set time_zone = '+00:00'") - tk.MustExec("insert into t set a=2") - r = tk.MustQuery(`show create table t`) - r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '2019-01-17 06:46:14'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - r = tk.MustQuery(`select a,b from t order by a`) - r.Check(testkit.Rows("1 2019-01-17 06:46:14", "2 2019-01-17 06:46:14")) - // Test the column's version is greater than ColumnInfoVersion1. - sctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(sctx).InfoSchema() - c.Assert(is, NotNil) - tb, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - tb.Cols()[1].Version = model.ColumnInfoVersion1 + 1 - tk.MustExec("insert into t set a=3") - r = tk.MustQuery(`select a,b from t order by a`) - r.Check(testkit.Rows("1 2019-01-17 06:46:14", "2 2019-01-17 06:46:14", "3 2019-01-17 06:46:14")) - tk.MustExec("delete from t where a=3") - // Change time zone back. - tk.MustExec("set time_zone = '+08:00'") - r = tk.MustQuery(`select a,b from t order by a`) - r.Check(testkit.Rows("1 2019-01-17 14:46:14", "2 2019-01-17 14:46:14")) - tk.MustExec("set time_zone = '-08:00'") - r = tk.MustQuery(`show create table t`) - r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '2019-01-16 22:46:14'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - - // test zero default value in multiple time zone. - defer tk.MustExec(fmt.Sprintf("set @@sql_mode='%s'", tk.MustQuery("select @@sql_mode").Rows()[0][0])) - tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';") - tk.MustExec("drop table if exists t") - tk.MustExec("set time_zone = '+08:00'") - tk.MustExec(`create table t (a int, b timestamp default "0000-00-00 00")`) - tk.MustExec("insert into t set a=1") - r = tk.MustQuery(`show create table t`) - r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '0000-00-00 00:00:00'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("set time_zone = '+00:00'") - tk.MustExec("insert into t set a=2") - r = tk.MustQuery(`show create table t`) - r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '0000-00-00 00:00:00'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustExec("set time_zone = '-08:00'") - tk.MustExec("insert into t set a=3") - r = tk.MustQuery(`show create table t`) - r.Check(testkit.Rows("t CREATE TABLE `t` (\n" + " `a` int(11) DEFAULT NULL,\n" + " `b` timestamp DEFAULT '0000-00-00 00:00:00'\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - r = tk.MustQuery(`select a,b from t order by a`) - r.Check(testkit.Rows("1 0000-00-00 00:00:00", "2 0000-00-00 00:00:00", "3 0000-00-00 00:00:00")) - - // test add timestamp column default current_timestamp. - tk.MustExec(`drop table if exists t`) - tk.MustExec(`set time_zone = 'Asia/Shanghai'`) - tk.MustExec(`create table t (a int)`) - tk.MustExec(`insert into t set a=1`) - tk.MustExec(`alter table t add column b timestamp not null default current_timestamp;`) - timeIn8 := tk.MustQuery("select b from t").Rows()[0][0] - tk.MustExec(`set time_zone = '+00:00'`) - timeIn0 := tk.MustQuery("select b from t").Rows()[0][0] - c.Assert(timeIn8 != timeIn0, IsTrue, Commentf("%v == %v", timeIn8, timeIn0)) - datumTimeIn8, err := expression.GetTimeValue(tk.Se, timeIn8, mysql.TypeTimestamp, 0) - c.Assert(err, IsNil) - tIn8To0 := datumTimeIn8.GetMysqlTime() - timeZoneIn8, err := time.LoadLocation("Asia/Shanghai") - c.Assert(err, IsNil) - err = tIn8To0.ConvertTimeZone(timeZoneIn8, time.UTC) - c.Assert(err, IsNil) - c.Assert(timeIn0 == tIn8To0.String(), IsTrue, Commentf("%v != %v", timeIn0, tIn8To0.String())) - - // test add index. - tk.MustExec(`alter table t add index(b);`) - tk.MustExec("admin check table t") - tk.MustExec(`set time_zone = '+05:00'`) - tk.MustExec("admin check table t") - - // 1. add a timestamp general column - // 2. add the index - tk.MustExec(`drop table if exists t`) - // change timezone - tk.MustExec(`set time_zone = 'Asia/Shanghai'`) - tk.MustExec(`create table t(a timestamp default current_timestamp)`) - tk.MustExec(`insert into t set a=now()`) - tk.MustExec(`alter table t add column b timestamp as (a+1) virtual;`) - // change timezone - tk.MustExec(`set time_zone = '+05:00'`) - tk.MustExec(`insert into t set a=now()`) - tk.MustExec(`alter table t add index(b);`) - tk.MustExec("admin check table t") - tk.MustExec(`set time_zone = '-03:00'`) - tk.MustExec("admin check table t") -} - -func (s *testSuite) TestTiDBCurrentTS(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustQuery("select @@tidb_current_ts").Check(testkit.Rows("0")) - tk.MustExec("begin") - rows := tk.MustQuery("select @@tidb_current_ts").Rows() - tsStr := rows[0][0].(string) - txn, err := tk.Se.Txn(true) - c.Assert(err, IsNil) - c.Assert(tsStr, Equals, fmt.Sprintf("%d", txn.StartTS())) - tk.MustExec("begin") - rows = tk.MustQuery("select @@tidb_current_ts").Rows() - newTsStr := rows[0][0].(string) - txn, err = tk.Se.Txn(true) - c.Assert(err, IsNil) - c.Assert(newTsStr, Equals, fmt.Sprintf("%d", txn.StartTS())) - c.Assert(newTsStr, Not(Equals), tsStr) - tk.MustExec("commit") - tk.MustQuery("select @@tidb_current_ts").Check(testkit.Rows("0")) - - _, err = tk.Exec("set @@tidb_current_ts = '1'") - c.Assert(terror.ErrorEqual(err, variable.ErrIncorrectScope), IsTrue, Commentf("err %v", err)) -} - -func (s *testSuite) TestTiDBLastTxnInfo(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int primary key)") - tk.MustQuery("select @@tidb_last_txn_info").Check(testkit.Rows("")) - - tk.MustExec("insert into t values (1)") - rows1 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() - c.Assert(rows1[0][0].(string), Greater, "0") - c.Assert(rows1[0][0].(string), Less, rows1[0][1].(string)) - - tk.MustExec("begin") - tk.MustQuery("select a from t where a = 1").Check(testkit.Rows("1")) - rows2 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), @@tidb_current_ts").Rows() - tk.MustExec("commit") - rows3 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() - c.Assert(rows2[0][0], Equals, rows1[0][0]) - c.Assert(rows2[0][1], Equals, rows1[0][1]) - c.Assert(rows3[0][0], Equals, rows1[0][0]) - c.Assert(rows3[0][1], Equals, rows1[0][1]) - c.Assert(rows2[0][1], Less, rows2[0][2]) - - tk.MustExec("begin") - tk.MustExec("update t set a = a + 1 where a = 1") - rows4 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), @@tidb_current_ts").Rows() - tk.MustExec("commit") - rows5 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() - c.Assert(rows4[0][0], Equals, rows1[0][0]) - c.Assert(rows4[0][1], Equals, rows1[0][1]) - c.Assert(rows4[0][2], Equals, rows5[0][0]) - c.Assert(rows4[0][1], Less, rows4[0][2]) - c.Assert(rows4[0][2], Less, rows5[0][1]) - - tk.MustExec("begin") - tk.MustExec("update t set a = a + 1 where a = 2") - tk.MustExec("rollback") - rows6 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() - c.Assert(rows6[0][0], Equals, rows5[0][0]) - c.Assert(rows6[0][1], Equals, rows5[0][1]) - - tk.MustExec("begin optimistic") - tk.MustExec("insert into t values (2)") - _, err := tk.Exec("commit") - c.Assert(err, NotNil) - rows7 := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts'), json_extract(@@tidb_last_txn_info, '$.error')").Rows() - c.Assert(rows7[0][0], Greater, rows5[0][0]) - c.Assert(rows7[0][1], Equals, "0") - c.Assert(strings.Contains(err.Error(), rows7[0][1].(string)), IsTrue) - - _, err = tk.Exec("set @@tidb_last_txn_info = '{}'") - c.Assert(terror.ErrorEqual(err, variable.ErrIncorrectScope), IsTrue, Commentf("err %v", err)) -} - -func (s *testSerialSuite) TestTiDBLastTxnInfoCommitMode(c *C) { - defer config.RestoreFunc()() - config.UpdateGlobal(func(conf *config.Config) { - conf.TiKVClient.AsyncCommit.SafeWindow = time.Second - }) - - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int primary key, v int)") - tk.MustExec("insert into t values (1, 1)") - - tk.MustExec("set @@tidb_enable_async_commit = 1") - tk.MustExec("set @@tidb_enable_1pc = 0") - tk.MustExec("update t set v = v + 1 where a = 1") - rows := tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() - c.Log(rows) - c.Assert(rows[0][0], Equals, `"async_commit"`) - c.Assert(rows[0][1], Equals, "false") - c.Assert(rows[0][2], Equals, "false") - - tk.MustExec("set @@tidb_enable_async_commit = 0") - tk.MustExec("set @@tidb_enable_1pc = 1") - tk.MustExec("update t set v = v + 1 where a = 1") - rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() - c.Assert(rows[0][0], Equals, `"1pc"`) - c.Assert(rows[0][1], Equals, "false") - c.Assert(rows[0][2], Equals, "false") - - tk.MustExec("set @@tidb_enable_async_commit = 0") - tk.MustExec("set @@tidb_enable_1pc = 0") - tk.MustExec("update t set v = v + 1 where a = 1") - rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() - c.Assert(rows[0][0], Equals, `"2pc"`) - c.Assert(rows[0][1], Equals, "false") - c.Assert(rows[0][2], Equals, "false") - - c.Assert(failpoint.Enable("tikvclient/invalidMaxCommitTS", "return"), IsNil) - defer func() { - c.Assert(failpoint.Disable("tikvclient/invalidMaxCommitTS"), IsNil) - }() - - tk.MustExec("set @@tidb_enable_async_commit = 1") - tk.MustExec("set @@tidb_enable_1pc = 0") - tk.MustExec("update t set v = v + 1 where a = 1") - rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() - c.Log(rows) - c.Assert(rows[0][0], Equals, `"2pc"`) - c.Assert(rows[0][1], Equals, "true") - c.Assert(rows[0][2], Equals, "false") - - tk.MustExec("set @@tidb_enable_async_commit = 0") - tk.MustExec("set @@tidb_enable_1pc = 1") - tk.MustExec("update t set v = v + 1 where a = 1") - rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() - c.Log(rows) - c.Assert(rows[0][0], Equals, `"2pc"`) - c.Assert(rows[0][1], Equals, "false") - c.Assert(rows[0][2], Equals, "true") - - tk.MustExec("set @@tidb_enable_async_commit = 1") - tk.MustExec("set @@tidb_enable_1pc = 1") - tk.MustExec("update t set v = v + 1 where a = 1") - rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.txn_commit_mode'), json_extract(@@tidb_last_txn_info, '$.async_commit_fallback'), json_extract(@@tidb_last_txn_info, '$.one_pc_fallback')").Rows() - c.Log(rows) - c.Assert(rows[0][0], Equals, `"2pc"`) - c.Assert(rows[0][1], Equals, "true") - c.Assert(rows[0][2], Equals, "true") -} - -func (s *testSuite) TestTiDBLastQueryInfo(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int primary key, v int)") - tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.start_ts')").Check(testkit.Rows("0 0")) - - toUint64 := func(str interface{}) uint64 { - res, err := strconv.ParseUint(str.(string), 10, 64) - c.Assert(err, IsNil) - return res - } - - tk.MustExec("select * from t") - rows := tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() - c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) - c.Assert(rows[0][0], Equals, rows[0][1]) - - tk.MustExec("insert into t values (1, 10)") - rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() - c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) - c.Assert(rows[0][0], Equals, rows[0][1]) - // tidb_last_txn_info is still valid after checking query info. - rows = tk.MustQuery("select json_extract(@@tidb_last_txn_info, '$.start_ts'), json_extract(@@tidb_last_txn_info, '$.commit_ts')").Rows() - c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) - c.Assert(rows[0][0].(string), Less, rows[0][1].(string)) - - tk.MustExec("begin pessimistic") - tk.MustExec("select * from t") - rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() - c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) - c.Assert(rows[0][0], Equals, rows[0][1]) - - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - tk2.MustExec("update t set v = 11 where a = 1") - - tk.MustExec("select * from t") - rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() - c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) - c.Assert(rows[0][0], Equals, rows[0][1]) - - tk.MustExec("update t set v = 12 where a = 1") - rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() - c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) - c.Assert(toUint64(rows[0][0]), Less, toUint64(rows[0][1])) - - tk.MustExec("commit") - - tk.MustExec("set transaction isolation level read committed") - tk.MustExec("begin pessimistic") - tk.MustExec("select * from t") - rows = tk.MustQuery("select json_extract(@@tidb_last_query_info, '$.start_ts'), json_extract(@@tidb_last_query_info, '$.for_update_ts')").Rows() - c.Assert(toUint64(rows[0][0]), Greater, uint64(0)) - c.Assert(toUint64(rows[0][0]), Less, toUint64(rows[0][1])) - - tk.MustExec("rollback") -} - -func (s *testSuite) TestSelectForUpdate(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("use test") - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use test") - - tk.MustExec("drop table if exists t, t1") - - txn, err := tk.Se.Txn(true) - c.Assert(kv.ErrInvalidTxn.Equal(err), IsTrue) - c.Assert(txn.Valid(), IsFalse) - tk.MustExec("create table t (c1 int, c2 int, c3 int)") - tk.MustExec("insert t values (11, 2, 3)") - tk.MustExec("insert t values (12, 2, 3)") - tk.MustExec("insert t values (13, 2, 3)") - - tk.MustExec("create table t1 (c1 int)") - tk.MustExec("insert t1 values (11)") - - // conflict - tk1.MustExec("begin") - tk1.MustQuery("select * from t where c1=11 for update") - - tk2.MustExec("begin") - tk2.MustExec("update t set c2=211 where c1=11") - tk2.MustExec("commit") - - _, err = tk1.Exec("commit") - c.Assert(err, NotNil) - - // no conflict for subquery. - tk1.MustExec("begin") - tk1.MustQuery("select * from t where exists(select null from t1 where t1.c1=t.c1) for update") - - tk2.MustExec("begin") - tk2.MustExec("update t set c2=211 where c1=12") - tk2.MustExec("commit") - - tk1.MustExec("commit") - - // not conflict - tk1.MustExec("begin") - tk1.MustQuery("select * from t where c1=11 for update") - - tk2.MustExec("begin") - tk2.MustExec("update t set c2=22 where c1=12") - tk2.MustExec("commit") - - tk1.MustExec("commit") - - // not conflict, auto commit - tk1.MustExec("set @@autocommit=1;") - tk1.MustQuery("select * from t where c1=11 for update") - - tk2.MustExec("begin") - tk2.MustExec("update t set c2=211 where c1=11") - tk2.MustExec("commit") - - tk1.MustExec("commit") - - // conflict - tk1.MustExec("begin") - tk1.MustQuery("select * from (select * from t for update) t join t1 for update") - - tk2.MustExec("begin") - tk2.MustExec("update t1 set c1 = 13") - tk2.MustExec("commit") - - _, err = tk1.Exec("commit") - c.Assert(err, NotNil) - -} - -func (s *testSuite) TestSelectForUpdateOf(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("use test") - - tk.MustExec("drop table if exists t, t1") - tk.MustExec("create table t (i int)") - tk.MustExec("create table t1 (i int)") - tk.MustExec("insert t values (1)") - tk.MustExec("insert t1 values (1)") - - tk.MustExec("begin pessimistic") - tk.MustQuery("select * from t, t1 where t.i = t1.i for update of t").Check(testkit.Rows("1 1")) - - tk1.MustExec("begin pessimistic") - - // no lock for t - tk1.MustQuery("select * from t1 for update").Check(testkit.Rows("1")) - - // meet lock for t1 - err := tk1.ExecToErr("select * from t for update nowait") - c.Assert(terror.ErrorEqual(err, error2.ErrLockAcquireFailAndNoWaitSet), IsTrue, Commentf("error: ", err)) - - // t1 rolled back, tk1 acquire the lock - tk.MustExec("rollback") - tk1.MustQuery("select * from t for update nowait").Check(testkit.Rows("1")) - - tk1.MustExec("rollback") -} - -func (s *testSuite) TestEmptyEnum(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (e enum('Y', 'N'))") - tk.MustExec("set sql_mode='STRICT_TRANS_TABLES'") - _, err := tk.Exec("insert into t values (0)") - c.Assert(terror.ErrorEqual(err, types.ErrTruncated), IsTrue, Commentf("err %v", err)) - _, err = tk.Exec("insert into t values ('abc')") - c.Assert(terror.ErrorEqual(err, types.ErrTruncated), IsTrue, Commentf("err %v", err)) - - tk.MustExec("set sql_mode=''") - tk.MustExec("insert into t values (0)") - tk.MustQuery("select * from t").Check(testkit.Rows("")) - tk.MustExec("insert into t values ('abc')") - tk.MustQuery("select * from t").Check(testkit.Rows("", "")) - tk.MustExec("insert into t values (null)") - tk.MustQuery("select * from t").Check(testkit.Rows("", "", "")) - - // Test https://github.com/pingcap/tidb/issues/29525. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (id int auto_increment primary key, c1 enum('a', '', 'c'));") - tk.MustExec("insert into t(c1) values (0);") - tk.MustQuery("select id, c1+0, c1 from t;").Check(testkit.Rows("1 0 ")) - tk.MustExec("alter table t change c1 c1 enum('a', '') not null;") - tk.MustQuery("select id, c1+0, c1 from t;").Check(testkit.Rows("1 0 ")) - tk.MustExec("insert into t(c1) values (0);") - tk.MustQuery("select id, c1+0, c1 from t;").Check(testkit.Rows("1 0 ", "2 0 ")) -} - -// TestIssue4024 This tests https://github.com/pingcap/tidb/issues/4024 -func (s *testSuite) TestIssue4024(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database test2") - tk.MustExec("use test2") - tk.MustExec("create table t(a int)") - tk.MustExec("insert into t values(1)") - tk.MustExec("use test") - tk.MustExec("create table t(a int)") - tk.MustExec("insert into t values(1)") - tk.MustExec("update t, test2.t set test2.t.a=2") - tk.MustQuery("select * from t").Check(testkit.Rows("1")) - tk.MustQuery("select * from test2.t").Check(testkit.Rows("2")) - tk.MustExec("update test.t, test2.t set test.t.a=3") - tk.MustQuery("select * from t").Check(testkit.Rows("3")) - tk.MustQuery("select * from test2.t").Check(testkit.Rows("2")) -} - -const ( - checkRequestOff = iota - checkRequestSyncLog - checkDDLAddIndexPriority -) - -type checkRequestClient struct { - tikv.Client - priority kvrpcpb.CommandPri - lowPriorityCnt uint32 - mu struct { - sync.RWMutex - checkFlags uint32 - syncLog bool - } -} - -func (c *checkRequestClient) getCheckPriority() kvrpcpb.CommandPri { - return (kvrpcpb.CommandPri)(atomic.LoadInt32((*int32)(&c.priority))) -} - -func (c *checkRequestClient) SendRequest(ctx context.Context, addr string, req *tikvrpc.Request, timeout time.Duration) (*tikvrpc.Response, error) { - resp, err := c.Client.SendRequest(ctx, addr, req, timeout) - c.mu.RLock() - checkFlags := c.mu.checkFlags - c.mu.RUnlock() - if checkFlags == checkRequestSyncLog { - switch req.Type { - case tikvrpc.CmdPrewrite, tikvrpc.CmdCommit: - c.mu.RLock() - syncLog := c.mu.syncLog - c.mu.RUnlock() - if syncLog != req.SyncLog { - return nil, errors.New("fail to set sync log") - } - } - } else if checkFlags == checkDDLAddIndexPriority { - if req.Type == tikvrpc.CmdScan { - if c.getCheckPriority() != req.Priority { - return nil, errors.New("fail to set priority") - } - } else if req.Type == tikvrpc.CmdPrewrite { - if c.getCheckPriority() == kvrpcpb.CommandPri_Low { - atomic.AddUint32(&c.lowPriorityCnt, 1) - } - } - } - return resp, err -} - -type testSuiteWithCliBaseCharset struct { - testSuiteWithCliBase -} - -type testSuiteWithCliBase struct { - store kv.Storage - dom *domain.Domain - cli *checkRequestClient -} - -type testSuite1 struct { - testSuiteWithCliBase -} - -type testSerialSuite2 struct { - testSuiteWithCliBase -} - -func (s *testSuiteWithCliBase) SetUpSuite(c *C) { - cli := &checkRequestClient{} - hijackClient := func(c tikv.Client) tikv.Client { - cli.Client = c - return cli - } - s.cli = cli - - var err error - s.store, err = mockstore.NewMockStore( - mockstore.WithClientHijacker(hijackClient), - ) - c.Assert(err, IsNil) - session.SetStatsLease(0) - s.dom, err = session.BootstrapSession(s.store) - c.Assert(err, IsNil) - s.dom.SetStatsUpdating(true) -} - -func (s *testSuiteWithCliBase) TearDownSuite(c *C) { - s.dom.Close() - s.store.Close() -} - -func (s *testSuiteWithCliBase) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show tables") - for _, tb := range r.Rows() { - tableName := tb[0] - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } -} - -func (s *testSuite1) TestAlterTableComment(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t_1") - tk.MustExec("create table t_1 (c1 int, c2 int, c3 int default 1, index (c1)) comment = 'test table';") - tk.MustExec("alter table `t_1` comment 'this is table comment';") - result := tk.MustQuery("select table_comment from information_schema.tables where table_name = 't_1';") - result.Check(testkit.Rows("this is table comment")) - tk.MustExec("alter table `t_1` comment 'table t comment';") - result = tk.MustQuery("select table_comment from information_schema.tables where table_name = 't_1';") - result.Check(testkit.Rows("table t comment")) -} - -func (s *testSuite) TestTimezonePushDown(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("create table t (ts timestamp)") - defer tk.MustExec("drop table t") - tk.MustExec(`insert into t values ("2018-09-13 10:02:06")`) - - systemTZ := timeutil.SystemLocation() - c.Assert(systemTZ.String(), Not(Equals), "System") - c.Assert(systemTZ.String(), Not(Equals), "Local") - ctx := context.Background() - count := 0 - ctx1 := context.WithValue(ctx, "CheckSelectRequestHook", func(req *kv.Request) { - count += 1 - dagReq := new(tipb.DAGRequest) - err := proto.Unmarshal(req.Data, dagReq) - c.Assert(err, IsNil) - c.Assert(dagReq.GetTimeZoneName(), Equals, systemTZ.String()) - }) - _, err := tk.Se.Execute(ctx1, `select * from t where ts = "2018-09-13 10:02:06"`) - c.Assert(err, IsNil) - - tk.MustExec(`set time_zone="System"`) - _, err = tk.Se.Execute(ctx1, `select * from t where ts = "2018-09-13 10:02:06"`) - c.Assert(err, IsNil) - - c.Assert(count, Equals, 2) // Make sure the hook function is called. -} - -func (s *testSuite) TestNotFillCacheFlag(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("create table t (id int primary key)") - defer tk.MustExec("drop table t") - tk.MustExec("insert into t values (1)") - - tests := []struct { - sql string - expect bool - }{ - {"select SQL_NO_CACHE * from t", true}, - {"select SQL_CACHE * from t", false}, - {"select * from t", false}, - } - count := 0 - ctx := context.Background() - for _, test := range tests { - ctx1 := context.WithValue(ctx, "CheckSelectRequestHook", func(req *kv.Request) { - count++ - if req.NotFillCache != test.expect { - c.Errorf("sql=%s, expect=%v, get=%v", test.sql, test.expect, req.NotFillCache) - } - }) - rs, err := tk.Se.Execute(ctx1, test.sql) - c.Assert(err, IsNil) - tk.ResultSetToResult(rs[0], Commentf("sql: %v", test.sql)) - } - c.Assert(count, Equals, len(tests)) // Make sure the hook function is called. -} - -func (s *testSuite1) TestSyncLog(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - cli := s.cli - cli.mu.Lock() - cli.mu.checkFlags = checkRequestSyncLog - cli.mu.syncLog = true - cli.mu.Unlock() - tk.MustExec("create table t (id int primary key)") - cli.mu.Lock() - cli.mu.syncLog = false - cli.mu.Unlock() - tk.MustExec("insert into t values (1)") - - cli.mu.Lock() - cli.mu.checkFlags = checkRequestOff - cli.mu.Unlock() -} - -func (s *testSuite) TestHandleTransfer(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("create table t(a int, index idx(a))") - tk.MustExec("insert into t values(1), (2), (4)") - tk.MustExec("begin") - tk.MustExec("update t set a = 3 where a = 4") - // test table scan read whose result need handle. - tk.MustQuery("select * from t ignore index(idx)").Check(testkit.Rows("1", "2", "3")) - tk.MustExec("insert into t values(4)") - // test single read whose result need handle - tk.MustQuery("select * from t use index(idx)").Check(testkit.Rows("1", "2", "3", "4")) - tk.MustQuery("select * from t use index(idx) order by a desc").Check(testkit.Rows("4", "3", "2", "1")) - tk.MustExec("update t set a = 5 where a = 3") - tk.MustQuery("select * from t use index(idx)").Check(testkit.Rows("1", "2", "4", "5")) - tk.MustExec("commit") - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int, b int, index idx(a))") - tk.MustExec("insert into t values(3, 3), (1, 1), (2, 2)") - // Second test double read. - tk.MustQuery("select * from t use index(idx) order by a").Check(testkit.Rows("1 1", "2 2", "3 3")) -} - -func (s *testSuite) TestBit(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c1 bit(2))") - tk.MustExec("insert into t values (0), (1), (2), (3)") - _, err := tk.Exec("insert into t values (4)") - c.Assert(err, NotNil) - _, err = tk.Exec("insert into t values ('a')") - c.Assert(err, NotNil) - r, err := tk.Exec("select * from t where c1 = 2") - c.Assert(err, IsNil) - req := r.NewChunk(nil) - err = r.Next(context.Background(), req) - c.Assert(err, IsNil) - c.Assert(types.BinaryLiteral(req.GetRow(0).GetBytes(0)), DeepEquals, types.NewBinaryLiteralFromUint(2, -1)) - r.Close() - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c1 bit(31))") - tk.MustExec("insert into t values (0x7fffffff)") - _, err = tk.Exec("insert into t values (0x80000000)") - c.Assert(err, NotNil) - _, err = tk.Exec("insert into t values (0xffffffff)") - c.Assert(err, NotNil) - tk.MustExec("insert into t values ('123')") - tk.MustExec("insert into t values ('1234')") - _, err = tk.Exec("insert into t values ('12345)") - c.Assert(err, NotNil) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c1 bit(62))") - tk.MustExec("insert into t values ('12345678')") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c1 bit(61))") - _, err = tk.Exec("insert into t values ('12345678')") - c.Assert(err, NotNil) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c1 bit(32))") - tk.MustExec("insert into t values (0x7fffffff)") - tk.MustExec("insert into t values (0xffffffff)") - _, err = tk.Exec("insert into t values (0x1ffffffff)") - c.Assert(err, NotNil) - tk.MustExec("insert into t values ('1234')") - _, err = tk.Exec("insert into t values ('12345')") - c.Assert(err, NotNil) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c1 bit(64))") - tk.MustExec("insert into t values (0xffffffffffffffff)") - tk.MustExec("insert into t values ('12345678')") - _, err = tk.Exec("insert into t values ('123456789')") - c.Assert(err, NotNil) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c1 bit(64))") - tk.MustExec("insert into t values (0xffffffffffffffff)") - tk.MustExec("insert into t values ('12345678')") - tk.MustQuery("select * from t where c1").Check(testkit.Rows("\xff\xff\xff\xff\xff\xff\xff\xff", "12345678")) -} - -func (s *testSuite) TestEnum(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c enum('a', 'b', 'c'))") - tk.MustExec("insert into t values ('a'), (2), ('c')") - tk.MustQuery("select * from t where c = 'a'").Check(testkit.Rows("a")) - - tk.MustQuery("select c + 1 from t where c = 2").Check(testkit.Rows("3")) - - tk.MustExec("delete from t") - tk.MustExec("insert into t values ()") - tk.MustExec("insert into t values (null), ('1')") - tk.MustQuery("select c + 1 from t where c = 1").Check(testkit.Rows("2")) - - tk.MustExec("delete from t") - tk.MustExec("insert into t values(1), (2), (3)") - tk.MustQuery("select * from t where c").Check(testkit.Rows("a", "b", "c")) -} - -func (s *testSuite) TestSet(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (c set('a', 'b', 'c'))") - tk.MustExec("insert into t values ('a'), (2), ('c'), ('a,b'), ('b,a')") - tk.MustQuery("select * from t where c = 'a'").Check(testkit.Rows("a")) - - tk.MustQuery("select * from t where c = 'a,b'").Check(testkit.Rows("a,b", "a,b")) - - tk.MustQuery("select c + 1 from t where c = 2").Check(testkit.Rows("3")) - - tk.MustExec("delete from t") - tk.MustExec("insert into t values ()") - tk.MustExec("insert into t values (null), ('1')") - tk.MustQuery("select c + 1 from t where c = 1").Check(testkit.Rows("2")) - - tk.MustExec("delete from t") - tk.MustExec("insert into t values(3)") - tk.MustQuery("select * from t where c").Check(testkit.Rows("a,b")) -} - -func (s *testSuite) TestSubqueryInValues(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (id int, name varchar(20))") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (gid int)") - - tk.MustExec("insert into t1 (gid) value (1)") - tk.MustExec("insert into t (id, name) value ((select gid from t1) ,'asd')") - tk.MustQuery("select * from t").Check(testkit.Rows("1 asd")) -} - -func (s *testSuite) TestEnhancedRangeAccess(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int primary key, b int)") - tk.MustExec("insert into t values(1, 2), (2, 1)") - tk.MustQuery("select * from t where (a = 1 and b = 2) or (a = 2 and b = 1)").Check(testkit.Rows("1 2", "2 1")) - tk.MustQuery("select * from t where (a = 1 and b = 1) or (a = 2 and b = 2)").Check(nil) -} - -// TestMaxInt64Handle Issue #4810 -func (s *testSuite) TestMaxInt64Handle(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(id bigint, PRIMARY KEY (id))") - tk.MustExec("insert into t values(9223372036854775807)") - tk.MustExec("select * from t where id = 9223372036854775807") - tk.MustQuery("select * from t where id = 9223372036854775807;").Check(testkit.Rows("9223372036854775807")) - tk.MustQuery("select * from t").Check(testkit.Rows("9223372036854775807")) - _, err := tk.Exec("insert into t values(9223372036854775807)") - c.Assert(err, NotNil) - tk.MustExec("delete from t where id = 9223372036854775807") - tk.MustQuery("select * from t").Check(nil) -} - -func (s *testSuite) TestTableScanWithPointRanges(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(id int, PRIMARY KEY (id))") - tk.MustExec("insert into t values(1), (5), (10)") - tk.MustQuery("select * from t where id in(1, 2, 10)").Check(testkit.Rows("1", "10")) -} - -func (s *testSuite) TestUnsignedPk(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(id bigint unsigned primary key)") - var num1, num2 uint64 = math.MaxInt64 + 1, math.MaxInt64 + 2 - tk.MustExec(fmt.Sprintf("insert into t values(%v), (%v), (1), (2)", num1, num2)) - num1Str := strconv.FormatUint(num1, 10) - num2Str := strconv.FormatUint(num2, 10) - tk.MustQuery("select * from t order by id").Check(testkit.Rows("1", "2", num1Str, num2Str)) - tk.MustQuery("select * from t where id not in (2)").Check(testkit.Rows(num1Str, num2Str, "1")) - tk.MustExec("drop table t") - tk.MustExec("create table t(a bigint unsigned primary key, b int, index idx(b))") - tk.MustExec("insert into t values(9223372036854775808, 1), (1, 1)") - tk.MustQuery("select * from t use index(idx) where b = 1 and a < 2").Check(testkit.Rows("1 1")) - tk.MustQuery("select * from t use index(idx) where b = 1 order by b, a").Check(testkit.Rows("1 1", "9223372036854775808 1")) -} - -func (s *testSuite) TestSignedCommonHandle(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(k1 int, k2 int, primary key(k1, k2))") - tk.MustExec("insert into t(k1, k2) value(-100, 1), (-50, 1), (0, 0), (1, 1), (3, 3)") - tk.MustQuery("select k1 from t order by k1").Check(testkit.Rows("-100", "-50", "0", "1", "3")) - tk.MustQuery("select k1 from t order by k1 desc").Check(testkit.Rows("3", "1", "0", "-50", "-100")) - tk.MustQuery("select k1 from t where k1 < -51").Check(testkit.Rows("-100")) - tk.MustQuery("select k1 from t where k1 < -1").Check(testkit.Rows("-100", "-50")) - tk.MustQuery("select k1 from t where k1 <= 0").Check(testkit.Rows("-100", "-50", "0")) - tk.MustQuery("select k1 from t where k1 < 2").Check(testkit.Rows("-100", "-50", "0", "1")) - tk.MustQuery("select k1 from t where k1 < -1 and k1 > -90").Check(testkit.Rows("-50")) -} - -func (s *testSuite) TestIssue5666(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("set @@profiling=1") - tk.MustQuery("SELECT QUERY_ID, SUM(DURATION) AS SUM_DURATION FROM INFORMATION_SCHEMA.PROFILING GROUP BY QUERY_ID;").Check(testkit.Rows("0 0")) -} - -func (s *testSuite) TestIssue5341(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop table if exists test.t") - tk.MustExec("create table test.t(a char)") - tk.MustExec("insert into test.t value('a')") - tk.MustQuery("select * from test.t where a < 1 order by a limit 0;").Check(testkit.Rows()) -} - -func (s *testSuite) TestContainDotColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test") - tk.MustExec("drop table if exists test.t1") - tk.MustExec("create table test.t1(t1.a char)") - tk.MustExec("drop table if exists t2") - tk.MustExec("create table t2(a char, t2.b int)") - - tk.MustExec("drop table if exists t3") - _, err := tk.Exec("create table t3(s.a char);") - terr := errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.ErrWrongTableName)) -} - -func (s *testSuite) TestCheckIndex(c *C) { - s.ctx = mock.NewContext() - s.ctx.Store = s.store - se, err := session.CreateSession4Test(s.store) - c.Assert(err, IsNil) - defer se.Close() - - _, err = se.Execute(context.Background(), "create database test_admin") - c.Assert(err, IsNil) - _, err = se.Execute(context.Background(), "use test_admin") - c.Assert(err, IsNil) - _, err = se.Execute(context.Background(), "create table t (pk int primary key, c int default 1, c1 int default 1, unique key c(c))") - c.Assert(err, IsNil) - is := s.domain.InfoSchema() - db := model.NewCIStr("test_admin") - dbInfo, ok := is.SchemaByName(db) - c.Assert(ok, IsTrue) - tblName := model.NewCIStr("t") - tbl, err := is.TableByName(db, tblName) - c.Assert(err, IsNil) - tbInfo := tbl.Meta() - - alloc := autoid.NewAllocator(s.store, dbInfo.ID, tbInfo.ID, false, autoid.RowIDAllocType) - tb, err := tables.TableFromMeta(autoid.NewAllocators(alloc), tbInfo) - c.Assert(err, IsNil) - - _, err = se.Execute(context.Background(), "admin check index t c") - c.Assert(err, IsNil) - - _, err = se.Execute(context.Background(), "admin check index t C") - c.Assert(err, IsNil) - - // set data to: - // index data (handle, data): (1, 10), (2, 20) - // table data (handle, data): (1, 10), (2, 20) - recordVal1 := types.MakeDatums(int64(1), int64(10), int64(11)) - recordVal2 := types.MakeDatums(int64(2), int64(20), int64(21)) - c.Assert(s.ctx.NewTxn(context.Background()), IsNil) - _, err = tb.AddRecord(s.ctx, recordVal1) - c.Assert(err, IsNil) - _, err = tb.AddRecord(s.ctx, recordVal2) - c.Assert(err, IsNil) - txn, err := s.ctx.Txn(true) - c.Assert(err, IsNil) - c.Assert(txn.Commit(context.Background()), IsNil) - - mockCtx := mock.NewContext() - idx := tb.Indices()[0] - sc := &stmtctx.StatementContext{TimeZone: time.Local} - - _, err = se.Execute(context.Background(), "admin check index t idx_inexistent") - c.Assert(strings.Contains(err.Error(), "not exist"), IsTrue) - - // set data to: - // index data (handle, data): (1, 10), (2, 20), (3, 30) - // table data (handle, data): (1, 10), (2, 20), (4, 40) - txn, err = s.store.Begin() - c.Assert(err, IsNil) - _, err = idx.Create(mockCtx, txn, types.MakeDatums(int64(30)), kv.IntHandle(3), nil) - c.Assert(err, IsNil) - key := tablecodec.EncodeRowKey(tb.Meta().ID, kv.IntHandle(4).Encoded()) - setColValue(c, txn, key, types.NewDatum(int64(40))) - err = txn.Commit(context.Background()) - c.Assert(err, IsNil) - _, err = se.Execute(context.Background(), "admin check index t c") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[admin:8223]data inconsistency in table: t, index: c, handle: 3, index-values:\"handle: 3, values: [KindInt64 30 KindInt64 3]\" != record-values:\"\"") - - // set data to: - // index data (handle, data): (1, 10), (2, 20), (3, 30), (4, 40) - // table data (handle, data): (1, 10), (2, 20), (4, 40) - txn, err = s.store.Begin() - c.Assert(err, IsNil) - _, err = idx.Create(mockCtx, txn, types.MakeDatums(int64(40)), kv.IntHandle(4), nil) - c.Assert(err, IsNil) - err = txn.Commit(context.Background()) - c.Assert(err, IsNil) - _, err = se.Execute(context.Background(), "admin check index t c") - c.Assert(strings.Contains(err.Error(), "table count 3 != index(c) count 4"), IsTrue) - - // set data to: - // index data (handle, data): (1, 10), (4, 40) - // table data (handle, data): (1, 10), (2, 20), (4, 40) - txn, err = s.store.Begin() - c.Assert(err, IsNil) - err = idx.Delete(sc, txn, types.MakeDatums(int64(30)), kv.IntHandle(3)) - c.Assert(err, IsNil) - err = idx.Delete(sc, txn, types.MakeDatums(int64(20)), kv.IntHandle(2)) - c.Assert(err, IsNil) - err = txn.Commit(context.Background()) - c.Assert(err, IsNil) - _, err = se.Execute(context.Background(), "admin check index t c") - c.Assert(strings.Contains(err.Error(), "table count 3 != index(c) count 2"), IsTrue) - - // TODO: pass the case below: - // set data to: - // index data (handle, data): (1, 10), (4, 40), (2, 30) - // table data (handle, data): (1, 10), (2, 20), (4, 40) -} - -func setColValue(c *C, txn kv.Transaction, key kv.Key, v types.Datum) { - row := []types.Datum{v, {}} - colIDs := []int64{2, 3} - sc := &stmtctx.StatementContext{TimeZone: time.Local} - rd := rowcodec.Encoder{Enable: true} - value, err := tablecodec.EncodeRow(sc, row, colIDs, nil, nil, &rd) - c.Assert(err, IsNil) - err = txn.Set(key, value) - c.Assert(err, IsNil) -} - -func (s *testSuite) TestCheckTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - - // Test 'admin check table' when the table has a unique index with null values. - tk.MustExec("use test") - tk.MustExec("drop table if exists admin_test;") - tk.MustExec("create table admin_test (c1 int, c2 int, c3 int default 1, index (c1), unique key(c2));") - tk.MustExec("insert admin_test (c1, c2) values (1, 1), (2, 2), (NULL, NULL);") - tk.MustExec("admin check table admin_test;") -} - -func (s *testSuite) TestCheckTableClusterIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test;") - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - tk.MustExec("drop table if exists admin_test;") - tk.MustExec("create table admin_test (c1 int, c2 int, c3 int default 1, primary key (c1, c2), index (c1), unique key(c2));") - tk.MustExec("insert admin_test (c1, c2) values (1, 1), (2, 2), (3, 3);") - tk.MustExec("admin check table admin_test;") -} - -func (s *testSuite) TestCoprocessorStreamingFlag(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test") - tk.MustExec("create table t (id int, value int, index idx(id))") - // Add some data to make statistics work. - for i := 0; i < 100; i++ { - tk.MustExec(fmt.Sprintf("insert into t values (%d, %d)", i, i)) - } - - tests := []struct { - sql string - expect bool - }{ - {"select * from t", true}, // TableReader - {"select * from t where id = 5", true}, // IndexLookup - {"select * from t where id > 5", true}, // Filter - {"select * from t limit 3", false}, // Limit - {"select avg(id) from t", false}, // Aggregate - {"select * from t order by value limit 3", false}, // TopN - } - - ctx := context.Background() - for _, test := range tests { - ctx1 := context.WithValue(ctx, "CheckSelectRequestHook", func(req *kv.Request) { - if req.Streaming != test.expect { - c.Errorf("sql=%s, expect=%v, get=%v", test.sql, test.expect, req.Streaming) - } - }) - rs, err := tk.Se.Execute(ctx1, test.sql) - c.Assert(err, IsNil) - tk.ResultSetToResult(rs[0], Commentf("sql: %v", test.sql)) - } -} - -func (s *testSuite) TestIncorrectLimitArg(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec(`use test;`) - tk.MustExec(`drop table if exists t;`) - tk.MustExec(`create table t(a bigint);`) - tk.MustExec(`prepare stmt1 from 'select * from t limit ?';`) - tk.MustExec(`prepare stmt2 from 'select * from t limit ?, ?';`) - tk.MustExec(`set @a = -1;`) - tk.MustExec(`set @b = 1;`) - - var err error - _, err = tk.Se.Execute(context.TODO(), `execute stmt1 using @a;`) - c.Assert(err.Error(), Equals, `[planner:1210]Incorrect arguments to LIMIT`) - - _, err = tk.Se.Execute(context.TODO(), `execute stmt2 using @b, @a;`) - c.Assert(err.Error(), Equals, `[planner:1210]Incorrect arguments to LIMIT`) -} - -func (s *testSuite) TestLimit(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test;`) - tk.MustExec(`drop table if exists t;`) - tk.MustExec(`create table t(a bigint, b bigint);`) - tk.MustExec(`insert into t values(1, 1), (2, 2), (3, 30), (4, 40), (5, 5), (6, 6);`) - tk.MustQuery(`select * from t order by a limit 1, 1;`).Check(testkit.Rows( - "2 2", - )) - tk.MustQuery(`select * from t order by a limit 1, 2;`).Check(testkit.Rows( - "2 2", - "3 30", - )) - tk.MustQuery(`select * from t order by a limit 1, 3;`).Check(testkit.Rows( - "2 2", - "3 30", - "4 40", - )) - tk.MustQuery(`select * from t order by a limit 1, 4;`).Check(testkit.Rows( - "2 2", - "3 30", - "4 40", - "5 5", - )) - - // test inline projection - tk.MustQuery(`select a from t where a > 0 limit 1, 1;`).Check(testkit.Rows( - "2", - )) - tk.MustQuery(`select a from t where a > 0 limit 1, 2;`).Check(testkit.Rows( - "2", - "3", - )) - tk.MustQuery(`select b from t where a > 0 limit 1, 3;`).Check(testkit.Rows( - "2", - "30", - "40", - )) - tk.MustQuery(`select b from t where a > 0 limit 1, 4;`).Check(testkit.Rows( - "2", - "30", - "40", - "5", - )) - - // test @@tidb_init_chunk_size=2 - tk.MustExec(`set @@tidb_init_chunk_size=2;`) - tk.MustQuery(`select * from t where a > 0 limit 2, 1;`).Check(testkit.Rows( - "3 30", - )) - tk.MustQuery(`select * from t where a > 0 limit 2, 2;`).Check(testkit.Rows( - "3 30", - "4 40", - )) - tk.MustQuery(`select * from t where a > 0 limit 2, 3;`).Check(testkit.Rows( - "3 30", - "4 40", - "5 5", - )) - tk.MustQuery(`select * from t where a > 0 limit 2, 4;`).Check(testkit.Rows( - "3 30", - "4 40", - "5 5", - "6 6", - )) - - // test inline projection - tk.MustQuery(`select a from t order by a limit 2, 1;`).Check(testkit.Rows( - "3", - )) - tk.MustQuery(`select b from t order by a limit 2, 2;`).Check(testkit.Rows( - "30", - "40", - )) - tk.MustQuery(`select a from t order by a limit 2, 3;`).Check(testkit.Rows( - "3", - "4", - "5", - )) - tk.MustQuery(`select b from t order by a limit 2, 4;`).Check(testkit.Rows( - "30", - "40", - "5", - "6", - )) -} - -func (s *testSuite) TestCoprocessorStreamingWarning(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a double)") - tk.MustExec("insert into t value(1.2)") - tk.MustExec("set @@session.tidb_enable_streaming = 1") - - result := tk.MustQuery("select * from t where a/0 > 1") - result.Check(testkit.Rows()) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1365|Division by 0")) -} - -func (s *testSuite3) TestYearTypeDeleteIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a YEAR, PRIMARY KEY(a));") - tk.MustExec("insert into t set a = '2151';") - tk.MustExec("delete from t;") - tk.MustExec("admin check table t") -} - -func (s *testSuite3) TestForSelectScopeInUnion(c *C) { - // A union B for update, the "for update" option belongs to union statement, so - // it should works on both A and B. - tk1 := testkit.NewTestKit(c, s.store) - tk2 := testkit.NewTestKit(c, s.store) - tk1.MustExec("use test") - tk1.MustExec("drop table if exists t") - tk1.MustExec("create table t(a int)") - tk1.MustExec("insert into t values (1)") - - tk1.MustExec("begin") - // 'For update' would act on the second select. - tk1.MustQuery("select 1 as a union select a from t for update") - - tk2.MustExec("use test") - tk2.MustExec("update t set a = a + 1") - - // As tk1 use select 'for update', it should detect conflict and fail. - _, err := tk1.Exec("commit") - c.Assert(err, NotNil) - - tk1.MustExec("begin") - tk1.MustQuery("select 1 as a union select a from t limit 5 for update") - tk1.MustQuery("select 1 as a union select a from t order by a for update") - - tk2.MustExec("update t set a = a + 1") - - _, err = tk1.Exec("commit") - c.Assert(err, NotNil) -} - -func (s *testSuite3) TestUnsignedDecimalOverflow(c *C) { - tests := []struct { - input interface{} - hasErr bool - err string - }{{ - -1, - true, - "Out of range value for column", - }, { - "-1.1e-1", - true, - "Out of range value for column", - }, { - -1.1, - true, - "Out of range value for column", - }, { - -0, - false, - "", - }, - } - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a decimal(10,2) unsigned)") - for _, t := range tests { - res, err := tk.Exec("insert into t values (?)", t.input) - if res != nil { - defer res.Close() - } - if t.hasErr { - c.Assert(err, NotNil) - c.Assert(strings.Contains(err.Error(), t.err), IsTrue) - } else { - c.Assert(err, IsNil) - } - if res != nil { - c.Assert(res.Close(), IsNil) - } - } - - tk.MustExec("set sql_mode=''") - tk.MustExec("delete from t") - tk.MustExec("insert into t values (?)", -1) - r := tk.MustQuery("select a from t limit 1") - r.Check(testkit.Rows("0.00")) -} - -func (s *testSuite3) TestIndexJoinTableDualPanic(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists a") - tk.MustExec("create table a (f1 int, f2 varchar(32), primary key (f1))") - tk.MustExec("insert into a (f1,f2) values (1,'a'), (2,'b'), (3,'c')") - // TODO here: index join cause the data race of txn. - tk.MustQuery("select /*+ inl_merge_join(a) */ a.* from a inner join (select 1 as k1,'k2-1' as k2) as k on a.f1=k.k1;"). - Check(testkit.Rows("1 a")) -} - -func (s *testSuite3) TestSortLeftJoinWithNullColumnInRightChildPanic(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1(a int)") - tk.MustExec("create table t2(a int)") - tk.MustExec("insert into t1(a) select 1;") - tk.MustQuery("select b.n from t1 left join (select a as a, null as n from t2) b on b.a = t1.a order by t1.a"). - Check(testkit.Rows("")) -} - -func (s *testSuiteP1) TestUnionAutoSignedCast(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1,t2") - tk.MustExec("create table t1 (id int, i int, b bigint, d double, dd decimal)") - tk.MustExec("create table t2 (id int, i int unsigned, b bigint unsigned, d double unsigned, dd decimal unsigned)") - tk.MustExec("insert into t1 values(1, -1, -1, -1.1, -1)") - tk.MustExec("insert into t2 values(2, 1, 1, 1.1, 1)") - tk.MustQuery("select * from t1 union select * from t2 order by id"). - Check(testkit.Rows("1 -1 -1 -1.1 -1", "2 1 1 1.1 1")) - tk.MustQuery("select id, i, b, d, dd from t2 union select id, i, b, d, dd from t1 order by id"). - Check(testkit.Rows("1 -1 -1 -1.1 -1", "2 1 1 1.1 1")) - tk.MustQuery("select id, i from t2 union select id, cast(i as unsigned int) from t1 order by id"). - Check(testkit.Rows("1 18446744073709551615", "2 1")) - tk.MustQuery("select dd from t2 union all select dd from t2"). - Check(testkit.Rows("1", "1")) - - tk.MustExec("drop table if exists t3,t4") - tk.MustExec("create table t3 (id int, v int)") - tk.MustExec("create table t4 (id int, v double unsigned)") - tk.MustExec("insert into t3 values (1, -1)") - tk.MustExec("insert into t4 values (2, 1)") - tk.MustQuery("select id, v from t3 union select id, v from t4 order by id"). - Check(testkit.Rows("1 -1", "2 1")) - tk.MustQuery("select id, v from t4 union select id, v from t3 order by id"). - Check(testkit.Rows("1 -1", "2 1")) - - tk.MustExec("drop table if exists t5,t6,t7") - tk.MustExec("create table t5 (id int, v bigint unsigned)") - tk.MustExec("create table t6 (id int, v decimal)") - tk.MustExec("create table t7 (id int, v bigint)") - tk.MustExec("insert into t5 values (1, 1)") - tk.MustExec("insert into t6 values (2, -1)") - tk.MustExec("insert into t7 values (3, -1)") - tk.MustQuery("select id, v from t5 union select id, v from t6 order by id"). - Check(testkit.Rows("1 1", "2 -1")) - tk.MustQuery("select id, v from t5 union select id, v from t7 union select id, v from t6 order by id"). - Check(testkit.Rows("1 1", "2 -1", "3 -1")) -} - -func (s *testSuiteP1) TestUpdateClustered(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - type resultChecker struct { - check string - assert []string - } - - for _, clustered := range []string{"", "clustered"} { - tests := []struct { - initSchema []string - initData []string - dml string - resultCheck []resultChecker - }{ - { // left join + update both + match & unmatched + pk - []string{ - "drop table if exists a, b", - "create table a (k1 int, k2 int, v int)", - fmt.Sprintf("create table b (a int not null, k1 int, k2 int, v int, primary key(k1, k2) %s)", clustered), - }, - []string{ - "insert into a values (1, 1, 1), (2, 2, 2)", // unmatched + matched - "insert into b values (2, 2, 2, 2)", - }, - "update a left join b on a.k1 = b.k1 and a.k2 = b.k2 set a.v = 20, b.v = 100, a.k1 = a.k1 + 1, b.k1 = b.k1 + 1, a.k2 = a.k2 + 2, b.k2 = b.k2 + 2", - []resultChecker{ - { - "select * from b", - []string{"2 3 4 100"}, - }, - { - "select * from a", - []string{"2 3 20", "3 4 20"}, - }, - }, - }, - { // left join + update both + match & unmatched + pk - []string{ - "drop table if exists a, b", - "create table a (k1 int, k2 int, v int)", - fmt.Sprintf("create table b (a int not null, k1 int, k2 int, v int, primary key(k1, k2) %s)", clustered), - }, - []string{ - "insert into a values (1, 1, 1), (2, 2, 2)", // unmatched + matched - "insert into b values (2, 2, 2, 2)", - }, - "update a left join b on a.k1 = b.k1 and a.k2 = b.k2 set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, b.k1 = b.k1 + 1, b.k2 = b.k2 + 2, a.v = 20, b.v = 100", - []resultChecker{ - { - "select * from b", - []string{"2 3 4 100"}, - }, - { - "select * from a", - []string{"2 3 20", "3 4 20"}, - }, - }, - }, - { // left join + update both + match & unmatched + prefix pk - []string{ - "drop table if exists a, b", - "create table a (k1 varchar(100), k2 varchar(100), v varchar(100))", - fmt.Sprintf("create table b (a varchar(100) not null, k1 varchar(100), k2 varchar(100), v varchar(100), primary key(k1(1), k2(1)) %s, key kk1(k1(1), v(1)))", clustered), - }, - []string{ - "insert into a values ('11', '11', '11'), ('22', '22', '22')", // unmatched + matched - "insert into b values ('22', '22', '22', '22')", - }, - "update a left join b on a.k1 = b.k1 and a.k2 = b.k2 set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, b.k1 = b.k1 + 1, b.k2 = b.k2 + 2, a.v = 20, b.v = 100", - []resultChecker{ - { - "select * from b", - []string{"22 23 24 100"}, - }, - { - "select * from a", - []string{"12 13 20", "23 24 20"}, - }, - }, - }, - { // right join + update both + match & unmatched + prefix pk - []string{ - "drop table if exists a, b", - "create table a (k1 varchar(100), k2 varchar(100), v varchar(100))", - fmt.Sprintf("create table b (a varchar(100) not null, k1 varchar(100), k2 varchar(100), v varchar(100), primary key(k1(1), k2(1)) %s, key kk1(k1(1), v(1)))", clustered), - }, - []string{ - "insert into a values ('11', '11', '11'), ('22', '22', '22')", // unmatched + matched - "insert into b values ('22', '22', '22', '22')", - }, - "update b right join a on a.k1 = b.k1 and a.k2 = b.k2 set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, b.k1 = b.k1 + 1, b.k2 = b.k2 + 2, a.v = 20, b.v = 100", - []resultChecker{ - { - "select * from b", - []string{"22 23 24 100"}, - }, - { - "select * from a", - []string{"12 13 20", "23 24 20"}, - }, - }, - }, - { // inner join + update both + match & unmatched + prefix pk - []string{ - "drop table if exists a, b", - "create table a (k1 varchar(100), k2 varchar(100), v varchar(100))", - fmt.Sprintf("create table b (a varchar(100) not null, k1 varchar(100), k2 varchar(100), v varchar(100), primary key(k1(1), k2(1)) %s, key kk1(k1(1), v(1)))", clustered), - }, - []string{ - "insert into a values ('11', '11', '11'), ('22', '22', '22')", // unmatched + matched - "insert into b values ('22', '22', '22', '22')", - }, - "update b join a on a.k1 = b.k1 and a.k2 = b.k2 set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, b.k1 = b.k1 + 1, b.k2 = b.k2 + 2, a.v = 20, b.v = 100", - []resultChecker{ - { - "select * from b", - []string{"22 23 24 100"}, - }, - { - "select * from a", - []string{"11 11 11", "23 24 20"}, - }, - }, - }, - { - []string{ - "drop table if exists a, b", - "create table a (k1 varchar(100), k2 varchar(100), v varchar(100))", - fmt.Sprintf("create table b (a varchar(100) not null, k1 varchar(100), k2 varchar(100), v varchar(100), primary key(k1(1), k2(1)) %s, key kk1(k1(1), v(1)))", clustered), - }, - []string{ - "insert into a values ('11', '11', '11'), ('22', '22', '22')", // unmatched + matched - "insert into b values ('22', '22', '22', '22')", - }, - "update a set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, a.v = 20 where exists (select 1 from b where a.k1 = b.k1 and a.k2 = b.k2)", - []resultChecker{ - { - "select * from b", - []string{"22 22 22 22"}, - }, - { - "select * from a", - []string{"11 11 11", "23 24 20"}, - }, - }, - }, - } - - for _, test := range tests { - for _, s := range test.initSchema { - tk.MustExec(s) - } - for _, s := range test.initData { - tk.MustExec(s) - } - tk.MustExec(test.dml) - for _, checker := range test.resultCheck { - tk.MustQuery(checker.check).Check(testkit.Rows(checker.assert...)) - } - tk.MustExec("admin check table a") - tk.MustExec("admin check table b") - } - } -} - -func (s *testSuite6) TestUpdateJoin(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1, t2, t3, t4, t5, t6, t7") - tk.MustExec("create table t1(k int, v int)") - tk.MustExec("create table t2(k int, v int)") - tk.MustExec("create table t3(id int auto_increment, k int, v int, primary key(id))") - tk.MustExec("create table t4(k int, v int)") - tk.MustExec("create table t5(v int, k int, primary key(k))") - tk.MustExec("insert into t1 values (1, 1)") - tk.MustExec("insert into t4 values (3, 3)") - tk.MustExec("create table t6 (id int, v longtext)") - tk.MustExec("create table t7 (x int, id int, v longtext, primary key(id))") - - // test the normal case that update one row for a single table. - tk.MustExec("update t1 set v = 0 where k = 1") - tk.MustQuery("select k, v from t1 where k = 1").Check(testkit.Rows("1 0")) - - // test the case that the table with auto_increment or none-null columns as the right table of left join. - tk.MustExec("update t1 left join t3 on t1.k = t3.k set t1.v = 1") - tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 1")) - tk.MustQuery("select id, k, v from t3").Check(testkit.Rows()) - - // test left join and the case that the right table has no matching record but has updated the right table columns. - tk.MustExec("update t1 left join t2 on t1.k = t2.k set t1.v = t2.v, t2.v = 3") - tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 ")) - tk.MustQuery("select k, v from t2").Check(testkit.Rows()) - - // test the case that the update operation in the left table references data in the right table while data of the right table columns is modified. - tk.MustExec("update t1 left join t2 on t1.k = t2.k set t2.v = 3, t1.v = t2.v") - tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 ")) - tk.MustQuery("select k, v from t2").Check(testkit.Rows()) - - // test right join and the case that the left table has no matching record but has updated the left table columns. - tk.MustExec("update t2 right join t1 on t2.k = t1.k set t2.v = 4, t1.v = 0") - tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 0")) - tk.MustQuery("select k, v from t2").Check(testkit.Rows()) - - // test the case of right join and left join at the same time. - tk.MustExec("update t1 left join t2 on t1.k = t2.k right join t4 on t4.k = t2.k set t1.v = 4, t2.v = 4, t4.v = 4") - tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 0")) - tk.MustQuery("select k, v from t2").Check(testkit.Rows()) - tk.MustQuery("select k, v from t4").Check(testkit.Rows("3 4")) - - // test normal left join and the case that the right table has matching rows. - tk.MustExec("insert t2 values (1, 10)") - tk.MustExec("update t1 left join t2 on t1.k = t2.k set t2.v = 11") - tk.MustQuery("select k, v from t2").Check(testkit.Rows("1 11")) - - // test the case of continuously joining the same table and updating the unmatching records. - tk.MustExec("update t1 t11 left join t2 on t11.k = t2.k left join t1 t12 on t2.v = t12.k set t12.v = 233, t11.v = 111") - tk.MustQuery("select k, v from t1").Check(testkit.Rows("1 111")) - tk.MustQuery("select k, v from t2").Check(testkit.Rows("1 11")) - - // test the left join case that the left table has records but all records are null. - tk.MustExec("delete from t1") - tk.MustExec("delete from t2") - tk.MustExec("insert into t1 values (null, null)") - tk.MustExec("update t1 left join t2 on t1.k = t2.k set t1.v = 1") - tk.MustQuery("select k, v from t1").Check(testkit.Rows(" 1")) - - // test the case that the right table of left join has an primary key. - tk.MustExec("insert t5 values(0, 0)") - tk.MustExec("update t1 left join t5 on t1.k = t5.k set t1.v = 2") - tk.MustQuery("select k, v from t1").Check(testkit.Rows(" 2")) - tk.MustQuery("select k, v from t5").Check(testkit.Rows("0 0")) - - tk.MustExec("insert into t6 values (1, NULL)") - tk.MustExec("insert into t7 values (5, 1, 'a')") - tk.MustExec("update t6, t7 set t6.v = t7.v where t6.id = t7.id and t7.x = 5") - tk.MustQuery("select v from t6").Check(testkit.Rows("a")) - - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1(id int primary key, v int, gv int GENERATED ALWAYS AS (v * 2) STORED)") - tk.MustExec("create table t2(id int, v int)") - tk.MustExec("update t1 tt1 inner join (select count(t1.id) a, t1.id from t1 left join t2 on t1.id = t2.id group by t1.id) x on tt1.id = x.id set tt1.v = tt1.v + x.a") -} - -func (s *testSuite3) TestMaxOneRow(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists t1`) - tk.MustExec(`drop table if exists t2`) - tk.MustExec(`create table t1(a double, b double);`) - tk.MustExec(`create table t2(a double, b double);`) - tk.MustExec(`insert into t1 values(1, 1), (2, 2), (3, 3);`) - tk.MustExec(`insert into t2 values(0, 0);`) - tk.MustExec(`set @@tidb_init_chunk_size=1;`) - rs, err := tk.Exec(`select (select t1.a from t1 where t1.a > t2.a) as a from t2;`) - c.Assert(err, IsNil) - - err = rs.Next(context.TODO(), rs.NewChunk(nil)) - c.Assert(err.Error(), Equals, "[executor:1242]Subquery returns more than 1 row") - - c.Assert(rs.Close(), IsNil) -} - -func (s *testSuiteP2) TestCurrentTimestampValueSelection(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t,t1") - - tk.MustExec("create table t (id int, t0 timestamp null default current_timestamp, t1 timestamp(1) null default current_timestamp(1), t2 timestamp(2) null default current_timestamp(2) on update current_timestamp(2))") - tk.MustExec("insert into t (id) values (1)") - rs := tk.MustQuery("select t0, t1, t2 from t where id = 1") - t0 := rs.Rows()[0][0].(string) - t1 := rs.Rows()[0][1].(string) - t2 := rs.Rows()[0][2].(string) - c.Assert(len(strings.Split(t0, ".")), Equals, 1) - c.Assert(len(strings.Split(t1, ".")[1]), Equals, 1) - c.Assert(len(strings.Split(t2, ".")[1]), Equals, 2) - tk.MustQuery("select id from t where t0 = ?", t0).Check(testkit.Rows("1")) - tk.MustQuery("select id from t where t1 = ?", t1).Check(testkit.Rows("1")) - tk.MustQuery("select id from t where t2 = ?", t2).Check(testkit.Rows("1")) - time.Sleep(time.Second) - tk.MustExec("update t set t0 = now() where id = 1") - rs = tk.MustQuery("select t2 from t where id = 1") - newT2 := rs.Rows()[0][0].(string) - c.Assert(newT2 != t2, IsTrue) - - tk.MustExec("create table t1 (id int, a timestamp, b timestamp(2), c timestamp(3))") - tk.MustExec("insert into t1 (id, a, b, c) values (1, current_timestamp(2), current_timestamp, current_timestamp(3))") - rs = tk.MustQuery("select a, b, c from t1 where id = 1") - a := rs.Rows()[0][0].(string) - b := rs.Rows()[0][1].(string) - d := rs.Rows()[0][2].(string) - c.Assert(len(strings.Split(a, ".")), Equals, 1) - c.Assert(strings.Split(b, ".")[1], Equals, "00") - c.Assert(len(strings.Split(d, ".")[1]), Equals, 3) -} - -func (s *testSuite3) TestRowID(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists t`) - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeIntOnly - tk.MustExec(`create table t(a varchar(10), b varchar(10), c varchar(1), index idx(a, b, c));`) - tk.MustExec(`insert into t values('a', 'b', 'c');`) - tk.MustExec(`insert into t values('a', 'b', 'c');`) - tk.MustQuery(`select b, _tidb_rowid from t use index(idx) where a = 'a';`).Check(testkit.Rows( - `b 1`, - `b 2`, - )) - tk.MustExec(`begin;`) - tk.MustExec(`select * from t for update`) - tk.MustQuery(`select distinct b from t use index(idx) where a = 'a';`).Check(testkit.Rows(`b`)) - tk.MustExec(`commit;`) - - tk.MustExec(`drop table if exists t`) - tk.MustExec(`create table t(a varchar(5) primary key)`) - tk.MustExec(`insert into t values('a')`) - tk.MustQuery("select *, _tidb_rowid from t use index(`primary`) where _tidb_rowid=1").Check(testkit.Rows("a 1")) -} - -func (s *testSuite3) TestDoSubquery(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists t`) - tk.MustExec(`create table t(a int)`) - _, err := tk.Exec(`do 1 in (select * from t)`) - c.Assert(err, IsNil, Commentf("err %v", err)) - tk.MustExec(`insert into t values(1)`) - r, err := tk.Exec(`do 1 in (select * from t)`) - c.Assert(err, IsNil, Commentf("err %v", err)) - c.Assert(r, IsNil, Commentf("result of Do not empty")) -} - -func (s *testSuite3) TestSubqueryTableAlias(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists t`) - - tk.MustExec("set sql_mode = ''") - tk.MustGetErrCode("select a, b from (select 1 a) ``, (select 2 b) ``;", mysql.ErrDerivedMustHaveAlias) - tk.MustGetErrCode("select a, b from (select 1 a) `x`, (select 2 b) `x`;", mysql.ErrNonuniqTable) - tk.MustGetErrCode("select a, b from (select 1 a), (select 2 b);", mysql.ErrDerivedMustHaveAlias) - // ambiguous column name - tk.MustGetErrCode("select a from (select 1 a) ``, (select 2 a) ``;", mysql.ErrDerivedMustHaveAlias) - tk.MustGetErrCode("select a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonuniqTable) - tk.MustGetErrCode("select x.a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonuniqTable) - tk.MustGetErrCode("select a from (select 1 a), (select 2 a);", mysql.ErrDerivedMustHaveAlias) - - tk.MustExec("set sql_mode = 'oracle';") - tk.MustQuery("select a, b from (select 1 a) ``, (select 2 b) ``;").Check(testkit.Rows("1 2")) - tk.MustQuery("select a, b from (select 1 a) `x`, (select 2 b) `x`;").Check(testkit.Rows("1 2")) - tk.MustQuery("select a, b from (select 1 a), (select 2 b);").Check(testkit.Rows("1 2")) - // ambiguous column name - tk.MustGetErrCode("select a from (select 1 a) ``, (select 2 a) ``;", mysql.ErrNonUniq) - tk.MustGetErrCode("select a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonUniq) - tk.MustGetErrCode("select x.a from (select 1 a) `x`, (select 2 a) `x`;", mysql.ErrNonUniq) - tk.MustGetErrCode("select a from (select 1 a), (select 2 a);", mysql.ErrNonUniq) -} - -func (s *testSerialSuite) TestTSOFail(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists t`) - tk.MustExec(`create table t(a int)`) - - c.Assert(failpoint.Enable("github.com/pingcap/tidb/session/mockGetTSFail", "return"), IsNil) - ctx := failpoint.WithHook(context.Background(), func(ctx context.Context, fpname string) bool { - return fpname == "github.com/pingcap/tidb/session/mockGetTSFail" - }) - _, err := tk.Se.Execute(ctx, `select * from t`) - c.Assert(err, NotNil) - c.Assert(failpoint.Disable("github.com/pingcap/tidb/session/mockGetTSFail"), IsNil) -} - -func (s *testSuite3) TestSelectHashPartitionTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists th`) - tk.MustExec("set @@session.tidb_enable_table_partition = '1';") - tk.MustExec(`create table th (a int, b int) partition by hash(a) partitions 3;`) - defer tk.MustExec(`drop table if exists th`) - tk.MustExec(`insert into th values (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8);`) - tk.MustExec("insert into th values (-1,-1),(-2,-2),(-3,-3),(-4,-4),(-5,-5),(-6,-6),(-7,-7),(-8,-8);") - tk.MustQuery("select b from th order by a").Check(testkit.Rows("-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0", "1", "2", "3", "4", "5", "6", "7", "8")) - tk.MustQuery(" select * from th where a=-2;").Check(testkit.Rows("-2 -2")) - tk.MustQuery(" select * from th where a=5;").Check(testkit.Rows("5 5")) -} - -func (s *testSuiteP1) TestSelectPartition(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists th, tr, tl`) - tk.MustExec("set @@session.tidb_enable_list_partition = ON;") - tk.MustExec(`create table th (a int, b int) partition by hash(a) partitions 3;`) - tk.MustExec(`create table tr (a int, b int) - partition by range (a) ( - partition r0 values less than (4), - partition r1 values less than (7), - partition r3 values less than maxvalue)`) - tk.MustExec(`create table tl (a int, b int, unique index idx(a)) partition by list (a) ( - partition p0 values in (3,5,6,9,17), - partition p1 values in (1,2,10,11,19,20), - partition p2 values in (4,12,13,14,18), - partition p3 values in (7,8,15,16,null));`) - defer tk.MustExec(`drop table if exists th, tr, tl`) - tk.MustExec(`insert into th values (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8);`) - tk.MustExec("insert into th values (-1,-1),(-2,-2),(-3,-3),(-4,-4),(-5,-5),(-6,-6),(-7,-7),(-8,-8);") - tk.MustExec(`insert into tr values (-3,-3),(3,3),(4,4),(7,7),(8,8);`) - tk.MustExec(`insert into tl values (3,3),(1,1),(4,4),(7,7),(8,8),(null,null);`) - // select 1 partition. - tk.MustQuery("select b from th partition (p0) order by a").Check(testkit.Rows("-6", "-3", "0", "3", "6")) - tk.MustQuery("select b from tr partition (r0) order by a").Check(testkit.Rows("-3", "3")) - tk.MustQuery("select b from tl partition (p0) order by a").Check(testkit.Rows("3")) - tk.MustQuery("select b from th partition (p0,P0) order by a").Check(testkit.Rows("-6", "-3", "0", "3", "6")) - tk.MustQuery("select b from tr partition (r0,R0,r0) order by a").Check(testkit.Rows("-3", "3")) - tk.MustQuery("select b from tl partition (p0,P0,p0) order by a").Check(testkit.Rows("3")) - // select multi partition. - tk.MustQuery("select b from th partition (P2,p0) order by a").Check(testkit.Rows("-8", "-6", "-5", "-3", "-2", "0", "2", "3", "5", "6", "8")) - tk.MustQuery("select b from tr partition (r1,R3) order by a").Check(testkit.Rows("4", "7", "8")) - tk.MustQuery("select b from tl partition (p0,P3) order by a").Check(testkit.Rows("", "3", "7", "8")) - - // test select unknown partition error - err := tk.ExecToErr("select b from th partition (p0,p4)") - c.Assert(err.Error(), Equals, "[table:1735]Unknown partition 'p4' in table 'th'") - err = tk.ExecToErr("select b from tr partition (r1,r4)") - c.Assert(err.Error(), Equals, "[table:1735]Unknown partition 'r4' in table 'tr'") - err = tk.ExecToErr("select b from tl partition (p0,p4)") - c.Assert(err.Error(), Equals, "[table:1735]Unknown partition 'p4' in table 'tl'") - - // test select partition table in transaction. - tk.MustExec("begin") - tk.MustExec("insert into th values (10,10),(11,11)") - tk.MustQuery("select a, b from th where b>10").Check(testkit.Rows("11 11")) - tk.MustExec("commit") - tk.MustQuery("select a, b from th where b>10").Check(testkit.Rows("11 11")) - - // test partition function is scalar func - tk.MustExec("drop table if exists tscalar") - tk.MustExec(`create table tscalar (c1 int) partition by range (c1 % 30) ( - partition p0 values less than (0), - partition p1 values less than (10), - partition p2 values less than (20), - partition pm values less than (maxvalue));`) - tk.MustExec("insert into tscalar values(0), (10), (40), (50), (55)") - // test IN expression - tk.MustExec("insert into tscalar values(-0), (-10), (-40), (-50), (-55)") - tk.MustQuery("select * from tscalar where c1 in (55, 55)").Check(testkit.Rows("55")) - tk.MustQuery("select * from tscalar where c1 in (40, 40)").Check(testkit.Rows("40")) - tk.MustQuery("select * from tscalar where c1 in (40)").Check(testkit.Rows("40")) - tk.MustQuery("select * from tscalar where c1 in (-40)").Check(testkit.Rows("-40")) - tk.MustQuery("select * from tscalar where c1 in (-40, -40)").Check(testkit.Rows("-40")) - tk.MustQuery("select * from tscalar where c1 in (-1)").Check(testkit.Rows()) -} - -func (s *testSuiteP1) TestDeletePartition(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec(`use test`) - tk.MustExec(`drop table if exists t1`) - tk.MustExec(`create table t1 (a int) partition by range (a) ( - partition p0 values less than (10), - partition p1 values less than (20), - partition p2 values less than (30), - partition p3 values less than (40), - partition p4 values less than MAXVALUE - )`) - tk.MustExec("insert into t1 values (1),(11),(21),(31)") - tk.MustExec("delete from t1 partition (p4)") - tk.MustQuery("select * from t1 order by a").Check(testkit.Rows("1", "11", "21", "31")) - tk.MustExec("delete from t1 partition (p0) where a > 10") - tk.MustQuery("select * from t1 order by a").Check(testkit.Rows("1", "11", "21", "31")) - tk.MustExec("delete from t1 partition (p0,p1,p2)") - tk.MustQuery("select * from t1").Check(testkit.Rows("31")) -} - -func (s *testSuite) TestSelectView(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("create table view_t (a int,b int)") - tk.MustExec("insert into view_t values(1,2)") - tk.MustExec("create definer='root'@'localhost' view view1 as select * from view_t") - tk.MustExec("create definer='root'@'localhost' view view2(c,d) as select * from view_t") - tk.MustExec("create definer='root'@'localhost' view view3(c,d) as select a,b from view_t") - tk.MustExec("create definer='root'@'localhost' view view4 as select * from (select * from (select * from view_t) tb1) tb;") - tk.MustQuery("select * from view1;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view2;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view3;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view4;").Check(testkit.Rows("1 2")) - tk.MustExec("drop table view_t;") - tk.MustExec("create table view_t(c int,d int)") - err := tk.ExecToErr("select * from view1") - c.Assert(err.Error(), Equals, "[planner:1356]View 'test.view1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them") - err = tk.ExecToErr("select * from view2") - c.Assert(err.Error(), Equals, "[planner:1356]View 'test.view2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them") - err = tk.ExecToErr("select * from view3") - c.Assert(err.Error(), Equals, plannercore.ErrViewInvalid.GenWithStackByArgs("test", "view3").Error()) - tk.MustExec("drop table view_t;") - tk.MustExec("create table view_t(a int,b int,c int)") - tk.MustExec("insert into view_t values(1,2,3)") - tk.MustQuery("select * from view1;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view2;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view3;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view4;").Check(testkit.Rows("1 2")) - tk.MustExec("alter table view_t drop column a") - tk.MustExec("alter table view_t add column a int after b") - tk.MustExec("update view_t set a=1;") - tk.MustQuery("select * from view1;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view2;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view3;").Check(testkit.Rows("1 2")) - tk.MustQuery("select * from view4;").Check(testkit.Rows("1 2")) - tk.MustExec("drop table view_t;") - tk.MustExec("drop view view1,view2,view3,view4;") - - tk.MustExec("set @@tidb_enable_window_function = 1") - defer func() { - tk.MustExec("set @@tidb_enable_window_function = 0") - }() - tk.MustExec("create table t(a int, b int)") - tk.MustExec("insert into t values (1,1),(1,2),(2,1),(2,2)") - tk.MustExec("create definer='root'@'localhost' view v as select a, first_value(a) over(rows between 1 preceding and 1 following), last_value(a) over(rows between 1 preceding and 1 following) from t") - result := tk.MustQuery("select * from v") - result.Check(testkit.Rows("1 1 1", "1 1 2", "2 1 2", "2 2 2")) - tk.MustExec("drop view v;") -} - -type testSuite2 struct { - *baseTestSuite -} - -func (s *testSuite2) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show full tables") - for _, tb := range r.Rows() { - tableName := tb[0] - if tb[1] == "VIEW" { - tk.MustExec(fmt.Sprintf("drop view %v", tableName)) - } else if tb[1] == "SEQUENCE" { - tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) - } else { - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } - } -} - -type testSuite3 struct { - *baseTestSuite -} - -func (s *testSuite3) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show full tables") - for _, tb := range r.Rows() { - tableName := tb[0] - if tb[1] == "VIEW" { - tk.MustExec(fmt.Sprintf("drop view %v", tableName)) - } else if tb[1] == "SEQUENCE" { - tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) - } else { - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } - } -} - -type testSuite4 struct { - *baseTestSuite -} - -func (s *testSuite4) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show full tables") - for _, tb := range r.Rows() { - tableName := tb[0] - if tb[1] == "VIEW" { - tk.MustExec(fmt.Sprintf("drop view %v", tableName)) - } else if tb[1] == "SEQUENCE" { - tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) - } else { - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } - } -} - -type testSuite5 struct { - *baseTestSuite -} - -func (s *testSuite5) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show full tables") - for _, tb := range r.Rows() { - tableName := tb[0] - if tb[1] == "VIEW" { - tk.MustExec(fmt.Sprintf("drop view %v", tableName)) - } else if tb[1] == "SEQUENCE" { - tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) - } else { - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } - } -} - -type testSuite6 struct { - *baseTestSuite -} - -func (s *testSuite6) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show full tables") - for _, tb := range r.Rows() { - tableName := tb[0] - if tb[1] == "VIEW" { - tk.MustExec(fmt.Sprintf("drop view %v", tableName)) - } else if tb[1] == "SEQUENCE" { - tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) - } else { - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } - } -} - -type testSuite7 struct { - *baseTestSuite -} - -func (s *testSuite7) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show full tables") - for _, tb := range r.Rows() { - tableName := tb[0] - if tb[1] == "VIEW" { - tk.MustExec(fmt.Sprintf("drop view %v", tableName)) - } else if tb[1] == "SEQUENCE" { - tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) - } else { - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } - } -} - -type testSuite8 struct { - *baseTestSuite -} - -func (s *testSuite8) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show full tables") - for _, tb := range r.Rows() { - tableName := tb[0] - if tb[1] == "VIEW" { - tk.MustExec(fmt.Sprintf("drop view %v", tableName)) - } else if tb[1] == "SEQUENCE" { - tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) - } else { - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } - } -} - -type testSerialSuite1 struct { - *baseTestSuite -} - -func (s *testSerialSuite1) TearDownTest(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - r := tk.MustQuery("show full tables") - for _, tb := range r.Rows() { - tableName := tb[0] - if tb[1] == "VIEW" { - tk.MustExec(fmt.Sprintf("drop view %v", tableName)) - } else if tb[1] == "SEQUENCE" { - tk.MustExec(fmt.Sprintf("drop sequence %v", tableName)) - } else { - tk.MustExec(fmt.Sprintf("drop table %v", tableName)) - } - } -} - -func (s *testSuiteP2) TestStrToDateBuiltin(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustQuery(`select str_to_date('20190101','%Y%m%d%!') from dual`).Check(testkit.Rows("2019-01-01")) - tk.MustQuery(`select str_to_date('20190101','%Y%m%d%f') from dual`).Check(testkit.Rows("2019-01-01 00:00:00.000000")) - tk.MustQuery(`select str_to_date('20190101','%Y%m%d%H%i%s') from dual`).Check(testkit.Rows("2019-01-01 00:00:00")) - tk.MustQuery(`select str_to_date('18/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('a18/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('69/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("2069-10-22")) - tk.MustQuery(`select str_to_date('70/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("1970-10-22")) - tk.MustQuery(`select str_to_date('8/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("2008-10-22")) - tk.MustQuery(`select str_to_date('8/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("2008-10-22")) - tk.MustQuery(`select str_to_date('18/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('a18/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('69/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("2069-10-22")) - tk.MustQuery(`select str_to_date('70/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("1970-10-22")) - tk.MustQuery(`select str_to_date('018/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("0018-10-22")) - tk.MustQuery(`select str_to_date('2018/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('018/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('18/10/22','%y0/%m/%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('18/10/22','%Y0/%m/%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('18a/10/22','%y/%m/%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('18a/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('20188/10/22','%Y/%m/%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('2018510522','%Y5%m5%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('2018^10^22','%Y^%m^%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('2018@10@22','%Y@%m@%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('2018%10%22','%Y%%m%%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('2018(10(22','%Y(%m(%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('2018\10\22','%Y\%m\%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('2018=10=22','%Y=%m=%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('2018+10+22','%Y+%m+%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('2018_10_22','%Y_%m_%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('69510522','%y5%m5%d') from dual`).Check(testkit.Rows("2069-10-22")) - tk.MustQuery(`select str_to_date('69^10^22','%y^%m^%d') from dual`).Check(testkit.Rows("2069-10-22")) - tk.MustQuery(`select str_to_date('18@10@22','%y@%m@%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('18%10%22','%y%%m%%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('18(10(22','%y(%m(%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('18\10\22','%y\%m\%d') from dual`).Check(testkit.Rows("")) - tk.MustQuery(`select str_to_date('18+10+22','%y+%m+%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('18=10=22','%y=%m=%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`select str_to_date('18_10_22','%y_%m_%d') from dual`).Check(testkit.Rows("2018-10-22")) - tk.MustQuery(`SELECT STR_TO_DATE('2020-07-04 11:22:33 PM', '%Y-%m-%d %r')`).Check(testkit.Rows("2020-07-04 23:22:33")) - tk.MustQuery(`SELECT STR_TO_DATE('2020-07-04 12:22:33 AM', '%Y-%m-%d %r')`).Check(testkit.Rows("2020-07-04 00:22:33")) - tk.MustQuery(`SELECT STR_TO_DATE('2020-07-04 12:22:33', '%Y-%m-%d %T')`).Check(testkit.Rows("2020-07-04 12:22:33")) - tk.MustQuery(`SELECT STR_TO_DATE('2020-07-04 00:22:33', '%Y-%m-%d %T')`).Check(testkit.Rows("2020-07-04 00:22:33")) -} - -func (s *testSuiteP2) TestAddDateBuiltinWithWarnings(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("set @@sql_mode='NO_ZERO_DATE'") - result := tk.MustQuery(`select date_add('2001-01-00', interval -2 hour);`) - result.Check(testkit.Rows("")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '2001-01-00'")) -} - -func (s *testSuiteP2) TestIssue27232(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a timestamp)") - tk.MustExec("insert into t values (\"1970-07-23 10:04:59\"), (\"2038-01-19 03:14:07\")") - tk.MustQuery("select * from t where date_sub(a, interval 10 month) = date_sub(\"1970-07-23 10:04:59\", interval 10 month)").Check(testkit.Rows("1970-07-23 10:04:59")) - tk.MustQuery("select * from t where timestampadd(hour, 1, a ) = timestampadd(hour, 1, \"2038-01-19 03:14:07\")").Check(testkit.Rows("2038-01-19 03:14:07")) -} - -func (s *testSuiteP2) TestStrToDateBuiltinWithWarnings(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("set @@sql_mode='NO_ZERO_DATE'") - tk.MustExec("use test") - tk.MustQuery(`SELECT STR_TO_DATE('0000-1-01', '%Y-%m-%d');`).Check(testkit.Rows("")) - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1411 Incorrect datetime value: '0000-1-01' for function str_to_date")) -} - -func (s *testSuiteP2) TestReadPartitionedTable(c *C) { - // Test three reader on partitioned table. - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists pt") - tk.MustExec("create table pt (a int, b int, index i_b(b)) partition by range (a) (partition p1 values less than (2), partition p2 values less than (4), partition p3 values less than (6))") - for i := 0; i < 6; i++ { - tk.MustExec(fmt.Sprintf("insert into pt values(%d, %d)", i, i)) - } - // Table reader - tk.MustQuery("select * from pt order by a").Check(testkit.Rows("0 0", "1 1", "2 2", "3 3", "4 4", "5 5")) - // Index reader - tk.MustQuery("select b from pt where b = 3").Check(testkit.Rows("3")) - // Index lookup - tk.MustQuery("select a from pt where b = 3").Check(testkit.Rows("3")) -} - -func (s *testSplitTable) TestSplitRegion(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t, t1") - tk.MustExec("create table t(a varchar(100),b int, index idx1(b,a))") - tk.MustExec(`split table t index idx1 by (10000,"abcd"),(10000000);`) - _, err := tk.Exec(`split table t index idx1 by ("abcd");`) - c.Assert(err, NotNil) - terr := errors.Cause(err).(*terror.Error) - c.Assert(terr.Code(), Equals, errors.ErrCode(mysql.WarnDataTruncated)) - - // Test for split index region. - // Check min value is more than max value. - tk.MustExec(`split table t index idx1 between (0) and (1000000000) regions 10`) - tk.MustGetErrCode(`split table t index idx1 between (2,'a') and (1,'c') regions 10`, errno.ErrInvalidSplitRegionRanges) - - // Check min value is invalid. - _, err = tk.Exec(`split table t index idx1 between () and (1) regions 10`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Split index `idx1` region lower value count should more than 0") - - // Check max value is invalid. - _, err = tk.Exec(`split table t index idx1 between (1) and () regions 10`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Split index `idx1` region upper value count should more than 0") - - // Check pre-split region num is too large. - _, err = tk.Exec(`split table t index idx1 between (0) and (1000000000) regions 10000`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Split index region num exceeded the limit 1000") - - // Check pre-split region num 0 is invalid. - _, err = tk.Exec(`split table t index idx1 between (0) and (1000000000) regions 0`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Split index region num should more than 0") - - // Test truncate error msg. - _, err = tk.Exec(`split table t index idx1 between ("aa") and (1000000000) regions 0`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[types:1265]Incorrect value: 'aa' for column 'b'") - - // Test for split table region. - tk.MustExec(`split table t between (0) and (1000000000) regions 10`) - // Check the lower value is more than the upper value. - tk.MustGetErrCode(`split table t between (2) and (1) regions 10`, errno.ErrInvalidSplitRegionRanges) - - // Check the lower value is invalid. - _, err = tk.Exec(`split table t between () and (1) regions 10`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Split table region lower value count should be 1") - - // Check upper value is invalid. - _, err = tk.Exec(`split table t between (1) and () regions 10`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Split table region upper value count should be 1") - - // Check pre-split region num is too large. - _, err = tk.Exec(`split table t between (0) and (1000000000) regions 10000`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Split table region num exceeded the limit 1000") - - // Check pre-split region num 0 is invalid. - _, err = tk.Exec(`split table t between (0) and (1000000000) regions 0`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Split table region num should more than 0") - - // Test truncate error msg. - _, err = tk.Exec(`split table t between ("aa") and (1000000000) regions 10`) - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[types:1265]Incorrect value: 'aa' for column '_tidb_rowid'") - - // Test split table region step is too small. - tk.MustGetErrCode(`split table t between (0) and (100) regions 10`, errno.ErrInvalidSplitRegionRanges) - - // Test split region by syntax. - tk.MustExec(`split table t by (0),(1000),(1000000)`) - - // Test split region twice to test for multiple batch split region requests. - tk.MustExec("create table t1(a int, b int)") - tk.MustQuery("split table t1 between(0) and (10000) regions 10;").Check(testkit.Rows("9 1")) - tk.MustQuery("split table t1 between(10) and (10010) regions 5;").Check(testkit.Rows("4 1")) - - // Test split region for partition table. - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int,b int) partition by hash(a) partitions 5;") - tk.MustQuery("split table t between (0) and (1000000) regions 5;").Check(testkit.Rows("20 1")) - // Test for `split for region` syntax. - tk.MustQuery("split region for partition table t between (1000000) and (100000000) regions 10;").Check(testkit.Rows("45 1")) - - // Test split region for partition table with specified partition. - tk.MustQuery("split table t partition (p1,p2) between (100000000) and (1000000000) regions 5;").Check(testkit.Rows("8 1")) - // Test for `split for region` syntax. - tk.MustQuery("split region for partition table t partition (p3,p4) between (100000000) and (1000000000) regions 5;").Check(testkit.Rows("8 1")) -} - -func (s *testSplitTable) TestSplitRegionEdgeCase(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(a bigint(20) auto_increment primary key);") - tk.MustExec("split table t between (-9223372036854775808) and (9223372036854775807) regions 16;") - - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(a int(20) auto_increment primary key);") - tk.MustGetErrCode("split table t between (-9223372036854775808) and (9223372036854775807) regions 16;", errno.ErrDataOutOfRange) -} - -func (s *testSplitTable) TestClusterIndexSplitTableIntegration(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("drop database if exists test_cluster_index_index_split_table_integration;") - tk.MustExec("create database test_cluster_index_index_split_table_integration;") - tk.MustExec("use test_cluster_index_index_split_table_integration;") - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - - tk.MustExec("create table t (a varchar(255), b double, c int, primary key (a, b));") - - // Value list length not match. - lowerMsg := "Split table region lower value count should be 2" - upperMsg := "Split table region upper value count should be 2" - tk.MustGetErrMsg("split table t between ('aaa') and ('aaa', 100.0) regions 10;", lowerMsg) - tk.MustGetErrMsg("split table t between ('aaa', 1.0) and ('aaa', 100.0, 11) regions 10;", upperMsg) - - // Value type not match. - errMsg := "[types:1265]Incorrect value: 'aaa' for column 'b'" - tk.MustGetErrMsg("split table t between ('aaa', 0.0) and (100.0, 'aaa') regions 10;", errMsg) - - // lower bound >= upper bound. - errMsg = "[executor:8212]Failed to split region ranges: Split table `t` region lower value (aaa,0) should less than the upper value (aaa,0)" - tk.MustGetErrMsg("split table t between ('aaa', 0.0) and ('aaa', 0.0) regions 10;", errMsg) - errMsg = "[executor:8212]Failed to split region ranges: Split table `t` region lower value (bbb,0) should less than the upper value (aaa,0)" - tk.MustGetErrMsg("split table t between ('bbb', 0.0) and ('aaa', 0.0) regions 10;", errMsg) - - // Exceed limit 1000. - errMsg = "Split table region num exceeded the limit 1000" - tk.MustGetErrMsg("split table t between ('aaa', 0.0) and ('aaa', 0.1) regions 100000;", errMsg) - - // Split on null values. - errMsg = "[planner:1048]Column 'a' cannot be null" - tk.MustGetErrMsg("split table t between (null, null) and (null, null) regions 1000;", errMsg) - tk.MustGetErrMsg("split table t by (null, null);", errMsg) - - // Success. - tk.MustExec("split table t between ('aaa', 0.0) and ('aaa', 100.0) regions 10;") - tk.MustExec("split table t by ('aaa', 0.0), ('aaa', 20.0), ('aaa', 100.0);") - tk.MustExec("split table t by ('aaa', 100.0), ('qqq', 20.0), ('zzz', 100.0), ('zzz', 1000.0);") - - tk.MustExec("drop table t;") - tk.MustExec("create table t (a int, b int, c int, d int, primary key(a, c, d));") - tk.MustQuery("split table t between (0, 0, 0) and (0, 0, 1) regions 1000;").Check(testkit.Rows("999 1")) - - tk.MustExec("drop table t;") - tk.MustExec("create table t (a int, b int, c int, d int, primary key(d, a, c));") - tk.MustQuery("split table t by (0, 0, 0), (1, 2, 3), (65535, 65535, 65535);").Check(testkit.Rows("3 1")) - - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a varchar(255), b decimal, c int, primary key (a, b));") - errMsg = "[types:1265]Incorrect value: '' for column 'b'" - tk.MustGetErrMsg("split table t by ('aaa', '')", errMsg) -} - -func (s *testSplitTable) TestClusterIndexShowTableRegion(c *C) { - tk := testkit.NewTestKit(c, s.store) - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) - tk.MustExec("set global tidb_scatter_region = 1") - tk.MustExec("drop database if exists cluster_index_regions;") - tk.MustExec("create database cluster_index_regions;") - tk.MustExec("use cluster_index_regions;") - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - tk.MustExec("create table t (a int, b int, c int, primary key(a, b));") - tk.MustExec("insert t values (1, 1, 1), (2, 2, 2);") - tk.MustQuery("split table t between (1, 0) and (2, 3) regions 2;").Check(testkit.Rows("1 1")) - rows := tk.MustQuery("show table t regions").Rows() - tbl := testGetTableByName(c, tk.Se, "cluster_index_regions", "t") - // Check the region start key. - c.Assert(rows[0][1], Matches, fmt.Sprintf("t_%d_", tbl.Meta().ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_r_03800000000000000183800000000000", tbl.Meta().ID)) - - tk.MustExec("drop table t;") - tk.MustExec("create table t (a int, b int);") - tk.MustQuery("split table t between (0) and (100000) regions 2;").Check(testkit.Rows("1 1")) - rows = tk.MustQuery("show table t regions").Rows() - tbl = testGetTableByName(c, tk.Se, "cluster_index_regions", "t") - // Check the region start key is int64. - c.Assert(rows[0][1], Matches, fmt.Sprintf("t_%d_", tbl.Meta().ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_r_50000", tbl.Meta().ID)) -} - -func (s *testSuiteWithData) TestClusterIndexOuterJoinElimination(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - tk.MustExec("create table t (a int, b int, c int, primary key(a,b))") - rows := tk.MustQuery(`explain format = 'brief' select t1.a from t t1 left join t t2 on t1.a = t2.a and t1.b = t2.b`).Rows() - rowStrs := s.testData.ConvertRowsToStrings(rows) - for _, row := range rowStrs { - // outer join has been eliminated. - c.Assert(strings.Index(row, "Join"), Equals, -1) - } -} - -func (s *testSplitTable) TestShowTableRegion(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t_regions") - tk.MustExec("set global tidb_scatter_region = 1") - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) - tk.MustExec("create table t_regions (a int key, b int, c int, index idx(b), index idx2(c))") - _, err := tk.Exec("split partition table t_regions partition (p1,p2) index idx between (0) and (20000) regions 2;") - c.Assert(err.Error(), Equals, plannercore.ErrPartitionClauseOnNonpartitioned.Error()) - - // Test show table regions. - tk.MustQuery(`split table t_regions between (-10000) and (10000) regions 4;`).Check(testkit.Rows("4 1")) - re := tk.MustQuery("show table t_regions regions") - - // Test show table regions and split table on global temporary table. - tk.MustExec("drop table if exists t_regions_temporary_table") - tk.MustExec("create global temporary table t_regions_temporary_table (a int key, b int, c int, index idx(b), index idx2(c)) ON COMMIT DELETE ROWS;") - // Test show table regions. - _, err = tk.Exec("show table t_regions_temporary_table regions") - c.Assert(err.Error(), Equals, plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("show table regions").Error()) - // Test split table. - _, err = tk.Exec("split table t_regions_temporary_table between (-10000) and (10000) regions 4;") - c.Assert(err.Error(), Equals, plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("split table").Error()) - _, err = tk.Exec("split partition table t_regions_temporary_table partition (p1,p2) index idx between (0) and (20000) regions 2;") - c.Assert(err.Error(), Equals, plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("split table").Error()) - tk.MustExec("drop table if exists t_regions_temporary_table") - // Test pre split regions - _, err = tk.Exec("create global temporary table temporary_table_pre_split(id int ) pre_split_regions=2 ON COMMIT DELETE ROWS;") - c.Assert(err.Error(), Equals, ddl.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions").Error()) - - // Test show table regions and split table on local temporary table - tk.MustExec("drop table if exists t_regions_local_temporary_table") - tk.MustExec("create temporary table t_regions_local_temporary_table (a int key, b int, c int, index idx(b), index idx2(c));") - // Test show table regions. - _, err = tk.Exec("show table t_regions_local_temporary_table regions") - c.Assert(err.Error(), Equals, plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("show table regions").Error()) - // Test split table. - _, err = tk.Exec("split table t_regions_local_temporary_table between (-10000) and (10000) regions 4;") - c.Assert(err.Error(), Equals, plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("split table").Error()) - _, err = tk.Exec("split partition table t_regions_local_temporary_table partition (p1,p2) index idx between (0) and (20000) regions 2;") - c.Assert(err.Error(), Equals, plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("split table").Error()) - tk.MustExec("drop table if exists t_regions_local_temporary_table") - // Test pre split regions - _, err = tk.Exec("create temporary table local_temporary_table_pre_split(id int ) pre_split_regions=2;") - c.Assert(err.Error(), Equals, ddl.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions").Error()) - - rows := re.Rows() - // Table t_regions should have 5 regions now. - // 4 regions to store record data. - // 1 region to store index data. - c.Assert(len(rows), Equals, 5) - c.Assert(len(rows[0]), Equals, 11) - tbl := testGetTableByName(c, tk.Se, "test", "t_regions") - // Check the region start key. - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_r", tbl.Meta().ID)) - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_-5000", tbl.Meta().ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_0", tbl.Meta().ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_5000", tbl.Meta().ID)) - c.Assert(rows[4][2], Equals, fmt.Sprintf("t_%d_r", tbl.Meta().ID)) - - // Test show table index regions. - tk.MustQuery(`split table t_regions index idx between (-1000) and (1000) regions 4;`).Check(testkit.Rows("4 1")) - re = tk.MustQuery("show table t_regions index idx regions") - rows = re.Rows() - // The index `idx` of table t_regions should have 4 regions now. - c.Assert(len(rows), Equals, 4) - // Check the region start key. - c.Assert(rows[0][1], Matches, fmt.Sprintf("t_%d.*", tbl.Meta().ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID)) - c.Assert(rows[2][1], Matches, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID)) - c.Assert(rows[3][1], Matches, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID)) - - re = tk.MustQuery("show table t_regions regions") - rows = re.Rows() - // The index `idx` of table t_regions should have 9 regions now. - // 4 regions to store record data. - // 4 region to store index idx data. - // 1 region to store index idx2 data. - c.Assert(len(rows), Equals, 9) - // Check the region start key. - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_r", tbl.Meta().ID)) - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_-5000", tbl.Meta().ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_0", tbl.Meta().ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_5000", tbl.Meta().ID)) - c.Assert(rows[4][1], Matches, fmt.Sprintf("t_%d_", tbl.Meta().ID)) - c.Assert(rows[5][1], Matches, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID)) - c.Assert(rows[6][1], Matches, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID)) - c.Assert(rows[7][2], Equals, fmt.Sprintf("t_%d_i_2_", tbl.Meta().ID)) - c.Assert(rows[8][2], Equals, fmt.Sprintf("t_%d_r", tbl.Meta().ID)) - - // Test unsigned primary key and wait scatter finish. - tk.MustExec("drop table if exists t_regions") - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) - tk.MustExec("create table t_regions (a int unsigned key, b int, index idx(b))") - - // Test show table regions. - tk.MustExec(`set @@session.tidb_wait_split_region_finish=1;`) - tk.MustQuery(`split table t_regions by (2500),(5000),(7500);`).Check(testkit.Rows("3 1")) - re = tk.MustQuery("show table t_regions regions") - rows = re.Rows() - // Table t_regions should have 4 regions now. - c.Assert(len(rows), Equals, 4) - tbl = testGetTableByName(c, tk.Se, "test", "t_regions") - // Check the region start key. - c.Assert(rows[0][1], Matches, "t_.*") - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_2500", tbl.Meta().ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_5000", tbl.Meta().ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_7500", tbl.Meta().ID)) - - // Test show table index regions. - tk.MustQuery(`split table t_regions index idx by (250),(500),(750);`).Check(testkit.Rows("4 1")) - re = tk.MustQuery("show table t_regions index idx regions") - rows = re.Rows() - // The index `idx` of table t_regions should have 4 regions now. - c.Assert(len(rows), Equals, 4) - // Check the region start key. - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_", tbl.Meta().ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID)) - c.Assert(rows[2][1], Matches, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID)) - c.Assert(rows[3][1], Matches, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID)) - - // Test show table regions for partition table when disable split region when create table. - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) - tk.MustExec("drop table if exists partition_t;") - tk.MustExec("set @@session.tidb_enable_table_partition = '1';") - tk.MustExec("create table partition_t (a int, b int,index(a)) partition by hash (a) partitions 3") - re = tk.MustQuery("show table partition_t regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 1) - c.Assert(rows[0][1], Matches, "t_.*") - - // Test show table regions for partition table when enable split region when create table. - atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) - tk.MustExec("set @@global.tidb_scatter_region=1;") - tk.MustExec("drop table if exists partition_t;") - tk.MustExec("create table partition_t (a int, b int,index(a)) partition by hash (a) partitions 3") - re = tk.MustQuery("show table partition_t regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 3) - tbl = testGetTableByName(c, tk.Se, "test", "partition_t") - partitionDef := tbl.Meta().GetPartitionInfo().Definitions - c.Assert(rows[0][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[0].ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[1].ID)) - c.Assert(rows[2][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[2].ID)) - - // Test split partition region when add new partition. - tk.MustExec("drop table if exists partition_t;") - tk.MustExec(`create table partition_t (a int, b int,index(a)) PARTITION BY RANGE (a) ( - PARTITION p0 VALUES LESS THAN (10), - PARTITION p1 VALUES LESS THAN (20), - PARTITION p2 VALUES LESS THAN (30));`) - tk.MustExec(`alter table partition_t add partition ( partition p3 values less than (40), partition p4 values less than (50) );`) - re = tk.MustQuery("show table partition_t regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 5) - tbl = testGetTableByName(c, tk.Se, "test", "partition_t") - partitionDef = tbl.Meta().GetPartitionInfo().Definitions - c.Assert(rows[0][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[0].ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[1].ID)) - c.Assert(rows[2][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[2].ID)) - c.Assert(rows[3][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[3].ID)) - c.Assert(rows[4][1], Matches, fmt.Sprintf("t_%d_.*", partitionDef[4].ID)) - - // Test pre-split table region when create table. - tk.MustExec("drop table if exists t_pre") - tk.MustExec("create table t_pre (a int, b int) shard_row_id_bits = 2 pre_split_regions=2;") - re = tk.MustQuery("show table t_pre regions") - rows = re.Rows() - // Table t_regions should have 4 regions now. - c.Assert(len(rows), Equals, 4) - tbl = testGetTableByName(c, tk.Se, "test", "t_pre") - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_2305843009213693952", tbl.Meta().ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_4611686018427387904", tbl.Meta().ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_6917529027641081856", tbl.Meta().ID)) - - // Test pre-split table region when create table. - tk.MustExec("drop table if exists pt_pre") - tk.MustExec("create table pt_pre (a int, b int) shard_row_id_bits = 2 pre_split_regions=2 partition by hash(a) partitions 3;") - re = tk.MustQuery("show table pt_pre regions") - rows = re.Rows() - // Table t_regions should have 4 regions now. - c.Assert(len(rows), Equals, 12) - tbl = testGetTableByName(c, tk.Se, "test", "pt_pre") - pi := tbl.Meta().GetPartitionInfo().Definitions - c.Assert(len(pi), Equals, 3) - for i, p := range pi { - c.Assert(rows[1+4*i][1], Equals, fmt.Sprintf("t_%d_r_2305843009213693952", p.ID)) - c.Assert(rows[2+4*i][1], Equals, fmt.Sprintf("t_%d_r_4611686018427387904", p.ID)) - c.Assert(rows[3+4*i][1], Equals, fmt.Sprintf("t_%d_r_6917529027641081856", p.ID)) - } - - defer atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) - - // Test split partition table. - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int,b int) partition by hash(a) partitions 5;") - tk.MustQuery("split table t between (0) and (4000000) regions 4;").Check(testkit.Rows("15 1")) - re = tk.MustQuery("show table t regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 20) - tbl = testGetTableByName(c, tk.Se, "test", "t") - c.Assert(len(tbl.Meta().GetPartitionInfo().Definitions), Equals, 5) - for i, p := range tbl.Meta().GetPartitionInfo().Definitions { - c.Assert(rows[i*4+0][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[i*4+1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[i*4+2][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[i*4+3][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - } - - // Test split region for partition table with specified partition. - tk.MustQuery("split table t partition (p4) between (1000000) and (2000000) regions 5;").Check(testkit.Rows("4 1")) - re = tk.MustQuery("show table t regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 24) - tbl = testGetTableByName(c, tk.Se, "test", "t") - c.Assert(len(tbl.Meta().GetPartitionInfo().Definitions), Equals, 5) - for i := 0; i < 4; i++ { - p := tbl.Meta().GetPartitionInfo().Definitions[i] - c.Assert(rows[i*4+0][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[i*4+1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[i*4+2][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[i*4+3][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - } - for i := 4; i < 5; i++ { - p := tbl.Meta().GetPartitionInfo().Definitions[i] - c.Assert(rows[i*4+0][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[i*4+1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[i*4+2][1], Equals, fmt.Sprintf("t_%d_r_1200000", p.ID)) - c.Assert(rows[i*4+3][1], Equals, fmt.Sprintf("t_%d_r_1400000", p.ID)) - c.Assert(rows[i*4+4][1], Equals, fmt.Sprintf("t_%d_r_1600000", p.ID)) - c.Assert(rows[i*4+5][1], Equals, fmt.Sprintf("t_%d_r_1800000", p.ID)) - c.Assert(rows[i*4+6][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[i*4+7][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - } - - // Test for show table partition regions. - for i := 0; i < 4; i++ { - re = tk.MustQuery(fmt.Sprintf("show table t partition (p%v) regions", i)) - rows = re.Rows() - c.Assert(len(rows), Equals, 4) - p := tbl.Meta().GetPartitionInfo().Definitions[i] - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - } - re = tk.MustQuery("show table t partition (p0, p4) regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 12) - p := tbl.Meta().GetPartitionInfo().Definitions[0] - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - p = tbl.Meta().GetPartitionInfo().Definitions[4] - c.Assert(rows[4][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[5][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[6][1], Equals, fmt.Sprintf("t_%d_r_1200000", p.ID)) - c.Assert(rows[7][1], Equals, fmt.Sprintf("t_%d_r_1400000", p.ID)) - c.Assert(rows[8][1], Equals, fmt.Sprintf("t_%d_r_1600000", p.ID)) - c.Assert(rows[9][1], Equals, fmt.Sprintf("t_%d_r_1800000", p.ID)) - c.Assert(rows[10][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[11][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - // Test for duplicate partition names. - re = tk.MustQuery("show table t partition (p0, p0, p0) regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 4) - p = tbl.Meta().GetPartitionInfo().Definitions[0] - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[2][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[3][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - - // Test split partition table index. - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int,b int,index idx(a)) partition by hash(a) partitions 5;") - tk.MustQuery("split table t between (0) and (4000000) regions 4;").Check(testkit.Rows("20 1")) - tk.MustQuery("split table t index idx between (0) and (4000000) regions 4;").Check(testkit.Rows("20 1")) - re = tk.MustQuery("show table t regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 40) - tbl = testGetTableByName(c, tk.Se, "test", "t") - c.Assert(len(tbl.Meta().GetPartitionInfo().Definitions), Equals, 5) - for i := 0; i < 5; i++ { - p := tbl.Meta().GetPartitionInfo().Definitions[i] - c.Assert(rows[i*8+0][1], Equals, fmt.Sprintf("t_%d_r", p.ID)) - c.Assert(rows[i*8+1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[i*8+2][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[i*8+3][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - c.Assert(rows[i*8+4][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[i*8+5][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+6][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+7][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - } - - // Test split index region for partition table with specified partition. - tk.MustQuery("split table t partition (p4) index idx between (0) and (1000000) regions 5;").Check(testkit.Rows("4 1")) - re = tk.MustQuery("show table t regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 44) - tbl = testGetTableByName(c, tk.Se, "test", "t") - c.Assert(len(tbl.Meta().GetPartitionInfo().Definitions), Equals, 5) - for i := 0; i < 4; i++ { - p := tbl.Meta().GetPartitionInfo().Definitions[i] - c.Assert(rows[i*8+0][1], Equals, fmt.Sprintf("t_%d_r", p.ID)) - c.Assert(rows[i*8+1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[i*8+2][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[i*8+3][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - c.Assert(rows[i*8+4][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[i*8+5][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+6][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+7][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - } - for i := 4; i < 5; i++ { - p := tbl.Meta().GetPartitionInfo().Definitions[i] - c.Assert(rows[i*8+0][1], Equals, fmt.Sprintf("t_%d_r", p.ID)) - c.Assert(rows[i*8+1][1], Equals, fmt.Sprintf("t_%d_r_1000000", p.ID)) - c.Assert(rows[i*8+2][1], Equals, fmt.Sprintf("t_%d_r_2000000", p.ID)) - c.Assert(rows[i*8+3][1], Equals, fmt.Sprintf("t_%d_r_3000000", p.ID)) - c.Assert(rows[i*8+4][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[i*8+5][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+6][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+7][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+8][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+9][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+10][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[i*8+11][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - } - - // Test show table partition region on unknown-partition. - err = tk.QueryToErr("show table t partition (p_unknown) index idx regions") - c.Assert(terror.ErrorEqual(err, table.ErrUnknownPartition), IsTrue) - - // Test show table partition index. - for i := 0; i < 4; i++ { - re = tk.MustQuery(fmt.Sprintf("show table t partition (p%v) index idx regions", i)) - rows = re.Rows() - c.Assert(len(rows), Equals, 4) - p := tbl.Meta().GetPartitionInfo().Definitions[i] - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[2][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[3][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - } - re = tk.MustQuery("show table t partition (p3,p4) index idx regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 12) - p = tbl.Meta().GetPartitionInfo().Definitions[3] - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[1][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[2][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[3][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - p = tbl.Meta().GetPartitionInfo().Definitions[4] - c.Assert(rows[4][1], Equals, fmt.Sprintf("t_%d_", p.ID)) - c.Assert(rows[5][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[6][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[7][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[8][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[9][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[10][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - c.Assert(rows[11][1], Matches, fmt.Sprintf("t_%d_i_1_.*", p.ID)) - - // Test split for the second index. - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int,b int,index idx(a), index idx2(b))") - tk.MustQuery("split table t index idx2 between (0) and (4000000) regions 2;").Check(testkit.Rows("3 1")) - re = tk.MustQuery("show table t regions") - rows = re.Rows() - c.Assert(len(rows), Equals, 4) - tbl = testGetTableByName(c, tk.Se, "test", "t") - c.Assert(rows[0][1], Equals, fmt.Sprintf("t_%d_i_3_", tbl.Meta().ID)) - c.Assert(rows[1][1], Equals, fmt.Sprintf("t_%d_", tbl.Meta().ID)) - c.Assert(rows[2][1], Matches, fmt.Sprintf("t_%d_i_2_.*", tbl.Meta().ID)) - c.Assert(rows[3][1], Matches, fmt.Sprintf("t_%d_i_2_.*", tbl.Meta().ID)) - - // Test show table partition region on non-partition table. - err = tk.QueryToErr("show table t partition (p3,p4) index idx regions") - c.Assert(terror.ErrorEqual(err, plannercore.ErrPartitionClauseOnNonpartitioned), IsTrue) -} - -func testGetTableByName(c *C, ctx sessionctx.Context, db, table string) table.Table { - dom := domain.GetDomain(ctx) - // Make sure the table schema is the new schema. - err := dom.Reload() - c.Assert(err, IsNil) - tbl, err := dom.InfoSchema().TableByName(model.NewCIStr(db), model.NewCIStr(table)) - c.Assert(err, IsNil) - return tbl -} - -func (s *testSuiteP2) TestIssue10435(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1(i int, j int, k int)") - tk.MustExec("insert into t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4)") - tk.MustExec("INSERT INTO t1 SELECT 10*i,j,5*j FROM t1 UNION SELECT 20*i,j,5*j FROM t1 UNION SELECT 30*i,j,5*j FROM t1") - - tk.MustExec("set @@session.tidb_enable_window_function=1") - tk.MustQuery("SELECT SUM(i) OVER W FROM t1 WINDOW w AS (PARTITION BY j ORDER BY i) ORDER BY 1+SUM(i) OVER w").Check( - testkit.Rows("1", "2", "3", "4", "11", "22", "31", "33", "44", "61", "62", "93", "122", "124", "183", "244"), - ) -} - -func (s *testSerialSuite2) TestUnsignedFeedback(c *C) { - tk := testkit.NewTestKit(c, s.store) - oriProbability := statistics.FeedbackProbability.Load() - statistics.FeedbackProbability.Store(1.0) - defer func() { statistics.FeedbackProbability.Store(oriProbability) }() - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a bigint unsigned, b int, primary key(a))") - tk.MustExec("insert into t values (1,1),(2,2)") - tk.MustExec("analyze table t") - tk.MustQuery("select count(distinct b) from t").Check(testkit.Rows("2")) - result := tk.MustQuery("explain analyze select count(distinct b) from t") - c.Assert(result.Rows()[2][4], Equals, "table:t") - c.Assert(result.Rows()[2][6], Equals, "keep order:false") -} - -func (s *testSuiteWithCliBaseCharset) TestCharsetFeature(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - tk.MustExec("set names gbk;") - tk.MustQuery("select @@character_set_connection;").Check(testkit.Rows("gbk")) - tk.MustQuery("select @@collation_connection;").Check(testkit.Rows("gbk_chinese_ci")) - tk.MustExec("set @@character_set_client=gbk;") - tk.MustQuery("select @@character_set_client;").Check(testkit.Rows("gbk")) - tk.MustExec("set names utf8mb4;") - tk.MustExec("set @@character_set_connection=gbk;") - tk.MustQuery("select @@character_set_connection;").Check(testkit.Rows("gbk")) - tk.MustQuery("select @@collation_connection;").Check(testkit.Rows("gbk_chinese_ci")) - - tk.MustGetErrCode("select _gbk 'a';", errno.ErrUnknownCharacterSet) - - tk.MustExec("use test") - tk.MustExec("create table t1(a char(10) charset gbk);") - tk.MustExec("create table t2(a char(10) charset gbk collate gbk_bin);") - tk.MustExec("create table t3(a char(10)) charset gbk;") - tk.MustExec("alter table t3 add column b char(10) charset gbk;") - tk.MustQuery("show create table t3").Check(testkit.Rows("t3 CREATE TABLE `t3` (\n" + - " `a` char(10) DEFAULT NULL,\n" + - " `b` char(10) DEFAULT NULL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci", - )) - tk.MustExec("create table t4(a char(10));") - tk.MustExec("alter table t4 add column b char(10) charset gbk;") - tk.MustQuery("show create table t4").Check(testkit.Rows("t4 CREATE TABLE `t4` (\n" + - " `a` char(10) DEFAULT NULL,\n" + - " `b` char(10) CHARACTER SET gbk COLLATE gbk_chinese_ci DEFAULT NULL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", - )) - tk.MustExec("create table t5(a char(20), b char(20) charset utf8, c binary) charset gbk collate gbk_bin;") - - tk.MustExec("create database test_gbk charset gbk;") - tk.MustExec("use test_gbk") - tk.MustExec("create table t1(a char(10));") - tk.MustQuery("show create table t1").Check(testkit.Rows("t1 CREATE TABLE `t1` (\n" + - " `a` char(10) DEFAULT NULL\n" + - ") ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci", - )) -} - -func (s *testSuiteWithCliBaseCharset) TestCharsetFeatureCollation(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t" + - "(ascii_char char(10) character set ascii," + - "gbk_char char(10) character set gbk collate gbk_bin," + - "latin_char char(10) character set latin1," + - "utf8mb4_char char(10) character set utf8mb4)", - ) - tk.MustExec("insert into t values ('a', 'a', 'a', 'a'), ('a', '啊', '€', 'ㅂ');") - tk.MustQuery("select collation(concat(ascii_char, gbk_char)) from t;").Check(testkit.Rows("gbk_bin", "gbk_bin")) - tk.MustQuery("select collation(concat(gbk_char, ascii_char)) from t;").Check(testkit.Rows("gbk_bin", "gbk_bin")) - tk.MustQuery("select collation(concat(utf8mb4_char, gbk_char)) from t;").Check(testkit.Rows("utf8mb4_bin", "utf8mb4_bin")) - tk.MustQuery("select collation(concat(gbk_char, utf8mb4_char)) from t;").Check(testkit.Rows("utf8mb4_bin", "utf8mb4_bin")) - tk.MustQuery("select collation(concat('啊', convert('啊' using gbk) collate gbk_bin));").Check(testkit.Rows("gbk_bin")) - tk.MustQuery("select collation(concat(_latin1 'a', convert('啊' using gbk) collate gbk_bin));").Check(testkit.Rows("gbk_bin")) - - tk.MustGetErrCode("select collation(concat(latin_char, gbk_char)) from t;", mysql.ErrCantAggregate2collations) - tk.MustGetErrCode("select collation(concat(convert('€' using latin1), convert('啊' using gbk) collate gbk_bin));", mysql.ErrCantAggregate2collations) - tk.MustGetErrCode("select collation(concat(utf8mb4_char, gbk_char collate gbk_bin)) from t;", mysql.ErrCantAggregate2collations) - tk.MustGetErrCode("select collation(concat('ㅂ', convert('啊' using gbk) collate gbk_bin));", mysql.ErrCantAggregate2collations) - tk.MustGetErrCode("select collation(concat(ascii_char collate ascii_bin, gbk_char)) from t;", mysql.ErrCantAggregate2collations) -} - -func (s *testSuiteWithCliBaseCharset) TestCharsetWithPrefixIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a char(20) charset gbk, b char(20) charset gbk, primary key (a(2)));") - tk.MustExec("insert into t values ('a', '中文'), ('中文', '中文'), ('一二三', '一二三'), ('b', '一二三');") - tk.MustQuery("select * from t").Check(testkit.Rows("a 中文", "中文 中文", "一二三 一二三", "b 一二三")) - tk.MustExec("drop table t") - tk.MustExec("create table t(a char(20) charset gbk, b char(20) charset gbk, unique index idx_a(a(2)));") - tk.MustExec("insert into t values ('a', '中文'), ('中文', '中文'), ('一二三', '一二三'), ('b', '一二三');") - tk.MustQuery("select * from t").Check(testkit.Rows("a 中文", "中文 中文", "一二三 一二三", "b 一二三")) -} - -func (s *testSerialSuite2) TestIssue23567(c *C) { - tk := testkit.NewTestKit(c, s.store) - oriProbability := statistics.FeedbackProbability.Load() - statistics.FeedbackProbability.Store(1.0) - defer func() { statistics.FeedbackProbability.Store(oriProbability) }() - failpoint.Enable("github.com/pingcap/tidb/statistics/feedbackNoNDVCollect", `return("")`) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a bigint unsigned, b int, primary key(a))") - tk.MustExec("insert into t values (1, 1), (2, 2)") - tk.MustExec("analyze table t") - // The SQL should not panic. - tk.MustQuery("select count(distinct b) from t") - failpoint.Disable("github.com/pingcap/tidb/statistics/feedbackNoNDVCollect") -} - -func (s *testSuite) TestSummaryFailedUpdate(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int, b int as(-a))") - tk.MustExec("insert into t(a) values(1), (3), (7)") - sm := &mockSessionManager1{ - PS: make([]*util.ProcessInfo, 0), - } - tk.Se.SetSessionManager(sm) - s.domain.ExpensiveQueryHandle().SetSessionManager(sm) - defer config.RestoreFunc()() - config.UpdateGlobal(func(conf *config.Config) { - conf.OOMAction = config.OOMActionCancel - }) - c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) - tk.MustExec("set @@tidb_mem_quota_query=1") - err := tk.ExecToErr("update t set t.a = t.a - 1 where t.a in (select a from t where a < 4)") - c.Assert(err, NotNil) - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") - tk.MustExec("set @@tidb_mem_quota_query=1000000000") - tk.MustQuery("select stmt_type from information_schema.statements_summary where digest_text = 'update `t` set `t` . `a` = `t` . `a` - ? where `t` . `a` in ( select `a` from `t` where `a` < ? )'").Check(testkit.Rows("Update")) -} - -func (s *testSuite) TestOOMPanicAction(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int primary key, b double);") - tk.MustExec("insert into t values (1,1)") - sm := &mockSessionManager1{ - PS: make([]*util.ProcessInfo, 0), - } - tk.Se.SetSessionManager(sm) - s.domain.ExpensiveQueryHandle().SetSessionManager(sm) - defer config.RestoreFunc()() - config.UpdateGlobal(func(conf *config.Config) { - conf.OOMAction = config.OOMActionCancel - }) - tk.MustExec("set @@tidb_mem_quota_query=1;") - err := tk.QueryToErr("select sum(b) from t group by a;") - c.Assert(err, NotNil) - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") - - // Test insert from select oom panic. - tk.MustExec("drop table if exists t,t1") - tk.MustExec("create table t (a bigint);") - tk.MustExec("create table t1 (a bigint);") - tk.MustExec("set @@tidb_mem_quota_query=200;") - _, err = tk.Exec("insert into t1 values (1),(2),(3),(4),(5);") - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") - _, err = tk.Exec("replace into t1 values (1),(2),(3),(4),(5);") - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") - tk.MustExec("set @@tidb_mem_quota_query=10000") - tk.MustExec("insert into t1 values (1),(2),(3),(4),(5);") - tk.MustExec("set @@tidb_mem_quota_query=10;") - _, err = tk.Exec("insert into t select a from t1 order by a desc;") - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") - _, err = tk.Exec("replace into t select a from t1 order by a desc;") - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") - - tk.MustExec("set @@tidb_mem_quota_query=10000") - tk.MustExec("insert into t values (1),(2),(3),(4),(5);") - // Set the memory quota to 244 to make this SQL panic during the DeleteExec - // instead of the TableReaderExec. - tk.MustExec("set @@tidb_mem_quota_query=244;") - _, err = tk.Exec("delete from t") - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") - - tk.MustExec("set @@tidb_mem_quota_query=10000;") - tk.MustExec("delete from t1") - tk.MustExec("insert into t1 values(1)") - tk.MustExec("insert into t values (1),(2),(3),(4),(5);") - tk.MustExec("set @@tidb_mem_quota_query=244;") - _, err = tk.Exec("delete t, t1 from t join t1 on t.a = t1.a") - c.Assert(err, NotNil) - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") - - tk.MustExec("set @@tidb_mem_quota_query=100000;") - tk.MustExec("truncate table t") - tk.MustExec("insert into t values(1),(2),(3)") - // set the memory to quota to make the SQL panic during UpdateExec instead - // of TableReader. - tk.MustExec("set @@tidb_mem_quota_query=244;") - _, err = tk.Exec("update t set a = 4") - c.Assert(err.Error(), Matches, "Out Of Memory Quota!.*") -} - -type testRecoverTable struct { - store kv.Storage - dom *domain.Domain - cluster testutils.Cluster - cli *regionProperityClient -} - -func (s *testRecoverTable) SetUpSuite(c *C) { - cli := ®ionProperityClient{} - hijackClient := func(c tikv.Client) tikv.Client { - cli.Client = c - return cli - } - s.cli = cli - - var err error - s.store, err = mockstore.NewMockStore( - mockstore.WithClientHijacker(hijackClient), - mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithSingleStore(c) - s.cluster = c - }), - ) - c.Assert(err, IsNil) - s.dom, err = session.BootstrapSession(s.store) - c.Assert(err, IsNil) -} - -func (s *testRecoverTable) TearDownSuite(c *C) { - s.dom.Close() - s.store.Close() -} - -func (s *testRecoverTable) TestRecoverTable(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange", `return(true)`), IsNil) - defer func() { - err := failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange") - c.Assert(err, IsNil) - }() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database if not exists test_recover") - tk.MustExec("use test_recover") - tk.MustExec("drop table if exists t_recover") - tk.MustExec("create table t_recover (a int);") - - timeBeforeDrop, timeAfterDrop, safePointSQL, resetGC := testkit.MockGC(tk) - defer resetGC() - - tk.MustExec("insert into t_recover values (1),(2),(3)") - tk.MustExec("drop table t_recover") - - // if GC safe point is not exists in mysql.tidb - _, err := tk.Exec("recover table t_recover") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "can not get 'tikv_gc_safe_point'") - // set GC safe point - tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) - - // Should recover, and we can drop it straight away. - tk.MustExec("recover table t_recover") - tk.MustExec("drop table t_recover") - - err = gcutil.EnableGC(tk.Se) - c.Assert(err, IsNil) - - // recover job is before GC safe point - tk.MustExec(fmt.Sprintf(safePointSQL, timeAfterDrop)) - _, err = tk.Exec("recover table t_recover") - c.Assert(err, NotNil) - c.Assert(strings.Contains(err.Error(), "Can't find dropped/truncated table 't_recover' in GC safe point"), Equals, true) - - // set GC safe point - tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) - // if there is a new table with the same name, should return failed. - tk.MustExec("create table t_recover (a int);") - _, err = tk.Exec("recover table t_recover") - c.Assert(err.Error(), Equals, infoschema.ErrTableExists.GenWithStackByArgs("t_recover").Error()) - - // drop the new table with the same name, then recover table. - tk.MustExec("rename table t_recover to t_recover2") - - // do recover table. - tk.MustExec("recover table t_recover") - - // check recover table meta and data record. - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3")) - // check recover table autoID. - tk.MustExec("insert into t_recover values (4),(5),(6)") - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) - // check rebase auto id. - tk.MustQuery("select a,_tidb_rowid from t_recover;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 5003")) - - // recover table by none exits job. - _, err = tk.Exec(fmt.Sprintf("recover table by job %d", 10000000)) - c.Assert(err, NotNil) - - // Disable GC by manual first, then after recover table, the GC enable status should also be disabled. - err = gcutil.DisableGC(tk.Se) - c.Assert(err, IsNil) - - tk.MustExec("delete from t_recover where a > 1") - tk.MustExec("drop table t_recover") - - tk.MustExec("recover table t_recover") - - // check recover table meta and data record. - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1")) - // check recover table autoID. - tk.MustExec("insert into t_recover values (7),(8),(9)") - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "7", "8", "9")) - - // Recover truncate table. - tk.MustExec("truncate table t_recover") - tk.MustExec("rename table t_recover to t_recover_new") - tk.MustExec("recover table t_recover") - tk.MustExec("insert into t_recover values (10)") - tk.MustQuery("select * from t_recover;").Check(testkit.Rows("1", "7", "8", "9", "10")) - - // Test for recover one table multiple time. - tk.MustExec("drop table t_recover") - tk.MustExec("flashback table t_recover to t_recover_tmp") - _, err = tk.Exec("recover table t_recover") - c.Assert(infoschema.ErrTableExists.Equal(err), IsTrue) - - gcEnable, err := gcutil.CheckGCEnable(tk.Se) - c.Assert(err, IsNil) - c.Assert(gcEnable, Equals, false) -} - -func (s *testRecoverTable) TestFlashbackTable(c *C) { - c.Assert(failpoint.Enable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange", `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/meta/autoid/mockAutoIDChange"), IsNil) - }() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database if not exists test_flashback") - tk.MustExec("use test_flashback") - tk.MustExec("drop table if exists t_flashback") - tk.MustExec("create table t_flashback (a int);") - - timeBeforeDrop, _, safePointSQL, resetGC := testkit.MockGC(tk) - defer resetGC() - - // Set GC safe point - tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) - // Set GC enable. - err := gcutil.EnableGC(tk.Se) - c.Assert(err, IsNil) - - tk.MustExec("insert into t_flashback values (1),(2),(3)") - tk.MustExec("drop table t_flashback") - - // Test flash table with not_exist_table_name name. - _, err = tk.Exec("flashback table t_not_exists") - c.Assert(err.Error(), Equals, "Can't find localTemporary/dropped/truncated table: t_not_exists in DDL history jobs") - - // Test flashback table failed by there is already a new table with the same name. - // If there is a new table with the same name, should return failed. - tk.MustExec("create table t_flashback (a int);") - _, err = tk.Exec("flashback table t_flashback") - c.Assert(err.Error(), Equals, infoschema.ErrTableExists.GenWithStackByArgs("t_flashback").Error()) - - // Drop the new table with the same name, then flashback table. - tk.MustExec("rename table t_flashback to t_flashback_tmp") - - // Test for flashback table. - tk.MustExec("flashback table t_flashback") - // Check flashback table meta and data record. - tk.MustQuery("select * from t_flashback;").Check(testkit.Rows("1", "2", "3")) - // Check flashback table autoID. - tk.MustExec("insert into t_flashback values (4),(5),(6)") - tk.MustQuery("select * from t_flashback;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) - // Check rebase auto id. - tk.MustQuery("select a,_tidb_rowid from t_flashback;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 5003")) - - // Test for flashback to new table. - tk.MustExec("drop table t_flashback") - tk.MustExec("create table t_flashback (a int);") - tk.MustExec("flashback table t_flashback to t_flashback2") - // Check flashback table meta and data record. - tk.MustQuery("select * from t_flashback2;").Check(testkit.Rows("1", "2", "3", "4", "5", "6")) - // Check flashback table autoID. - tk.MustExec("insert into t_flashback2 values (7),(8),(9)") - tk.MustQuery("select * from t_flashback2;").Check(testkit.Rows("1", "2", "3", "4", "5", "6", "7", "8", "9")) - // Check rebase auto id. - tk.MustQuery("select a,_tidb_rowid from t_flashback2;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 5003", "7 10001", "8 10002", "9 10003")) - - // Test for flashback one table multiple time. - _, err = tk.Exec("flashback table t_flashback to t_flashback4") - c.Assert(infoschema.ErrTableExists.Equal(err), IsTrue) - - // Test for flashback truncated table to new table. - tk.MustExec("truncate table t_flashback2") - tk.MustExec("flashback table t_flashback2 to t_flashback3") - // Check flashback table meta and data record. - tk.MustQuery("select * from t_flashback3;").Check(testkit.Rows("1", "2", "3", "4", "5", "6", "7", "8", "9")) - // Check flashback table autoID. - tk.MustExec("insert into t_flashback3 values (10),(11)") - tk.MustQuery("select * from t_flashback3;").Check(testkit.Rows("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11")) - // Check rebase auto id. - tk.MustQuery("select a,_tidb_rowid from t_flashback3;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 5003", "7 10001", "8 10002", "9 10003", "10 15001", "11 15002")) - - // Test for flashback drop partition table. - tk.MustExec("drop table if exists t_p_flashback") - tk.MustExec("create table t_p_flashback (a int) partition by hash(a) partitions 4;") - tk.MustExec("insert into t_p_flashback values (1),(2),(3)") - tk.MustExec("drop table t_p_flashback") - tk.MustExec("flashback table t_p_flashback") - // Check flashback table meta and data record. - tk.MustQuery("select * from t_p_flashback order by a;").Check(testkit.Rows("1", "2", "3")) - // Check flashback table autoID. - tk.MustExec("insert into t_p_flashback values (4),(5)") - tk.MustQuery("select a,_tidb_rowid from t_p_flashback order by a;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002")) - - // Test for flashback truncate partition table. - tk.MustExec("truncate table t_p_flashback") - tk.MustExec("flashback table t_p_flashback to t_p_flashback1") - // Check flashback table meta and data record. - tk.MustQuery("select * from t_p_flashback1 order by a;").Check(testkit.Rows("1", "2", "3", "4", "5")) - // Check flashback table autoID. - tk.MustExec("insert into t_p_flashback1 values (6)") - tk.MustQuery("select a,_tidb_rowid from t_p_flashback1 order by a;").Check(testkit.Rows("1 1", "2 2", "3 3", "4 5001", "5 5002", "6 10001")) - - tk.MustExec("drop database if exists Test2") - tk.MustExec("create database Test2") - tk.MustExec("use Test2") - tk.MustExec("create table t (a int);") - tk.MustExec("insert into t values (1),(2)") - tk.MustExec("drop table t") - tk.MustExec("flashback table t") - tk.MustQuery("select a from t order by a").Check(testkit.Rows("1", "2")) - - tk.MustExec("drop table t") - tk.MustExec("drop database if exists Test3") - tk.MustExec("create database Test3") - tk.MustExec("use Test3") - tk.MustExec("create table t (a int);") - tk.MustExec("drop table t") - tk.MustExec("drop database Test3") - tk.MustExec("use Test2") - tk.MustExec("flashback table t") - tk.MustExec("insert into t values (3)") - tk.MustQuery("select a from t order by a").Check(testkit.Rows("1", "2", "3")) -} - -func (s *testRecoverTable) TestRecoverTempTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database if not exists test_recover") - tk.MustExec("use test_recover") - tk.MustExec("drop table if exists t_recover") - tk.MustExec("create global temporary table t_recover (a int) on commit delete rows;") - - tk.MustExec("use test_recover") - tk.MustExec("drop table if exists tmp2_recover") - tk.MustExec("create temporary table tmp2_recover (a int);") - - timeBeforeDrop, _, safePointSQL, resetGC := testkit.MockGC(tk) - defer resetGC() - // Set GC safe point - tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) - - tk.MustExec("drop table t_recover") - tk.MustGetErrCode("recover table t_recover;", errno.ErrUnsupportedDDLOperation) - tk.MustGetErrCode("flashback table t_recover;", errno.ErrUnsupportedDDLOperation) - tk.MustExec("drop table tmp2_recover") - tk.MustGetErrMsg("recover table tmp2_recover;", "Can't find localTemporary/dropped/truncated table: tmp2_recover in DDL history jobs") - tk.MustGetErrMsg("flashback table tmp2_recover;", "Can't find localTemporary/dropped/truncated table: tmp2_recover in DDL history jobs") -} - -func (s *testSuiteP2) TestPointGetPreparedPlan(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("drop database if exists ps_text") - defer tk1.MustExec("drop database if exists ps_text") - tk1.MustExec("create database ps_text") - tk1.MustExec("use ps_text") - - tk1.MustExec(`create table t (a int, b int, c int, - primary key k_a(a), - unique key k_b(b))`) - tk1.MustExec("insert into t values (1, 1, 1)") - tk1.MustExec("insert into t values (2, 2, 2)") - tk1.MustExec("insert into t values (3, 3, 3)") - - pspk1Id, _, _, err := tk1.Se.PrepareStmt("select * from t where a = ?") - c.Assert(err, IsNil) - tk1.Se.GetSessionVars().PreparedStmts[pspk1Id].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false - pspk2Id, _, _, err := tk1.Se.PrepareStmt("select * from t where ? = a ") - c.Assert(err, IsNil) - tk1.Se.GetSessionVars().PreparedStmts[pspk2Id].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false - - ctx := context.Background() - // first time plan generated - rs, err := tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(0)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) - - // using the generated plan but with different params - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(2)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(0)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(2)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3")) - - // unique index - psuk1Id, _, _, err := tk1.Se.PrepareStmt("select * from t where b = ? ") - c.Assert(err, IsNil) - tk1.Se.GetSessionVars().PreparedStmts[psuk1Id].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(2)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(0)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) - - // test schema changed, cached plan should be invalidated - tk1.MustExec("alter table t add column col4 int default 10 after c") - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(0)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(2)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) - - tk1.MustExec("alter table t drop index k_b") - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(2)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(0)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) - - tk1.MustExec(`insert into t values(4, 3, 3, 11)`) - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(2)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10", "4 3 3 11")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(0)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) - - tk1.MustExec("delete from t where a = 4") - tk1.MustExec("alter table t add index k_b(b)") - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(2)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, psuk1Id, []types.Datum{types.NewDatum(0)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) - - // use pk again - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk2Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(3)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("3 3 3 10")) -} - -func (s *testSuiteP2) TestPointGetPreparedPlanWithCommitMode(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("drop database if exists ps_text") - defer tk1.MustExec("drop database if exists ps_text") - tk1.MustExec("create database ps_text") - tk1.MustExec("use ps_text") - - tk1.MustExec(`create table t (a int, b int, c int, - primary key k_a(a), - unique key k_b(b))`) - tk1.MustExec("insert into t values (1, 1, 1)") - tk1.MustExec("insert into t values (2, 2, 2)") - tk1.MustExec("insert into t values (3, 3, 3)") - - pspk1Id, _, _, err := tk1.Se.PrepareStmt("select * from t where a = ?") - c.Assert(err, IsNil) - tk1.Se.GetSessionVars().PreparedStmts[pspk1Id].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false - - ctx := context.Background() - // first time plan generated - rs, err := tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(0)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(nil) - - // using the generated plan but with different params - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) - - // next start a non autocommit txn - tk1.MustExec("set autocommit = 0") - tk1.MustExec("begin") - // try to exec using point get plan(this plan should not go short path) - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) - - // update rows - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use ps_text") - tk2.MustExec("update t set c = c + 10 where c = 1") - - // try to point get again - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 1")) - - // try to update in session 1 - tk1.MustExec("update t set c = c + 10 where c = 1") - _, err = tk1.Exec("commit") - c.Assert(kv.ErrWriteConflict.Equal(err), IsTrue, Commentf("error: %s", err)) - - // verify - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(1)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("1 1 11")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, pspk1Id, []types.Datum{types.NewDatum(2)}) - c.Assert(err, IsNil) - tk1.ResultSetToResult(rs, Commentf("%v", rs)).Check(testkit.Rows("2 2 2")) - - tk2.MustQuery("select * from t where a = 1").Check(testkit.Rows("1 1 11")) -} - -func (s *testSuiteP2) TestPointUpdatePreparedPlan(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("drop database if exists pu_test") - defer tk1.MustExec("drop database if exists pu_test") - tk1.MustExec("create database pu_test") - tk1.MustExec("use pu_test") - - tk1.MustExec(`create table t (a int, b int, c int, - primary key k_a(a), - unique key k_b(b))`) - tk1.MustExec("insert into t values (1, 1, 1)") - tk1.MustExec("insert into t values (2, 2, 2)") - tk1.MustExec("insert into t values (3, 3, 3)") - - updateID1, pc, _, err := tk1.Se.PrepareStmt(`update t set c = c + 1 where a = ?`) - c.Assert(err, IsNil) - tk1.Se.GetSessionVars().PreparedStmts[updateID1].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false - c.Assert(pc, Equals, 1) - updateID2, pc, _, err := tk1.Se.PrepareStmt(`update t set c = c + 2 where ? = a`) - c.Assert(err, IsNil) - tk1.Se.GetSessionVars().PreparedStmts[updateID2].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false - c.Assert(pc, Equals, 1) - - ctx := context.Background() - // first time plan generated - rs, err := tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 4")) - - // using the generated plan but with different params - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 5")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 6")) - - // updateID2 - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID2, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 8")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID2, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 10")) - - // unique index - updUkID1, _, _, err := tk1.Se.PrepareStmt(`update t set c = c + 10 where b = ?`) - c.Assert(err, IsNil) - tk1.Se.GetSessionVars().PreparedStmts[updUkID1].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 20")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 30")) - - // test schema changed, cached plan should be invalidated - tk1.MustExec("alter table t add column col4 int default 10 after c") - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 31 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 32 10")) - - tk1.MustExec("alter table t drop index k_b") - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 42 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 52 10")) - - tk1.MustExec("alter table t add unique index k_b(b)") - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 62 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updUkID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 72 10")) - - tk1.MustQuery("select * from t where a = 1").Check(testkit.Rows("1 1 1 10")) - tk1.MustQuery("select * from t where a = 2").Check(testkit.Rows("2 2 2 10")) -} - -func (s *testSuiteP2) TestPointUpdatePreparedPlanWithCommitMode(c *C) { - tk1 := testkit.NewTestKit(c, s.store) - tk1.MustExec("drop database if exists pu_test2") - defer tk1.MustExec("drop database if exists pu_test2") - tk1.MustExec("create database pu_test2") - tk1.MustExec("use pu_test2") - - tk1.MustExec(`create table t (a int, b int, c int, - primary key k_a(a), - unique key k_b(b))`) - tk1.MustExec("insert into t values (1, 1, 1)") - tk1.MustExec("insert into t values (2, 2, 2)") - tk1.MustExec("insert into t values (3, 3, 3)") - - ctx := context.Background() - updateID1, _, _, err := tk1.Se.PrepareStmt(`update t set c = c + 1 where a = ?`) - tk1.Se.GetSessionVars().PreparedStmts[updateID1].(*plannercore.CachedPrepareStmt).PreparedAst.UseCache = false - c.Assert(err, IsNil) - - // first time plan generated - rs, err := tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 4")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 5")) - - // next start a non autocommit txn - tk1.MustExec("set autocommit = 0") - tk1.MustExec("begin") - // try to exec using point get plan(this plan should not go short path) - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 6")) - - // update rows - tk2 := testkit.NewTestKit(c, s.store) - tk2.MustExec("use pu_test2") - tk2.MustExec(`prepare pu2 from "update t set c = c + 2 where ? = a "`) - tk2.MustExec("set @p3 = 3") - tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 5")) - tk2.MustExec("execute pu2 using @p3") - tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 7")) - tk2.MustExec("execute pu2 using @p3") - tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 9")) - - // try to update in session 1 - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 6")) - _, err = tk1.Exec("commit") - c.Assert(kv.ErrWriteConflict.Equal(err), IsTrue, Commentf("error: %s", err)) - - // verify - tk2.MustQuery("select * from t where a = 1").Check(testkit.Rows("1 1 1")) - tk1.MustQuery("select * from t where a = 2").Check(testkit.Rows("2 2 2")) - tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 9")) - tk1.MustQuery("select * from t where a = 2").Check(testkit.Rows("2 2 2")) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 9")) - - // again next start a non autocommit txn - tk1.MustExec("set autocommit = 0") - tk1.MustExec("begin") - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 10")) - - rs, err = tk1.Se.ExecutePreparedStmt(ctx, updateID1, []types.Datum{types.NewDatum(3)}) - c.Assert(rs, IsNil) - c.Assert(err, IsNil) - tk1.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 11")) - tk1.MustExec("commit") - - tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 11")) -} - -func (s *testSuite1) TestPartitionHashCode(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec(`create table t(c1 bigint, c2 bigint, c3 bigint, primary key(c1)) - partition by hash (c1) partitions 4;`) - var wg util.WaitGroupWrapper - for i := 0; i < 5; i++ { - wg.Run(func() { - tk1 := testkit.NewTestKitWithInit(c, s.store) - for i := 0; i < 5; i++ { - tk1.MustExec("select * from t") - } - }) - } - wg.Wait() -} - -func (s *testSuite1) TestAlterDefaultValue(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t(a int, primary key(a))") - tk.MustExec("insert into t(a) values(1)") - tk.MustExec("alter table t add column b int default 1") - tk.MustExec("alter table t alter b set default 2") - tk.MustQuery("select b from t where a = 1").Check(testkit.Rows("1")) -} - -type testClusterTableSuite struct { - testSuiteWithCliBase - rpcserver *grpc.Server - listenAddr string -} - -func (s *testClusterTableSuite) SetUpSuite(c *C) { - s.testSuiteWithCliBase.SetUpSuite(c) - s.rpcserver, s.listenAddr = s.setUpRPCService(c, "127.0.0.1:0") -} - -func (s *testClusterTableSuite) setUpRPCService(c *C, addr string) (*grpc.Server, string) { - sm := &mockSessionManager1{} - sm.PS = append(sm.PS, &util.ProcessInfo{ - ID: 1, - User: "root", - Host: "127.0.0.1", - Command: mysql.ComQuery, - }) - lis, err := net.Listen("tcp", addr) - c.Assert(err, IsNil) - srv := server.NewRPCServer(config.GetGlobalConfig(), s.dom, sm) - port := lis.Addr().(*net.TCPAddr).Port - addr = fmt.Sprintf("127.0.0.1:%d", port) - go func() { - err = srv.Serve(lis) - c.Assert(err, IsNil) - }() - config.UpdateGlobal(func(conf *config.Config) { - conf.Status.StatusPort = uint(port) - }) - return srv, addr -} -func (s *testClusterTableSuite) TearDownSuite(c *C) { - if s.rpcserver != nil { - s.rpcserver.Stop() - s.rpcserver = nil - } - s.testSuiteWithCliBase.TearDownSuite(c) -} - -func (s *testSuiteP1) TestPrepareLoadData(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustGetErrCode(`prepare stmt from "load data local infile '/tmp/load_data_test.csv' into table test";`, mysql.ErrUnsupportedPs) -} - -func (s *testClusterTableSuite) TestSlowQuery(c *C) { - logData0 := "" - logData1 := ` -# Time: 2020-02-15T18:00:01.000000+08:00 -select 1; -# Time: 2020-02-15T19:00:05.000000+08:00 -select 2;` - logData2 := ` -# Time: 2020-02-16T18:00:01.000000+08:00 -select 3; -# Time: 2020-02-16T18:00:05.000000+08:00 -select 4;` - logData3 := ` -# Time: 2020-02-16T19:00:00.000000+08:00 -select 5; -# Time: 2020-02-17T18:00:05.000000+08:00 -select 6;` - logData4 := ` -# Time: 2020-05-14T19:03:54.314615176+08:00 -select 7;` - logData := []string{logData0, logData1, logData2, logData3, logData4} - - fileName0 := "tidb-slow-2020-02-14T19-04-05.01.log" - fileName1 := "tidb-slow-2020-02-15T19-04-05.01.log" - fileName2 := "tidb-slow-2020-02-16T19-04-05.01.log" - fileName3 := "tidb-slow-2020-02-17T18-00-05.01.log" - fileName4 := "tidb-slow.log" - fileNames := []string{fileName0, fileName1, fileName2, fileName3, fileName4} - - prepareLogs(c, logData, fileNames) - defer func() { - removeFiles(fileNames) - }() - tk := testkit.NewTestKitWithInit(c, s.store) - loc, err := time.LoadLocation("Asia/Shanghai") - c.Assert(err, IsNil) - tk.Se.GetSessionVars().TimeZone = loc - tk.MustExec("use information_schema") - cases := []struct { - prepareSQL string - sql string - result []string - }{ - { - sql: "select count(*),min(time),max(time) from %s where time > '2019-01-26 21:51:00' and time < now()", - result: []string{"7|2020-02-15 18:00:01.000000|2020-05-14 19:03:54.314615"}, - }, - { - sql: "select count(*),min(time),max(time) from %s where time > '2020-02-15 19:00:00' and time < '2020-02-16 18:00:02'", - result: []string{"2|2020-02-15 19:00:05.000000|2020-02-16 18:00:01.000000"}, - }, - { - sql: "select count(*),min(time),max(time) from %s where time > '2020-02-16 18:00:02' and time < '2020-02-17 17:00:00'", - result: []string{"2|2020-02-16 18:00:05.000000|2020-02-16 19:00:00.000000"}, - }, - { - sql: "select count(*),min(time),max(time) from %s where time > '2020-02-16 18:00:02' and time < '2020-02-17 20:00:00'", - result: []string{"3|2020-02-16 18:00:05.000000|2020-02-17 18:00:05.000000"}, - }, - { - sql: "select count(*),min(time),max(time) from %s", - result: []string{"1|2020-05-14 19:03:54.314615|2020-05-14 19:03:54.314615"}, - }, - { - sql: "select count(*),min(time) from %s where time > '2020-02-16 20:00:00'", - result: []string{"1|2020-02-17 18:00:05.000000"}, - }, - { - sql: "select count(*) from %s where time > '2020-02-17 20:00:00'", - result: []string{"0"}, - }, - { - sql: "select query from %s where time > '2019-01-26 21:51:00' and time < now()", - result: []string{"select 1;", "select 2;", "select 3;", "select 4;", "select 5;", "select 6;", "select 7;"}, - }, - // Test for different timezone. - { - prepareSQL: "set @@time_zone = '+00:00'", - sql: "select time from %s where time = '2020-02-17 10:00:05.000000'", - result: []string{"2020-02-17 10:00:05.000000"}, - }, - { - prepareSQL: "set @@time_zone = '+02:00'", - sql: "select time from %s where time = '2020-02-17 12:00:05.000000'", - result: []string{"2020-02-17 12:00:05.000000"}, - }, - // Test for issue 17224 - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select time from %s where time = '2020-05-14 19:03:54.314615'", - result: []string{"2020-05-14 19:03:54.314615"}, - }, - } - for _, cas := range cases { - if len(cas.prepareSQL) > 0 { - tk.MustExec(cas.prepareSQL) - } - sql := fmt.Sprintf(cas.sql, "slow_query") - tk.MustQuery(sql).Check(testutil.RowsWithSep("|", cas.result...)) - sql = fmt.Sprintf(cas.sql, "cluster_slow_query") - tk.MustQuery(sql).Check(testutil.RowsWithSep("|", cas.result...)) - } -} - -func (s *testClusterTableSuite) TestIssue20236(c *C) { - logData0 := "" - logData1 := ` -# Time: 2020-02-15T18:00:01.000000+08:00 -select 1; -# Time: 2020-02-15T19:00:05.000000+08:00 -select 2; -# Time: 2020-02-15T20:00:05.000000+08:00` - logData2 := `select 3; -# Time: 2020-02-16T18:00:01.000000+08:00 -select 4; -# Time: 2020-02-16T18:00:05.000000+08:00 -select 5;` - logData3 := ` -# Time: 2020-02-16T19:00:00.000000+08:00 -select 6; -# Time: 2020-02-17T18:00:05.000000+08:00 -select 7; -# Time: 2020-02-17T19:00:00.000000+08:00` - logData4 := `select 8; -# Time: 2020-02-17T20:00:00.000000+08:00 -select 9 -# Time: 2020-05-14T19:03:54.314615176+08:00 -select 10;` - logData := []string{logData0, logData1, logData2, logData3, logData4} - - fileName0 := "tidb-slow-2020-02-14T19-04-05.01.log" - fileName1 := "tidb-slow-2020-02-15T19-04-05.01.log" - fileName2 := "tidb-slow-2020-02-16T19-04-05.01.log" - fileName3 := "tidb-slow-2020-02-17T18-00-05.01.log" - fileName4 := "tidb-slow.log" - fileNames := []string{fileName0, fileName1, fileName2, fileName3, fileName4} - prepareLogs(c, logData, fileNames) - defer func() { - removeFiles(fileNames) - }() - tk := testkit.NewTestKitWithInit(c, s.store) - loc, err := time.LoadLocation("Asia/Shanghai") - c.Assert(err, IsNil) - tk.Se.GetSessionVars().TimeZone = loc - tk.MustExec("use information_schema") - cases := []struct { - prepareSQL string - sql string - result []string - }{ - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select time from cluster_slow_query where time > '2020-02-17 12:00:05.000000' and time < '2020-05-14 20:00:00.000000'", - result: []string{"2020-02-17 18:00:05.000000", "2020-02-17 19:00:00.000000", "2020-05-14 19:03:54.314615"}, - }, - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select time from cluster_slow_query where time > '2020-02-17 12:00:05.000000' and time < '2020-05-14 20:00:00.000000' order by time desc", - result: []string{"2020-05-14 19:03:54.314615", "2020-02-17 19:00:00.000000", "2020-02-17 18:00:05.000000"}, - }, - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select time from cluster_slow_query where (time > '2020-02-15 18:00:00' and time < '2020-02-15 20:01:00') or (time > '2020-02-17 18:00:00' and time < '2020-05-14 20:00:00') order by time", - result: []string{"2020-02-15 18:00:01.000000", "2020-02-15 19:00:05.000000", "2020-02-17 18:00:05.000000", "2020-02-17 19:00:00.000000", "2020-05-14 19:03:54.314615"}, - }, - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select time from cluster_slow_query where (time > '2020-02-15 18:00:00' and time < '2020-02-15 20:01:00') or (time > '2020-02-17 18:00:00' and time < '2020-05-14 20:00:00') order by time desc", - result: []string{"2020-05-14 19:03:54.314615", "2020-02-17 19:00:00.000000", "2020-02-17 18:00:05.000000", "2020-02-15 19:00:05.000000", "2020-02-15 18:00:01.000000"}, - }, - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select count(*) from cluster_slow_query where time > '2020-02-15 18:00:00.000000' and time < '2020-05-14 20:00:00.000000' order by time desc", - result: []string{"9"}, - }, - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select count(*) from cluster_slow_query where (time > '2020-02-16 18:00:00' and time < '2020-05-14 20:00:00') or (time > '2020-02-17 18:00:00' and time < '2020-05-17 20:00:00')", - result: []string{"6"}, - }, - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select count(*) from cluster_slow_query where time > '2020-02-16 18:00:00.000000' and time < '2020-02-17 20:00:00.000000' order by time desc", - result: []string{"5"}, - }, - { - prepareSQL: "set @@time_zone = '+08:00'", - sql: "select time from cluster_slow_query where time > '2020-02-16 18:00:00.000000' and time < '2020-05-14 20:00:00.000000' order by time desc limit 3", - result: []string{"2020-05-14 19:03:54.314615", "2020-02-17 19:00:00.000000", "2020-02-17 18:00:05.000000"}, - }, - } - for _, cas := range cases { - if len(cas.prepareSQL) > 0 { - tk.MustExec(cas.prepareSQL) - } - tk.MustQuery(cas.sql).Check(testutil.RowsWithSep("|", cas.result...)) - } -} - -func (s *testClusterTableSuite) TestSQLDigestTextRetriever(c *C) { - tkInit := testkit.NewTestKitWithInit(c, s.store) - tkInit.MustExec("set global tidb_enable_stmt_summary = 1") - tkInit.MustQuery("select @@global.tidb_enable_stmt_summary").Check(testkit.Rows("1")) - tkInit.MustExec("drop table if exists test_sql_digest_text_retriever") - tkInit.MustExec("create table test_sql_digest_text_retriever (id int primary key, v int)") - - tk := testkit.NewTestKitWithInit(c, s.store) - c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) - tk.MustExec("insert into test_sql_digest_text_retriever values (1, 1)") - - insertNormalized, insertDigest := parser.NormalizeDigest("insert into test_sql_digest_text_retriever values (1, 1)") - _, updateDigest := parser.NormalizeDigest("update test_sql_digest_text_retriever set v = v + 1 where id = 1") - r := &expression.SQLDigestTextRetriever{ - SQLDigestsMap: map[string]string{ - insertDigest.String(): "", - updateDigest.String(): "", - }, - } - err := r.RetrieveLocal(context.Background(), tk.Se) - c.Assert(err, IsNil) - c.Assert(r.SQLDigestsMap[insertDigest.String()], Equals, insertNormalized) - c.Assert(r.SQLDigestsMap[updateDigest.String()], Equals, "") -} - -func (s *testClusterTableSuite) TestFunctionDecodeSQLDigests(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) - tk.MustExec("set global tidb_enable_stmt_summary = 1") - tk.MustQuery("select @@global.tidb_enable_stmt_summary").Check(testkit.Rows("1")) - tk.MustExec("drop table if exists test_func_decode_sql_digests") - tk.MustExec("create table test_func_decode_sql_digests(id int primary key, v int)") - - q1 := "begin" - norm1, digest1 := parser.NormalizeDigest(q1) - q2 := "select @@tidb_current_ts" - norm2, digest2 := parser.NormalizeDigest(q2) - q3 := "select id, v from test_func_decode_sql_digests where id = 1 for update" - norm3, digest3 := parser.NormalizeDigest(q3) - - // TIDB_DECODE_SQL_DIGESTS function doesn't actually do "decoding", instead it queries `statements_summary` and it's - // variations for the corresponding statements. - // Execute the statements so that the queries will be saved into statements_summary table. - tk.MustExec(q1) - // Save the ts to query the transaction from tidb_trx. - ts, err := strconv.ParseUint(tk.MustQuery(q2).Rows()[0][0].(string), 10, 64) - c.Assert(err, IsNil) - c.Assert(ts, Greater, uint64(0)) - tk.MustExec(q3) - tk.MustExec("rollback") - - // Test statements truncating. - decoded := fmt.Sprintf(`["%s","%s","%s"]`, norm1, norm2, norm3) - digests := fmt.Sprintf(`["%s","%s","%s"]`, digest1, digest2, digest3) - tk.MustQuery("select tidb_decode_sql_digests(?, 0)", digests).Check(testkit.Rows(decoded)) - // The three queries are shorter than truncate length, equal to truncate length and longer than truncate length respectively. - tk.MustQuery("select tidb_decode_sql_digests(?, ?)", digests, len(norm2)).Check(testkit.Rows( - "[\"begin\",\"select @@tidb_current_ts\",\"select `id` , `v` from `...\"]")) - - // Empty array. - tk.MustQuery("select tidb_decode_sql_digests('[]')").Check(testkit.Rows("[]")) - - // NULL - tk.MustQuery("select tidb_decode_sql_digests(null)").Check(testkit.Rows("")) - - // Array containing wrong types and not-existing digests (maps to null). - tk.MustQuery("select tidb_decode_sql_digests(?)", fmt.Sprintf(`["%s",1,null,"%s",{"a":1},[2],"%s","","abcde"]`, digest1, digest2, digest3)). - Check(testkit.Rows(fmt.Sprintf(`["%s",null,null,"%s",null,null,"%s",null,null]`, norm1, norm2, norm3))) - - // Not JSON array (throws warnings) - tk.MustQuery(`select tidb_decode_sql_digests('{"a":1}')`).Check(testkit.Rows("")) - tk.MustQuery(`show warnings`).Check(testkit.Rows(`Warning 1210 The argument can't be unmarshalled as JSON array: '{"a":1}'`)) - tk.MustQuery(`select tidb_decode_sql_digests('aabbccdd')`).Check(testkit.Rows("")) - tk.MustQuery(`show warnings`).Check(testkit.Rows(`Warning 1210 The argument can't be unmarshalled as JSON array: 'aabbccdd'`)) - - // Invalid argument count. - tk.MustGetErrCode("select tidb_decode_sql_digests('a', 1, 2)", 1582) - tk.MustGetErrCode("select tidb_decode_sql_digests()", 1582) -} - -func (s *testClusterTableSuite) TestFunctionDecodeSQLDigestsPrivilege(c *C) { - dropUserTk := testkit.NewTestKitWithInit(c, s.store) - c.Assert(dropUserTk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) - - tk := testkit.NewTestKitWithInit(c, s.store) - c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) - tk.MustExec("create user 'testuser'@'localhost'") - defer dropUserTk.MustExec("drop user 'testuser'@'localhost'") - c.Assert(tk.Se.Auth(&auth.UserIdentity{ - Username: "testuser", - Hostname: "localhost", - }, nil, nil), IsTrue) - err := tk.ExecToErr("select tidb_decode_sql_digests('[\"aa\"]')") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[expression:1227]Access denied; you need (at least one of) the PROCESS privilege(s) for this operation") - - tk = testkit.NewTestKitWithInit(c, s.store) - c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "%"}, nil, nil), IsTrue) - tk.MustExec("create user 'testuser2'@'localhost'") - defer dropUserTk.MustExec("drop user 'testuser2'@'localhost'") - tk.MustExec("grant process on *.* to 'testuser2'@'localhost'") - c.Assert(tk.Se.Auth(&auth.UserIdentity{ - Username: "testuser2", - Hostname: "localhost", - }, nil, nil), IsTrue) - _ = tk.MustQuery("select tidb_decode_sql_digests('[\"aa\"]')") -} - -func prepareLogs(c *C, logData []string, fileNames []string) { - writeFile := func(file string, data string) { - f, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) - c.Assert(err, IsNil) - _, err = f.Write([]byte(data)) - c.Assert(f.Close(), IsNil) - c.Assert(err, IsNil) - } - - for i, log := range logData { - writeFile(fileNames[i], log) - } -} - -func removeFiles(fileNames []string) { - for _, fileName := range fileNames { - os.Remove(fileName) - } -} - -func (s *testSuite1) TestIssue15718(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists tt;") - tk.MustExec("create table tt(a decimal(10, 0), b varchar(1), c time);") - tk.MustExec("insert into tt values(0, '2', null), (7, null, '1122'), (NULL, 'w', null), (NULL, '2', '3344'), (NULL, NULL, '0'), (7, 'f', '33');") - tk.MustQuery("select a and b as d, a or c as e from tt;").Check(testkit.Rows("0 ", " 1", "0 ", " 1", " ", "0 1")) - - tk.MustExec("drop table if exists tt;") - tk.MustExec("create table tt(a decimal(10, 0), b varchar(1), c time);") - tk.MustExec("insert into tt values(0, '2', '123'), (7, null, '1122'), (null, 'w', null);") - tk.MustQuery("select a and b as d, a, b from tt order by d limit 1;").Check(testkit.Rows(" 7 ")) - tk.MustQuery("select b or c as d, b, c from tt order by d limit 1;").Check(testkit.Rows(" w ")) - - tk.MustExec("drop table if exists t0;") - tk.MustExec("CREATE TABLE t0(c0 FLOAT);") - tk.MustExec("INSERT INTO t0(c0) VALUES (NULL);") - tk.MustQuery("SELECT * FROM t0 WHERE NOT(0 OR t0.c0);").Check(testkit.Rows()) -} - -func (s *testSuite1) TestIssue15767(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists tt;") - tk.MustExec("create table t(a int, b char);") - tk.MustExec("insert into t values (1,'s'),(2,'b'),(1,'c'),(2,'e'),(1,'a');") - tk.MustExec("insert into t select * from t;") - tk.MustExec("insert into t select * from t;") - tk.MustExec("insert into t select * from t;") - tk.MustQuery("select b, count(*) from ( select b from t order by a limit 20 offset 2) as s group by b order by b;").Check(testkit.Rows("a 6", "c 7", "s 7")) -} - -func (s *testSuite1) TestIssue16025(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t0;") - tk.MustExec("CREATE TABLE t0(c0 NUMERIC PRIMARY KEY);") - tk.MustExec("INSERT IGNORE INTO t0(c0) VALUES (NULL);") - tk.MustQuery("SELECT * FROM t0 WHERE c0;").Check(testkit.Rows()) -} - -func (s *testSuite1) TestIssue16854(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t;") - tk.MustExec("CREATE TABLE `t` ( `a` enum('WAITING','PRINTED','STOCKUP','CHECKED','OUTSTOCK','PICKEDUP','WILLBACK','BACKED') DEFAULT NULL)") - tk.MustExec("insert into t values(1),(2),(3),(4),(5),(6),(7);") - for i := 0; i < 7; i++ { - tk.MustExec("insert into t select * from t;") - } - tk.MustExec("set @@tidb_max_chunk_size=100;") - tk.MustQuery("select distinct a from t order by a").Check(testkit.Rows("WAITING", "PRINTED", "STOCKUP", "CHECKED", "OUTSTOCK", "PICKEDUP", "WILLBACK")) - tk.MustExec("drop table t") - - tk.MustExec("CREATE TABLE `t` ( `a` set('WAITING','PRINTED','STOCKUP','CHECKED','OUTSTOCK','PICKEDUP','WILLBACK','BACKED') DEFAULT NULL)") - tk.MustExec("insert into t values(1),(2),(3),(4),(5),(6),(7);") - for i := 0; i < 7; i++ { - tk.MustExec("insert into t select * from t;") - } - tk.MustExec("set @@tidb_max_chunk_size=100;") - tk.MustQuery("select distinct a from t order by a").Check(testkit.Rows("WAITING", "PRINTED", "WAITING,PRINTED", "STOCKUP", "WAITING,STOCKUP", "PRINTED,STOCKUP", "WAITING,PRINTED,STOCKUP")) - tk.MustExec("drop table t") -} - -func (s *testSuite) TestIssue16921(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a float);") - tk.MustExec("create index a on t(a);") - tk.MustExec("insert into t values (1.0), (NULL), (0), (2.0);") - tk.MustQuery("select `a` from `t` use index (a) where !`a`;").Check(testkit.Rows("0")) - tk.MustQuery("select `a` from `t` ignore index (a) where !`a`;").Check(testkit.Rows("0")) - tk.MustQuery("select `a` from `t` use index (a) where `a`;").Check(testkit.Rows("1", "2")) - tk.MustQuery("select `a` from `t` ignore index (a) where `a`;").Check(testkit.Rows("1", "2")) - tk.MustQuery("select a from t use index (a) where not a is true;").Check(testkit.Rows("", "0")) - tk.MustQuery("select a from t use index (a) where not not a is true;").Check(testkit.Rows("1", "2")) - tk.MustQuery("select a from t use index (a) where not not a;").Check(testkit.Rows("1", "2")) - tk.MustQuery("select a from t use index (a) where not not not a is true;").Check(testkit.Rows("", "0")) - tk.MustQuery("select a from t use index (a) where not not not a;").Check(testkit.Rows("0")) -} - -func (s *testSuite) TestIssue19100(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t1, t2;") - tk.MustExec("create table t1 (c decimal);") - tk.MustExec("create table t2 (c decimal, key(c));") - tk.MustExec("insert into t1 values (null);") - tk.MustExec("insert into t2 values (null);") - tk.MustQuery("select count(*) from t1 where not c;").Check(testkit.Rows("0")) - tk.MustQuery("select count(*) from t2 where not c;").Check(testkit.Rows("0")) - tk.MustQuery("select count(*) from t1 where c;").Check(testkit.Rows("0")) - tk.MustQuery("select count(*) from t2 where c;").Check(testkit.Rows("0")) -} - -// this is from jira issue #5856 -func (s *testSuite1) TestInsertValuesWithSubQuery(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t2") - tk.MustExec("create table t2(a int, b int, c int)") - defer tk.MustExec("drop table if exists t2") - - // should not reference upper scope - c.Assert(tk.ExecToErr("insert into t2 values (11, 8, (select not b))"), NotNil) - c.Assert(tk.ExecToErr("insert into t2 set a = 11, b = 8, c = (select b))"), NotNil) - - // subquery reference target table is allowed - tk.MustExec("insert into t2 values(1, 1, (select b from t2))") - tk.MustQuery("select * from t2").Check(testkit.Rows("1 1 ")) - tk.MustExec("insert into t2 set a = 1, b = 1, c = (select b+1 from t2)") - tk.MustQuery("select * from t2").Check(testkit.Rows("1 1 ", "1 1 2")) - - // insert using column should work normally - tk.MustExec("delete from t2") - tk.MustExec("insert into t2 values(2, 4, a)") - tk.MustQuery("select * from t2").Check(testkit.Rows("2 4 2")) - tk.MustExec("insert into t2 set a = 3, b = 5, c = b") - tk.MustQuery("select * from t2").Check(testkit.Rows("2 4 2", "3 5 5")) - - // issue #30626 - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int, b int)") - // TODO: should insert success and get (81,1) from the table - err := tk.ExecToErr("insert into t values ( 81, ( select ( SELECT '1' AS `c0` WHERE '1' >= `subq_0`.`c0` ) as `c1` FROM ( SELECT '1' AS `c0` ) AS `subq_0` ) );") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Insert's SET operation or VALUES_LIST doesn't support complex subqueries now") - err = tk.ExecToErr("insert into t set a = 81, b = (select ( SELECT '1' AS `c0` WHERE '1' >= `subq_0`.`c0` ) as `c1` FROM ( SELECT '1' AS `c0` ) AS `subq_0` );") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "Insert's SET operation or VALUES_LIST doesn't support complex subqueries now") - -} - -func (s *testSuite1) TestDIVZeroInPartitionExpr(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1(a int) partition by range (10 div a) (partition p0 values less than (10), partition p1 values less than maxvalue)") - defer tk.MustExec("drop table if exists t1") - - tk.MustExec("set @@sql_mode=''") - tk.MustExec("insert into t1 values (NULL), (0), (1)") - tk.MustExec("set @@sql_mode='STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO'") - tk.MustGetErrCode("insert into t1 values (NULL), (0), (1)", mysql.ErrDivisionByZero) -} - -func (s *testSuite1) TestInsertIntoGivenPartitionSet(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1") - tk.MustExec(`create table t1( - a int(11) DEFAULT NULL, - b varchar(10) DEFAULT NULL, - UNIQUE KEY idx_a (a)) PARTITION BY RANGE (a) - (PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB, - PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB, - PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB, - PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB, - PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)`) - defer tk.MustExec("drop table if exists t1") - - // insert into - tk.MustExec("insert into t1 partition(p0) values(1, 'a'), (2, 'b')") - tk.MustQuery("select * from t1 partition(p0) order by a").Check(testkit.Rows("1 a", "2 b")) - tk.MustExec("insert into t1 partition(p0, p1) values(3, 'c'), (4, 'd')") - tk.MustQuery("select * from t1 partition(p1)").Check(testkit.Rows()) - - tk.MustGetErrMsg("insert into t1 values(1, 'a')", "[kv:1062]Duplicate entry '1' for key 'idx_a'") - tk.MustGetErrMsg("insert into t1 partition(p0, p_non_exist) values(1, 'a')", "[table:1735]Unknown partition 'p_non_exist' in table 't1'") - tk.MustGetErrMsg("insert into t1 partition(p0, p1) values(40, 'a')", "[table:1748]Found a row not matching the given partition set") - - // replace into - tk.MustExec("replace into t1 partition(p0) values(1, 'replace')") - tk.MustExec("replace into t1 partition(p0, p1) values(3, 'replace'), (4, 'replace')") - tk.MustExec("replace into t1 values(1, 'a')") - tk.MustQuery("select * from t1 partition (p0) order by a").Check(testkit.Rows("1 a", "2 b", "3 replace", "4 replace")) - - tk.MustGetErrMsg("replace into t1 partition(p0, p_non_exist) values(1, 'a')", "[table:1735]Unknown partition 'p_non_exist' in table 't1'") - tk.MustGetErrMsg("replace into t1 partition(p0, p1) values(40, 'a')", "[table:1748]Found a row not matching the given partition set") - - tk.MustExec("truncate table t1") - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int, b char(10))") - defer tk.MustExec("drop table if exists t") - - // insert into general table - tk.MustGetErrMsg("insert into t partition(p0, p1) values(1, 'a')", "[planner:1747]PARTITION () clause on non partitioned table") - - // insert into from select - tk.MustExec("insert into t values(1, 'a'), (2, 'b')") - tk.MustExec("insert into t1 partition(p0) select * from t") - tk.MustQuery("select * from t1 partition(p0) order by a").Check(testkit.Rows("1 a", "2 b")) - - tk.MustExec("truncate table t") - tk.MustExec("insert into t values(3, 'c'), (4, 'd')") - tk.MustExec("insert into t1 partition(p0, p1) select * from t") - tk.MustQuery("select * from t1 partition(p1) order by a").Check(testkit.Rows()) - tk.MustQuery("select * from t1 partition(p0) order by a").Check(testkit.Rows("1 a", "2 b", "3 c", "4 d")) - - tk.MustGetErrMsg("insert into t1 select 1, 'a'", "[kv:1062]Duplicate entry '1' for key 'idx_a'") - tk.MustGetErrMsg("insert into t1 partition(p0, p_non_exist) select 1, 'a'", "[table:1735]Unknown partition 'p_non_exist' in table 't1'") - tk.MustGetErrMsg("insert into t1 partition(p0, p1) select 40, 'a'", "[table:1748]Found a row not matching the given partition set") - - // replace into from select - tk.MustExec("replace into t1 partition(p0) select 1, 'replace'") - tk.MustExec("truncate table t") - tk.MustExec("insert into t values(3, 'replace'), (4, 'replace')") - tk.MustExec("replace into t1 partition(p0, p1) select * from t") - - tk.MustExec("replace into t1 select 1, 'a'") - tk.MustQuery("select * from t1 partition (p0) order by a").Check(testkit.Rows("1 a", "2 b", "3 replace", "4 replace")) - tk.MustGetErrMsg("replace into t1 partition(p0, p_non_exist) select 1, 'a'", "[table:1735]Unknown partition 'p_non_exist' in table 't1'") - tk.MustGetErrMsg("replace into t1 partition(p0, p1) select 40, 'a'", "[table:1748]Found a row not matching the given partition set") -} - -func (s *testSuite1) TestUpdateGivenPartitionSet(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1,t2,t3,t4") - tk.MustExec(`create table t1( - a int(11), - b varchar(10) DEFAULT NULL, - primary key idx_a (a)) PARTITION BY RANGE (a) - (PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB, - PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB, - PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB, - PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB, - PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)`) - - tk.MustExec(`create table t2( - a int(11) DEFAULT NULL, - b varchar(10) DEFAULT NULL) PARTITION BY RANGE (a) - (PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB, - PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB, - PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB, - PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB, - PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)`) - - tk.MustExec(`create table t3 (a int(11), b varchar(10) default null)`) - - defer tk.MustExec("drop table if exists t1,t2,t3") - tk.MustExec("insert into t3 values(1, 'a'), (2, 'b'), (11, 'c'), (21, 'd')") - err := tk.ExecToErr("update t3 partition(p0) set a = 40 where a = 2") - c.Assert(err.Error(), Equals, "[planner:1747]PARTITION () clause on non partitioned table") - - // update with primary key change - tk.MustExec("insert into t1 values(1, 'a'), (2, 'b'), (11, 'c'), (21, 'd')") - err = tk.ExecToErr("update t1 partition(p0, p1) set a = 40") - c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") - err = tk.ExecToErr("update t1 partition(p0) set a = 40 where a = 2") - c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") - // test non-exist partition. - err = tk.ExecToErr("update t1 partition (p0, p_non_exist) set a = 40") - c.Assert(err.Error(), Equals, "[table:1735]Unknown partition 'p_non_exist' in table 't1'") - // test join. - err = tk.ExecToErr("update t1 partition (p0), t3 set t1.a = 40 where t3.a = 2") - c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") - - tk.MustExec("update t1 partition(p0) set a = 3 where a = 2") - tk.MustExec("update t1 partition(p0, p3) set a = 33 where a = 1") - - // update without partition change - tk.MustExec("insert into t2 values(1, 'a'), (2, 'b'), (11, 'c'), (21, 'd')") - err = tk.ExecToErr("update t2 partition(p0, p1) set a = 40") - c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") - err = tk.ExecToErr("update t2 partition(p0) set a = 40 where a = 2") - c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") - - tk.MustExec("update t2 partition(p0) set a = 3 where a = 2") - tk.MustExec("update t2 partition(p0, p3) set a = 33 where a = 1") - - tk.MustExec("create table t4(a int primary key, b int) partition by hash(a) partitions 2") - tk.MustExec("insert into t4(a, b) values(1, 1),(2, 2),(3, 3);") - err = tk.ExecToErr("update t4 partition(p0) set a = 5 where a = 2") - c.Assert(err.Error(), Equals, "[table:1748]Found a row not matching the given partition set") -} - -func (s *testSuiteP2) TestApplyCache(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test;") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(a int);") - tk.MustExec("insert into t values (1),(1),(1),(1),(1),(1),(1),(1),(1);") - tk.MustExec("analyze table t;") - result := tk.MustQuery("explain analyze SELECT count(1) FROM (SELECT (SELECT min(a) FROM t as t2 WHERE t2.a > t1.a) AS a from t as t1) t;") - c.Assert(result.Rows()[1][0], Equals, "└─Apply_39") - var ( - ind int - flag bool - ) - value := (result.Rows()[1][5]).(string) - for ind = 0; ind < len(value)-5; ind++ { - if value[ind:ind+5] == "cache" { - flag = true - break - } - } - c.Assert(flag, Equals, true) - c.Assert(value[ind:], Equals, "cache:ON, cacheHitRatio:88.889%") - - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(a int);") - tk.MustExec("insert into t values (1),(2),(3),(4),(5),(6),(7),(8),(9);") - tk.MustExec("analyze table t;") - result = tk.MustQuery("explain analyze SELECT count(1) FROM (SELECT (SELECT min(a) FROM t as t2 WHERE t2.a > t1.a) AS a from t as t1) t;") - c.Assert(result.Rows()[1][0], Equals, "└─Apply_39") - flag = false - value = (result.Rows()[1][5]).(string) - for ind = 0; ind < len(value)-5; ind++ { - if value[ind:ind+5] == "cache" { - flag = true - break - } - } - c.Assert(flag, Equals, true) - c.Assert(value[ind:], Equals, "cache:OFF") -} - -// For issue 17256 -func (s *testSuite) TestGenerateColumnReplace(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int, b int as (a + 1) virtual not null, unique index idx(b));") - tk.MustExec("REPLACE INTO `t1` (`a`) VALUES (2);") - tk.MustExec("REPLACE INTO `t1` (`a`) VALUES (2);") - tk.MustQuery("select * from t1").Check(testkit.Rows("2 3")) - tk.MustExec("insert into `t1` (`a`) VALUES (2) on duplicate key update a = 3;") - tk.MustQuery("select * from t1").Check(testkit.Rows("3 4")) -} - -func (s *testSlowQuery) TestSlowQueryWithoutSlowLog(c *C) { - tk := testkit.NewTestKit(c, s.store) - originCfg := config.GetGlobalConfig() - newCfg := *originCfg - newCfg.Log.SlowQueryFile = "tidb-slow-not-exist.log" - newCfg.Log.SlowThreshold = math.MaxUint64 - config.StoreGlobalConfig(&newCfg) - defer func() { - config.StoreGlobalConfig(originCfg) - }() - tk.MustQuery("select query from information_schema.slow_query").Check(testkit.Rows()) - tk.MustQuery("select query from information_schema.slow_query where time > '2020-09-15 12:16:39' and time < now()").Check(testkit.Rows()) -} - -func (s *testSlowQuery) TestSlowQuerySensitiveQuery(c *C) { - tk := testkit.NewTestKit(c, s.store) - originCfg := config.GetGlobalConfig() - newCfg := *originCfg - - f, err := os.CreateTemp("", "tidb-slow-*.log") - c.Assert(err, IsNil) - f.Close() - newCfg.Log.SlowQueryFile = f.Name() - config.StoreGlobalConfig(&newCfg) - defer func() { - tk.MustExec("set tidb_slow_log_threshold=300;") - config.StoreGlobalConfig(originCfg) - err = os.Remove(newCfg.Log.SlowQueryFile) - c.Assert(err, IsNil) - }() - err = logutil.InitLogger(newCfg.Log.ToLogConfig()) - c.Assert(err, IsNil) - - tk.MustExec("set tidb_slow_log_threshold=0;") - tk.MustExec("drop user if exists user_sensitive;") - tk.MustExec("create user user_sensitive identified by '123456789';") - tk.MustExec("alter user 'user_sensitive'@'%' identified by 'abcdefg';") - tk.MustExec("set password for 'user_sensitive'@'%' = 'xyzuvw';") - tk.MustQuery("select query from `information_schema`.`slow_query` " + - "where (query like 'set password%' or query like 'create user%' or query like 'alter user%') " + - "and query like '%user_sensitive%' order by query;"). - Check(testkit.Rows( - "alter user {user_sensitive@% password = ***};", - "create user {user_sensitive@% password = ***};", - "set password for user user_sensitive@%;", - )) -} - -func (s *testSlowQuery) TestSlowQueryPrepared(c *C) { - tk := testkit.NewTestKit(c, s.store) - originCfg := config.GetGlobalConfig() - newCfg := *originCfg - - f, err := os.CreateTemp("", "tidb-slow-*.log") - c.Assert(err, IsNil) - f.Close() - newCfg.Log.SlowQueryFile = f.Name() - config.StoreGlobalConfig(&newCfg) - defer func() { - tk.MustExec("set tidb_slow_log_threshold=300;") - tk.MustExec("set tidb_redact_log=0;") - config.StoreGlobalConfig(originCfg) - os.Remove(newCfg.Log.SlowQueryFile) - }() - err = logutil.InitLogger(newCfg.Log.ToLogConfig()) - c.Assert(err, IsNil) - - tk.MustExec("set tidb_slow_log_threshold=0;") - tk.MustExec(`prepare mystmt1 from 'select sleep(?), 1';`) - tk.MustExec("SET @num = 0.01;") - tk.MustExec("execute mystmt1 using @num;") - tk.MustQuery("SELECT Query FROM `information_schema`.`slow_query` " + - "where query like 'select%sleep%' order by time desc limit 1"). - Check(testkit.Rows( - "select sleep(?), 1 [arguments: 0.01];", - )) - - tk.MustExec("set tidb_redact_log=1;") - tk.MustExec(`prepare mystmt2 from 'select sleep(?), 2';`) - tk.MustExec("execute mystmt2 using @num;") - tk.MustQuery("SELECT Query FROM `information_schema`.`slow_query` " + - "where query like 'select%sleep%' order by time desc limit 1"). - Check(testkit.Rows( - "select `sleep` ( ? ) , ?;", - )) -} - -func (s *testSlowQuery) TestLogSlowLogIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - f, err := os.CreateTemp("", "tidb-slow-*.log") - c.Assert(err, IsNil) - f.Close() - - defer config.RestoreFunc()() - config.UpdateGlobal(func(conf *config.Config) { - conf.Log.SlowQueryFile = f.Name() - }) - err = logutil.InitLogger(config.GetGlobalConfig().Log.ToLogConfig()) - c.Assert(err, IsNil) - - tk.MustExec("use test") - tk.MustExec("create table t (a int, b int,index idx(a));") - tk.MustExec("set tidb_slow_log_threshold=0;") - tk.MustQuery("select * from t use index (idx) where a in (1) union select * from t use index (idx) where a in (2,3);") - tk.MustExec("set tidb_slow_log_threshold=300;") - tk.MustQuery("select index_names from `information_schema`.`slow_query` " + - "where query like 'select%union%' limit 1"). - Check(testkit.Rows( - "[t:idx]", - )) -} - -func (s *testSlowQuery) TestSlowQuery(c *C) { - tk := testkit.NewTestKit(c, s.store) - - f, err := os.CreateTemp("", "tidb-slow-*.log") - c.Assert(err, IsNil) - _, err = f.WriteString(` -# Time: 2020-10-13T20:08:13.970563+08:00 -select * from t; -# Time: 2020-10-16T20:08:13.970563+08:00 -select * from t; -`) - c.Assert(err, IsNil) - err = f.Close() - c.Assert(err, IsNil) - executor.ParseSlowLogBatchSize = 1 - originCfg := config.GetGlobalConfig() - newCfg := *originCfg - newCfg.Log.SlowQueryFile = f.Name() - config.StoreGlobalConfig(&newCfg) - defer func() { - executor.ParseSlowLogBatchSize = 64 - config.StoreGlobalConfig(originCfg) - err = os.Remove(newCfg.Log.SlowQueryFile) - c.Assert(err, IsNil) - }() - err = logutil.InitLogger(newCfg.Log.ToLogConfig()) - c.Assert(err, IsNil) - - tk.MustQuery("select count(*) from `information_schema`.`slow_query` where time > '2020-10-16 20:08:13' and time < '2020-10-16 21:08:13'").Check(testkit.Rows("1")) - tk.MustQuery("select count(*) from `information_schema`.`slow_query` where time > '2019-10-13 20:08:13' and time < '2020-10-16 21:08:13'").Check(testkit.Rows("2")) -} - -func (s *testSerialSuite) TestKillTableReader(c *C) { - var retry = "github.com/tikv/client-go/v2/locate/mockRetrySendReqToRegion" - defer func() { - c.Assert(failpoint.Disable(retry), IsNil) - }() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int)") - tk.MustExec("insert into t values (1),(2),(3)") - tk.MustExec("set @@tidb_distsql_scan_concurrency=1") - atomic.StoreUint32(&tk.Se.GetSessionVars().Killed, 0) - c.Assert(failpoint.Enable(retry, `return(true)`), IsNil) - wg := &sync.WaitGroup{} - wg.Add(1) - go func() { - defer wg.Done() - time.Sleep(1 * time.Second) - err := tk.QueryToErr("select * from t") - c.Assert(err, NotNil) - c.Assert(int(terror.ToSQLError(errors.Cause(err).(*terror.Error)).Code), Equals, int(executor.ErrQueryInterrupted.Code())) - }() - atomic.StoreUint32(&tk.Se.GetSessionVars().Killed, 1) - wg.Wait() -} - -func (s *testSerialSuite) TestPrevStmtDesensitization(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec(fmt.Sprintf("set @@session.%v=1", variable.TiDBRedactLog)) - defer tk.MustExec(fmt.Sprintf("set @@session.%v=0", variable.TiDBRedactLog)) - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int, unique key (a))") - tk.MustExec("begin") - tk.MustExec("insert into t values (1),(2)") - c.Assert(tk.Se.GetSessionVars().PrevStmt.String(), Equals, "insert into `t` values ( ? ) , ( ? )") - c.Assert(tk.ExecToErr("insert into t values (1)").Error(), Equals, `[kv:1062]Duplicate entry '?' for key 'a'`) -} - -func (s *testSuite) TestIssue19372(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1, t2;") - tk.MustExec("create table t1 (c_int int, c_str varchar(40), key(c_str));") - tk.MustExec("create table t2 like t1;") - tk.MustExec("insert into t1 values (1, 'a'), (2, 'b'), (3, 'c');") - tk.MustExec("insert into t2 select * from t1;") - tk.MustQuery("select (select t2.c_str from t2 where t2.c_str <= t1.c_str and t2.c_int in (1, 2) order by t2.c_str limit 1) x from t1 order by c_int;").Check(testkit.Rows("a", "a", "a")) -} - -func (s *testSerialSuite1) TestCollectCopRuntimeStats(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int, b int)") - tk.MustExec("set tidb_enable_collect_execution_info=1;") - c.Assert(failpoint.Enable("tikvclient/tikvStoreRespResult", `return(true)`), IsNil) - rows := tk.MustQuery("explain analyze select * from t1").Rows() - c.Assert(len(rows), Equals, 2) - explain := fmt.Sprintf("%v", rows[0]) - c.Assert(explain, Matches, ".*rpc_num: 2, .*regionMiss:.*") - c.Assert(failpoint.Disable("tikvclient/tikvStoreRespResult"), IsNil) -} - -func (s *testSerialSuite1) TestIndexLookupRuntimeStats(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int, b int, index(a))") - tk.MustExec("insert into t1 values (1,2),(2,3),(3,4)") - sql := "explain analyze select * from t1 use index(a) where a > 1;" - rows := tk.MustQuery(sql).Rows() - c.Assert(len(rows), Equals, 3) - explain := fmt.Sprintf("%v", rows[0]) - c.Assert(explain, Matches, ".*time:.*loops:.*index_task:.*table_task: {total_time.*num.*concurrency.*}.*") - indexExplain := fmt.Sprintf("%v", rows[1]) - tableExplain := fmt.Sprintf("%v", rows[2]) - c.Assert(indexExplain, Matches, ".*time:.*loops:.*cop_task:.*") - c.Assert(tableExplain, Matches, ".*time:.*loops:.*cop_task:.*") -} - -func (s *testSerialSuite1) TestHashAggRuntimeStats(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int, b int)") - tk.MustExec("insert into t1 values (1,2),(2,3),(3,4)") - sql := "explain analyze SELECT /*+ HASH_AGG() */ count(*) FROM t1 WHERE a < 10;" - rows := tk.MustQuery(sql).Rows() - c.Assert(len(rows), Equals, 5) - explain := fmt.Sprintf("%v", rows[0]) - c.Assert(explain, Matches, ".*time:.*loops:.*partial_worker:{wall_time:.*concurrency:.*task_num:.*tot_wait:.*tot_exec:.*tot_time:.*max:.*p95:.*}.*final_worker:{wall_time:.*concurrency:.*task_num:.*tot_wait:.*tot_exec:.*tot_time:.*max:.*p95:.*}.*") -} - -func (s *testSerialSuite1) TestIndexMergeRuntimeStats(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t1") - tk.MustExec("set @@tidb_enable_index_merge = 1") - tk.MustExec("create table t1(id int primary key, a int, b int, c int, d int)") - tk.MustExec("create index t1a on t1(a)") - tk.MustExec("create index t1b on t1(b)") - tk.MustExec("insert into t1 values(1,1,1,1,1),(2,2,2,2,2),(3,3,3,3,3),(4,4,4,4,4),(5,5,5,5,5)") - sql := "explain analyze select /*+ use_index_merge(t1, primary, t1a) */ * from t1 where id < 2 or a > 4;" - rows := tk.MustQuery(sql).Rows() - c.Assert(len(rows), Equals, 4) - explain := fmt.Sprintf("%v", rows[0]) - c.Assert(explain, Matches, ".*time:.*loops:.*index_task:{fetch_handle:.*, merge:.*}.*table_task:{num.*concurrency.*fetch_row.*wait_time.*}.*") - tableRangeExplain := fmt.Sprintf("%v", rows[1]) - indexExplain := fmt.Sprintf("%v", rows[2]) - tableExplain := fmt.Sprintf("%v", rows[3]) - c.Assert(tableRangeExplain, Matches, ".*time:.*loops:.*cop_task:.*") - c.Assert(indexExplain, Matches, ".*time:.*loops:.*cop_task:.*") - c.Assert(tableExplain, Matches, ".*time:.*loops:.*cop_task:.*") - tk.MustExec("set @@tidb_enable_collect_execution_info=0;") - sql = "select /*+ use_index_merge(t1, primary, t1a) */ * from t1 where id < 2 or a > 4 order by a" - tk.MustQuery(sql).Check(testkit.Rows("1 1 1 1 1", "5 5 5 5 5")) -} - -func (s *testSuite) TestCollectDMLRuntimeStats(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int, b int, unique index (a))") - - testSQLs := []string{ - "insert ignore into t1 values (5,5);", - "insert into t1 values (5,5) on duplicate key update a=a+1;", - "replace into t1 values (5,6),(6,7)", - "update t1 set a=a+1 where a=6;", - } - - getRootStats := func() string { - info := tk.Se.ShowProcess() - c.Assert(info, NotNil) - p, ok := info.Plan.(plannercore.Plan) - c.Assert(ok, IsTrue) - stats := tk.Se.GetSessionVars().StmtCtx.RuntimeStatsColl.GetRootStats(p.ID()) - return stats.String() - } - for _, sql := range testSQLs { - tk.MustExec(sql) - c.Assert(getRootStats(), Matches, "time.*loops.*Get.*num_rpc.*total_time.*") - } - - // Test for lock keys stats. - tk.MustExec("begin pessimistic") - tk.MustExec("update t1 set b=b+1") - c.Assert(getRootStats(), Matches, "time.*lock_keys.*time.* region.* keys.* lock_rpc:.* rpc_count.*") - tk.MustExec("rollback") - - tk.MustExec("begin pessimistic") - tk.MustQuery("select * from t1 for update").Check(testkit.Rows("5 6", "7 7")) - c.Assert(getRootStats(), Matches, "time.*lock_keys.*time.* region.* keys.* lock_rpc:.* rpc_count.*") - tk.MustExec("rollback") - - tk.MustExec("begin pessimistic") - tk.MustExec("insert ignore into t1 values (9,9)") - c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert: {total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:{BatchGet:{num_rpc:.*, total_time:.*}}}.*") - tk.MustExec("rollback") - - tk.MustExec("begin pessimistic") - tk.MustExec("insert into t1 values (10,10) on duplicate key update a=a+1") - c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert: {total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:{BatchGet:{num_rpc:.*, total_time:.*}.*") - tk.MustExec("rollback") - - tk.MustExec("begin pessimistic") - tk.MustExec("insert into t1 values (1,2)") - c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, insert:.*") - tk.MustExec("rollback") - - tk.MustExec("begin pessimistic") - tk.MustExec("insert ignore into t1 values(11,11) on duplicate key update `a`=`a`+1") - c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prepare:.*, check_insert: {total_time:.*, mem_insert_time:.*, prefetch:.*, rpc:.*}") - tk.MustExec("rollback") - - tk.MustExec("begin pessimistic") - tk.MustExec("replace into t1 values (1,4)") - c.Assert(getRootStats(), Matches, "time:.*, loops:.*, prefetch:.*, rpc:.*") - tk.MustExec("rollback") -} - -func (s *testSuite) TestIssue13758(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1 (pk int(11) primary key, a int(11) not null, b int(11), key idx_b(b), key idx_a(a))") - tk.MustExec("insert into `t1` values (1,1,0),(2,7,6),(3,2,null),(4,1,null),(5,4,5)") - tk.MustExec("create table t2 (a int)") - tk.MustExec("insert into t2 values (1),(null)") - tk.MustQuery("select (select a from t1 use index(idx_a) where b >= t2.a order by a limit 1) as field from t2").Check(testkit.Rows( - "4", - "", - )) -} - -func (s *testCoprCache) SetUpSuite(c *C) { - originConfig := config.GetGlobalConfig() - config.StoreGlobalConfig(config.NewConfig()) - defer config.StoreGlobalConfig(originConfig) - cli := ®ionProperityClient{} - hijackClient := func(c tikv.Client) tikv.Client { - cli.Client = c - return cli - } - var err error - s.store, err = mockstore.NewMockStore( - mockstore.WithClusterInspector(func(c testutils.Cluster) { - mockstore.BootstrapWithSingleStore(c) - s.cls = c - }), - mockstore.WithClientHijacker(hijackClient), - ) - c.Assert(err, IsNil) - s.dom, err = session.BootstrapSession(s.store) - c.Assert(err, IsNil) -} - -func (s *testCoprCache) TearDownSuite(c *C) { - s.dom.Close() - s.store.Close() -} - -func (s *testCoprCache) TestIntegrationCopCache(c *C) { - originConfig := config.GetGlobalConfig() - config.StoreGlobalConfig(config.NewConfig()) - defer config.StoreGlobalConfig(originConfig) - - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int primary key)") - tblInfo, err := s.dom.InfoSchema().TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - tid := tblInfo.Meta().ID - tk.MustExec(`insert into t values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)`) - tableStart := tablecodec.GenTableRecordPrefix(tid) - s.cls.SplitKeys(tableStart, tableStart.PrefixNext(), 6) - - c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/cophandler/mockCopCacheInUnistore", `return(123)`), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/cophandler/mockCopCacheInUnistore"), IsNil) - }() - - rows := tk.MustQuery("explain analyze select * from t where t.a < 10").Rows() - c.Assert(rows[0][2], Equals, "9") - c.Assert(strings.Contains(rows[0][5].(string), "cop_task: {num: 5"), Equals, true) - c.Assert(strings.Contains(rows[0][5].(string), "copr_cache_hit_ratio: 0.00"), Equals, true) - - rows = tk.MustQuery("explain analyze select * from t").Rows() - c.Assert(rows[0][2], Equals, "12") - c.Assert(strings.Contains(rows[0][5].(string), "cop_task: {num: 6"), Equals, true) - hitRatioIdx := strings.Index(rows[0][5].(string), "copr_cache_hit_ratio:") + len("copr_cache_hit_ratio: ") - c.Assert(hitRatioIdx >= len("copr_cache_hit_ratio: "), Equals, true) - hitRatio, err := strconv.ParseFloat(rows[0][5].(string)[hitRatioIdx:hitRatioIdx+4], 64) - c.Assert(err, IsNil) - c.Assert(hitRatio > 0, Equals, true) - - // Test for cop cache disabled. - cfg := config.NewConfig() - cfg.TiKVClient.CoprCache.CapacityMB = 0 - config.StoreGlobalConfig(cfg) - rows = tk.MustQuery("explain analyze select * from t where t.a < 10").Rows() - c.Assert(rows[0][2], Equals, "9") - c.Assert(strings.Contains(rows[0][5].(string), "copr_cache: disabled"), Equals, true) -} - -func (s *testSerialSuite) TestCoprocessorOOMTicase(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec(`set @@tidb_wait_split_region_finish=1`) - // create table for non keep-order case - tk.MustExec("drop table if exists t5") - tk.MustExec("create table t5(id int)") - tk.MustQuery(`split table t5 between (0) and (10000) regions 10`).Check(testkit.Rows("9 1")) - // create table for keep-order case - tk.MustExec("drop table if exists t6") - tk.MustExec("create table t6(id int, index(id))") - tk.MustQuery(`split table t6 between (0) and (10000) regions 10`).Check(testkit.Rows("10 1")) - tk.MustQuery("split table t6 INDEX id between (0) and (10000) regions 10;").Check(testkit.Rows("10 1")) - count := 10 - for i := 0; i < count; i++ { - tk.MustExec(fmt.Sprintf("insert into t5 (id) values (%v)", i)) - tk.MustExec(fmt.Sprintf("insert into t6 (id) values (%v)", i)) - } - defer config.RestoreFunc()() - config.UpdateGlobal(func(conf *config.Config) { - conf.OOMAction = config.OOMActionLog - }) - testcases := []struct { - name string - sql string - }{ - { - name: "keep Order", - sql: "select id from t6 order by id", - }, - { - name: "non keep Order", - sql: "select id from t5", - }, - } - - f := func() { - for _, testcase := range testcases { - c.Log(testcase.name) - // larger than one copResponse, smaller than 2 copResponse - quota := 2*copr.MockResponseSizeForTest - 100 - se, err := session.CreateSession4Test(s.store) - c.Check(err, IsNil) - tk.Se = se - tk.MustExec("use test") - tk.MustExec(fmt.Sprintf("set @@tidb_mem_quota_query=%v;", quota)) - var expect []string - for i := 0; i < count; i++ { - expect = append(expect, fmt.Sprintf("%v", i)) - } - tk.MustQuery(testcase.sql).Sort().Check(testkit.Rows(expect...)) - // assert oom action worked by max consumed > memory quota - c.Assert(tk.Se.GetSessionVars().StmtCtx.MemTracker.MaxConsumed(), Greater, int64(quota)) - se.Close() - } - } - - // ticase-4169, trigger oom action twice after workers consuming all the data - err := failpoint.Enable("github.com/pingcap/tidb/store/copr/ticase-4169", `return(true)`) - c.Assert(err, IsNil) - f() - err = failpoint.Disable("github.com/pingcap/tidb/store/copr/ticase-4169") - c.Assert(err, IsNil) - // ticase-4170, trigger oom action twice after iterator receiving all the data. - err = failpoint.Enable("github.com/pingcap/tidb/store/copr/ticase-4170", `return(true)`) - c.Assert(err, IsNil) - f() - err = failpoint.Disable("github.com/pingcap/tidb/store/copr/ticase-4170") - c.Assert(err, IsNil) - // ticase-4171, trigger oom before reading or consuming any data - err = failpoint.Enable("github.com/pingcap/tidb/store/copr/ticase-4171", `return(true)`) - c.Assert(err, IsNil) - f() - err = failpoint.Disable("github.com/pingcap/tidb/store/copr/ticase-4171") - c.Assert(err, IsNil) -} - -func (s *testSuite) TestIssue20237(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t, s") - tk.MustExec("create table t(a date, b float)") - tk.MustExec("create table s(b float)") - tk.MustExec(`insert into t values(NULL,-37), ("2011-11-04",105), ("2013-03-02",-22), ("2006-07-02",-56), (NULL,124), (NULL,111), ("2018-03-03",-5);`) - tk.MustExec(`insert into s values(-37),(105),(-22),(-56),(124),(105),(111),(-5);`) - tk.MustQuery(`select count(distinct t.a, t.b) from t join s on t.b= s.b;`).Check(testkit.Rows("4")) -} - -func (s *testSerialSuite) TestIssue19148(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a decimal(16, 2));") - tk.MustExec("select * from t where a > any_value(a);") - ctx := tk.Se.(sessionctx.Context) - is := domain.GetDomain(ctx).InfoSchema() - tblInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) - c.Assert(err, IsNil) - c.Assert(int(tblInfo.Meta().Columns[0].Flag), Equals, 0) -} - -func (s *testSuite) TestIssue19667(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE t (a DATETIME)") - tk.MustExec("INSERT INTO t VALUES('1988-04-17 01:59:59')") - tk.MustQuery(`SELECT DATE_ADD(a, INTERVAL 1 SECOND) FROM t`).Check(testkit.Rows("1988-04-17 02:00:00")) -} - -func issue20975Prepare(c *C, store kv.Storage) (*testkit.TestKit, *testkit.TestKit) { - tk1 := testkit.NewTestKit(c, store) - tk2 := testkit.NewTestKit(c, store) - tk1.MustExec("use test") - tk1.MustExec("drop table if exists t1, t2") - tk2.MustExec("use test") - tk1.MustExec("create table t1(id int primary key, c int)") - tk1.MustExec("insert into t1 values(1, 10), (2, 20)") - return tk1, tk2 -} - -func (s *testSuite) TestIssue20975UpdateNoChange(c *C) { - tk1, tk2 := issue20975Prepare(c, s.store) - tk1.MustExec("begin pessimistic") - tk1.MustExec("update t1 set c=c") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") -} - -func (s *testSuite) TestIssue20975SelectForUpdate(c *C) { - tk1, tk2 := issue20975Prepare(c, s.store) - tk1.MustExec("begin") - tk1.MustExec("select * from t1 for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") -} - -func (s *testSuite) TestIssue20975SelectForUpdatePointGet(c *C) { - tk1, tk2 := issue20975Prepare(c, s.store) - tk1.MustExec("begin") - tk1.MustExec("select * from t1 where id=1 for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 where id=1 for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") -} - -func (s *testSuite) TestIssue20975SelectForUpdateBatchPointGet(c *C) { - tk1, tk2 := issue20975Prepare(c, s.store) - tk1.MustExec("begin") - tk1.MustExec("select * from t1 where id in (1, 2) for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 where id in (1, 2) for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") -} - -func issue20975PreparePartitionTable(c *C, store kv.Storage) (*testkit.TestKit, *testkit.TestKit) { - tk1 := testkit.NewTestKit(c, store) - tk2 := testkit.NewTestKit(c, store) - tk1.MustExec("use test") - tk1.MustExec("drop table if exists t1, t2") - tk2.MustExec("use test") - tk1.MustExec(`create table t1(id int primary key, c int) partition by range (id) ( - partition p1 values less than (10), - partition p2 values less than (20) - )`) - tk1.MustExec("insert into t1 values(1, 10), (2, 20), (11, 30), (12, 40)") - return tk1, tk2 -} - -func (s *testSuite) TestIssue20975UpdateNoChangeWithPartitionTable(c *C) { - tk1, tk2 := issue20975PreparePartitionTable(c, s.store) - - // Set projection concurrency to avoid data race here. - // TODO: remove this line after fixing https://github.com/pingcap/tidb/issues/25496 - tk1.Se.GetSessionVars().Concurrency.SetProjectionConcurrency(0) - - tk1.MustExec("begin pessimistic") - tk1.MustExec("update t1 set c=c") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") -} - -func (s *testSuite) TestIssue20975SelectForUpdateWithPartitionTable(c *C) { - tk1, tk2 := issue20975PreparePartitionTable(c, s.store) - tk1.MustExec("begin") - tk1.MustExec("select * from t1 for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") -} - -func (s *testSuite) TestIssue20975SelectForUpdatePointGetWithPartitionTable(c *C) { - tk1, tk2 := issue20975PreparePartitionTable(c, s.store) - tk1.MustExec("begin") - tk1.MustExec("select * from t1 where id=1 for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin") - tk1.MustExec("select * from t1 where id=12 for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 where id=1 for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 where id=12 for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") -} - -func (s *testSuite) TestIssue20975SelectForUpdateBatchPointGetWithPartitionTable(c *C) { - tk1, tk2 := issue20975PreparePartitionTable(c, s.store) - tk1.MustExec("begin") - tk1.MustExec("select * from t1 where id in (1, 2) for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin") - tk1.MustExec("select * from t1 where id in (11, 12) for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") - - tk1.MustExec("begin") - tk1.MustExec("select * from t1 where id in (1, 11) for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 where id in (1, 2) for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 where id in (11, 12) for update") - tk2.MustExec("create table t2(a int)") - tk1.MustExec("commit") - - tk1.MustExec("begin pessimistic") - tk1.MustExec("select * from t1 where id in (1, 11) for update") - tk2.MustExec("drop table t2") - tk1.MustExec("commit") -} - -func (s *testSuite) TestIssue20305(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t2 (a year(4))") - tk.MustExec("insert into t2 values(69)") - tk.MustQuery("select * from t2 where a <= 69").Check(testkit.Rows("2069")) - // the following test is a regression test that matches MySQL's behavior. - tk.MustExec("drop table if exists t3") - tk.MustExec("CREATE TABLE `t3` (`y` year DEFAULT NULL, `a` int DEFAULT NULL)") - tk.MustExec("INSERT INTO `t3` VALUES (2069, 70), (2010, 11), (2155, 2156), (2069, 69)") - tk.MustQuery("SELECT * FROM `t3` where y <= a").Check(testkit.Rows("2155 2156")) -} - -func (s *testSuite) TestIssue22817(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t3") - tk.MustExec("create table t3 (a year)") - tk.MustExec("insert into t3 values (1991), (\"1992\"), (\"93\"), (94)") - tk.MustQuery("select * from t3 where a >= NULL").Check(testkit.Rows()) -} - -func (s *testSuite) TestIssue13953(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("CREATE TABLE `t` (`id` int(11) DEFAULT NULL, `tp_bigint` bigint(20) DEFAULT NULL )") - tk.MustExec("insert into t values(0,1),(1,9215570218099803537)") - tk.MustQuery("select A.tp_bigint,B.id from t A join t B on A.id < B.id * 16 where A.tp_bigint = B.id;").Check( - testkit.Rows("1 1")) -} - -func (s *testSuite) TestZeroDateTimeCompatibility(c *C) { - tk := testkit.NewTestKit(c, s.store) - - SQLs := []string{ - `select YEAR(0000-00-00), YEAR("0000-00-00")`, - `select MONTH(0000-00-00), MONTH("0000-00-00")`, - `select DAYOFMONTH(0000-00-00), DAYOFMONTH("0000-00-00")`, - `select QUARTER(0000-00-00), QUARTER("0000-00-00")`, - `select EXTRACT(DAY FROM 0000-00-00), EXTRACT(DAY FROM "0000-00-00")`, - `select EXTRACT(MONTH FROM 0000-00-00), EXTRACT(MONTH FROM "0000-00-00")`, - `select EXTRACT(YEAR FROM 0000-00-00), EXTRACT(YEAR FROM "0000-00-00")`, - `select EXTRACT(WEEK FROM 0000-00-00), EXTRACT(WEEK FROM "0000-00-00")`, - `select EXTRACT(QUARTER FROM 0000-00-00), EXTRACT(QUARTER FROM "0000-00-00")`, - } - for _, t := range SQLs { - tk.MustQuery(t).Check(testkit.Rows("0 ")) - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(1)) - } - - SQLs = []string{ - `select DAYOFWEEK(0000-00-00), DAYOFWEEK("0000-00-00")`, - `select DAYOFYEAR(0000-00-00), DAYOFYEAR("0000-00-00")`, - } - for _, t := range SQLs { - tk.MustQuery(t).Check(testkit.Rows(" ")) - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(2)) - } - - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(v1 datetime, v2 datetime(3))") - tk.MustExec("insert ignore into t values(0,0)") - - SQLs = []string{ - `select YEAR(v1), YEAR(v2) from t`, - `select MONTH(v1), MONTH(v2) from t`, - `select DAYOFMONTH(v1), DAYOFMONTH(v2) from t`, - `select QUARTER(v1), QUARTER(v2) from t`, - `select EXTRACT(DAY FROM v1), EXTRACT(DAY FROM v2) from t`, - `select EXTRACT(MONTH FROM v1), EXTRACT(MONTH FROM v2) from t`, - `select EXTRACT(YEAR FROM v1), EXTRACT(YEAR FROM v2) from t`, - `select EXTRACT(WEEK FROM v1), EXTRACT(WEEK FROM v2) from t`, - `select EXTRACT(QUARTER FROM v1), EXTRACT(QUARTER FROM v2) from t`, - } - for _, t := range SQLs { - tk.MustQuery(t).Check(testkit.Rows("0 0")) - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(0)) - } - - SQLs = []string{ - `select DAYOFWEEK(v1), DAYOFWEEK(v2) from t`, - `select DAYOFYEAR(v1), DAYOFYEAR(v2) from t`, - } - for _, t := range SQLs { - tk.MustQuery(t).Check(testkit.Rows(" ")) - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(2)) - } -} - -// https://github.com/pingcap/tidb/issues/24165. -func (s *testSuite) TestInvalidDateValueInCreateTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t;") - - // Test for sql mode 'NO_ZERO_IN_DATE'. - tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE';") - tk.MustGetErrCode("create table t (a datetime default '2999-00-00 00:00:00');", errno.ErrInvalidDefault) - tk.MustExec("create table t (a datetime);") - tk.MustGetErrCode("alter table t modify column a datetime default '2999-00-00 00:00:00';", errno.ErrInvalidDefault) - tk.MustExec("drop table if exists t;") - - // Test for sql mode 'NO_ZERO_DATE'. - tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE';") - tk.MustGetErrCode("create table t (a datetime default '0000-00-00 00:00:00');", errno.ErrInvalidDefault) - tk.MustExec("create table t (a datetime);") - tk.MustGetErrCode("alter table t modify column a datetime default '0000-00-00 00:00:00';", errno.ErrInvalidDefault) - tk.MustExec("drop table if exists t;") - - // Remove NO_ZERO_DATE and NO_ZERO_IN_DATE. - tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES';") - // Test create table with zero datetime as a default value. - tk.MustExec("create table t (a datetime default '2999-00-00 00:00:00');") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a datetime default '0000-00-00 00:00:00');") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a datetime);") - tk.MustExec("alter table t modify column a datetime default '2999-00-00 00:00:00';") - tk.MustExec("alter table t modify column a datetime default '0000-00-00 00:00:00';") - tk.MustExec("drop table if exists t;") - - // Test create table with invalid datetime(02-30) as a default value. - tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES';") - tk.MustGetErrCode("create table t (a datetime default '2999-02-30 00:00:00');", errno.ErrInvalidDefault) - tk.MustExec("drop table if exists t;") - // NO_ZERO_IN_DATE and NO_ZERO_DATE have nothing to do with invalid datetime(02-30). - tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE';") - tk.MustGetErrCode("create table t (a datetime default '2999-02-30 00:00:00');", errno.ErrInvalidDefault) - tk.MustExec("drop table if exists t;") - // ALLOW_INVALID_DATES allows invalid datetime(02-30). - tk.MustExec("set @@sql_mode='STRICT_TRANS_TABLES,ALLOW_INVALID_DATES';") - tk.MustExec("create table t (a datetime default '2999-02-30 00:00:00');") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a datetime);") - tk.MustExec("alter table t modify column a datetime default '2999-02-30 00:00:00';") - tk.MustExec("drop table if exists t;") -} - -func (s *testSuite) TestOOMActionPriority(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t0") - tk.MustExec("drop table if exists t1") - tk.MustExec("drop table if exists t2") - tk.MustExec("drop table if exists t3") - tk.MustExec("drop table if exists t4") - tk.MustExec("create table t0(a int)") - tk.MustExec("insert into t0 values(1)") - tk.MustExec("create table t1(a int)") - tk.MustExec("insert into t1 values(1)") - tk.MustExec("create table t2(a int)") - tk.MustExec("insert into t2 values(1)") - tk.MustExec("create table t3(a int)") - tk.MustExec("insert into t3 values(1)") - tk.MustExec("create table t4(a int)") - tk.MustExec("insert into t4 values(1)") - tk.MustQuery("select * from t0 join t1 join t2 join t3 join t4 order by t0.a").Check(testkit.Rows("1 1 1 1 1")) - action := tk.Se.GetSessionVars().StmtCtx.MemTracker.GetFallbackForTest() - // check the first 5 actions is rate limit. - for i := 0; i < 5; i++ { - c.Assert(action.GetPriority(), Equals, int64(memory.DefRateLimitPriority)) - action = action.GetFallback() - } - for action.GetFallback() != nil { - c.Assert(action.GetPriority(), Equals, int64(memory.DefSpillPriority)) - action = action.GetFallback() - } - c.Assert(action.GetPriority(), Equals, int64(memory.DefLogPriority)) -} - -func (s *testSerialSuite) TestIssue21441(c *C) { - failpoint.Enable("github.com/pingcap/tidb/executor/issue21441", `return`) - defer failpoint.Disable("github.com/pingcap/tidb/executor/issue21441") - - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int)") - tk.MustExec(`insert into t values(1),(2),(3)`) - tk.Se.GetSessionVars().InitChunkSize = 1 - tk.Se.GetSessionVars().MaxChunkSize = 1 - sql := ` -select a from t union all -select a from t union all -select a from t union all -select a from t union all -select a from t union all -select a from t union all -select a from t union all -select a from t` - tk.MustQuery(sql).Sort().Check(testkit.Rows( - "1", "1", "1", "1", "1", "1", "1", "1", - "2", "2", "2", "2", "2", "2", "2", "2", - "3", "3", "3", "3", "3", "3", "3", "3", - )) - - tk.MustQuery("select a from (" + sql + ") t order by a limit 4").Check(testkit.Rows("1", "1", "1", "1")) - tk.MustQuery("select a from (" + sql + ") t order by a limit 7, 4").Check(testkit.Rows("1", "2", "2", "2")) - - tk.MustExec("set @@tidb_executor_concurrency = 2") - c.Assert(tk.Se.GetSessionVars().UnionConcurrency(), Equals, 2) - tk.MustQuery("select a from (" + sql + ") t order by a limit 4").Check(testkit.Rows("1", "1", "1", "1")) - tk.MustQuery("select a from (" + sql + ") t order by a limit 7, 4").Check(testkit.Rows("1", "2", "2", "2")) -} - -func (s *testSuite) Test17780(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t0") - tk.MustExec("create table t0 (c0 double)") - tk.MustExec("insert into t0 values (1e30)") - tk.MustExec("update t0 set c0=0 where t0.c0 like 0") - // the update should not affect c0 - tk.MustQuery("select count(*) from t0 where c0 = 0").Check(testkit.Rows("0")) -} - -func (s *testSuite) TestIssue9918(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a year)") - tk.MustExec("insert into t values(0)") - tk.MustQuery("select cast(a as char) from t").Check(testkit.Rows("0000")) -} - -func (s *testSuite) Test13004(c *C) { - tk := testkit.NewTestKit(c, s.store) - // see https://dev.mysql.com/doc/refman/5.6/en/date-and-time-literals.html, timestamp here actually produces a datetime - tk.MustQuery("SELECT TIMESTAMP '9999-01-01 00:00:00'").Check(testkit.Rows("9999-01-01 00:00:00")) -} - -func (s *testSuite) Test12178(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists ta") - tk.MustExec("create table ta(id decimal(60,2))") - tk.MustExec("insert into ta values (JSON_EXTRACT('{\"c\": \"1234567890123456789012345678901234567890123456789012345\"}', '$.c'))") - tk.MustQuery("select * from ta").Check(testkit.Rows("1234567890123456789012345678901234567890123456789012345.00")) -} - -func (s *testSuite) Test11883(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (f1 json)") - tk.MustExec("insert into t1(f1) values ('\"asd\"'),('\"asdf\"'),('\"asasas\"')") - tk.MustQuery("select f1 from t1 where json_extract(f1,\"$\") in (\"asd\",\"asasas\",\"asdf\")").Check(testkit.Rows("\"asd\"", "\"asdf\"", "\"asasas\"")) - tk.MustQuery("select f1 from t1 where json_extract(f1, '$') = 'asd'").Check(testkit.Rows("\"asd\"")) - // MySQL produces empty row for the following SQL, I doubt it should be MySQL's bug. - tk.MustQuery("select f1 from t1 where case json_extract(f1,\"$\") when \"asd\" then 1 else 0 end").Check(testkit.Rows("\"asd\"")) - tk.MustExec("delete from t1") - tk.MustExec("insert into t1 values ('{\"a\": 1}')") - // the first value in the tuple should be interpreted as string instead of JSON, so no row will be returned - tk.MustQuery("select f1 from t1 where f1 in ('{\"a\": 1}', 'asdf', 'asdf')").Check(testkit.Rows()) - // and if we explicitly cast it into a JSON value, the check will pass - tk.MustQuery("select f1 from t1 where f1 in (cast('{\"a\": 1}' as JSON), 'asdf', 'asdf')").Check(testkit.Rows("{\"a\": 1}")) - tk.MustQuery("select json_extract('\"asd\"', '$') = 'asd'").Check(testkit.Rows("1")) - tk.MustQuery("select json_extract('\"asd\"', '$') <=> 'asd'").Check(testkit.Rows("1")) - tk.MustQuery("select json_extract('\"asd\"', '$') <> 'asd'").Check(testkit.Rows("0")) - tk.MustQuery("select json_extract('{\"f\": 1.0}', '$.f') = 1.0").Check(testkit.Rows("1")) - tk.MustQuery("select json_extract('{\"f\": 1.0}', '$.f') = '1.0'").Check(testkit.Rows("0")) - tk.MustQuery("select json_extract('{\"n\": 1}', '$') = '{\"n\": 1}'").Check(testkit.Rows("0")) - tk.MustQuery("select json_extract('{\"n\": 1}', '$') <> '{\"n\": 1}'").Check(testkit.Rows("1")) -} - -func (s *testSuite) Test15492(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int, b int)") - tk.MustExec("insert into t values (2, 20), (1, 10), (3, 30)") - tk.MustQuery("select a + 1 as field1, a as field2 from t order by field1, field2 limit 2").Check(testkit.Rows("2 1", "3 2")) -} - -func (s testSuite) TestTrackAggMemoryUsage(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test") - tk.MustExec("create table t(a int)") - tk.MustExec("insert into t values(1)") - - tk.MustExec("set tidb_track_aggregate_memory_usage = off;") - rows := tk.MustQuery("explain analyze select /*+ HASH_AGG() */ sum(a) from t").Rows() - c.Assert(rows[0][7], Equals, "N/A") - rows = tk.MustQuery("explain analyze select /*+ STREAM_AGG() */ sum(a) from t").Rows() - c.Assert(rows[0][7], Equals, "N/A") - tk.MustExec("set tidb_track_aggregate_memory_usage = on;") - rows = tk.MustQuery("explain analyze select /*+ HASH_AGG() */ sum(a) from t").Rows() - c.Assert(rows[0][7], Not(Equals), "N/A") - rows = tk.MustQuery("explain analyze select /*+ STREAM_AGG() */ sum(a) from t").Rows() - c.Assert(rows[0][7], Not(Equals), "N/A") -} - -func (s *testSuite) Test12201(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists e") - tk.MustExec("create table e (e enum('a', 'b'))") - tk.MustExec("insert into e values ('a'), ('b')") - tk.MustQuery("select * from e where case 1 when 0 then e end").Check(testkit.Rows()) - tk.MustQuery("select * from e where case 1 when 1 then e end").Check(testkit.Rows("a", "b")) - tk.MustQuery("select * from e where case e when 1 then e end").Check(testkit.Rows("a")) - tk.MustQuery("select * from e where case 1 when e then e end").Check(testkit.Rows("a")) -} - -func (s *testSuite) TestIssue21451(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (en enum('c', 'b', 'a'));") - tk.MustExec("insert into t values ('a'), ('b'), ('c');") - tk.MustQuery("select max(en) from t;").Check(testkit.Rows("c")) - tk.MustQuery("select min(en) from t;").Check(testkit.Rows("a")) - tk.MustQuery("select * from t order by en;").Check(testkit.Rows("c", "b", "a")) - - tk.MustExec("drop table t") - tk.MustExec("create table t(s set('c', 'b', 'a'));") - tk.MustExec("insert into t values ('a'), ('b'), ('c');") - tk.MustQuery("select max(s) from t;").Check(testkit.Rows("c")) - tk.MustQuery("select min(s) from t;").Check(testkit.Rows("a")) - - tk.MustExec("drop table t") - tk.MustExec("create table t(id int, en enum('c', 'b', 'a'))") - tk.MustExec("insert into t values (1, 'a'),(2, 'b'), (3, 'c'), (1, 'c');") - tk.MustQuery("select id, max(en) from t where id=1 group by id;").Check(testkit.Rows("1 c")) - tk.MustQuery("select id, min(en) from t where id=1 group by id;").Check(testkit.Rows("1 a")) - tk.MustExec("drop table t") - - tk.MustExec("create table t(id int, s set('c', 'b', 'a'));") - tk.MustExec("insert into t values (1, 'a'),(2, 'b'), (3, 'c'), (1, 'c');") - tk.MustQuery("select id, max(s) from t where id=1 group by id;").Check(testkit.Rows("1 c")) - tk.MustQuery("select id, min(s) from t where id=1 group by id;").Check(testkit.Rows("1 a")) - - tk.MustExec("drop table t") - tk.MustExec("create table t(e enum('e','d','c','b','a'))") - tk.MustExec("insert into t values ('e'),('d'),('c'),('b'),('a');") - tk.MustQuery("select * from t order by e limit 1;").Check(testkit.Rows("e")) - - tk.MustExec("drop table t") - tk.MustExec("create table t(s set('e', 'd', 'c', 'b', 'a'))") - tk.MustExec("insert into t values ('e'),('d'),('c'),('b'),('a');") - tk.MustQuery("select * from t order by s limit 1;").Check(testkit.Rows("e")) - tk.MustExec("drop table t") -} - -func (s *testSuite) TestIssue15563(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustQuery("select distinct 0.7544678906163867 / 0.68234634;").Check(testkit.Rows("1.10569639842486251190")) -} - -func (s *testSuite) TestIssue22231(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t_issue_22231") - tk.MustExec("create table t_issue_22231(a datetime)") - tk.MustExec("insert into t_issue_22231 values('2020--05-20 01:22:12')") - tk.MustQuery("select * from t_issue_22231 where a >= '2020-05-13 00:00:00 00:00:00' and a <= '2020-05-28 23:59:59 00:00:00'").Check(testkit.Rows("2020-05-20 01:22:12")) - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1292 Truncated incorrect datetime value: '2020-05-13 00:00:00 00:00:00'", "Warning 1292 Truncated incorrect datetime value: '2020-05-28 23:59:59 00:00:00'")) - - tk.MustQuery("select cast('2020-10-22 10:31-10:12' as datetime)").Check(testkit.Rows("2020-10-22 10:31:10")) - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1292 Truncated incorrect datetime value: '2020-10-22 10:31-10:12'")) - tk.MustQuery("select cast('2020-05-28 23:59:59 00:00:00' as datetime)").Check(testkit.Rows("2020-05-28 23:59:59")) - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1292 Truncated incorrect datetime value: '2020-05-28 23:59:59 00:00:00'")) - tk.MustExec("drop table if exists t_issue_22231") -} - -func (s *testSuite) TestIssue22201(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustQuery("SELECT HEX(WEIGHT_STRING('ab' AS BINARY(1000000000000000000)));").Check(testkit.Rows("")) - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1301 Result of cast_as_binary() was larger than max_allowed_packet (67108864) - truncated")) - tk.MustQuery("SELECT HEX(WEIGHT_STRING('ab' AS char(1000000000000000000)));").Check(testkit.Rows("")) - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1301 Result of weight_string() was larger than max_allowed_packet (67108864) - truncated")) -} - -func (s *testSuiteP1) TestIssue22941(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists m, mp") - tk.MustExec(`CREATE TABLE m ( - mid varchar(50) NOT NULL, - ParentId varchar(50) DEFAULT NULL, - PRIMARY KEY (mid), - KEY ind_bm_parent (ParentId,mid) - )`) - // mp should have more columns than m - tk.MustExec(`CREATE TABLE mp ( - mpid bigint(20) unsigned NOT NULL DEFAULT '0', - mid varchar(50) DEFAULT NULL COMMENT '模块主键', - sid int, - PRIMARY KEY (mpid) - );`) - - tk.MustExec(`insert into mp values("1","1","0");`) - tk.MustExec(`insert into m values("0", "0");`) - rs := tk.MustQuery(`SELECT ( SELECT COUNT(1) FROM m WHERE ParentId = c.mid ) expand, bmp.mpid, bmp.mpid IS NULL,bmp.mpid IS NOT NULL, sid FROM m c LEFT JOIN mp bmp ON c.mid = bmp.mid WHERE c.ParentId = '0'`) - rs.Check(testkit.Rows("1 1 0 ")) - - rs = tk.MustQuery(`SELECT bmp.mpid, bmp.mpid IS NULL,bmp.mpid IS NOT NULL FROM m c LEFT JOIN mp bmp ON c.mid = bmp.mid WHERE c.ParentId = '0'`) - rs.Check(testkit.Rows(" 1 0")) -} - -func (s *testSerialSuite) TestTxnWriteThroughputSLI(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int key, b int)") - c.Assert(failpoint.Enable("github.com/pingcap/tidb/util/sli/CheckTxnWriteThroughput", "return(true)"), IsNil) - defer func() { - err := failpoint.Disable("github.com/pingcap/tidb/util/sli/CheckTxnWriteThroughput") - c.Assert(err, IsNil) - }() - - mustExec := func(sql string) { - tk.MustExec(sql) - tk.Se.GetTxnWriteThroughputSLI().FinishExecuteStmt(time.Second, tk.Se.AffectedRows(), tk.Se.GetSessionVars().InTxn()) - } - errExec := func(sql string) { - _, err := tk.Exec(sql) - c.Assert(err, NotNil) - tk.Se.GetTxnWriteThroughputSLI().FinishExecuteStmt(time.Second, tk.Se.AffectedRows(), tk.Se.GetSessionVars().InTxn()) - } - - // Test insert in small txn - mustExec("insert into t values (1,3),(2,4)") - writeSLI := tk.Se.GetTxnWriteThroughputSLI() - c.Assert(writeSLI.IsInvalid(), Equals, false) - c.Assert(writeSLI.IsSmallTxn(), Equals, true) - c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 2, writeSize: 58, readKeys: 0, writeKeys: 2, writeTime: 1s") - tk.Se.GetTxnWriteThroughputSLI().Reset() - - // Test insert ... select ... from - mustExec("insert into t select b, a from t") - c.Assert(writeSLI.IsInvalid(), Equals, true) - c.Assert(writeSLI.IsSmallTxn(), Equals, true) - c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: true, affectRow: 2, writeSize: 58, readKeys: 0, writeKeys: 2, writeTime: 1s") - tk.Se.GetTxnWriteThroughputSLI().Reset() - - // Test for delete - mustExec("delete from t") - c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 4, writeSize: 76, readKeys: 0, writeKeys: 4, writeTime: 1s") - tk.Se.GetTxnWriteThroughputSLI().Reset() - - // Test insert not in small txn - mustExec("begin") - for i := 0; i < 20; i++ { - mustExec(fmt.Sprintf("insert into t values (%v,%v)", i, i)) - c.Assert(writeSLI.IsSmallTxn(), Equals, true) - } - // The statement which affect rows is 0 shouldn't record into time. - mustExec("select count(*) from t") - mustExec("select * from t") - mustExec("insert into t values (20,20)") - c.Assert(writeSLI.IsSmallTxn(), Equals, false) - mustExec("commit") - c.Assert(writeSLI.IsInvalid(), Equals, false) - c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 21, writeSize: 609, readKeys: 0, writeKeys: 21, writeTime: 22s") - tk.Se.GetTxnWriteThroughputSLI().Reset() - - // Test invalid when transaction has replace ... select ... from ... statement. - mustExec("delete from t") - tk.Se.GetTxnWriteThroughputSLI().Reset() - mustExec("begin") - mustExec("insert into t values (1,3),(2,4)") - mustExec("replace into t select b, a from t") - mustExec("commit") - c.Assert(writeSLI.IsInvalid(), Equals, true) - c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: true, affectRow: 4, writeSize: 116, readKeys: 0, writeKeys: 4, writeTime: 3s") - tk.Se.GetTxnWriteThroughputSLI().Reset() - - // Test clean last failed transaction information. - err := failpoint.Disable("github.com/pingcap/tidb/util/sli/CheckTxnWriteThroughput") - c.Assert(err, IsNil) - mustExec("begin") - mustExec("insert into t values (1,3),(2,4)") - errExec("commit") - c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 0, writeSize: 0, readKeys: 0, writeKeys: 0, writeTime: 0s") - - c.Assert(failpoint.Enable("github.com/pingcap/tidb/util/sli/CheckTxnWriteThroughput", "return(true)"), IsNil) - mustExec("begin") - mustExec("insert into t values (5, 6)") - mustExec("commit") - c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 1, writeSize: 29, readKeys: 0, writeKeys: 1, writeTime: 2s") - - // Test for reset - tk.Se.GetTxnWriteThroughputSLI().Reset() - c.Assert(tk.Se.GetTxnWriteThroughputSLI().String(), Equals, "invalid: false, affectRow: 0, writeSize: 0, readKeys: 0, writeKeys: 0, writeTime: 0s") -} - -func (s *testSuite) TestIssue23993(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - // Real cast to time should return NULL - tk.MustExec("drop table if exists t_issue_23993") - tk.MustExec("create table t_issue_23993(a double)") - tk.MustExec("insert into t_issue_23993 values(-790822912)") - tk.MustQuery("select cast(a as time) from t_issue_23993").Check(testkit.Rows("")) - tk.MustQuery("select a from t_issue_23993 where cast(a as time)").Check(testkit.Rows()) - // Int cast to time should return NULL - tk.MustExec("drop table if exists t_issue_23993") - tk.MustExec("create table t_issue_23993(a int)") - tk.MustExec("insert into t_issue_23993 values(-790822912)") - tk.MustQuery("select cast(a as time) from t_issue_23993").Check(testkit.Rows("")) - tk.MustQuery("select a from t_issue_23993 where cast(a as time)").Check(testkit.Rows()) - // Decimal cast to time should return NULL - tk.MustExec("drop table if exists t_issue_23993") - tk.MustExec("create table t_issue_23993(a decimal)") - tk.MustExec("insert into t_issue_23993 values(-790822912)") - tk.MustQuery("select cast(a as time) from t_issue_23993").Check(testkit.Rows("")) - tk.MustQuery("select a from t_issue_23993 where cast(a as time)").Check(testkit.Rows()) - // String cast to time should not return NULL - tk.MustExec("drop table if exists t_issue_23993") - tk.MustExec("create table t_issue_23993(a varchar(255))") - tk.MustExec("insert into t_issue_23993 values('-790822912')") - tk.MustQuery("select cast(a as time) from t_issue_23993").Check(testkit.Rows("-838:59:59")) - tk.MustQuery("select a from t_issue_23993 where cast(a as time)").Check(testkit.Rows("-790822912")) -} - -func (s *testSuiteP2) TestProjectionBitType(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t(k1 int, v bit(34) DEFAULT b'111010101111001001100111101111111', primary key(k1) clustered);") - tk.MustExec("create table t1(k1 int, v bit(34) DEFAULT b'111010101111001001100111101111111', primary key(k1) nonclustered);") - tk.MustExec("insert into t(k1) select 1;") - tk.MustExec("insert into t1(k1) select 1;") - - tk.MustExec("set @@tidb_enable_vectorized_expression = 0;") - // following SQL should returns same result - tk.MustQuery("(select * from t where false) union(select * from t for update);").Check(testkit.Rows("1 \x01\xd5\xe4\xcf\u007f")) - tk.MustQuery("(select * from t1 where false) union(select * from t1 for update);").Check(testkit.Rows("1 \x01\xd5\xe4\xcf\u007f")) - - tk.MustExec("set @@tidb_enable_vectorized_expression = 1;") - tk.MustQuery("(select * from t where false) union(select * from t for update);").Check(testkit.Rows("1 \x01\xd5\xe4\xcf\u007f")) - tk.MustQuery("(select * from t1 where false) union(select * from t1 for update);").Check(testkit.Rows("1 \x01\xd5\xe4\xcf\u007f")) -} - -func (s *testSuite) TestIssue23609(c *C) { - tk := testkit.NewTestKitWithInit(c, s.store) - tk.MustExec("drop table if exists t1") - tk.MustExec("CREATE TABLE `t1` (\n `a` timestamp NULL DEFAULT NULL,\n `b` year(4) DEFAULT NULL,\n KEY `a` (`a`),\n KEY `b` (`b`)\n)") - tk.MustExec("insert into t1 values(\"2002-10-03 04:28:53\",2000), (\"2002-10-03 04:28:53\",2002), (NULL, 2002)") - tk.MustQuery("select /*+ inl_join (x,y) */ * from t1 x cross join t1 y on x.a=y.b").Check(testkit.Rows()) - tk.MustQuery("select * from t1 x cross join t1 y on x.a>y.b order by x.a, x.b, y.a, y.b").Check(testkit.Rows("2002-10-03 04:28:53 2000 2002", "2002-10-03 04:28:53 2000 2002-10-03 04:28:53 2000", "2002-10-03 04:28:53 2000 2002-10-03 04:28:53 2002", "2002-10-03 04:28:53 2002 2002", "2002-10-03 04:28:53 2002 2002-10-03 04:28:53 2000", "2002-10-03 04:28:53 2002 2002-10-03 04:28:53 2002")) - tk.MustQuery("select * from t1 where a = b").Check(testkit.Rows()) - tk.MustQuery("select * from t1 where a < b").Check(testkit.Rows()) - c.Assert(tk.Se.GetSessionVars().StmtCtx.WarningCount(), Equals, uint16(0)) -} - -func (s *testSuite1) TestIssue24091(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test;") - tk.MustExec("drop table if exists t;") - defer tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(a int) partition by hash (a div 0) partitions 10;") - tk.MustExec("insert into t values (NULL);") - - tk.MustQuery("select null div 0;").Check(testkit.Rows("")) - tk.MustQuery("select * from t;").Check(testkit.Rows("")) -} - -func (s *testSerialSuite) TestIssue24210(c *C) { - tk := testkit.NewTestKit(c, s.store) - - // for ProjectionExec - c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/mockProjectionExecBaseExecutorOpenReturnedError", `return(true)`), IsNil) - _, err := tk.Exec("select a from (select 1 as a, 2 as b) t") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "mock ProjectionExec.baseExecutor.Open returned error") - err = failpoint.Disable("github.com/pingcap/tidb/executor/mockProjectionExecBaseExecutorOpenReturnedError") - c.Assert(err, IsNil) - - // for HashAggExec - c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/mockHashAggExecBaseExecutorOpenReturnedError", `return(true)`), IsNil) - _, err = tk.Exec("select sum(a) from (select 1 as a, 2 as b) t group by b") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "mock HashAggExec.baseExecutor.Open returned error") - err = failpoint.Disable("github.com/pingcap/tidb/executor/mockHashAggExecBaseExecutorOpenReturnedError") - c.Assert(err, IsNil) - - // for StreamAggExec - c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/mockStreamAggExecBaseExecutorOpenReturnedError", `return(true)`), IsNil) - _, err = tk.Exec("select sum(a) from (select 1 as a, 2 as b) t") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "mock StreamAggExec.baseExecutor.Open returned error") - err = failpoint.Disable("github.com/pingcap/tidb/executor/mockStreamAggExecBaseExecutorOpenReturnedError") - c.Assert(err, IsNil) - - // for SelectionExec - c.Assert(failpoint.Enable("github.com/pingcap/tidb/executor/mockSelectionExecBaseExecutorOpenReturnedError", `return(true)`), IsNil) - _, err = tk.Exec("select * from (select rand() as a) t where a > 0") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "mock SelectionExec.baseExecutor.Open returned error") - err = failpoint.Disable("github.com/pingcap/tidb/executor/mockSelectionExecBaseExecutorOpenReturnedError") - c.Assert(err, IsNil) -} - -func (s *testSerialSuite) TestDeadlocksTable(c *C) { - deadlockhistory.GlobalDeadlockHistory.Clear() - deadlockhistory.GlobalDeadlockHistory.Resize(10) - - occurTime := time.Date(2021, 5, 10, 1, 2, 3, 456789000, time.Local) - rec := &deadlockhistory.DeadlockRecord{ - OccurTime: occurTime, - IsRetryable: false, - WaitChain: []deadlockhistory.WaitChainItem{ - { - TryLockTxn: 101, - SQLDigest: "aabbccdd", - Key: []byte("k1"), - AllSQLDigests: nil, - TxnHoldingLock: 102, - }, - { - TryLockTxn: 102, - SQLDigest: "ddccbbaa", - Key: []byte("k2"), - AllSQLDigests: []string{"sql1"}, - TxnHoldingLock: 101, - }, - }, - } - deadlockhistory.GlobalDeadlockHistory.Push(rec) - - occurTime2 := time.Date(2022, 6, 11, 2, 3, 4, 987654000, time.Local) - rec2 := &deadlockhistory.DeadlockRecord{ - OccurTime: occurTime2, - IsRetryable: true, - WaitChain: []deadlockhistory.WaitChainItem{ - { - TryLockTxn: 201, - AllSQLDigests: []string{}, - TxnHoldingLock: 202, - }, - { - TryLockTxn: 202, - AllSQLDigests: []string{"sql1", "sql2, sql3"}, - TxnHoldingLock: 203, - }, - { - TryLockTxn: 203, - TxnHoldingLock: 201, - }, - }, - } - deadlockhistory.GlobalDeadlockHistory.Push(rec2) - - // `Push` sets the record's ID, and ID in a single DeadlockHistory is monotonically increasing. We must get it here - // to know what it is. - id1 := strconv.FormatUint(rec.ID, 10) - id2 := strconv.FormatUint(rec2.ID, 10) - - c.Assert(failpoint.Enable("github.com/pingcap/tidb/expression/sqlDigestRetrieverSkipRetrieveGlobal", "return"), IsNil) - defer func() { - c.Assert(failpoint.Disable("github.com/pingcap/tidb/expression/sqlDigestRetrieverSkipRetrieveGlobal"), IsNil) - }() - - tk := testkit.NewTestKit(c, s.store) - tk.MustQuery("select * from information_schema.deadlocks").Check( - testutil.RowsWithSep("/", - id1+"/2021-05-10 01:02:03.456789/0/101/aabbccdd//6B31//102", - id1+"/2021-05-10 01:02:03.456789/0/102/ddccbbaa//6B32//101", - id2+"/2022-06-11 02:03:04.987654/1/201/////202", - id2+"/2022-06-11 02:03:04.987654/1/202/////203", - id2+"/2022-06-11 02:03:04.987654/1/203/////201", - )) -} - -func (s testSerialSuite) TestExprBlackListForEnum(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(a enum('a','b','c'), b enum('a','b','c'), c int, index idx(b,a));") - tk.MustExec("insert into t values(1,1,1),(2,2,2),(3,3,3);") - - checkFuncPushDown := func(rows [][]interface{}, keyWord string) bool { - for _, line := range rows { - // Agg/Expr push down - if line[2].(string) == "cop[tikv]" && strings.Contains(line[4].(string), keyWord) { - return true - } - // access index - if line[2].(string) == "cop[tikv]" && strings.Contains(line[3].(string), keyWord) { - return true - } - } - return false - } - - // Test agg(enum) push down - tk.MustExec("insert into mysql.expr_pushdown_blacklist(name) values('enum');") - tk.MustExec("admin reload expr_pushdown_blacklist;") - rows := tk.MustQuery("desc format='brief' select /*+ HASH_AGG() */ max(a) from t;").Rows() - c.Assert(checkFuncPushDown(rows, "max"), IsFalse) - rows = tk.MustQuery("desc format='brief' select /*+ STREAM_AGG() */ max(a) from t;").Rows() - c.Assert(checkFuncPushDown(rows, "max"), IsFalse) - - tk.MustExec("delete from mysql.expr_pushdown_blacklist;") - tk.MustExec("admin reload expr_pushdown_blacklist;") - rows = tk.MustQuery("desc format='brief' select /*+ HASH_AGG() */ max(a) from t;").Rows() - c.Assert(checkFuncPushDown(rows, "max"), IsTrue) - rows = tk.MustQuery("desc format='brief' select /*+ STREAM_AGG() */ max(a) from t;").Rows() - c.Assert(checkFuncPushDown(rows, "max"), IsTrue) - - // Test expr(enum) push down - tk.MustExec("insert into mysql.expr_pushdown_blacklist(name) values('enum');") - tk.MustExec("admin reload expr_pushdown_blacklist;") - rows = tk.MustQuery("desc format='brief' select * from t where a + b;").Rows() - c.Assert(checkFuncPushDown(rows, "plus"), IsFalse) - rows = tk.MustQuery("desc format='brief' select * from t where a + b;").Rows() - c.Assert(checkFuncPushDown(rows, "plus"), IsFalse) - - tk.MustExec("delete from mysql.expr_pushdown_blacklist;") - tk.MustExec("admin reload expr_pushdown_blacklist;") - rows = tk.MustQuery("desc format='brief' select * from t where a + b;").Rows() - c.Assert(checkFuncPushDown(rows, "plus"), IsTrue) - rows = tk.MustQuery("desc format='brief' select * from t where a + b;").Rows() - c.Assert(checkFuncPushDown(rows, "plus"), IsTrue) - - // Test enum index - tk.MustExec("insert into mysql.expr_pushdown_blacklist(name) values('enum');") - tk.MustExec("admin reload expr_pushdown_blacklist;") - rows = tk.MustQuery("desc format='brief' select * from t where b = 1;").Rows() - c.Assert(checkFuncPushDown(rows, "index:idx(b)"), IsFalse) - rows = tk.MustQuery("desc format='brief' select * from t where b = 'a';").Rows() - c.Assert(checkFuncPushDown(rows, "index:idx(b)"), IsFalse) - rows = tk.MustQuery("desc format='brief' select * from t where b > 1;").Rows() - c.Assert(checkFuncPushDown(rows, "index:idx(b)"), IsFalse) - rows = tk.MustQuery("desc format='brief' select * from t where b > 'a';").Rows() - c.Assert(checkFuncPushDown(rows, "index:idx(b)"), IsFalse) - - tk.MustExec("delete from mysql.expr_pushdown_blacklist;") - tk.MustExec("admin reload expr_pushdown_blacklist;") - rows = tk.MustQuery("desc format='brief' select * from t where b = 1 and a = 1;").Rows() - c.Assert(checkFuncPushDown(rows, "index:idx(b, a)"), IsTrue) - rows = tk.MustQuery("desc format='brief' select * from t where b = 'a' and a = 'a';").Rows() - c.Assert(checkFuncPushDown(rows, "index:idx(b, a)"), IsTrue) - rows = tk.MustQuery("desc format='brief' select * from t where b = 1 and a > 1;").Rows() - c.Assert(checkFuncPushDown(rows, "index:idx(b, a)"), IsTrue) - rows = tk.MustQuery("desc format='brief' select * from t where b = 1 and a > 'a'").Rows() - c.Assert(checkFuncPushDown(rows, "index:idx(b, a)"), IsTrue) -} - -func (s *testResourceTagSuite) TestResourceGroupTag(c *C) { - if israce.RaceEnabled { - c.Skip("unstable, skip it and fix it before 20210622") - } - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(a int, b int, unique index idx(a));") - tbInfo := testGetTableByName(c, tk.Se, "test", "t") - - // Enable Top SQL - topsqlstate.EnableTopSQL() - config.UpdateGlobal(func(conf *config.Config) { - conf.TopSQL.ReceiverAddress = "mock-agent" - }) - - c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/unistoreRPCClientSendHook", `return(true)`), IsNil) - defer failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/unistoreRPCClientSendHook") - - var sqlDigest, planDigest *parser.Digest - var tagLabel tipb.ResourceGroupTagLabel - checkFn := func() {} - unistore.UnistoreRPCClientSendHook = func(req *tikvrpc.Request) { - var startKey []byte - var ctx *kvrpcpb.Context - switch req.Type { - case tikvrpc.CmdGet: - request := req.Get() - startKey = request.Key - ctx = request.Context - case tikvrpc.CmdBatchGet: - request := req.BatchGet() - startKey = request.Keys[0] - ctx = request.Context - case tikvrpc.CmdPrewrite: - request := req.Prewrite() - startKey = request.Mutations[0].Key - ctx = request.Context - case tikvrpc.CmdCommit: - request := req.Commit() - startKey = request.Keys[0] - ctx = request.Context - case tikvrpc.CmdCop: - request := req.Cop() - startKey = request.Ranges[0].Start - ctx = request.Context - case tikvrpc.CmdPessimisticLock: - request := req.PessimisticLock() - startKey = request.PrimaryLock - ctx = request.Context - } - tid := tablecodec.DecodeTableID(startKey) - if tid != tbInfo.Meta().ID { - return - } - if ctx == nil { - return - } - tag := &tipb.ResourceGroupTag{} - err := tag.Unmarshal(ctx.ResourceGroupTag) - c.Assert(err, IsNil) - sqlDigest = parser.NewDigest(tag.SqlDigest) - planDigest = parser.NewDigest(tag.PlanDigest) - tagLabel = *tag.Label - checkFn() - } - - resetVars := func() { - sqlDigest = parser.NewDigest(nil) - planDigest = parser.NewDigest(nil) + type resultChecker struct { + check string + assert []string } - cases := []struct { - sql string - tagLabels map[tipb.ResourceGroupTagLabel]struct{} - ignore bool - }{ - { - sql: "insert into t values(1,1),(2,2),(3,3)", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, - }, - }, - { - sql: "select * from t use index (idx) where a=1", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, - }, - }, - { - sql: "select * from t use index (idx) where a in (1,2,3)", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, - }, - }, - { - sql: "select * from t use index (idx) where a>1", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, - }, - }, - { - sql: "select * from t where b>1", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, + for _, clustered := range []string{"", "clustered"} { + tests := []struct { + initSchema []string + initData []string + dml string + resultCheck []resultChecker + }{ + { // left join + update both + match & unmatched + pk + []string{ + "drop table if exists a, b", + "create table a (k1 int, k2 int, v int)", + fmt.Sprintf("create table b (a int not null, k1 int, k2 int, v int, primary key(k1, k2) %s)", clustered), + }, + []string{ + "insert into a values (1, 1, 1), (2, 2, 2)", // unmatched + matched + "insert into b values (2, 2, 2, 2)", + }, + "update a left join b on a.k1 = b.k1 and a.k2 = b.k2 set a.v = 20, b.v = 100, a.k1 = a.k1 + 1, b.k1 = b.k1 + 1, a.k2 = a.k2 + 2, b.k2 = b.k2 + 2", + []resultChecker{ + { + "select * from b", + []string{"2 3 4 100"}, + }, + { + "select * from a", + []string{"2 3 20", "3 4 20"}, + }, + }, }, - }, - { - sql: "select a from t use index (idx) where a>1", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + { // left join + update both + match & unmatched + pk + []string{ + "drop table if exists a, b", + "create table a (k1 int, k2 int, v int)", + fmt.Sprintf("create table b (a int not null, k1 int, k2 int, v int, primary key(k1, k2) %s)", clustered), + }, + []string{ + "insert into a values (1, 1, 1), (2, 2, 2)", // unmatched + matched + "insert into b values (2, 2, 2, 2)", + }, + "update a left join b on a.k1 = b.k1 and a.k2 = b.k2 set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, b.k1 = b.k1 + 1, b.k2 = b.k2 + 2, a.v = 20, b.v = 100", + []resultChecker{ + { + "select * from b", + []string{"2 3 4 100"}, + }, + { + "select * from a", + []string{"2 3 20", "3 4 20"}, + }, + }, }, - }, - { - sql: "begin pessimistic", - ignore: true, - }, - { - sql: "insert into t values(4,4)", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelRow: {}, - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + { // left join + update both + match & unmatched + prefix pk + []string{ + "drop table if exists a, b", + "create table a (k1 varchar(100), k2 varchar(100), v varchar(100))", + fmt.Sprintf("create table b (a varchar(100) not null, k1 varchar(100), k2 varchar(100), v varchar(100), primary key(k1(1), k2(1)) %s, key kk1(k1(1), v(1)))", clustered), + }, + []string{ + "insert into a values ('11', '11', '11'), ('22', '22', '22')", // unmatched + matched + "insert into b values ('22', '22', '22', '22')", + }, + "update a left join b on a.k1 = b.k1 and a.k2 = b.k2 set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, b.k1 = b.k1 + 1, b.k2 = b.k2 + 2, a.v = 20, b.v = 100", + []resultChecker{ + { + "select * from b", + []string{"22 23 24 100"}, + }, + { + "select * from a", + []string{"12 13 20", "23 24 20"}, + }, + }, }, - }, - { - sql: "commit", - ignore: true, - }, - { - sql: "update t set a=5,b=5 where a=5", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + { // right join + update both + match & unmatched + prefix pk + []string{ + "drop table if exists a, b", + "create table a (k1 varchar(100), k2 varchar(100), v varchar(100))", + fmt.Sprintf("create table b (a varchar(100) not null, k1 varchar(100), k2 varchar(100), v varchar(100), primary key(k1(1), k2(1)) %s, key kk1(k1(1), v(1)))", clustered), + }, + []string{ + "insert into a values ('11', '11', '11'), ('22', '22', '22')", // unmatched + matched + "insert into b values ('22', '22', '22', '22')", + }, + "update b right join a on a.k1 = b.k1 and a.k2 = b.k2 set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, b.k1 = b.k1 + 1, b.k2 = b.k2 + 2, a.v = 20, b.v = 100", + []resultChecker{ + { + "select * from b", + []string{"22 23 24 100"}, + }, + { + "select * from a", + []string{"12 13 20", "23 24 20"}, + }, + }, }, - }, - { - sql: "replace into t values(6,6)", - tagLabels: map[tipb.ResourceGroupTagLabel]struct{}{ - tipb.ResourceGroupTagLabel_ResourceGroupTagLabelIndex: {}, + { // inner join + update both + match & unmatched + prefix pk + []string{ + "drop table if exists a, b", + "create table a (k1 varchar(100), k2 varchar(100), v varchar(100))", + fmt.Sprintf("create table b (a varchar(100) not null, k1 varchar(100), k2 varchar(100), v varchar(100), primary key(k1(1), k2(1)) %s, key kk1(k1(1), v(1)))", clustered), + }, + []string{ + "insert into a values ('11', '11', '11'), ('22', '22', '22')", // unmatched + matched + "insert into b values ('22', '22', '22', '22')", + }, + "update b join a on a.k1 = b.k1 and a.k2 = b.k2 set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, b.k1 = b.k1 + 1, b.k2 = b.k2 + 2, a.v = 20, b.v = 100", + []resultChecker{ + { + "select * from b", + []string{"22 23 24 100"}, + }, + { + "select * from a", + []string{"11 11 11", "23 24 20"}, + }, + }, + }, + { + []string{ + "drop table if exists a, b", + "create table a (k1 varchar(100), k2 varchar(100), v varchar(100))", + fmt.Sprintf("create table b (a varchar(100) not null, k1 varchar(100), k2 varchar(100), v varchar(100), primary key(k1(1), k2(1)) %s, key kk1(k1(1), v(1)))", clustered), + }, + []string{ + "insert into a values ('11', '11', '11'), ('22', '22', '22')", // unmatched + matched + "insert into b values ('22', '22', '22', '22')", + }, + "update a set a.k1 = a.k1 + 1, a.k2 = a.k2 + 2, a.v = 20 where exists (select 1 from b where a.k1 = b.k1 and a.k2 = b.k2)", + []resultChecker{ + { + "select * from b", + []string{"22 22 22 22"}, + }, + { + "select * from a", + []string{"11 11 11", "23 24 20"}, + }, + }, }, - }, - } - for _, ca := range cases { - resetVars() - commentf := Commentf("%v", ca.sql) - - _, expectSQLDigest := parser.NormalizeDigest(ca.sql) - var expectPlanDigest *parser.Digest - checkCnt := 0 - checkFn = func() { - if ca.ignore { - return - } - if expectPlanDigest == nil { - info := tk.Se.ShowProcess() - c.Assert(info, NotNil) - p, ok := info.Plan.(plannercore.Plan) - c.Assert(ok, IsTrue) - _, expectPlanDigest = plannercore.NormalizePlan(p) - } - c.Assert(sqlDigest.String(), Equals, expectSQLDigest.String(), commentf) - c.Assert(planDigest.String(), Equals, expectPlanDigest.String()) - _, ok := ca.tagLabels[tagLabel] - c.Assert(ok, Equals, true) - checkCnt++ - } - - if strings.HasPrefix(ca.sql, "select") { - tk.MustQuery(ca.sql) - } else { - tk.MustExec(ca.sql) - } - if ca.ignore { - continue - } - c.Assert(checkCnt > 0, IsTrue, commentf) - } -} - -func (s *testSuite) TestIssue24933(c *C) { - tk := testkit.NewTestKit(c, s.store) - - tk.MustExec("use test") - tk.MustExec("drop table if exists t;") - tk.MustExec("drop view if exists v;") - tk.MustExec("create table t(a int);") - tk.MustExec("insert into t values(1), (2), (3);") - - tk.MustExec("create definer='root'@'localhost' view v as select count(*) as c1 from t;") - rows := tk.MustQuery("select * from v;") - rows.Check(testkit.Rows("3")) - - // Test subquery and outer field is wildcard. - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select count(*) from t) s;") - rows = tk.MustQuery("select * from v order by 1;") - rows.Check(testkit.Rows("3")) - - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select avg(a) from t group by a) s;") - rows = tk.MustQuery("select * from v order by 1;") - rows.Check(testkit.Rows("1.0000", "2.0000", "3.0000")) - - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select sum(a) from t group by a) s;") - rows = tk.MustQuery("select * from v order by 1;") - rows.Check(testkit.Rows("1", "2", "3")) - - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select group_concat(a) from t group by a) s;") - rows = tk.MustQuery("select * from v order by 1;") - rows.Check(testkit.Rows("1", "2", "3")) - - // Test alias names. - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select count(0) as c1 from t) s;") - rows = tk.MustQuery("select * from v order by 1;") - rows.Check(testkit.Rows("3")) - - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select count(*) as c1 from t) s;") - rows = tk.MustQuery("select * from v order by 1;") - rows.Check(testkit.Rows("3")) - - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select group_concat(a) as `concat(a)` from t group by a) s;") - rows = tk.MustQuery("select * from v order by 1;") - rows.Check(testkit.Rows("1", "2", "3")) - - // Test firstrow. - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select a from t group by a) s;") - rows = tk.MustQuery("select * from v order by 1;") - rows.Check(testkit.Rows("1", "2", "3")) - - // Test direct select. - err := tk.ExecToErr("SELECT `s`.`count(a)` FROM (SELECT COUNT(`a`) FROM `test`.`t`) AS `s`") - c.Assert(err.Error(), Equals, "[planner:1054]Unknown column 's.count(a)' in 'field list'") - - tk.MustExec("drop view v;") - tk.MustExec("create definer='root'@'localhost' view v as select * from (select count(a) from t) s;") - rows = tk.MustQuery("select * from v") - rows.Check(testkit.Rows("3")) - - // Test window function. - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t(c1 int);") - tk.MustExec("insert into t values(111), (222), (333);") - tk.MustExec("drop view if exists v;") - tk.MustExec("create definer='root'@'localhost' view v as (select * from (select row_number() over (order by c1) from t) s);") - rows = tk.MustQuery("select * from v;") - rows.Check(testkit.Rows("1", "2", "3")) - tk.MustExec("drop view if exists v;") - tk.MustExec("create definer='root'@'localhost' view v as (select * from (select c1, row_number() over (order by c1) from t) s);") - rows = tk.MustQuery("select * from v;") - rows.Check(testkit.Rows("111 1", "222 2", "333 3")) - - // Test simple expr. - tk.MustExec("drop view if exists v;") - tk.MustExec("create definer='root'@'localhost' view v as (select * from (select c1 or 0 from t) s)") - rows = tk.MustQuery("select * from v;") - rows.Check(testkit.Rows("1", "1", "1")) - rows = tk.MustQuery("select `c1 or 0` from v;") - rows.Check(testkit.Rows("1", "1", "1")) - - tk.MustExec("drop view v;") -} - -func (s *testStaleTxnSuite) TestInvalidReadTemporaryTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - // For mocktikv, safe point is not initialized, we manually insert it for snapshot to use. - safePointName := "tikv_gc_safe_point" - safePointValue := "20160102-15:04:05 -0700" - safePointComment := "All versions after safe point can be accessed. (DO NOT EDIT)" - updateSafePoint := fmt.Sprintf(`INSERT INTO mysql.tidb VALUES ('%[1]s', '%[2]s', '%[3]s') - ON DUPLICATE KEY - UPDATE variable_value = '%[2]s', comment = '%[3]s'`, safePointName, safePointValue, safePointComment) - tk.MustExec(updateSafePoint) - - tk.MustExec("use test") - tk.MustExec("drop table if exists tmp1") - tk.MustExec("create global temporary table tmp1 " + - "(id int not null primary key, code int not null, value int default null, unique key code(code))" + - "on commit delete rows") - tk.MustExec("use test") - tk.MustExec("drop table if exists tmp2") - tk.MustExec("create temporary table tmp2 (id int not null primary key, code int not null, value int default null, unique key code(code));") - tk.MustExec("create table tmp3 (id int not null primary key, code int not null, value int default null, unique key code(code));") - tk.MustExec("create table tmp4 (id int not null primary key, code int not null, value int default null, unique key code(code));") - tk.MustExec("create temporary table tmp5(id int);") - tk.MustExec("create table tmp6 (id int primary key);") - - // sleep 1us to make test stale - time.Sleep(time.Microsecond) - - queries := []struct { - sql string - }{ - { - sql: "select * from tmp1 where id=1", - }, - { - sql: "select * from tmp1 where code=1", - }, - { - sql: "select * from tmp1 where id in (1, 2, 3)", - }, - { - sql: "select * from tmp1 where code in (1, 2, 3)", - }, - { - sql: "select * from tmp1 where id > 1", - }, - { - sql: "select /*+use_index(tmp1, code)*/ * from tmp1 where code > 1", - }, - { - sql: "select /*+use_index(tmp1, code)*/ code from tmp1 where code > 1", - }, - { - sql: "select /*+ use_index_merge(tmp1, primary, code) */ * from tmp1 where id > 1 or code > 2", - }, - } - - addStaleReadToSQL := func(sql string) string { - idx := strings.Index(sql, " where ") - if idx < 0 { - return "" - } - return sql[0:idx] + " as of timestamp NOW(6)" + sql[idx:] - } - genLocalTemporarySQL := func(sql string) string { - return strings.Replace(sql, "tmp1", "tmp2", -1) - } - - for _, query := range queries { - localSQL := genLocalTemporarySQL(query.sql) - queries = append(queries, struct{ sql string }{sql: localSQL}) - } - for _, query := range queries { - sql := addStaleReadToSQL(query.sql) - if sql != "" { - tk.MustGetErrMsg(sql, "can not stale read temporary table") - } - } - - tk.MustExec("start transaction read only as of timestamp NOW(6)") - for _, query := range queries { - tk.MustGetErrMsg(query.sql, "can not stale read temporary table") - } - tk.MustExec("commit") - - for _, query := range queries { - tk.MustExec(query.sql) - } - - // Test normal table when local temporary exits. - tk.MustExec("insert into tmp6 values(1);") - tk.MustExec("set @a=now(6);") - time.Sleep(time.Microsecond) - tk.MustExec("drop table tmp6") - tk.MustExec("create table tmp6 (id int primary key);") - tk.MustQuery("select * from tmp6 as of timestamp(@a) where id=1;").Check(testkit.Rows("1")) - tk.MustQuery("select * from tmp4 as of timestamp(@a), tmp3 as of timestamp(@a) where tmp3.id=1;") - tk.MustGetErrMsg("select * from tmp4 as of timestamp(@a), tmp2 as of timestamp(@a) where tmp2.id=1;", "can not stale read temporary table") - - tk.MustExec("set transaction read only as of timestamp NOW(6)") - tk.MustExec("start transaction") - for _, query := range queries { - tk.MustGetErrMsg(query.sql, "can not stale read temporary table") - } - tk.MustExec("commit") - - for _, query := range queries { - tk.MustExec(query.sql) - } - - tk.MustExec("set @@tidb_snapshot=NOW(6)") - for _, query := range queries { - // forbidden historical read local temporary table - if strings.Contains(query.sql, "tmp2") { - tk.MustGetErrMsg(query.sql, "can not read local temporary table when 'tidb_snapshot' is set") - continue - } - // Will success here for compatibility with some tools like dumping - tk.MustQuery(query.sql).Check(testkit.Rows()) - } -} - -func (s *testStaleTxnSuite) TestInvalidReadCacheTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - // For mocktikv, safe point is not initialized, we manually insert it for snapshot to use. - safePointName := "tikv_gc_safe_point" - safePointValue := "20160102-15:04:05 -0700" - safePointComment := "All versions after safe point can be accessed. (DO NOT EDIT)" - updateSafePoint := fmt.Sprintf(`INSERT INTO mysql.tidb VALUES ('%[1]s', '%[2]s', '%[3]s') - ON DUPLICATE KEY - UPDATE variable_value = '%[2]s', comment = '%[3]s'`, safePointName, safePointValue, safePointComment) - tk.MustExec(updateSafePoint) - tk.MustExec("use test") - tk.MustExec("drop table if exists cache_tmp1") - tk.MustExec("create table cache_tmp1 " + - "(id int not null primary key, code int not null, value int default null, unique key code(code))") - tk.MustExec("alter table cache_tmp1 cache") - tk.MustExec("drop table if exists cache_tmp2") - tk.MustExec("create table cache_tmp2 (id int not null primary key, code int not null, value int default null, unique key code(code));") - tk.MustExec("alter table cache_tmp2 cache") - tk.MustExec("drop table if exists cache_tmp3 , cache_tmp4, cache_tmp5") - tk.MustExec("create table cache_tmp3 (id int not null primary key, code int not null, value int default null, unique key code(code));") - tk.MustExec("create table cache_tmp4 (id int not null primary key, code int not null, value int default null, unique key code(code));") - tk.MustExec("create table cache_tmp5 (id int primary key);") - // sleep 1us to make test stale - time.Sleep(time.Microsecond) - - queries := []struct { - sql string - }{ - { - sql: "select * from cache_tmp1 where id=1", - }, - { - sql: "select * from cache_tmp1 where code=1", - }, - { - sql: "select * from cache_tmp1 where id in (1, 2, 3)", - }, - { - sql: "select * from cache_tmp1 where code in (1, 2, 3)", - }, - { - sql: "select * from cache_tmp1 where id > 1", - }, - { - sql: "select /*+use_index(cache_tmp1, code)*/ * from cache_tmp1 where code > 1", - }, - { - sql: "select /*+use_index(cache_tmp1, code)*/ code from cache_tmp1 where code > 1", - }, - } - - addStaleReadToSQL := func(sql string) string { - idx := strings.Index(sql, " where ") - if idx < 0 { - return "" - } - return sql[0:idx] + " as of timestamp NOW(6)" + sql[idx:] - } - for _, query := range queries { - sql := addStaleReadToSQL(query.sql) - if sql != "" { - tk.MustGetErrMsg(sql, "can not stale read cache table") } - } - - tk.MustExec("start transaction read only as of timestamp NOW(6)") - for _, query := range queries { - tk.MustGetErrMsg(query.sql, "can not stale read cache table") - } - tk.MustExec("commit") - - for _, query := range queries { - tk.MustExec(query.sql) - } - - // Test normal table when cache table exits. - tk.MustExec("insert into cache_tmp5 values(1);") - tk.MustExec("set @a=now(6);") - time.Sleep(time.Microsecond) - tk.MustExec("drop table cache_tmp5") - tk.MustExec("create table cache_tmp5 (id int primary key);") - tk.MustQuery("select * from cache_tmp5 as of timestamp(@a) where id=1;").Check(testkit.Rows("1")) - tk.MustQuery("select * from cache_tmp4 as of timestamp(@a), cache_tmp3 as of timestamp(@a) where cache_tmp3.id=1;") - tk.MustGetErrMsg("select * from cache_tmp4 as of timestamp(@a), cache_tmp2 as of timestamp(@a) where cache_tmp2.id=1;", "can not stale read cache table") - tk.MustExec("set transaction read only as of timestamp NOW(6)") - tk.MustExec("start transaction") - for _, query := range queries { - tk.MustGetErrMsg(query.sql, "can not stale read cache table") - } - tk.MustExec("commit") - - for _, query := range queries { - tk.MustExec(query.sql) - } - - tk.MustExec("set @@tidb_snapshot=NOW(6)") - for _, query := range queries { - // enable historical read cache table - tk.MustExec(query.sql) + for _, test := range tests { + for _, s := range test.initSchema { + tk.MustExec(s) + } + for _, s := range test.initData { + tk.MustExec(s) + } + tk.MustExec(test.dml) + for _, checker := range test.resultCheck { + tk.MustQuery(checker.check).Check(testkit.Rows(checker.assert...)) + } + tk.MustExec("admin check table a") + tk.MustExec("admin check table b") + } } } -func (s *testSuite) TestTableSampleTemporaryTable(c *C) { - tk := testkit.NewTestKit(c, s.store) - // For mocktikv, safe point is not initialized, we manually insert it for snapshot to use. - safePointName := "tikv_gc_safe_point" - safePointValue := "20160102-15:04:05 -0700" - safePointComment := "All versions after safe point can be accessed. (DO NOT EDIT)" - updateSafePoint := fmt.Sprintf(`INSERT INTO mysql.tidb VALUES ('%[1]s', '%[2]s', '%[3]s') - ON DUPLICATE KEY - UPDATE variable_value = '%[2]s', comment = '%[3]s'`, safePointName, safePointValue, safePointComment) - tk.MustExec(updateSafePoint) - - tk.MustExec("use test") - tk.MustExec("drop table if exists tmp1") - tk.MustExec("create global temporary table tmp1 " + - "(id int not null primary key, code int not null, value int default null, unique key code(code))" + - "on commit delete rows") - - tk.MustExec("use test") - tk.MustExec("drop table if exists tmp2") - tk.MustExec("create temporary table tmp2 (id int not null primary key, code int not null, value int default null, unique key code(code));") - - // sleep 1us to make test stale - time.Sleep(time.Microsecond) - - // test tablesample return empty for global temporary table - tk.MustQuery("select * from tmp1 tablesample regions()").Check(testkit.Rows()) - - tk.MustExec("begin") - tk.MustExec("insert into tmp1 values (1, 1, 1)") - tk.MustQuery("select * from tmp1 tablesample regions()").Check(testkit.Rows()) - tk.MustExec("commit") +func TestSelectPartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec(`use test`) + tk.MustExec("set @@session.tidb_enable_list_partition = ON;") + tk.MustExec(`create table th (a int, b int) partition by hash(a) partitions 3;`) + tk.MustExec(`create table tr (a int, b int) + partition by range (a) ( + partition r0 values less than (4), + partition r1 values less than (7), + partition r3 values less than maxvalue)`) + tk.MustExec(`create table tl (a int, b int, unique index idx(a)) partition by list (a) ( + partition p0 values in (3,5,6,9,17), + partition p1 values in (1,2,10,11,19,20), + partition p2 values in (4,12,13,14,18), + partition p3 values in (7,8,15,16,null));`) + tk.MustExec(`insert into th values (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8);`) + tk.MustExec("insert into th values (-1,-1),(-2,-2),(-3,-3),(-4,-4),(-5,-5),(-6,-6),(-7,-7),(-8,-8);") + tk.MustExec(`insert into tr values (-3,-3),(3,3),(4,4),(7,7),(8,8);`) + tk.MustExec(`insert into tl values (3,3),(1,1),(4,4),(7,7),(8,8),(null,null);`) + // select 1 partition. + tk.MustQuery("select b from th partition (p0) order by a").Check(testkit.Rows("-6", "-3", "0", "3", "6")) + tk.MustQuery("select b from tr partition (r0) order by a").Check(testkit.Rows("-3", "3")) + tk.MustQuery("select b from tl partition (p0) order by a").Check(testkit.Rows("3")) + tk.MustQuery("select b from th partition (p0,P0) order by a").Check(testkit.Rows("-6", "-3", "0", "3", "6")) + tk.MustQuery("select b from tr partition (r0,R0,r0) order by a").Check(testkit.Rows("-3", "3")) + tk.MustQuery("select b from tl partition (p0,P0,p0) order by a").Check(testkit.Rows("3")) + // select multi partition. + tk.MustQuery("select b from th partition (P2,p0) order by a").Check(testkit.Rows("-8", "-6", "-5", "-3", "-2", "0", "2", "3", "5", "6", "8")) + tk.MustQuery("select b from tr partition (r1,R3) order by a").Check(testkit.Rows("4", "7", "8")) + tk.MustQuery("select b from tl partition (p0,P3) order by a").Check(testkit.Rows("", "3", "7", "8")) - // tablesample for global temporary table should not return error for compatibility of tools like dumpling - tk.MustExec("set @@tidb_snapshot=NOW(6)") - tk.MustQuery("select * from tmp1 tablesample regions()").Check(testkit.Rows()) + // test select unknown partition error + tk.MustGetErrMsg("select b from th partition (p0,p4)", "[table:1735]Unknown partition 'p4' in table 'th'") + tk.MustGetErrMsg("select b from tr partition (r1,r4)", "[table:1735]Unknown partition 'r4' in table 'tr'") + tk.MustGetErrMsg("select b from tl partition (p0,p4)", "[table:1735]Unknown partition 'p4' in table 'tl'") + // test select partition table in transaction. tk.MustExec("begin") - tk.MustQuery("select * from tmp1 tablesample regions()").Check(testkit.Rows()) + tk.MustExec("insert into th values (10,10),(11,11)") + tk.MustQuery("select a, b from th where b>10").Check(testkit.Rows("11 11")) tk.MustExec("commit") - tk.MustExec("set @@tidb_snapshot=''") - - // test tablesample returns error for local temporary table - tk.MustGetErrMsg("select * from tmp2 tablesample regions()", "TABLESAMPLE clause can not be applied to local temporary tables") + tk.MustQuery("select a, b from th where b>10").Check(testkit.Rows("11 11")) - tk.MustExec("begin") - tk.MustExec("insert into tmp2 values (1, 1, 1)") - tk.MustGetErrMsg("select * from tmp2 tablesample regions()", "TABLESAMPLE clause can not be applied to local temporary tables") - tk.MustExec("commit") - tk.MustGetErrMsg("select * from tmp2 tablesample regions()", "TABLESAMPLE clause can not be applied to local temporary tables") + // test partition function is scalar func + tk.MustExec("drop table if exists tscalar") + tk.MustExec(`create table tscalar (c1 int) partition by range (c1 % 30) ( + partition p0 values less than (0), + partition p1 values less than (10), + partition p2 values less than (20), + partition pm values less than (maxvalue));`) + tk.MustExec("insert into tscalar values(0), (10), (40), (50), (55)") + // test IN expression + tk.MustExec("insert into tscalar values(-0), (-10), (-40), (-50), (-55)") + tk.MustQuery("select * from tscalar where c1 in (55, 55)").Check(testkit.Rows("55")) + tk.MustQuery("select * from tscalar where c1 in (40, 40)").Check(testkit.Rows("40")) + tk.MustQuery("select * from tscalar where c1 in (40)").Check(testkit.Rows("40")) + tk.MustQuery("select * from tscalar where c1 in (-40)").Check(testkit.Rows("-40")) + tk.MustQuery("select * from tscalar where c1 in (-40, -40)").Check(testkit.Rows("-40")) + tk.MustQuery("select * from tscalar where c1 in (-1)").Check(testkit.Rows()) } -func (s *testSuite) TestIssue25506(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists tbl_3, tbl_23") - tk.MustExec("create table tbl_3 (col_15 bit(20))") - tk.MustExec("insert into tbl_3 values (0xFFFF)") - tk.MustExec("insert into tbl_3 values (0xFF)") - tk.MustExec("create table tbl_23 (col_15 bit(15))") - tk.MustExec("insert into tbl_23 values (0xF)") - tk.MustQuery("(select col_15 from tbl_23) union all (select col_15 from tbl_3 for update) order by col_15").Check(testkit.Rows("\x00\x00\x0F", "\x00\x00\xFF", "\x00\xFF\xFF")) +func TestDeletePartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t1`) + tk.MustExec(`create table t1 (a int) partition by range (a) ( + partition p0 values less than (10), + partition p1 values less than (20), + partition p2 values less than (30), + partition p3 values less than (40), + partition p4 values less than MAXVALUE + )`) + tk.MustExec("insert into t1 values (1),(11),(21),(31)") + tk.MustExec("delete from t1 partition (p4)") + tk.MustQuery("select * from t1 order by a").Check(testkit.Rows("1", "11", "21", "31")) + tk.MustExec("delete from t1 partition (p0) where a > 10") + tk.MustQuery("select * from t1 order by a").Check(testkit.Rows("1", "11", "21", "31")) + tk.MustExec("delete from t1 partition (p0,p1,p2)") + tk.MustQuery("select * from t1").Check(testkit.Rows("31")) } -func (s *testSuite) TestIssue26348(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - - tk.MustExec("drop table if exists t") - tk.MustExec(`CREATE TABLE t ( -a varchar(8) DEFAULT NULL, -b varchar(8) DEFAULT NULL, -c decimal(20,2) DEFAULT NULL, -d decimal(15,8) DEFAULT NULL -);`) - tk.MustExec(`insert into t values(20210606, 20210606, 50000.00, 5.04600000);`) - tk.MustQuery(`select a * c *(d/36000) from t;`).Check(testkit.Rows("141642663.71666598")) - tk.MustQuery(`select cast(a as double) * cast(c as double) *cast(d/36000 as double) from t;`).Check(testkit.Rows("141642663.71666598")) - tk.MustQuery("select 20210606*50000.00*(5.04600000/36000)").Check(testkit.Rows("141642663.71666599297980")) - - // differs from MySQL cause constant-fold . - tk.MustQuery("select \"20210606\"*50000.00*(5.04600000/36000)").Check(testkit.Rows("141642663.71666598")) - tk.MustQuery("select cast(\"20210606\" as double)*50000.00*(5.04600000/36000)").Check(testkit.Rows("141642663.71666598")) +func TestPrepareLoadData(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustGetErrCode(`prepare stmt from "load data local infile '/tmp/load_data_test.csv' into table test";`, mysql.ErrUnsupportedPs) } -func (s *testSuite) TestIssue26532(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustQuery("select greatest(cast(\"2020-01-01 01:01:01\" as datetime), cast(\"2019-01-01 01:01:01\" as datetime) )union select null;").Sort().Check(testkit.Rows("2020-01-01 01:01:01", "")) - tk.MustQuery("select least(cast(\"2020-01-01 01:01:01\" as datetime), cast(\"2019-01-01 01:01:01\" as datetime) )union select null;").Sort().Check(testkit.Rows("2019-01-01 01:01:01", "")) - tk.MustQuery("select greatest(\"2020-01-01 01:01:01\" ,\"2019-01-01 01:01:01\" )union select null;").Sort().Check(testkit.Rows("2020-01-01 01:01:01", "")) - tk.MustQuery("select least(\"2020-01-01 01:01:01\" , \"2019-01-01 01:01:01\" )union select null;").Sort().Check(testkit.Rows("2019-01-01 01:01:01", "")) -} +func TestSetOperation(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t1, t2, t3`) + tk.MustExec(`create table t1(a int)`) + tk.MustExec(`create table t2 like t1`) + tk.MustExec(`create table t3 like t1`) + tk.MustExec(`insert into t1 values (1),(1),(2),(3),(null)`) + tk.MustExec(`insert into t2 values (1),(2),(null),(null)`) + tk.MustExec(`insert into t3 values (2),(3)`) -func (s *testSuite) TestIssue25447(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1(a int, b varchar(8))") - tk.MustExec("insert into t1 values(1,'1')") - tk.MustExec("create table t2(a int , b varchar(8) GENERATED ALWAYS AS (c) VIRTUAL, c varchar(8), PRIMARY KEY (a))") - tk.MustExec("insert into t2(a) values(1)") - tk.MustQuery("select /*+ tidb_inlj(t2) */ t2.b, t1.b from t1 join t2 ON t2.a=t1.a").Check(testkit.Rows(" 1")) + var input []string + var output []struct { + SQL string + Plan []string + Res []string + } + executorSuiteData.GetTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery("explain " + tt).Rows()) + output[i].Res = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Sort().Rows()) + }) + tk.MustQuery("explain " + tt).Check(testkit.Rows(output[i].Plan...)) + tk.MustQuery(tt).Sort().Check(testkit.Rows(output[i].Res...)) + } } -func (s *testSuite) TestIssue23602(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("USE test") - tk.Se.GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn - tk.MustExec("CREATE TABLE t (a bigint unsigned PRIMARY KEY)") - defer tk.MustExec("DROP TABLE t") - tk.MustExec("INSERT INTO t VALUES (0),(1),(2),(3),(18446744073709551600),(18446744073709551605),(18446744073709551610),(18446744073709551615)") - tk.MustExec("ANALYZE TABLE t") - tk.MustQuery(`EXPLAIN FORMAT = 'brief' SELECT a FROM t WHERE a >= 0x1 AND a <= 0x2`).Check(testkit.Rows( - "TableReader 2.00 root data:TableRangeScan]\n" + - "[└─TableRangeScan 2.00 cop[tikv] table:t range:[1,2], keep order:false")) - tk.MustQuery(`EXPLAIN FORMAT = 'brief' SELECT a FROM t WHERE a BETWEEN 0x1 AND 0x2`).Check(testkit.Rows( - "TableReader 2.00 root data:TableRangeScan]\n" + - "[└─TableRangeScan 2.00 cop[tikv] table:t range:[1,2], keep order:false")) - tk.MustQuery("SELECT a FROM t WHERE a BETWEEN 0xFFFFFFFFFFFFFFF5 AND X'FFFFFFFFFFFFFFFA'").Check(testkit.Rows("18446744073709551605", "18446744073709551610")) -} +func TestSetOperationOnDiffColType(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t1, t2, t3`) + tk.MustExec(`create table t1(a int, b int)`) + tk.MustExec(`create table t2(a int, b varchar(20))`) + tk.MustExec(`create table t3(a int, b decimal(30,10))`) + tk.MustExec(`insert into t1 values (1,1),(1,1),(2,2),(3,3),(null,null)`) + tk.MustExec(`insert into t2 values (1,'1'),(2,'2'),(null,null),(null,'3')`) + tk.MustExec(`insert into t3 values (2,2.1),(3,3)`) -func (s *testSuite) TestCTEWithIndexLookupJoinDeadLock(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("create table t (a int(11) default null,b int(11) default null,key b (b),key ba (b))") - tk.MustExec("create table t1 (a int(11) default null,b int(11) default null,key idx_ab (a,b),key idx_a (a),key idx_b (b))") - tk.MustExec("create table t2 (a int(11) default null,b int(11) default null,key idx_ab (a,b),key idx_a (a),key idx_b (b))") - // It's easy to reproduce this problem in 30 times execution of IndexLookUpJoin. - for i := 0; i < 30; i++ { - tk.MustExec("with cte as (with cte1 as (select * from t2 use index(idx_ab) where a > 1 and b > 1) select * from cte1) select /*+use_index(t1 idx_ab)*/ * from cte join t1 on t1.a=cte.a;") + var input []string + var output []struct { + SQL string + Plan []string + Res []string + } + executorSuiteData.GetTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery("explain " + tt).Rows()) + output[i].Res = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Sort().Rows()) + }) + tk.MustQuery("explain " + tt).Check(testkit.Rows(output[i].Plan...)) + tk.MustQuery(tt).Sort().Check(testkit.Rows(output[i].Res...)) } } -func (s *testSuite) TestGetResultRowsCount(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t (a int)") - for i := 1; i <= 10; i++ { - tk.MustExec(fmt.Sprintf("insert into t values (%v)", i)) - } - cases := []struct { - sql string - row int64 - }{ - {"select * from t", 10}, - {"select * from t where a < 0", 0}, - {"select * from t where a <= 3", 3}, - {"insert into t values (11)", 0}, - {"replace into t values (12)", 0}, - {"update t set a=13 where a=12", 0}, - } +// issue-23038: wrong key range of index scan for year column +func TestIndexScanWithYearCol(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (c1 year(4), c2 int, key(c1));") + tk.MustExec("insert into t values(2001, 1);") - for _, ca := range cases { - if strings.HasPrefix(ca.sql, "select") { - tk.MustQuery(ca.sql) - } else { - tk.MustExec(ca.sql) - } - info := tk.Se.ShowProcess() - c.Assert(info, NotNil) - p, ok := info.Plan.(plannercore.Plan) - c.Assert(ok, IsTrue) - cnt := executor.GetResultRowsCount(tk.Se, p) - c.Assert(ca.row, Equals, cnt, Commentf("sql: %v", ca.sql)) + var input []string + var output []struct { + SQL string + Plan []string + Res []string + } + executorSuiteData.GetTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery("explain format = 'brief' " + tt).Rows()) + output[i].Res = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Sort().Rows()) + }) + tk.MustQuery("explain format = 'brief' " + tt).Check(testkit.Rows(output[i].Plan...)) + tk.MustQuery(tt).Sort().Check(testkit.Rows(output[i].Res...)) } } -func checkFileName(s string) bool { - files := []string{ - "config.toml", - "meta.txt", - "stats/test.t_dump_single.json", - "schema/test.t_dump_single.schema.txt", - "variables.toml", - "sqls.sql", - "session_bindings.sql", - "global_bindings.sql", - "explain.txt", - } - for _, f := range files { - if strings.Compare(f, s) == 0 { - return true - } +func TestClusterIndexOuterJoinElimination(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + tk.MustExec("create table t (a int, b int, c int, primary key(a,b))") + rows := tk.MustQuery(`explain format = 'brief' select t1.a from t t1 left join t t2 on t1.a = t2.a and t1.b = t2.b`).Rows() + rowStrs := testdata.ConvertRowsToStrings(rows) + for _, row := range rowStrs { + // outer join has been eliminated. + require.NotContains(t, row, "Join") } - return false } -func (s *testSuiteWithData) TestPlanReplayerDumpSingle(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestPlanReplayerDumpSingle(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t_dump_single") tk.MustExec("create table t_dump_single(a int)") res := tk.MustQuery("plan replayer dump explain select * from t_dump_single") - path := s.testData.ConvertRowsToStrings(res.Rows()) + path := testdata.ConvertRowsToStrings(res.Rows()) reader, err := zip.OpenReader(filepath.Join(domain.GetPlanReplayerDirName(), path[0])) - c.Assert(err, IsNil) - defer reader.Close() + require.NoError(t, err) + defer func() { require.NoError(t, reader.Close()) }() for _, file := range reader.File { - c.Assert(checkFileName(file.Name), IsTrue) + require.True(t, checkFileName(file.Name)) } } -func (s *testSuiteWithData) TestDropColWithPrimaryKey(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestDropColWithPrimaryKey(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(id int primary key, c1 int, c2 int, c3 int, index idx1(c1, c2), index idx2(c3))") @@ -9393,428 +1523,3 @@ func (s *testSuiteWithData) TestDropColWithPrimaryKey(c *C) { tk.MustExec("set global tidb_enable_change_multi_schema = on") tk.MustExec("alter table t drop column c3") } - -func (s *testSuiteP1) TestIssue28935(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("set @@tidb_enable_vectorized_expression=true") - tk.MustQuery(`select trim(leading from " a "), trim(both from " a "), trim(trailing from " a ")`).Check(testkit.Rows("a a a")) - tk.MustQuery(`select trim(leading null from " a "), trim(both null from " a "), trim(trailing null from " a ")`).Check(testkit.Rows(" ")) - tk.MustQuery(`select trim(null from " a ")`).Check(testkit.Rows("")) - - tk.MustExec("set @@tidb_enable_vectorized_expression=false") - tk.MustQuery(`select trim(leading from " a "), trim(both from " a "), trim(trailing from " a ")`).Check(testkit.Rows("a a a")) - tk.MustQuery(`select trim(leading null from " a "), trim(both null from " a "), trim(trailing null from " a ")`).Check(testkit.Rows(" ")) - tk.MustQuery(`select trim(null from " a ")`).Check(testkit.Rows("")) -} - -func (s *testSuiteP1) TestIssue29412(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t29142_1") - tk.MustExec("drop table if exists t29142_2") - tk.MustExec("create table t29142_1(a int);") - tk.MustExec("create table t29142_2(a double);") - tk.MustExec("insert into t29142_1 value(20);") - tk.MustQuery("select sum(distinct a) as x from t29142_1 having x > some ( select a from t29142_2 where x in (a));").Check(nil) -} - -func (s *testSerialSuite) TestIssue28650(c *C) { - defer testleak.AfterTest(c)() - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1, t2;") - tk.MustExec("create table t1(a int, index(a));") - tk.MustExec("create table t2(a int, c int, b char(50), index(a,c,b));") - tk.MustExec("set tidb_enable_rate_limit_action=off;") - - wg := &sync.WaitGroup{} - sql := `explain analyze - select /*+ stream_agg(@sel_1) stream_agg(@sel_3) %s(@sel_2 t2)*/ count(1) from - ( - SELECT t2.a AS t2_external_user_ext_id, t2.b AS t2_t1_ext_id FROM t2 INNER JOIN (SELECT t1.a AS d_t1_ext_id FROM t1 GROUP BY t1.a) AS anon_1 ON anon_1.d_t1_ext_id = t2.a WHERE t2.c = 123 AND t2.b - IN ("%s") ) tmp` - - wg.Add(1) - sqls := make([]string, 2) - go func() { - defer wg.Done() - inElems := make([]string, 1000) - for i := 0; i < len(inElems); i++ { - inElems[i] = fmt.Sprintf("wm_%dbDgAAwCD-v1QB%dxky-g_dxxQCw", rand.Intn(100), rand.Intn(100)) - } - sqls[0] = fmt.Sprintf(sql, "inl_join", strings.Join(inElems, "\",\"")) - sqls[1] = fmt.Sprintf(sql, "inl_hash_join", strings.Join(inElems, "\",\"")) - }() - - tk.MustExec("insert into t1 select rand()*400;") - for i := 0; i < 10; i++ { - tk.MustExec("insert into t1 select rand()*400 from t1;") - } - config.UpdateGlobal(func(conf *config.Config) { - conf.OOMAction = config.OOMActionCancel - }) - defer func() { - config.UpdateGlobal(func(conf *config.Config) { - conf.OOMAction = config.OOMActionLog - }) - }() - wg.Wait() - for _, sql := range sqls { - tk.MustExec("set @@tidb_mem_quota_query = 1073741824") // 1GB - c.Assert(tk.QueryToErr(sql), IsNil) - tk.MustExec("set @@tidb_mem_quota_query = 33554432") // 32MB, out of memory during executing - c.Assert(strings.Contains(tk.QueryToErr(sql).Error(), "Out Of Memory Quota!"), IsTrue) - tk.MustExec("set @@tidb_mem_quota_query = 65536") // 64KB, out of memory during building the plan - func() { - defer func() { - r := recover() - c.Assert(r, NotNil) - err := errors.Errorf("%v", r) - c.Assert(strings.Contains(err.Error(), "Out Of Memory Quota!"), IsTrue) - }() - tk.MustExec(sql) - }() - } -} - -func (s *testSerialSuite) TestIssue30289(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - fpName := "github.com/pingcap/tidb/executor/issue30289" - c.Assert(failpoint.Enable(fpName, `return(true)`), IsNil) - defer func() { - c.Assert(failpoint.Disable(fpName), IsNil) - }() - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int)") - err := tk.QueryToErr("select /*+ hash_join(t1) */ * from t t1 join t t2 on t1.a=t2.a") - c.Assert(err.Error(), Matches, "issue30289 build return error") -} - -func (s *testSerialSuite) TestIssue29498(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("DROP TABLE IF EXISTS t1;") - tk.MustExec("CREATE TABLE t1 (t3 TIME(3), d DATE, t TIME);") - tk.MustExec("INSERT INTO t1 VALUES ('00:00:00.567', '2002-01-01', '00:00:02');") - - res := tk.MustQuery("SELECT CONCAT(IFNULL(t3, d)) AS col1 FROM t1;") - row := res.Rows()[0][0].(string) - c.Assert(len(row), Equals, mysql.MaxDatetimeWidthNoFsp+3+1) - c.Assert(row[len(row)-12:], Equals, "00:00:00.567") - - res = tk.MustQuery("SELECT IFNULL(t3, d) AS col1 FROM t1;") - row = res.Rows()[0][0].(string) - c.Assert(len(row), Equals, mysql.MaxDatetimeWidthNoFsp+3+1) - c.Assert(row[len(row)-12:], Equals, "00:00:00.567") - - res = tk.MustQuery("SELECT CONCAT(IFNULL(t, d)) AS col1 FROM t1;") - row = res.Rows()[0][0].(string) - c.Assert(len(row), Equals, mysql.MaxDatetimeWidthNoFsp) - c.Assert(row[len(row)-8:], Equals, "00:00:02") - - res = tk.MustQuery("SELECT IFNULL(t, d) AS col1 FROM t1;") - row = res.Rows()[0][0].(string) - c.Assert(len(row), Equals, mysql.MaxDatetimeWidthNoFsp) - c.Assert(row[len(row)-8:], Equals, "00:00:02") - - res = tk.MustQuery("SELECT CONCAT(xx) FROM (SELECT t3 AS xx FROM t1 UNION SELECT d FROM t1) x ORDER BY -xx LIMIT 1;") - row = res.Rows()[0][0].(string) - c.Assert(len(row), Equals, mysql.MaxDatetimeWidthNoFsp+3+1) - c.Assert(row[len(row)-12:], Equals, "00:00:00.567") - - res = tk.MustQuery("SELECT CONCAT(CASE WHEN d IS NOT NULL THEN t3 ELSE d END) AS col1 FROM t1;") - row = res.Rows()[0][0].(string) - c.Assert(len(row), Equals, mysql.MaxDatetimeWidthNoFsp+3+1) - c.Assert(row[len(row)-12:], Equals, "00:00:00.567") -} - -// Test invoke Close without invoking Open before for each operators. -func (s *testSerialSuite) TestUnreasonablyClose(c *C) { - defer testleak.AfterTest(c)() - - is := infoschema.MockInfoSchema([]*model.TableInfo{plannercore.MockSignedTable(), plannercore.MockUnsignedTable()}) - se, err := session.CreateSession4Test(s.store) - c.Assert(err, IsNil) - _, err = se.Execute(context.Background(), "use test") - c.Assert(err, IsNil) - // To enable the shuffleExec operator. - _, err = se.Execute(context.Background(), "set @@tidb_merge_join_concurrency=4") - c.Assert(err, IsNil) - - var opsNeedsCovered = []plannercore.PhysicalPlan{ - &plannercore.PhysicalHashJoin{}, - &plannercore.PhysicalMergeJoin{}, - &plannercore.PhysicalIndexJoin{}, - &plannercore.PhysicalIndexHashJoin{}, - &plannercore.PhysicalTableReader{}, - &plannercore.PhysicalIndexReader{}, - &plannercore.PhysicalIndexLookUpReader{}, - &plannercore.PhysicalIndexMergeReader{}, - &plannercore.PhysicalApply{}, - &plannercore.PhysicalHashAgg{}, - &plannercore.PhysicalStreamAgg{}, - &plannercore.PhysicalLimit{}, - &plannercore.PhysicalSort{}, - &plannercore.PhysicalTopN{}, - &plannercore.PhysicalCTE{}, - &plannercore.PhysicalCTETable{}, - &plannercore.PhysicalMaxOneRow{}, - &plannercore.PhysicalProjection{}, - &plannercore.PhysicalSelection{}, - &plannercore.PhysicalTableDual{}, - &plannercore.PhysicalWindow{}, - &plannercore.PhysicalShuffle{}, - &plannercore.PhysicalUnionAll{}, - } - executorBuilder := executor.NewMockExecutorBuilderForTest(se, is, nil, math.MaxUint64, false, "global") - - var opsNeedsCoveredMask uint64 = 1< t1.a) AS a from t as t1) t", - "select /*+ hash_agg() */ count(f) from t group by a", - "select /*+ stream_agg() */ count(f) from t group by a", - "select * from t order by a, f", - "select * from t order by a, f limit 1", - "select * from t limit 1", - "select (select t1.a from t t1 where t1.a > t2.a) as a from t t2;", - "select a + 1 from t", - "select count(*) a from t having a > 1", - "select * from t where a = 1.1", - "with recursive cte1(c1) as (select 1 union select c1 + 1 from cte1 limit 5 offset 0) select * from cte1", - "select /*+use_index_merge(t, c_d_e, f)*/ * from t where c < 1 or f > 2", - "select sum(f) over (partition by f) from t", - "select /*+ merge_join(t1)*/ * from t t1 join t t2 on t1.d = t2.d", - "select a from t union all select a from t", - } { - comment := Commentf("case:%v sql:%s", i, tc) - c.Assert(err, IsNil, comment) - stmt, err := s.ParseOneStmt(tc, "", "") - c.Assert(err, IsNil, comment) - - err = se.NewTxn(context.Background()) - c.Assert(err, IsNil, comment) - p, _, err := planner.Optimize(context.TODO(), se, stmt, is) - c.Assert(err, IsNil, comment) - // This for loop level traverses the plan tree to get which operators are covered. - for child := []plannercore.PhysicalPlan{p.(plannercore.PhysicalPlan)}; len(child) != 0; { - newChild := make([]plannercore.PhysicalPlan, 0, len(child)) - for _, ch := range child { - found := false - for k, t := range opsNeedsCovered { - if reflect.TypeOf(t) == reflect.TypeOf(ch) { - opsAlreadyCoveredMask |= 1 << k - found = true - break - } - } - c.Assert(found, IsTrue, Commentf("case: %v sql: %s operator %v is not registered in opsNeedsCoveredMask", i, tc, reflect.TypeOf(ch))) - switch x := ch.(type) { - case *plannercore.PhysicalCTE: - newChild = append(newChild, x.RecurPlan) - newChild = append(newChild, x.SeedPlan) - continue - case *plannercore.PhysicalShuffle: - newChild = append(newChild, x.DataSources...) - newChild = append(newChild, x.Tails...) - continue - } - newChild = append(newChild, ch.Children()...) - } - child = newChild - } - - e := executorBuilder.Build(p) - - func() { - defer func() { - r := recover() - buf := make([]byte, 4096) - stackSize := runtime.Stack(buf, false) - buf = buf[:stackSize] - c.Assert(r, IsNil, Commentf("case: %v\n sql: %s\n error stack: %v", i, tc, string(buf))) - }() - c.Assert(e.Close(), IsNil, comment) - }() - } - // The following code is used to make sure all the operators registered - // in opsNeedsCoveredMask are covered. - commentBuf := strings.Builder{} - if opsAlreadyCoveredMask != opsNeedsCoveredMask { - for i := range opsNeedsCovered { - if opsAlreadyCoveredMask&(1< 1", + }, + { + sql: "select /*+use_index(tmp1, code)*/ * from tmp1 where code > 1", + }, + { + sql: "select /*+use_index(tmp1, code)*/ code from tmp1 where code > 1", + }, + { + sql: "select /*+ use_index_merge(tmp1, primary, code) */ * from tmp1 where id > 1 or code > 2", + }, + } + + addStaleReadToSQL := func(sql string) string { + idx := strings.Index(sql, " where ") + if idx < 0 { + return "" + } + return sql[0:idx] + " as of timestamp NOW(6)" + sql[idx:] + } + genLocalTemporarySQL := func(sql string) string { + return strings.Replace(sql, "tmp1", "tmp2", -1) + } + + for _, query := range queries { + localSQL := genLocalTemporarySQL(query.sql) + queries = append(queries, struct{ sql string }{sql: localSQL}) + } + for _, query := range queries { + sql := addStaleReadToSQL(query.sql) + if sql != "" { + tk.MustGetErrMsg(sql, "can not stale read temporary table") + } + } + + tk.MustExec("start transaction read only as of timestamp NOW(6)") + for _, query := range queries { + tk.MustGetErrMsg(query.sql, "can not stale read temporary table") + } + tk.MustExec("commit") + + for _, query := range queries { + tk.MustQuery(query.sql) + } + + // Test normal table when local temporary exits. + tk.MustExec("insert into tmp6 values(1);") + time.Sleep(100 * time.Millisecond) + tk.MustExec("set @a=now(6);") + tk.MustExec("drop table tmp6") + tk.MustExec("create table tmp6 (id int primary key);") + tk.MustQuery("select * from tmp6 as of timestamp(@a) where id=1;").Check(testkit.Rows("1")) + tk.MustQuery("select * from tmp4 as of timestamp(@a), tmp3 as of timestamp(@a) where tmp3.id=1;") + tk.MustGetErrMsg("select * from tmp4 as of timestamp(@a), tmp2 as of timestamp(@a) where tmp2.id=1;", "can not stale read temporary table") + + tk.MustExec("set transaction read only as of timestamp NOW(6)") + tk.MustExec("start transaction") + for _, query := range queries { + tk.MustGetErrMsg(query.sql, "can not stale read temporary table") + } + tk.MustExec("commit") + + for _, query := range queries { + tk.MustExec(query.sql) + } + + tk.MustExec("set @@tidb_snapshot=NOW(6)") + for _, query := range queries { + // forbidden historical read local temporary table + if strings.Contains(query.sql, "tmp2") { + tk.MustGetErrMsg(query.sql, "can not read local temporary table when 'tidb_snapshot' is set") + continue + } + // Will success here for compatibility with some tools like dumping + tk.MustQuery(query.sql).Check(testkit.Rows()) + } +} + +func TestInvalidReadCacheTable(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + // For mocktikv, safe point is not initialized, we manually insert it for snapshot to use. + safePointName := "tikv_gc_safe_point" + safePointValue := "20160102-15:04:05 -0700" + safePointComment := "All versions after safe point can be accessed. (DO NOT EDIT)" + updateSafePoint := fmt.Sprintf(`INSERT INTO mysql.tidb VALUES ('%[1]s', '%[2]s', '%[3]s') + ON DUPLICATE KEY + UPDATE variable_value = '%[2]s', comment = '%[3]s'`, safePointName, safePointValue, safePointComment) + tk.MustExec(updateSafePoint) + tk.MustExec("use test") + tk.MustExec("drop table if exists cache_tmp1") + tk.MustExec("create table cache_tmp1 " + + "(id int not null primary key, code int not null, value int default null, unique key code(code))") + tk.MustExec("alter table cache_tmp1 cache") + tk.MustExec("drop table if exists cache_tmp2") + tk.MustExec("create table cache_tmp2 (id int not null primary key, code int not null, value int default null, unique key code(code));") + tk.MustExec("alter table cache_tmp2 cache") + tk.MustExec("drop table if exists cache_tmp3 , cache_tmp4, cache_tmp5") + tk.MustExec("create table cache_tmp3 (id int not null primary key, code int not null, value int default null, unique key code(code));") + tk.MustExec("create table cache_tmp4 (id int not null primary key, code int not null, value int default null, unique key code(code));") + tk.MustExec("create table cache_tmp5 (id int primary key);") + // sleep 1us to make test stale + time.Sleep(time.Microsecond) + + queries := []struct { + sql string + }{ + { + sql: "select * from cache_tmp1 where id=1", + }, + { + sql: "select * from cache_tmp1 where code=1", + }, + { + sql: "select * from cache_tmp1 where id in (1, 2, 3)", + }, + { + sql: "select * from cache_tmp1 where code in (1, 2, 3)", + }, + { + sql: "select * from cache_tmp1 where id > 1", + }, + { + sql: "select /*+use_index(cache_tmp1, code)*/ * from cache_tmp1 where code > 1", + }, + { + sql: "select /*+use_index(cache_tmp1, code)*/ code from cache_tmp1 where code > 1", + }, + } + + addStaleReadToSQL := func(sql string) string { + idx := strings.Index(sql, " where ") + if idx < 0 { + return "" + } + return sql[0:idx] + " as of timestamp NOW(6)" + sql[idx:] + } + for _, query := range queries { + sql := addStaleReadToSQL(query.sql) + if sql != "" { + tk.MustGetErrMsg(sql, "can not stale read cache table") + } + } + + tk.MustExec("start transaction read only as of timestamp NOW(6)") + for _, query := range queries { + tk.MustGetErrMsg(query.sql, "can not stale read cache table") + } + tk.MustExec("commit") + + for _, query := range queries { + tk.MustQuery(query.sql) + } + + // Test normal table when cache table exits. + tk.MustExec("insert into cache_tmp5 values(1);") + time.Sleep(100 * time.Millisecond) + tk.MustExec("set @a=now(6);") + tk.MustExec("drop table cache_tmp5") + tk.MustExec("create table cache_tmp5 (id int primary key);") + tk.MustQuery("select * from cache_tmp5 as of timestamp(@a) where id=1;").Check(testkit.Rows("1")) + tk.MustQuery("select * from cache_tmp4 as of timestamp(@a), cache_tmp3 as of timestamp(@a) where cache_tmp3.id=1;") + tk.MustGetErrMsg("select * from cache_tmp4 as of timestamp(@a), cache_tmp2 as of timestamp(@a) where cache_tmp2.id=1;", "can not stale read cache table") + tk.MustExec("set transaction read only as of timestamp NOW(6)") + tk.MustExec("start transaction") + for _, query := range queries { + tk.MustGetErrMsg(query.sql, "can not stale read cache table") + } + tk.MustExec("commit") + + for _, query := range queries { + tk.MustExec(query.sql) + } + + tk.MustExec("set @@tidb_snapshot=NOW(6)") + for _, query := range queries { + // enable historical read cache table + tk.MustExec(query.sql) + + } +} diff --git a/executor/explainfor_test.go b/executor/explainfor_test.go index e13c94ca026bf..5fefa4879a2c3 100644 --- a/executor/explainfor_test.go +++ b/executor/explainfor_test.go @@ -1482,9 +1482,9 @@ func TestValidity4PlanCache(t *testing.T) { tk.MustQuery("execute stmt;").Check(testkit.Rows("1")) tk.MustQuery("select @@last_plan_from_cache;").Check(testkit.Rows("1")) - tk.MustExec("use test") + tk.MustExec("use test") // still read plan_cache.t and can hit the cache tk.MustQuery("execute stmt;").Check(testkit.Rows("1")) - tk.MustQuery("select @@last_plan_from_cache;").Check(testkit.Rows("0")) + tk.MustQuery("select @@last_plan_from_cache;").Check(testkit.Rows("1")) } func TestListPartition4PlanCache(t *testing.T) { diff --git a/executor/grant_test.go b/executor/grant_test.go index 240e9e5e41154..05d64b0d7b698 100644 --- a/executor/grant_test.go +++ b/executor/grant_test.go @@ -261,6 +261,17 @@ func TestCreateUserWhenGrant(t *testing.T) { tk.MustExec(`DROP USER IF EXISTS 'test'@'%'`) } +func TestCreateUserWithTooLongName(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + err := tk.ExecToErr("CREATE USER '1234567890abcdefGHIKL1234567890abcdefGHIKL@localhost'") + require.Truef(t, terror.ErrorEqual(err, executor.ErrWrongStringLength), "ERROR 1470 (HY000): String '1234567890abcdefGHIKL1234567890abcdefGHIKL' is too long for user name (should be no longer than 32)") + err = tk.ExecToErr("CREATE USER 'some_user_name@host_1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890X'") + require.Truef(t, terror.ErrorEqual(err, executor.ErrWrongStringLength), "ERROR 1470 (HY000): String 'host_1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij12345' is too long for host name (should be no longer than 255)") +} + func TestGrantPrivilegeAtomic(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() diff --git a/executor/hot_regions_history_table_test.go b/executor/hot_regions_history_table_test.go index fa9ab54aeb514..6e5fc3981305c 100644 --- a/executor/hot_regions_history_table_test.go +++ b/executor/hot_regions_history_table_test.go @@ -22,6 +22,7 @@ import ( "io" "net/http" "net/http/httptest" + "strconv" "strings" "testing" "time" @@ -35,6 +36,7 @@ import ( "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/helper" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/util/pdapi" "github.com/stretchr/testify/suite" ) @@ -164,25 +166,32 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { s.Require().NoError(err) return t.UnixNano() / int64(time.Millisecond) } + + tk := testkit.NewTestKit(s.T(), s.store) + tablesPrivTid := external.GetTableByName(s.T(), tk, "mysql", "TABLES_PRIV").Meta().ID + tablesPrivTidStr := strconv.FormatInt(tablesPrivTid, 10) + statsMetaTid := external.GetTableByName(s.T(), tk, "mysql", "STATS_META").Meta().ID + statsMetaTidStr := strconv.FormatInt(statsMetaTid, 10) + fullHotRegions := [][]string{ // mysql table_id = 11, table_name = TABLES_PRIV - {"2019-10-10 10:10:11", "MYSQL", "TABLES_PRIV", "11", "", "", "1", "1", "11111", "0", "1", "READ", "99", "99", "99", "99"}, - {"2019-10-10 10:10:12", "MYSQL", "TABLES_PRIV", "11", "", "", "2", "2", "22222", "0", "0", "WRITE", "99", "99", "99", "99"}, + {"2019-10-10 10:10:11", "MYSQL", "TABLES_PRIV", tablesPrivTidStr, "", "", "1", "1", "11111", "0", "1", "READ", "99", "99", "99", "99"}, + {"2019-10-10 10:10:12", "MYSQL", "TABLES_PRIV", tablesPrivTidStr, "", "", "2", "2", "22222", "0", "0", "WRITE", "99", "99", "99", "99"}, // mysql table_id = 21, table_name = STATS_META - {"2019-10-10 10:10:13", "MYSQL", "STATS_META", "21", "", "", "3", "3", "33333", "0", "1", "READ", "99", "99", "99", "99"}, - {"2019-10-10 10:10:14", "MYSQL", "STATS_META", "21", "", "", "4", "4", "44444", "0", "0", "WRITE", "99", "99", "99", "99"}, + {"2019-10-10 10:10:13", "MYSQL", "STATS_META", statsMetaTidStr, "", "", "3", "3", "33333", "0", "1", "READ", "99", "99", "99", "99"}, + {"2019-10-10 10:10:14", "MYSQL", "STATS_META", statsMetaTidStr, "", "", "4", "4", "44444", "0", "0", "WRITE", "99", "99", "99", "99"}, // table_id = 1313, deleted schema {"2019-10-10 10:10:15", "UNKNOWN", "UNKNOWN", "1313", "UNKNOWN", "", "5", "5", "55555", "0", "1", "READ", "99", "99", "99", "99"}, {"2019-10-10 10:10:16", "UNKNOWN", "UNKNOWN", "1313", "UNKNOWN", "", "6", "6", "66666", "0", "0", "WRITE", "99", "99", "99", "99"}, // mysql table_id = 11, index_id = 1, table_name = TABLES_PRIV, index_name = PRIMARY - {"2019-10-10 10:10:17", "MYSQL", "TABLES_PRIV", "11", "PRIMARY", "1", "1", "1", "11111", "0", "1", "READ", "99", "99", "99", "99"}, - {"2019-10-10 10:10:18", "MYSQL", "TABLES_PRIV", "11", "PRIMARY", "1", "2", "2", "22222", "0", "0", "WRITE", "99", "99", "99", "99"}, + {"2019-10-10 10:10:17", "MYSQL", "TABLES_PRIV", tablesPrivTidStr, "PRIMARY", "1", "1", "1", "11111", "0", "1", "READ", "99", "99", "99", "99"}, + {"2019-10-10 10:10:18", "MYSQL", "TABLES_PRIV", tablesPrivTidStr, "PRIMARY", "1", "2", "2", "22222", "0", "0", "WRITE", "99", "99", "99", "99"}, // mysql table_id = 21 ,index_id = 1, table_name = STATS_META, index_name = IDX_VER - {"2019-10-10 10:10:19", "MYSQL", "STATS_META", "21", "IDX_VER", "1", "3", "3", "33333", "0", "1", "READ", "99", "99", "99", "99"}, - {"2019-10-10 10:10:20", "MYSQL", "STATS_META", "21", "IDX_VER", "1", "4", "4", "44444", "0", "0", "WRITE", "99", "99", "99", "99"}, + {"2019-10-10 10:10:19", "MYSQL", "STATS_META", statsMetaTidStr, "IDX_VER", "1", "3", "3", "33333", "0", "1", "READ", "99", "99", "99", "99"}, + {"2019-10-10 10:10:20", "MYSQL", "STATS_META", statsMetaTidStr, "IDX_VER", "1", "4", "4", "44444", "0", "0", "WRITE", "99", "99", "99", "99"}, // mysql table_id = 21 ,index_id = 2, table_name = STATS_META, index_name = TBL - {"2019-10-10 10:10:21", "MYSQL", "STATS_META", "21", "TBL", "2", "5", "5", "55555", "0", "1", "READ", "99", "99", "99", "99"}, - {"2019-10-10 10:10:22", "MYSQL", "STATS_META", "21", "TBL", "2", "6", "6", "66666", "0", "0", "WRITE", "99", "99", "99", "99"}, + {"2019-10-10 10:10:21", "MYSQL", "STATS_META", statsMetaTidStr, "TBL", "2", "5", "5", "55555", "0", "1", "READ", "99", "99", "99", "99"}, + {"2019-10-10 10:10:22", "MYSQL", "STATS_META", statsMetaTidStr, "TBL", "2", "6", "6", "66666", "0", "0", "WRITE", "99", "99", "99", "99"}, // table_id = 1313, index_id = 1, deleted schema {"2019-10-10 10:10:23", "UNKNOWN", "UNKNOWN", "1313", "UNKNOWN", "1", "7", "7", "77777", "0", "1", "READ", "99", "99", "99", "99"}, {"2019-10-10 10:10:24", "UNKNOWN", "UNKNOWN", "1313", "UNKNOWN", "1", "8", "8", "88888", "0", "0", "WRITE", "99", "99", "99", "99"}, @@ -196,14 +205,14 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { // mysql table_id = 11, table_name = TABLES_PRIV {UpdateTime: unixTimeMs("2019-10-10 10:10:11"), RegionID: 1, StoreID: 1, PeerID: 11111, IsLearner: false, IsLeader: true, HotRegionType: "READ", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: 11}).StartKey, - EndKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: 11}).EndKey, + StartKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: tablesPrivTid}).StartKey, + EndKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: tablesPrivTid}).EndKey, }, // mysql table_id = 21, table_name = STATS_META {UpdateTime: unixTimeMs("2019-10-10 10:10:13"), RegionID: 3, StoreID: 3, PeerID: 33333, IsLearner: false, IsLeader: true, HotRegionType: "READ", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: 21}).StartKey, - EndKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: 21}).EndKey, + StartKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}).StartKey, + EndKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}).EndKey, }, }, }, @@ -212,14 +221,14 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { // mysql table_id = 11, table_name = TABLES_PRIV {UpdateTime: unixTimeMs("2019-10-10 10:10:12"), RegionID: 2, StoreID: 2, PeerID: 22222, IsLearner: false, IsLeader: false, HotRegionType: "WRITE", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: 11}).StartKey, - EndKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: 11}).EndKey, + StartKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: tablesPrivTid}).StartKey, + EndKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: tablesPrivTid}).EndKey, }, // mysql table_id = 21, table_name = STATS_META {UpdateTime: unixTimeMs("2019-10-10 10:10:14"), RegionID: 4, StoreID: 4, PeerID: 44444, IsLearner: false, IsLeader: false, HotRegionType: "WRITE", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: 21}).StartKey, - EndKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: 21}).EndKey, + StartKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}).StartKey, + EndKey: helper.NewTableWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}).EndKey, }, }, }, @@ -236,8 +245,8 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { // mysql table_id = 11, index_id = 1, table_name = TABLES_PRIV, index_name = PRIMARY {UpdateTime: unixTimeMs("2019-10-10 10:10:17"), RegionID: 1, StoreID: 1, PeerID: 11111, IsLearner: false, IsLeader: true, HotRegionType: "READ", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 11}, &model.IndexInfo{ID: 1}).StartKey, - EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 11}, &model.IndexInfo{ID: 1}).EndKey, + StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: tablesPrivTid}, &model.IndexInfo{ID: 1}).StartKey, + EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: tablesPrivTid}, &model.IndexInfo{ID: 1}).EndKey, }, }, }, @@ -252,8 +261,8 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { // mysql table_id = 11, index_id = 1, table_name = TABLES_PRIV, index_name = PRIMARY {UpdateTime: unixTimeMs("2019-10-10 10:10:18"), RegionID: 2, StoreID: 2, PeerID: 22222, IsLearner: false, IsLeader: false, HotRegionType: "WRITE", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 11}, &model.IndexInfo{ID: 1}).StartKey, - EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 11}, &model.IndexInfo{ID: 1}).EndKey, + StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: tablesPrivTid}, &model.IndexInfo{ID: 1}).StartKey, + EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: tablesPrivTid}, &model.IndexInfo{ID: 1}).EndKey, }, }, }, @@ -264,14 +273,14 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { // mysql table_id = 21 ,index_id = 1, table_name = STATS_META, index_name = IDX_VER {UpdateTime: unixTimeMs("2019-10-10 10:10:19"), RegionID: 3, StoreID: 3, PeerID: 33333, IsLearner: false, IsLeader: true, HotRegionType: "READ", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 21}, &model.IndexInfo{ID: 1}).StartKey, - EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 21}, &model.IndexInfo{ID: 1}).EndKey, + StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}, &model.IndexInfo{ID: 1}).StartKey, + EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}, &model.IndexInfo{ID: 1}).EndKey, }, // mysql table_id = 21 ,index_id = 2, table_name = STATS_META, index_name = TBL {UpdateTime: unixTimeMs("2019-10-10 10:10:21"), RegionID: 5, StoreID: 5, PeerID: 55555, IsLearner: false, IsLeader: true, HotRegionType: "READ", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 21}, &model.IndexInfo{ID: 2}).StartKey, - EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 21}, &model.IndexInfo{ID: 2}).EndKey, + StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}, &model.IndexInfo{ID: 2}).StartKey, + EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}, &model.IndexInfo{ID: 2}).EndKey, }, // table_id = 1313, index_id = 1, deleted schema {UpdateTime: unixTimeMs("2019-10-10 10:10:23"), RegionID: 7, StoreID: 7, PeerID: 77777, IsLeader: true, @@ -286,14 +295,14 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { // mysql table_id = 21 ,index_id = 1, table_name = STATS_META, index_name = IDX_VER {UpdateTime: unixTimeMs("2019-10-10 10:10:20"), RegionID: 4, StoreID: 4, PeerID: 44444, IsLearner: false, IsLeader: false, HotRegionType: "WRITE", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 21}, &model.IndexInfo{ID: 1}).StartKey, - EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 21}, &model.IndexInfo{ID: 1}).EndKey, + StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}, &model.IndexInfo{ID: 1}).StartKey, + EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}, &model.IndexInfo{ID: 1}).EndKey, }, // mysql table_id = 21 ,index_id = 2, table_name = STATS_META, index_name = TBL {UpdateTime: unixTimeMs("2019-10-10 10:10:22"), RegionID: 6, StoreID: 6, PeerID: 66666, IsLearner: false, IsLeader: false, HotRegionType: "WRITE", HotDegree: 99, FlowBytes: 99, KeyRate: 99, QueryRate: 99, - StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 21}, &model.IndexInfo{ID: 2}).StartKey, - EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: 21}, &model.IndexInfo{ID: 2}).EndKey, + StartKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}, &model.IndexInfo{ID: 2}).StartKey, + EndKey: helper.NewIndexWithKeyRange(mockDB, &model.TableInfo{ID: statsMetaTid}, &model.IndexInfo{ID: 2}).EndKey, }, // table_id = 1313, index_id = 1, deleted schema {UpdateTime: unixTimeMs("2019-10-10 10:10:24"), RegionID: 8, StoreID: 8, PeerID: 88888, IsLearner: false, @@ -339,7 +348,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { conditions: []string{ "update_time>='2019-10-10 10:10:10'", "update_time<='2019-10-11 10:10:10'", - "table_id=11", + "table_id=" + tablesPrivTidStr, }, expected: [][]string{ fullHotRegions[0], fullHotRegions[1], fullHotRegions[6], fullHotRegions[7], @@ -359,7 +368,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { conditions: []string{ "update_time>='2019-10-10 10:10:10'", "update_time<='2019-10-11 10:10:10'", - "table_id=21", + "table_id=" + statsMetaTidStr, "index_id=1", }, expected: [][]string{ @@ -370,7 +379,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { conditions: []string{ "update_time>='2019-10-10 10:10:10'", "update_time<='2019-10-11 10:10:10'", - "table_id=21", + "table_id=" + statsMetaTidStr, "index_id=1", "table_name='TABLES_PRIV'", }, // table_id != table_name -> nil @@ -380,7 +389,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { conditions: []string{ "update_time>='2019-10-10 10:10:10'", "update_time<='2019-10-11 10:10:10'", - "table_id=21", + "table_id=" + statsMetaTidStr, "index_id=1", "table_name='STATS_META'", }, // table_id = table_name @@ -392,7 +401,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { conditions: []string{ "update_time>='2019-10-10 10:10:10'", "update_time<='2019-10-11 10:10:10'", - "table_id=21", + "table_id=" + statsMetaTidStr, "index_id=1", "index_name='UNKNOWN'", }, // index_id != index_name -> nil @@ -402,7 +411,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { conditions: []string{ "update_time>='2019-10-10 10:10:10'", "update_time<='2019-10-11 10:10:10'", - "table_id=21", + "table_id=" + statsMetaTidStr, "index_id=1", "index_name='IDX_VER'", }, // index_id = index_name @@ -416,7 +425,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { "update_time<='2019-10-11 10:10:10'", "index_id=1", "index_name='IDX_VER'", - "table_id>=21", // unpushed down predicates 21>=21 + "table_id>=" + statsMetaTidStr, // unpushed down predicates 21>=21 }, expected: [][]string{ fullHotRegions[8], fullHotRegions[9], @@ -428,7 +437,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { "update_time<='2019-10-11 10:10:10'", "index_id=1", "index_name='IDX_VER'", - "table_id>21", // unpushed down predicates + "table_id>" + statsMetaTidStr, // unpushed down predicates }, // 21!>21 -> nil expected: [][]string{}, }, @@ -438,7 +447,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { "update_time<='2019-10-11 10:10:10'", "index_id=1", "index_name='IDX_VER'", - "table_id>=21", // unpushed down predicates + "table_id>=" + statsMetaTidStr, // unpushed down predicates "db_name='MYSQL'", }, expected: [][]string{ @@ -451,7 +460,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { "update_time<='2019-10-11 10:10:10'", "index_id=1", "index_name='IDX_VER'", - "table_id>=21", // unpushed down predicates + "table_id>=" + statsMetaTidStr, // unpushed down predicates "db_name='MYSQL'", "peer_id>=33334", }, @@ -465,7 +474,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { "update_time<='2019-10-11 10:10:10'", "index_id=1", "index_name='IDX_VER'", - "table_id>=21", // unpushed down predicates + "table_id>=" + statsMetaTidStr, // unpushed down predicates "db_name='UNKNOWN'", }, expected: [][]string{}, @@ -479,7 +488,7 @@ func (s *hotRegionsHistoryTableSuite) TestTiDBHotRegionsHistory() { hotRegionsResponses[k+store.hosts[i]] = v } } - tk := testkit.NewTestKit(s.T(), s.store) + for _, cas := range cases { sql := "select * from information_schema.tidb_hot_regions_history" if len(cas.conditions) > 0 { diff --git a/executor/index_lookup_hash_join.go b/executor/index_lookup_hash_join.go index 4121b21ccd348..51f21c2491e77 100644 --- a/executor/index_lookup_hash_join.go +++ b/executor/index_lookup_hash_join.go @@ -70,7 +70,8 @@ type IndexNestedLoopHashJoin struct { // taskCh is only used when `keepOuterOrder` is true. taskCh chan *indexHashJoinTask - stats *indexLookUpJoinRuntimeStats + stats *indexLookUpJoinRuntimeStats + prepared bool } type indexHashJoinOuterWorker struct { @@ -133,7 +134,6 @@ func (e *IndexNestedLoopHashJoin) Open(ctx context.Context) error { e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) } e.finished.Store(false) - e.startWorkers(ctx) return nil } @@ -207,6 +207,10 @@ func (e *IndexNestedLoopHashJoin) wait4JoinWorkers() { // Next implements the IndexNestedLoopHashJoin Executor interface. func (e *IndexNestedLoopHashJoin) Next(ctx context.Context, req *chunk.Chunk) error { + if !e.prepared { + e.startWorkers(ctx) + e.prepared = true + } req.Reset() if e.keepOuterOrder { return e.runInOrder(ctx, req) @@ -299,6 +303,7 @@ func (e *IndexNestedLoopHashJoin) Close() error { } e.joinChkResourceCh = nil e.finished.Store(false) + e.prepared = false return e.baseExecutor.Close() } diff --git a/executor/index_lookup_join.go b/executor/index_lookup_join.go index 44a7bdb4b9ca1..994385566dde3 100644 --- a/executor/index_lookup_join.go +++ b/executor/index_lookup_join.go @@ -86,6 +86,7 @@ type IndexLookUpJoin struct { stats *indexLookUpJoinRuntimeStats finished *atomic.Value + prepared bool } type outerCtx struct { @@ -174,7 +175,6 @@ func (e *IndexLookUpJoin) Open(ctx context.Context) error { e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) } e.cancelFunc = nil - e.startWorkers(ctx) return nil } @@ -258,6 +258,10 @@ func (e *IndexLookUpJoin) newInnerWorker(taskCh chan *lookUpJoinTask) *innerWork // Next implements the Executor interface. func (e *IndexLookUpJoin) Next(ctx context.Context, req *chunk.Chunk) error { + if !e.prepared { + e.startWorkers(ctx) + e.prepared = true + } if e.isOuterJoin { atomic.StoreInt64(&e.requiredRows, int64(req.RequiredRows())) } @@ -764,6 +768,7 @@ func (e *IndexLookUpJoin) Close() error { e.memTracker = nil e.task = nil e.finished.Store(false) + e.prepared = false return e.baseExecutor.Close() } diff --git a/executor/index_lookup_merge_join.go b/executor/index_lookup_merge_join.go index db1c27a5dfdf7..d0ff14924e90a 100644 --- a/executor/index_lookup_merge_join.go +++ b/executor/index_lookup_merge_join.go @@ -73,6 +73,7 @@ type IndexLookUpMergeJoin struct { lastColHelper *plannercore.ColWithCmpFuncManager memTracker *memory.Tracker // track memory usage + prepared bool } type outerMergeCtx struct { @@ -162,7 +163,6 @@ func (e *IndexLookUpMergeJoin) Open(ctx context.Context) error { } e.memTracker = memory.NewTracker(e.id, -1) e.memTracker.AttachTo(e.ctx.GetSessionVars().StmtCtx.MemTracker) - e.startWorkers(ctx) return nil } @@ -249,6 +249,10 @@ func (e *IndexLookUpMergeJoin) newInnerMergeWorker(taskCh chan *lookUpMergeJoinT // Next implements the Executor interface func (e *IndexLookUpMergeJoin) Next(ctx context.Context, req *chunk.Chunk) error { + if !e.prepared { + e.startWorkers(ctx) + e.prepared = true + } if e.isOuterJoin { atomic.StoreInt64(&e.requiredRows, int64(req.RequiredRows())) } @@ -731,5 +735,6 @@ func (e *IndexLookUpMergeJoin) Close() error { // cancelFunc control the outer worker and outer worker close the task channel. e.workerWg.Wait() e.memTracker = nil + e.prepared = false return e.baseExecutor.Close() } diff --git a/executor/index_merge_reader_test.go b/executor/index_merge_reader_test.go index ad57e3d050b40..fb484898ccdfa 100644 --- a/executor/index_merge_reader_test.go +++ b/executor/index_merge_reader_test.go @@ -21,6 +21,7 @@ import ( "strconv" "strings" "testing" + "time" "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/util" @@ -500,3 +501,82 @@ func TestIndexMergeSplitTable(t *testing.T) { tk.MustExec("SPLIT TABLE tab2 BY (5);") tk.MustQuery("SELECT /*+ use_index_merge(tab2) */ pk FROM tab2 WHERE (col4 > 565.89 OR col0 > 68 ) and col0 > 10 order by 1;").Check(testkit.Rows("0", "1", "2", "3", "4", "5", "6", "7")) } + +func TestPessimisticLockOnPartitionForIndexMerge(t *testing.T) { + // Same purpose with TestPessimisticLockOnPartition, but test IndexMergeReader. + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("drop table if exists t1, t2") + tk.MustExec(`create table t1 (c_datetime datetime, c1 int, c2 int, primary key (c_datetime), key(c1), key(c2)) + partition by range (to_days(c_datetime)) ( + partition p0 values less than (to_days('2020-02-01')), + partition p1 values less than (to_days('2020-04-01')), + partition p2 values less than (to_days('2020-06-01')), + partition p3 values less than maxvalue)`) + tk.MustExec("create table t2 (c_datetime datetime, unique key(c_datetime))") + tk.MustExec("insert into t1 values ('2020-06-26 03:24:00', 1, 1), ('2020-02-21 07:15:33', 2, 2), ('2020-04-27 13:50:58', 3, 3)") + tk.MustExec("insert into t2 values ('2020-01-10 09:36:00'), ('2020-02-04 06:00:00'), ('2020-06-12 03:45:18')") + tk.MustExec("analyze table t1") + tk.MustExec("analyze table t2") + + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk1.MustExec("set @@tidb_partition_prune_mode = 'static'") + + tk.MustExec("set @@tidb_partition_prune_mode = 'static'") + tk.MustExec("begin pessimistic") + tk.MustQuery(`explain format='brief' select /*+ use_index_merge(t1) */ c1 from t1 join t2 + on t1.c_datetime >= t2.c_datetime + where t1.c1 < 10 or t1.c2 < 10 for update`).Check(testkit.Rows( + "Projection 16635.64 root test.t1.c1", + "└─SelectLock 16635.64 root for update 0", + " └─Projection 16635.64 root test.t1.c1, test.t1._tidb_rowid, test.t1._tidb_tid, test.t2._tidb_rowid", + " └─HashJoin 16635.64 root CARTESIAN inner join, other cond:ge(test.t1.c_datetime, test.t2.c_datetime)", + " ├─IndexReader(Build) 3.00 root index:IndexFullScan", + " │ └─IndexFullScan 3.00 cop[tikv] table:t2, index:c_datetime(c_datetime) keep order:false", + " └─PartitionUnion(Probe) 5545.21 root ", + " ├─IndexMerge 5542.21 root ", + " │ ├─IndexRangeScan(Build) 3323.33 cop[tikv] table:t1, partition:p0, index:c1(c1) range:[-inf,10), keep order:false, stats:pseudo", + " │ ├─IndexRangeScan(Build) 3323.33 cop[tikv] table:t1, partition:p0, index:c2(c2) range:[-inf,10), keep order:false, stats:pseudo", + " │ └─TableRowIDScan(Probe) 5542.21 cop[tikv] table:t1, partition:p0 keep order:false, stats:pseudo", + " ├─IndexMerge 1.00 root ", + " │ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p1, index:c1(c1) range:[-inf,10), keep order:false", + " │ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p1, index:c2(c2) range:[-inf,10), keep order:false", + " │ └─TableRowIDScan(Probe) 1.00 cop[tikv] table:t1, partition:p1 keep order:false", + " ├─IndexMerge 1.00 root ", + " │ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p2, index:c1(c1) range:[-inf,10), keep order:false", + " │ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p2, index:c2(c2) range:[-inf,10), keep order:false", + " │ └─TableRowIDScan(Probe) 1.00 cop[tikv] table:t1, partition:p2 keep order:false", + " └─IndexMerge 1.00 root ", + " ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p3, index:c1(c1) range:[-inf,10), keep order:false", + " ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p3, index:c2(c2) range:[-inf,10), keep order:false", + " └─TableRowIDScan(Probe) 1.00 cop[tikv] table:t1, partition:p3 keep order:false", + )) + tk.MustQuery(`select /*+ use_index_merge(t1) */ c1 from t1 join t2 + on t1.c_datetime >= t2.c_datetime + where t1.c1 < 10 or t1.c2 < 10 for update`).Sort().Check(testkit.Rows("1", "1", "1", "2", "2", "3", "3")) + tk1.MustExec("begin pessimistic") + + ch := make(chan int32, 5) + go func() { + tk1.MustExec("update t1 set c_datetime = '2020-06-26 03:24:00' where c1 = 1") + ch <- 0 + tk1.MustExec("rollback") + ch <- 0 + }() + + // Leave 50ms for tk1 to run, tk1 should be blocked at the update operation. + time.Sleep(50 * time.Millisecond) + ch <- 1 + + tk.MustExec("commit") + // tk1 should be blocked until tk commit, check the order. + require.Equal(t, <-ch, int32(1)) + require.Equal(t, <-ch, int32(0)) + <-ch // wait for goroutine to quit. + + // TODO: add support for index merge reader in dynamic tidb_partition_prune_mode +} diff --git a/executor/infoschema_cluster_table_test.go b/executor/infoschema_cluster_table_test.go index 64e76cc529632..3ca92396aa309 100644 --- a/executor/infoschema_cluster_table_test.go +++ b/executor/infoschema_cluster_table_test.go @@ -319,7 +319,7 @@ func (s *infosSchemaClusterTableSuite) TestTableStorageStats() { "test 2", )) rows := tk.MustQuery("select TABLE_NAME from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'mysql';").Rows() - s.Require().Len(rows, 29) + s.Require().Len(rows, 30) // More tests about the privileges. tk.MustExec("create user 'testuser'@'localhost'") @@ -345,12 +345,12 @@ func (s *infosSchemaClusterTableSuite) TestTableStorageStats() { Hostname: "localhost", }, nil, nil)) - tk.MustQuery("select count(1) from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'mysql'").Check(testkit.Rows("29")) + tk.MustQuery("select count(1) from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'mysql'").Check(testkit.Rows("30")) s.Require().True(tk.Session().Auth(&auth.UserIdentity{ Username: "testuser3", Hostname: "localhost", }, nil, nil)) - tk.MustQuery("select count(1) from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'mysql'").Check(testkit.Rows("29")) + tk.MustQuery("select count(1) from information_schema.TABLE_STORAGE_STATS where TABLE_SCHEMA = 'mysql'").Check(testkit.Rows("30")) } diff --git a/executor/infoschema_reader.go b/executor/infoschema_reader.go index 64aef3ba4ace1..4a7d212c12942 100644 --- a/executor/infoschema_reader.go +++ b/executor/infoschema_reader.go @@ -22,7 +22,6 @@ import ( "fmt" "io" "net/http" - "regexp" "sort" "strconv" "strings" @@ -682,7 +681,7 @@ func (e *hugeMemTableRetriever) dataForColumnsInTable(ctx context.Context, sctx sctx.GetSessionVars().StmtCtx.AppendWarning(err) return } - var tableSchemaRegexp, tableNameRegexp, columnsRegexp []*regexp.Regexp + var tableSchemaRegexp, tableNameRegexp, columnsRegexp []collate.WildcardPattern var tableSchemaFilterEnable, tableNameFilterEnable, columnsFilterEnable bool if !extractor.SkipRequest { @@ -690,21 +689,24 @@ func (e *hugeMemTableRetriever) dataForColumnsInTable(ctx context.Context, sctx tableNameFilterEnable = extractor.TableName.Count() > 0 columnsFilterEnable = extractor.ColumnName.Count() > 0 if len(extractor.TableSchemaPatterns) > 0 { - tableSchemaRegexp = make([]*regexp.Regexp, len(extractor.TableSchemaPatterns)) + tableSchemaRegexp = make([]collate.WildcardPattern, len(extractor.TableSchemaPatterns)) for i, pattern := range extractor.TableSchemaPatterns { - tableSchemaRegexp[i] = regexp.MustCompile(pattern) + tableSchemaRegexp[i] = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() + tableSchemaRegexp[i].Compile(pattern, byte('\\')) } } if len(extractor.TableNamePatterns) > 0 { - tableNameRegexp = make([]*regexp.Regexp, len(extractor.TableNamePatterns)) + tableNameRegexp = make([]collate.WildcardPattern, len(extractor.TableNamePatterns)) for i, pattern := range extractor.TableNamePatterns { - tableNameRegexp[i] = regexp.MustCompile(pattern) + tableNameRegexp[i] = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() + tableNameRegexp[i].Compile(pattern, byte('\\')) } } if len(extractor.ColumnNamePatterns) > 0 { - columnsRegexp = make([]*regexp.Regexp, len(extractor.ColumnNamePatterns)) + columnsRegexp = make([]collate.WildcardPattern, len(extractor.ColumnNamePatterns)) for i, pattern := range extractor.ColumnNamePatterns { - columnsRegexp[i] = regexp.MustCompile(pattern) + columnsRegexp[i] = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() + columnsRegexp[i].Compile(pattern, byte('\\')) } } } @@ -724,17 +726,17 @@ ForColumnsTag: continue } for _, re := range tableSchemaRegexp { - if !re.MatchString(schema.Name.L) { + if !re.DoMatch(schema.Name.L) { continue ForColumnsTag } } for _, re := range tableNameRegexp { - if !re.MatchString(tbl.Name.L) { + if !re.DoMatch(tbl.Name.L) { continue ForColumnsTag } } for _, re := range columnsRegexp { - if !re.MatchString(col.Name.L) { + if !re.DoMatch(col.Name.L) { continue ForColumnsTag } } @@ -1641,6 +1643,18 @@ func (e *memtableRetriever) setDataFromTableConstraints(ctx sessionctx.Context, ) rows = append(rows, record) } + // TiDB includes foreign key information for compatibility but foreign keys are not yet enforced. + for _, fk := range tbl.ForeignKeys { + record := types.MakeDatums( + infoschema.CatalogVal, // CONSTRAINT_CATALOG + schema.Name.O, // CONSTRAINT_SCHEMA + fk.Name.O, // CONSTRAINT_NAME + schema.Name.O, // TABLE_SCHEMA + tbl.Name.O, // TABLE_NAME + infoschema.ForeignKeyType, // CONSTRAINT_TYPE + ) + rows = append(rows, record) + } } } e.rows = rows diff --git a/executor/infoschema_reader_test.go b/executor/infoschema_reader_test.go index 81813238832e7..fd13251d0d8fd 100644 --- a/executor/infoschema_reader_test.go +++ b/executor/infoschema_reader_test.go @@ -538,7 +538,7 @@ func TestForAnalyzeStatus(t *testing.T) { tk.MustExec("create table t1 (a int, b int, index idx(a))") tk.MustExec("insert into t1 values (1,2),(3,4)") tk.MustExec("analyze table t1") - tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t1.")) // 1 note. + tk.MustQuery("show warnings").Check(testkit.Rows("Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t1")) // 1 note. require.NoError(t, dom.StatsHandle().LoadNeededHistograms()) tk.MustExec("CREATE ROLE r_t1 ;") tk.MustExec("GRANT ALL PRIVILEGES ON test.t1 TO r_t1;") diff --git a/executor/insert_common.go b/executor/insert_common.go index f9c0802b89f34..21a35c9cbd0f1 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -39,6 +39,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/memory" @@ -163,7 +164,7 @@ func (e *InsertValues) initInsertColumns() error { } if col.Name.L == model.ExtraHandleName.L { if !e.ctx.GetSessionVars().AllowWriteRowID { - return errors.Errorf("insert, update and replace statements for _tidb_rowid are not supported.") + return errors.Errorf("insert, update and replace statements for _tidb_rowid are not supported") } e.hasExtraHandle = true } @@ -888,7 +889,7 @@ func (e *InsertValues) adjustAutoRandomDatum(ctx context.Context, d types.Datum, // Use the value if it's not null and not 0. if recordID != 0 { if !e.ctx.GetSessionVars().AllowAutoRandExplicitInsert { - return types.Datum{}, ddl.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomExplicitInsertDisabledErrMsg) + return types.Datum{}, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomExplicitInsertDisabledErrMsg) } err = e.rebaseAutoRandomID(ctx, recordID, &c.FieldType) if err != nil { @@ -977,7 +978,7 @@ func (e *InsertValues) adjustImplicitRowID(ctx context.Context, d types.Datum, h // Use the value if it's not null and not 0. if recordID != 0 { if !e.ctx.GetSessionVars().AllowWriteRowID { - return types.Datum{}, errors.Errorf("insert, update and replace statements for _tidb_rowid are not supported.") + return types.Datum{}, errors.Errorf("insert, update and replace statements for _tidb_rowid are not supported") } err = e.rebaseImplicitRowID(ctx, recordID) if err != nil { diff --git a/executor/insert_test.go b/executor/insert_test.go index 84e610b2b0a5c..ab35060fefc17 100644 --- a/executor/insert_test.go +++ b/executor/insert_test.go @@ -1215,6 +1215,50 @@ func TestAutoIDIncrementAndOffset(t *testing.T) { require.EqualError(t, err, "[autoid:8060]Invalid auto_increment settings: auto_increment_increment: 65536, auto_increment_offset: 65536, both of them must be in range [1..65535]") } +// Fix https://github.com/pingcap/tidb/issues/32601. +func TestTextTooLongError(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + // Set strict sql_mode + tk.MustExec("set sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_ALL_TABLES,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';") + + // For max_allowed_packet default value is big enough to ensure tinytext, text can test correctly. + tk.MustExec(`drop table if exists t1;`) + tk.MustExec("CREATE TABLE t1(c1 TINYTEXT CHARACTER SET utf8mb4);") + _, err := tk.Exec("INSERT INTO t1 (c1) VALUES(REPEAT(X'C385', 128));") + require.EqualError(t, err, "[types:1406]Data too long for column 'c1' at row 1") + + tk.MustExec(`drop table if exists t1;`) + tk.MustExec("CREATE TABLE t1(c1 Text CHARACTER SET utf8mb4);") + _, err = tk.Exec("INSERT INTO t1 (c1) VALUES(REPEAT(X'C385', 32768));") + require.EqualError(t, err, "[types:1406]Data too long for column 'c1' at row 1") + + tk.MustExec(`drop table if exists t1;`) + tk.MustExec("CREATE TABLE t1(c1 mediumtext);") + _, err = tk.Exec("INSERT INTO t1 (c1) VALUES(REPEAT(X'C385', 8777215));") + require.EqualError(t, err, "[types:1406]Data too long for column 'c1' at row 1") + + // For long text, max_allowed_packet default value can not allow 4GB package, skip the test case. + + // Set non strict sql_mode, we are not supposed to raise an error but to truncate the value. + tk.MustExec("set sql_mode = 'ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';") + + tk.MustExec(`drop table if exists t1;`) + tk.MustExec("CREATE TABLE t1(c1 TINYTEXT CHARACTER SET utf8mb4);") + _, err = tk.Exec("INSERT INTO t1 (c1) VALUES(REPEAT(X'C385', 128));") + require.NoError(t, err) + tk.MustQuery(`select length(c1) from t1;`).Check(testkit.Rows("254")) + + tk.MustExec(`drop table if exists t1;`) + tk.MustExec("CREATE TABLE t1(c1 Text CHARACTER SET utf8mb4);") + _, err = tk.Exec("INSERT INTO t1 (c1) VALUES(REPEAT(X'C385', 32768));") + require.NoError(t, err) + tk.MustQuery(`select length(c1) from t1;`).Check(testkit.Rows("65534")) + // For mediumtext or bigger size, for tikv limit, we will get:ERROR 8025 (HY000): entry too large, the max entry size is 6291456, the size of data is 16777247, no need to test. +} + func TestAutoRandomID(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() diff --git a/executor/join_test.go b/executor/join_test.go index 51d8b90e9c431..f6fe0b23ecf7b 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -2638,13 +2638,13 @@ func TestIssue20270(t *testing.T) { defer clean() tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/executor/killedInJoin2Chunk", "return(true)")) tk.MustExec("drop table if exists t;") tk.MustExec("drop table if exists t1;") tk.MustExec("create table t(c1 int, c2 int)") tk.MustExec("create table t1(c1 int, c2 int)") tk.MustExec("insert into t values(1,1),(2,2)") tk.MustExec("insert into t1 values(2,3),(4,4)") + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/executor/killedInJoin2Chunk", "return(true)")) err := tk.QueryToErr("select /*+ TIDB_HJ(t, t1) */ * from t left join t1 on t.c1 = t1.c1 where t.c1 = 1 or t1.c2 > 20") require.Equal(t, executor.ErrQueryInterrupted, err) require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/executor/killedInJoin2Chunk")) diff --git a/executor/load_data.go b/executor/load_data.go index 85b2c5122e2b0..5344a14fe8948 100644 --- a/executor/load_data.go +++ b/executor/load_data.go @@ -155,7 +155,7 @@ func (e *LoadDataInfo) initLoadColumns(columnNames []string) error { } if col.Name.L == model.ExtraHandleName.L { if !e.ctx.GetSessionVars().AllowWriteRowID { - return errors.Errorf("load data statement for _tidb_rowid are not supported.") + return errors.Errorf("load data statement for _tidb_rowid are not supported") } e.hasExtraHandle = true break diff --git a/executor/main_test.go b/executor/main_test.go index 87fb904cd3913..cf07e9c411b94 100644 --- a/executor/main_test.go +++ b/executor/main_test.go @@ -56,6 +56,7 @@ func TestMain(m *testing.M) { tikv.EnableFailpoints() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), goleak.IgnoreTopFunction("gopkg.in/natefinch/lumberjack%2ev2.(*Logger).millRun"), diff --git a/executor/mpp_gather.go b/executor/mpp_gather.go index 3299b487599d8..3a8ce366742b6 100644 --- a/executor/mpp_gather.go +++ b/executor/mpp_gather.go @@ -65,7 +65,11 @@ func (e *MPPGather) appendMPPDispatchReq(pf *plannercore.Fragment) error { dagReq.EncodeType = tipb.EncodeType_TypeChunk } for _, mppTask := range pf.ExchangeSender.Tasks { - err := updateExecutorTableID(context.Background(), dagReq.RootExecutor, mppTask.TableID, true) + if mppTask.PartitionTableIDs != nil { + err = updateExecutorTableID(context.Background(), dagReq.RootExecutor, true, mppTask.PartitionTableIDs) + } else { + err = updateExecutorTableID(context.Background(), dagReq.RootExecutor, true, []int64{mppTask.TableID}) + } if err != nil { return errors.Trace(err) } diff --git a/executor/oomtest/oom_test.go b/executor/oomtest/oom_test.go index e58d16053cd2b..866f43f567587 100644 --- a/executor/oomtest/oom_test.go +++ b/executor/oomtest/oom_test.go @@ -41,6 +41,7 @@ func TestMain(m *testing.M) { conf.OOMAction = config.OOMActionLog }) opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/executor/partition_table.go b/executor/partition_table.go index f38c2f1b01861..2ec4e6f421cdb 100644 --- a/executor/partition_table.go +++ b/executor/partition_table.go @@ -22,18 +22,20 @@ import ( "github.com/pingcap/tipb/go-tipb" ) -func updateExecutorTableID(ctx context.Context, exec *tipb.Executor, partitionID int64, recursive bool) error { +func updateExecutorTableID(ctx context.Context, exec *tipb.Executor, recursive bool, partitionIDs []int64) error { var child *tipb.Executor switch exec.Tp { case tipb.ExecType_TypeTableScan: - exec.TblScan.TableId = partitionID + exec.TblScan.TableId = partitionIDs[0] // For test coverage. if tmp := ctx.Value("nextPartitionUpdateDAGReq"); tmp != nil { m := tmp.(map[int64]struct{}) - m[partitionID] = struct{}{} + m[partitionIDs[0]] = struct{}{} } + case tipb.ExecType_TypePartitionTableScan: + exec.PartitionTableScan.PartitionIds = partitionIDs case tipb.ExecType_TypeIndexScan: - exec.IdxScan.TableId = partitionID + exec.IdxScan.TableId = partitionIDs[0] case tipb.ExecType_TypeSelection: child = exec.Selection.Child case tipb.ExecType_TypeAggregation, tipb.ExecType_TypeStreamAgg: @@ -54,7 +56,7 @@ func updateExecutorTableID(ctx context.Context, exec *tipb.Executor, partitionID return errors.Trace(fmt.Errorf("unknown new tipb protocol %d", exec.Tp)) } if child != nil && recursive { - return updateExecutorTableID(ctx, child, partitionID, recursive) + return updateExecutorTableID(ctx, child, recursive, partitionIDs) } return nil } diff --git a/executor/partition_table_test.go b/executor/partition_table_test.go index 7d4a50a369f8a..cb7b2d7633583 100644 --- a/executor/partition_table_test.go +++ b/executor/partition_table_test.go @@ -27,6 +27,7 @@ import ( "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/testkit/testdata" "github.com/stretchr/testify/require" ) @@ -57,7 +58,7 @@ partition p2 values less than (10))`) tk.MustQuery("select c from pt").Sort().Check(testkit.Rows("0", "2", "4", "6", "7", "9", "")) tk.MustQuery("select c from pt where c > 10").Check(testkit.Rows()) tk.MustQuery("select c from pt where c > 8").Check(testkit.Rows("9")) - tk.MustQuery("select c from pt where c < 2 or c >= 9").Check(testkit.Rows("0", "9")) + tk.MustQuery("select c from pt where c < 2 or c >= 9").Sort().Check(testkit.Rows("0", "9")) // Index lookup tk.MustQuery("select /*+ use_index(pt, i_id) */ * from pt").Sort().Check(testkit.Rows("0 0", "2 2", "4 4", "6 6", "7 7", "9 9", " ")) @@ -1803,7 +1804,7 @@ func TestMPPQueryExplainInfo(t *testing.T) { partition p0 values less than (5), partition p1 values less than (10), partition p2 values less than (15))`) - tb := tk.GetTableByName("tiflash_partition_test", "t") + tb := external.GetTableByName(t, tk, "tiflash_partition_test", "t") for _, partition := range tb.Meta().GetPartitionInfo().Definitions { err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), partition.ID, true) require.NoError(t, err) @@ -1828,13 +1829,20 @@ func TestPartitionPruningInTransaction(t *testing.T) { tk.MustExec("create database test_pruning_transaction") defer tk.MustExec(`drop database test_pruning_transaction`) tk.MustExec("use test_pruning_transaction") - tk.MustExec("set @@tidb_partition_prune_mode = 'dynamic'") tk.MustExec(`create table t(a int, b int) partition by range(a) (partition p0 values less than(3), partition p1 values less than (5), partition p2 values less than(11))`) + tk.MustExec("set @@tidb_partition_prune_mode = 'static'") tk.MustExec(`begin`) tk.MustPartitionByList(`select * from t`, []string{"p0", "p1", "p2"}) tk.MustPartitionByList(`select * from t where a > 3`, []string{"p1", "p2"}) // partition pruning can work in transactions tk.MustPartitionByList(`select * from t where a > 7`, []string{"p2"}) tk.MustExec(`rollback`) + tk.MustExec("set @@tidb_partition_prune_mode = 'dynamic'") + tk.MustExec(`begin`) + tk.MustPartition(`select * from t`, "all") + tk.MustPartition(`select * from t where a > 3`, "p1,p2") // partition pruning can work in transactions + tk.MustPartition(`select * from t where a > 7`, "p2") + tk.MustExec(`rollback`) + tk.MustExec("set @@tidb_partition_prune_mode = default") } func TestIssue25253(t *testing.T) { @@ -2837,7 +2845,7 @@ partition p1 values less than (7), partition p2 values less than (10))`) tk.MustExec("alter table p add unique idx(id)") tk.MustExec("insert into p values (1,3), (3,4), (5,6), (7,9)") - tk.MustQuery("select * from p use index (idx)").Check(testkit.Rows("1 3", "3 4", "5 6", "7 9")) + tk.MustQuery("select * from p use index (idx)").Sort().Check(testkit.Rows("1 3", "3 4", "5 6", "7 9")) } func TestIssue20028(t *testing.T) { @@ -2983,8 +2991,8 @@ partition p2 values less than (11))`) } partitionModes := []string{ - "'dynamic-only'", - "'static-only'", + "'dynamic'", + "'static'", } testCases := []func(){ optimisticTableReader, @@ -3262,3 +3270,332 @@ func TestIssue26251(t *testing.T) { <-ch tk2.MustExec("rollback") } + +func TestLeftJoinForUpdate(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("create database TestLeftJoinForUpdate") + defer tk1.MustExec("drop database TestLeftJoinForUpdate") + tk1.MustExec("use TestLeftJoinForUpdate") + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use TestLeftJoinForUpdate") + tk3 := testkit.NewTestKit(t, store) + tk3.MustExec("use TestLeftJoinForUpdate") + + tk1.MustExec("drop table if exists nt, pt") + tk1.MustExec("create table nt (id int, col varchar(32), primary key (id))") + tk1.MustExec("create table pt (id int, col varchar(32), primary key (id)) partition by hash(id) partitions 4") + + resetData := func() { + tk1.MustExec("truncate table nt") + tk1.MustExec("truncate table pt") + tk1.MustExec("insert into nt values (1, 'hello')") + tk1.MustExec("insert into pt values (2, 'test')") + } + + // ========================== First round of test ================== + // partition table left join normal table. + // ================================================================= + resetData() + ch := make(chan int, 10) + tk1.MustExec("begin pessimistic") + // No union scan + tk1.MustQuery("select * from pt left join nt on pt.id = nt.id for update").Check(testkit.Rows("2 test ")) + go func() { + // Check the key is locked. + tk2.MustExec("update pt set col = 'xxx' where id = 2") + ch <- 2 + }() + + // Union scan + tk1.MustExec("insert into pt values (1, 'world')") + tk1.MustQuery("select * from pt left join nt on pt.id = nt.id for update").Sort().Check(testkit.Rows("1 world 1 hello", "2 test ")) + go func() { + // Check the key is locked. + tk3.MustExec("update nt set col = 'yyy' where id = 1") + ch <- 3 + }() + + // Give chance for the goroutines to run first. + time.Sleep(80 * time.Millisecond) + ch <- 1 + tk1.MustExec("rollback") + + checkOrder := func() { + require.Equal(t, <-ch, 1) + v1 := <-ch + v2 := <-ch + require.True(t, (v1 == 2 && v2 == 3) || (v1 == 3 && v2 == 2)) + } + checkOrder() + + // ========================== Another round of test ================== + // normal table left join partition table. + // =================================================================== + resetData() + tk1.MustExec("begin pessimistic") + // No union scan + tk1.MustQuery("select * from nt left join pt on pt.id = nt.id for update").Check(testkit.Rows("1 hello ")) + + // Union scan + tk1.MustExec("insert into pt values (1, 'world')") + tk1.MustQuery("select * from nt left join pt on pt.id = nt.id for update").Check(testkit.Rows("1 hello 1 world")) + go func() { + tk2.MustExec("replace into pt values (1, 'aaa')") + ch <- 2 + }() + go func() { + tk3.MustExec("update nt set col = 'bbb' where id = 1") + ch <- 3 + }() + time.Sleep(80 * time.Millisecond) + ch <- 1 + tk1.MustExec("rollback") + checkOrder() +} + +func TestIssue31024(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("create database TestIssue31024") + defer tk1.MustExec("drop database TestIssue31024") + tk1.MustExec("use TestIssue31024") + tk1.MustExec("create table t1 (c_datetime datetime, c1 int, c2 int, primary key (c_datetime), key(c1), key(c2))" + + " partition by range (to_days(c_datetime)) " + + "( partition p0 values less than (to_days('2020-02-01'))," + + " partition p1 values less than (to_days('2020-04-01'))," + + " partition p2 values less than (to_days('2020-06-01'))," + + " partition p3 values less than maxvalue)") + tk1.MustExec("create table t2 (c_datetime datetime, unique key(c_datetime))") + tk1.MustExec("insert into t1 values ('2020-06-26 03:24:00', 1, 1), ('2020-02-21 07:15:33', 2, 2), ('2020-04-27 13:50:58', 3, 3)") + tk1.MustExec("insert into t2 values ('2020-01-10 09:36:00'), ('2020-02-04 06:00:00'), ('2020-06-12 03:45:18')") + tk1.MustExec("SET GLOBAL tidb_txn_mode = 'pessimistic'") + + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use TestIssue31024") + + ch := make(chan int, 10) + tk1.MustExec("set @@tidb_partition_prune_mode='dynamic'") + tk1.MustExec("begin pessimistic") + tk1.MustQuery("select /*+ use_index_merge(t1) */ * from t1 join t2 on t1.c_datetime >= t2.c_datetime where t1.c1 < 10 or t1.c2 < 10 for update") + + go func() { + // Check the key is locked. + tk2.MustExec("set @@tidb_partition_prune_mode='dynamic'") + tk2.MustExec("begin pessimistic") + tk2.MustExec("update t1 set c_datetime = '2020-06-26 03:24:00' where c1 = 1") + ch <- 2 + }() + + // Give chance for the goroutines to run first. + time.Sleep(80 * time.Millisecond) + ch <- 1 + tk1.MustExec("rollback") + + require.Equal(t, <-ch, 1) + require.Equal(t, <-ch, 2) + + tk2.MustExec("rollback") +} + +func TestIssue27346(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("create database TestIssue27346") + defer tk1.MustExec("drop database TestIssue27346") + tk1.MustExec("use TestIssue27346") + + tk1.MustExec("set @@tidb_enable_index_merge=1,@@tidb_partition_prune_mode='dynamic'") + + tk1.MustExec("DROP TABLE IF EXISTS `tbl_18`") + tk1.MustExec("CREATE TABLE `tbl_18` (`col_119` binary(16) NOT NULL DEFAULT 'skPoKiwYUi',`col_120` int(10) unsigned NOT NULL,`col_121` timestamp NOT NULL,`col_122` double NOT NULL DEFAULT '3937.1887880628115',`col_123` bigint(20) NOT NULL DEFAULT '3550098074891542725',PRIMARY KEY (`col_123`,`col_121`,`col_122`,`col_120`) CLUSTERED,UNIQUE KEY `idx_103` (`col_123`,`col_119`,`col_120`),UNIQUE KEY `idx_104` (`col_122`,`col_120`),UNIQUE KEY `idx_105` (`col_119`,`col_120`),KEY `idx_106` (`col_121`,`col_120`,`col_122`,`col_119`),KEY `idx_107` (`col_121`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci PARTITION BY HASH( `col_120` ) PARTITIONS 3") + tk1.MustExec("INSERT INTO tbl_18 (`col_119`, `col_120`, `col_121`, `col_122`, `col_123`) VALUES (X'736b506f4b6977595569000000000000', 672436701, '1974-02-24 00:00:00', 3937.1887880628115e0, -7373106839136381229), (X'736b506f4b6977595569000000000000', 2637316689, '1993-10-29 00:00:00', 3937.1887880628115e0, -4522626077860026631), (X'736b506f4b6977595569000000000000', 831809724, '1995-11-20 00:00:00', 3937.1887880628115e0, -4426441253940231780), (X'736b506f4b6977595569000000000000', 1588592628, '2001-03-28 00:00:00', 3937.1887880628115e0, 1329207475772244999), (X'736b506f4b6977595569000000000000', 3908038471, '2031-06-06 00:00:00', 3937.1887880628115e0, -6562815696723135786), (X'736b506f4b6977595569000000000000', 1674237178, '2001-10-24 00:00:00', 3937.1887880628115e0, -6459065549188938772), (X'736b506f4b6977595569000000000000', 3507075493, '2010-03-25 00:00:00', 3937.1887880628115e0, -4329597025765326929), (X'736b506f4b6977595569000000000000', 1276461709, '2019-07-20 00:00:00', 3937.1887880628115e0, 3550098074891542725)") + + tk1.MustQuery("select col_120,col_122,col_123 from tbl_18 where tbl_18.col_122 = 4763.320888074281 and not( tbl_18.col_121 in ( '2032-11-01' , '1975-05-21' , '1994-05-16' , '1984-01-15' ) ) or not( tbl_18.col_121 >= '2008-10-24' ) order by tbl_18.col_119,tbl_18.col_120,tbl_18.col_121,tbl_18.col_122,tbl_18.col_123 limit 919 for update").Sort().Check(testkit.Rows( + "1588592628 3937.1887880628115 1329207475772244999", + "1674237178 3937.1887880628115 -6459065549188938772", + "2637316689 3937.1887880628115 -4522626077860026631", + "672436701 3937.1887880628115 -7373106839136381229", + "831809724 3937.1887880628115 -4426441253940231780")) + tk1.MustQuery("select /*+ use_index_merge( tbl_18 ) */ col_120,col_122,col_123 from tbl_18 where tbl_18.col_122 = 4763.320888074281 and not( tbl_18.col_121 in ( '2032-11-01' , '1975-05-21' , '1994-05-16' , '1984-01-15' ) ) or not( tbl_18.col_121 >= '2008-10-24' ) order by tbl_18.col_119,tbl_18.col_120,tbl_18.col_121,tbl_18.col_122,tbl_18.col_123 limit 919 for update").Sort().Check(testkit.Rows( + "1588592628 3937.1887880628115 1329207475772244999", + "1674237178 3937.1887880628115 -6459065549188938772", + "2637316689 3937.1887880628115 -4522626077860026631", + "672436701 3937.1887880628115 -7373106839136381229", + "831809724 3937.1887880628115 -4426441253940231780")) +} + +func TestPartitionTableExplain(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database TestPartitionTableExplain") + tk.MustExec("use TestPartitionTableExplain") + tk.MustExec("set @@tidb_partition_prune_mode = 'static'") + tk.MustExec(`create table t (a int primary key, b int, key (b)) partition by hash(a) (partition P0, partition p1, partition P2)`) + tk.MustExec(`create table t2 (a int, b int)`) + tk.MustExec(`insert into t values (1,1),(2,2),(3,3)`) + tk.MustExec(`insert into t2 values (1,1),(2,2),(3,3)`) + tk.MustExec(`analyze table t`) + tk.MustExec(`analyze table t2`) + tk.MustQuery(`explain format = 'brief' select * from t`).Check(testkit.Rows( + "PartitionUnion 3.00 root ", + "├─TableReader 1.00 root data:TableFullScan", + "│ └─TableFullScan 1.00 cop[tikv] table:t, partition:P0 keep order:false", + "├─TableReader 1.00 root data:TableFullScan", + "│ └─TableFullScan 1.00 cop[tikv] table:t, partition:p1 keep order:false", + "└─TableReader 1.00 root data:TableFullScan", + " └─TableFullScan 1.00 cop[tikv] table:t, partition:P2 keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t partition(P0,p1)`).Check(testkit.Rows( + "PartitionUnion 2.00 root ", + "├─TableReader 1.00 root data:TableFullScan", + "│ └─TableFullScan 1.00 cop[tikv] table:t, partition:P0 keep order:false", + "└─TableReader 1.00 root data:TableFullScan", + " └─TableFullScan 1.00 cop[tikv] table:t, partition:p1 keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where a = 1`).Check(testkit.Rows("Point_Get 1.00 root table:t, partition:p1 handle:1")) + tk.MustQuery(`explain format = 'brief' select * from t where a = 2`).Check(testkit.Rows("Point_Get 1.00 root table:t, partition:P2 handle:2")) + // above ^^ is enough for Issue32719, the below vv for completeness + tk.MustQuery(`explain format = 'brief' select * from t where a = 1 OR a = 2`).Check(testkit.Rows( + "PartitionUnion 2.00 root ", + "├─Batch_Point_Get 1.00 root table:t handle:[1 2], keep order:false, desc:false", + "└─Batch_Point_Get 1.00 root table:t handle:[1 2], keep order:false, desc:false")) + tk.MustQuery(`explain format = 'brief' select * from t where a IN (2,3,4)`).Check(testkit.Rows("Batch_Point_Get 3.00 root table:t handle:[2 3 4], keep order:false, desc:false")) + tk.MustQuery(`explain format = 'brief' select * from t where a IN (2,3)`).Check(testkit.Rows("Batch_Point_Get 2.00 root table:t handle:[2 3], keep order:false, desc:false")) + // above ^^ is for completeness, the below vv is enough for Issue32719 + tk.MustQuery(`explain format = 'brief' select * from t where b = 1`).Check(testkit.Rows( + "PartitionUnion 1.00 root ", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[1,1], keep order:false", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:p1, index:b(b) range:[1,1], keep order:false", + "└─IndexReader 1.00 root index:IndexRangeScan", + " └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P2, index:b(b) range:[1,1], keep order:false")) + // The below vvv is for completeness + tk.MustQuery(`explain format = 'brief' select * from t where b = 2`).Check(testkit.Rows( + "PartitionUnion 1.00 root ", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[2,2], keep order:false", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:p1, index:b(b) range:[2,2], keep order:false", + "└─IndexReader 1.00 root index:IndexRangeScan", + " └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P2, index:b(b) range:[2,2], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where b = 1 OR b = 2`).Check(testkit.Rows( + "PartitionUnion 2.00 root ", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[1,2], keep order:false", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:p1, index:b(b) range:[1,2], keep order:false", + "└─IndexReader 1.00 root index:IndexRangeScan", + " └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P2, index:b(b) range:[1,2], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where b IN (2,3,4)`).Check(testkit.Rows( + "PartitionUnion 2.00 root ", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[2,2], [3,3], [4,4], keep order:false", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:p1, index:b(b) range:[2,2], [3,3], [4,4], keep order:false", + "└─IndexReader 1.00 root index:IndexRangeScan", + " └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P2, index:b(b) range:[2,2], [3,3], [4,4], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where b IN (2,3)`).Check(testkit.Rows( + "PartitionUnion 2.00 root ", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[2,2], [3,3], keep order:false", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:p1, index:b(b) range:[2,2], [3,3], keep order:false", + "└─IndexReader 1.00 root index:IndexRangeScan", + " └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P2, index:b(b) range:[2,2], [3,3], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t,t2 where t2.a = 1 and t2.b = t.b`).Check(testkit.Rows( + "Projection 1.00 root testpartitiontableexplain.t.a, testpartitiontableexplain.t.b, testpartitiontableexplain.t2.a, testpartitiontableexplain.t2.b", + "└─HashJoin 1.00 root inner join, equal:[eq(testpartitiontableexplain.t2.b, testpartitiontableexplain.t.b)]", + " ├─TableReader(Build) 1.00 root data:Selection", + " │ └─Selection 1.00 cop[tikv] eq(testpartitiontableexplain.t2.a, 1), not(isnull(testpartitiontableexplain.t2.b))", + " │ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false", + " └─PartitionUnion(Probe) 3.00 root ", + " ├─IndexReader 1.00 root index:IndexFullScan", + " │ └─IndexFullScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) keep order:false", + " ├─IndexReader 1.00 root index:IndexFullScan", + " │ └─IndexFullScan 1.00 cop[tikv] table:t, partition:p1, index:b(b) keep order:false", + " └─IndexReader 1.00 root index:IndexFullScan", + " └─IndexFullScan 1.00 cop[tikv] table:t, partition:P2, index:b(b) keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t partition (p1),t2 where t2.a = 1 and t2.b = t.b`).Check(testkit.Rows( + "IndexJoin 1.00 root inner join, inner:IndexReader, outer key:testpartitiontableexplain.t2.b, inner key:testpartitiontableexplain.t.b, equal cond:eq(testpartitiontableexplain.t2.b, testpartitiontableexplain.t.b)", + "├─TableReader(Build) 1.00 root data:Selection", + "│ └─Selection 1.00 cop[tikv] eq(testpartitiontableexplain.t2.a, 1), not(isnull(testpartitiontableexplain.t2.b))", + "│ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false", + "└─IndexReader(Probe) 1.00 root index:Selection", + " └─Selection 1.00 cop[tikv] not(isnull(testpartitiontableexplain.t.b))", + " └─IndexRangeScan 1.00 cop[tikv] table:t, partition:p1, index:b(b) range: decided by [eq(testpartitiontableexplain.t.b, testpartitiontableexplain.t2.b)], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t,t2 where t2.a = 1 and t2.b = t.b and t.a = 1`).Check(testkit.Rows( + "HashJoin 1.00 root inner join, equal:[eq(testpartitiontableexplain.t.b, testpartitiontableexplain.t2.b)]", + "├─TableReader(Build) 1.00 root data:Selection", + "│ └─Selection 1.00 cop[tikv] eq(testpartitiontableexplain.t2.a, 1), not(isnull(testpartitiontableexplain.t2.b))", + "│ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false", + "└─Selection(Probe) 1.00 root not(isnull(testpartitiontableexplain.t.b))", + " └─Point_Get 1.00 root table:t, partition:p1 handle:1")) + + tk.MustExec("set @@tidb_partition_prune_mode = 'dynamic'") + tk.MustExec(`analyze table t`) + tk.MustQuery(`explain format = 'brief' select * from t`).Check(testkit.Rows( + "TableReader 3.00 root partition:all data:TableFullScan", + "└─TableFullScan 3.00 cop[tikv] table:t keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t partition(P0,p1)`).Check(testkit.Rows( + "TableReader 3.00 root partition:P0,p1 data:TableFullScan", + "└─TableFullScan 3.00 cop[tikv] table:t keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where a = 1`).Check(testkit.Rows("Point_Get 1.00 root table:t, partition:p1 handle:1")) + tk.MustQuery(`explain format = 'brief' select * from t where a = 2`).Check(testkit.Rows("Point_Get 1.00 root table:t, partition:P2 handle:2")) + tk.MustQuery(`explain format = 'brief' select * from t where a = 1 OR a = 2`).Check(testkit.Rows( + "TableReader 2.00 root partition:p1,P2 data:TableRangeScan", + "└─TableRangeScan 2.00 cop[tikv] table:t range:[1,1], [2,2], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where a IN (2,3,4)`).Check(testkit.Rows("Batch_Point_Get 3.00 root table:t handle:[2 3 4], keep order:false, desc:false")) + tk.MustQuery(`explain format = 'brief' select * from t where a IN (2,3)`).Check(testkit.Rows("Batch_Point_Get 2.00 root table:t handle:[2 3], keep order:false, desc:false")) + tk.MustQuery(`explain format = 'brief' select * from t where b = 1`).Check(testkit.Rows( + "IndexReader 1.00 root partition:all index:IndexRangeScan", + "└─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t partition (P0,p1) where b = 1`).Check(testkit.Rows( + "IndexReader 1.00 root partition:P0,p1 index:IndexRangeScan", + "└─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where b = 1 OR b = 2`).Check(testkit.Rows( + "IndexReader 2.00 root partition:all index:IndexRangeScan", + "└─IndexRangeScan 2.00 cop[tikv] table:t, index:b(b) range:[1,2], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t partition (p1,P2) where b = 1 OR b = 2`).Check(testkit.Rows( + "IndexReader 2.00 root partition:p1,P2 index:IndexRangeScan", + "└─IndexRangeScan 2.00 cop[tikv] table:t, index:b(b) range:[1,2], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where b IN (2,3,4)`).Check(testkit.Rows( + "IndexReader 2.00 root partition:all index:IndexRangeScan", + "└─IndexRangeScan 2.00 cop[tikv] table:t, index:b(b) range:[2,2], [3,3], [4,4], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t where b IN (2,3)`).Check(testkit.Rows( + "IndexReader 2.00 root partition:all index:IndexRangeScan", + "└─IndexRangeScan 2.00 cop[tikv] table:t, index:b(b) range:[2,2], [3,3], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t,t2 where t2.a = 1 and t2.b = t.b`).Check(testkit.Rows( + "Projection 1.00 root testpartitiontableexplain.t.a, testpartitiontableexplain.t.b, testpartitiontableexplain.t2.a, testpartitiontableexplain.t2.b", + "└─IndexJoin 1.00 root inner join, inner:IndexReader, outer key:testpartitiontableexplain.t2.b, inner key:testpartitiontableexplain.t.b, equal cond:eq(testpartitiontableexplain.t2.b, testpartitiontableexplain.t.b)", + " ├─TableReader(Build) 1.00 root data:Selection", + " │ └─Selection 1.00 cop[tikv] eq(testpartitiontableexplain.t2.a, 1), not(isnull(testpartitiontableexplain.t2.b))", + " │ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false", + " └─IndexReader(Probe) 1.00 root partition:all index:Selection", + " └─Selection 1.00 cop[tikv] not(isnull(testpartitiontableexplain.t.b))", + " └─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range: decided by [eq(testpartitiontableexplain.t.b, testpartitiontableexplain.t2.b)], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t partition (p1),t2 where t2.a = 1 and t2.b = t.b`).Check(testkit.Rows( + "Projection 1.00 root testpartitiontableexplain.t.a, testpartitiontableexplain.t.b, testpartitiontableexplain.t2.a, testpartitiontableexplain.t2.b", + "└─IndexJoin 1.00 root inner join, inner:IndexReader, outer key:testpartitiontableexplain.t2.b, inner key:testpartitiontableexplain.t.b, equal cond:eq(testpartitiontableexplain.t2.b, testpartitiontableexplain.t.b)", + " ├─TableReader(Build) 1.00 root data:Selection", + " │ └─Selection 1.00 cop[tikv] eq(testpartitiontableexplain.t2.a, 1), not(isnull(testpartitiontableexplain.t2.b))", + " │ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false", + " └─IndexReader(Probe) 1.00 root partition:p1 index:Selection", + " └─Selection 1.00 cop[tikv] not(isnull(testpartitiontableexplain.t.b))", + " └─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range: decided by [eq(testpartitiontableexplain.t.b, testpartitiontableexplain.t2.b)], keep order:false")) + tk.MustQuery(`explain format = 'brief' select * from t,t2 where t2.a = 1 and t2.b = t.b and t.a = 1`).Check(testkit.Rows( + "HashJoin 1.00 root inner join, equal:[eq(testpartitiontableexplain.t.b, testpartitiontableexplain.t2.b)]", + "├─TableReader(Build) 1.00 root data:Selection", + "│ └─Selection 1.00 cop[tikv] eq(testpartitiontableexplain.t2.a, 1), not(isnull(testpartitiontableexplain.t2.b))", + "│ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false", + "└─TableReader(Probe) 1.00 root partition:p1 data:Selection", + " └─Selection 1.00 cop[tikv] not(isnull(testpartitiontableexplain.t.b))", + " └─TableRangeScan 1.00 cop[tikv] table:t range:[1,1], keep order:false")) +} diff --git a/executor/plan_replayer.go b/executor/plan_replayer.go index ab3261e6ca6c0..22520d5d3b722 100644 --- a/executor/plan_replayer.go +++ b/executor/plan_replayer.go @@ -119,9 +119,9 @@ func (e *PlanReplayerSingleExec) Next(ctx context.Context, req *chunk.Chunk) err // |_explain // |-explain.txt // -func (e *PlanReplayerSingleExec) dumpSingle(path string) (string, error) { +func (e *PlanReplayerSingleExec) dumpSingle(path string) (fileName string, err error) { // Create path - err := os.MkdirAll(path, os.ModePerm) + err = os.MkdirAll(path, os.ModePerm) if err != nil { return "", errors.AddStack(err) } @@ -134,7 +134,7 @@ func (e *PlanReplayerSingleExec) dumpSingle(path string) (string, error) { return "", err } key := base64.URLEncoding.EncodeToString(b) - fileName := fmt.Sprintf("replayer_single_%v_%v.zip", key, time) + fileName = fmt.Sprintf("replayer_single_%v_%v.zip", key, time) zf, err := os.Create(filepath.Join(path, fileName)) if err != nil { return "", errors.AddStack(err) @@ -143,13 +143,13 @@ func (e *PlanReplayerSingleExec) dumpSingle(path string) (string, error) { // Create zip writer zw := zip.NewWriter(zf) defer func() { - err := zw.Close() + err = zw.Close() if err != nil { - logutil.BgLogger().Warn("Closing zip writer failed", zap.Error(err)) + logutil.BgLogger().Error("Closing zip writer failed", zap.Error(err), zap.String("filename", fileName)) } err = zf.Close() if err != nil { - logutil.BgLogger().Warn("Closing zip file failed", zap.Error(err)) + logutil.BgLogger().Error("Closing zip file failed", zap.Error(err), zap.String("filename", fileName)) } }() diff --git a/executor/point_get.go b/executor/point_get.go index 69c2f546583d5..65ce73d840172 100644 --- a/executor/point_get.go +++ b/executor/point_get.go @@ -21,7 +21,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/metapb" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/ddl/placement" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/expression" @@ -37,6 +36,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil/consistency" "github.com/pingcap/tidb/util/rowcodec" @@ -156,6 +156,9 @@ func (e *PointGetExecutor) Open(context.Context) error { } else { e.snapshot = e.ctx.GetSnapshotWithTS(snapshotTS) } + if e.ctx.GetSessionVars().StmtCtx.RCCheckTS { + e.snapshot.SetOption(kv.IsolationLevel, kv.RCCheckTS) + } if e.cacheTable != nil { e.snapshot = cacheTableSnapshot{e.snapshot, e.cacheTable} } @@ -171,7 +174,7 @@ func (e *PointGetExecutor) Open(context.Context) error { e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id, e.stats) } readReplicaType := e.ctx.GetSessionVars().GetReplicaRead() - if readReplicaType.IsFollowerRead() { + if readReplicaType.IsFollowerRead() && !e.ctx.GetSessionVars().StmtCtx.RCCheckTS { e.snapshot.SetOption(kv.ReplicaRead, readReplicaType) } e.snapshot.SetOption(kv.TaskID, e.ctx.GetSessionVars().StmtCtx.TaskID) @@ -472,10 +475,10 @@ func (e *PointGetExecutor) verifyTxnScope() error { return nil } if len(partName) > 0 { - return ddl.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs( + return dbterror.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs( fmt.Sprintf("table %v's partition %v can not be read by %v txn_scope", tblName, partName, txnScope)) } - return ddl.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs( + return dbterror.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs( fmt.Sprintf("table %v can not be read by %v txn_scope", tblName, txnScope)) } diff --git a/executor/point_get_test.go b/executor/point_get_test.go index ad412010f87be..ff771a0fdb485 100644 --- a/executor/point_get_test.go +++ b/executor/point_get_test.go @@ -18,7 +18,6 @@ import ( "context" "fmt" "strings" - "sync" "testing" "time" @@ -30,8 +29,10 @@ import ( storeerr "github.com/pingcap/tidb/store/driver/error" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/testkit/testdata" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/codec" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/tikv" @@ -440,7 +441,7 @@ func TestReturnValues(t *testing.T) { tk.MustExec("insert t values ('a', 1), ('b', 2), ('c', 3)") tk.MustExec("begin pessimistic") tk.MustQuery("select * from t where a = 'b' for update").Check(testkit.Rows("b 2")) - tid := tk.GetTableByName("test", "t").Meta().ID + tid := external.GetTableByName(t, tk, "test", "t").Meta().ID idxVal, err := codec.EncodeKey(tk.Session().GetSessionVars().StmtCtx, nil, types.NewStringDatum("b")) require.NoError(t, err) pk := tablecodec.EncodeIndexSeekKey(tid, 1, idxVal) @@ -682,48 +683,46 @@ func TestPointGetWriteLock(t *testing.T) { } func TestPointGetLockExistKey(t *testing.T) { - var wg sync.WaitGroup - errCh := make(chan error) + var wg util.WaitGroupWrapper testLock := func(rc bool, key string, tableName string) { - doneCh := make(chan struct{}, 1) store, clean := testkit.CreateMockStore(t) defer clean() tk1, tk2 := testkit.NewTestKit(t, store), testkit.NewTestKit(t, store) - errCh <- tk1.ExecToErr("use test") - errCh <- tk2.ExecToErr("use test") + tk1.MustExec("use test") + tk2.MustExec("use test") tk1.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeIntOnly - errCh <- tk1.ExecToErr(fmt.Sprintf("drop table if exists %s", tableName)) - errCh <- tk1.ExecToErr(fmt.Sprintf("create table %s(id int, v int, k int, %s key0(id, v))", tableName, key)) - errCh <- tk1.ExecToErr(fmt.Sprintf("insert into %s values(1, 1, 1)", tableName)) + tk1.MustExec(fmt.Sprintf("drop table if exists %s", tableName)) + tk1.MustExec(fmt.Sprintf("create table %s(id int, v int, k int, %s key0(id, v))", tableName, key)) + tk1.MustExec(fmt.Sprintf("insert into %s values(1, 1, 1)", tableName)) if rc { - errCh <- tk1.ExecToErr("set tx_isolation = 'READ-COMMITTED'") - errCh <- tk2.ExecToErr("set tx_isolation = 'READ-COMMITTED'") + tk1.MustExec("set tx_isolation = 'READ-COMMITTED'") + tk2.MustExec("set tx_isolation = 'READ-COMMITTED'") } // select for update - errCh <- tk1.ExecToErr("begin pessimistic") - errCh <- tk2.ExecToErr("begin pessimistic") + tk1.MustExec("begin pessimistic") + tk2.MustExec("begin pessimistic") // lock exist key - errCh <- tk1.ExecToErr(fmt.Sprintf("select * from %s where id = 1 and v = 1 for update", tableName)) + tk1.MustExec(fmt.Sprintf("select * from %s where id = 1 and v = 1 for update", tableName)) // read committed will not lock non-exist key if rc { - errCh <- tk1.ExecToErr(fmt.Sprintf("select * from %s where id = 2 and v = 2 for update", tableName)) + tk1.MustExec(fmt.Sprintf("select * from %s where id = 2 and v = 2 for update", tableName)) } - errCh <- tk2.ExecToErr(fmt.Sprintf("insert into %s values(2, 2, 2)", tableName)) - go func() { - errCh <- tk2.ExecToErr(fmt.Sprintf("insert into %s values(1, 1, 10)", tableName)) + tk2.MustExec(fmt.Sprintf("insert into %s values(2, 2, 2)", tableName)) + var wg3 util.WaitGroupWrapper + wg3.Run(func() { + tk2.MustExec(fmt.Sprintf("insert into %s values(1, 1, 10)", tableName)) // tk2.MustExec(fmt.Sprintf("insert into %s values(1, 1, 10)", tableName)) - doneCh <- struct{}{} - }() + }) time.Sleep(150 * time.Millisecond) - errCh <- tk1.ExecToErr(fmt.Sprintf("update %s set v = 2 where id = 1 and v = 1", tableName)) - errCh <- tk1.ExecToErr("commit") - <-doneCh - errCh <- tk2.ExecToErr("commit") + tk1.MustExec(fmt.Sprintf("update %s set v = 2 where id = 1 and v = 1", tableName)) + tk1.MustExec("commit") + wg3.Wait() + tk2.MustExec("commit") tk1.MustQuery(fmt.Sprintf("select * from %s", tableName)).Check(testkit.Rows( "1 2 1", "2 2 2", @@ -731,23 +730,23 @@ func TestPointGetLockExistKey(t *testing.T) { )) // update - errCh <- tk1.ExecToErr("begin pessimistic") - errCh <- tk2.ExecToErr("begin pessimistic") + tk1.MustExec("begin pessimistic") + tk2.MustExec("begin pessimistic") // lock exist key - errCh <- tk1.ExecToErr(fmt.Sprintf("update %s set v = 3 where id = 2 and v = 2", tableName)) + tk1.MustExec(fmt.Sprintf("update %s set v = 3 where id = 2 and v = 2", tableName)) // read committed will not lock non-exist key if rc { - errCh <- tk1.ExecToErr(fmt.Sprintf("update %s set v =4 where id = 3 and v = 3", tableName)) + tk1.MustExec(fmt.Sprintf("update %s set v =4 where id = 3 and v = 3", tableName)) } - errCh <- tk2.ExecToErr(fmt.Sprintf("insert into %s values(3, 3, 3)", tableName)) - go func() { - errCh <- tk2.ExecToErr(fmt.Sprintf("insert into %s values(2, 2, 20)", tableName)) - doneCh <- struct{}{} - }() + tk2.MustExec(fmt.Sprintf("insert into %s values(3, 3, 3)", tableName)) + var wg2 util.WaitGroupWrapper + wg2.Run(func() { + tk2.MustExec(fmt.Sprintf("insert into %s values(2, 2, 20)", tableName)) + }) time.Sleep(150 * time.Millisecond) - errCh <- tk1.ExecToErr("commit") - <-doneCh - errCh <- tk2.ExecToErr("commit") + tk1.MustExec("commit") + wg2.Wait() + tk2.MustExec("commit") tk1.MustQuery(fmt.Sprintf("select * from %s", tableName)).Check(testkit.Rows( "1 2 1", "2 3 2", @@ -757,23 +756,23 @@ func TestPointGetLockExistKey(t *testing.T) { )) // delete - errCh <- tk1.ExecToErr("begin pessimistic") - errCh <- tk2.ExecToErr("begin pessimistic") + tk1.MustExec("begin pessimistic") + tk2.MustExec("begin pessimistic") // lock exist key - errCh <- tk1.ExecToErr(fmt.Sprintf("delete from %s where id = 3 and v = 3", tableName)) + tk1.MustExec(fmt.Sprintf("delete from %s where id = 3 and v = 3", tableName)) // read committed will not lock non-exist key if rc { - errCh <- tk1.ExecToErr(fmt.Sprintf("delete from %s where id = 4 and v = 4", tableName)) + tk1.MustExec(fmt.Sprintf("delete from %s where id = 4 and v = 4", tableName)) } - errCh <- tk2.ExecToErr(fmt.Sprintf("insert into %s values(4, 4, 4)", tableName)) - go func() { - errCh <- tk2.ExecToErr(fmt.Sprintf("insert into %s values(3, 3, 30)", tableName)) - doneCh <- struct{}{} - }() + tk2.MustExec(fmt.Sprintf("insert into %s values(4, 4, 4)", tableName)) + var wg1 util.WaitGroupWrapper + wg1.Run(func() { + tk2.MustExec(fmt.Sprintf("insert into %s values(3, 3, 30)", tableName)) + }) time.Sleep(50 * time.Millisecond) - errCh <- tk1.ExecToErr("commit") - <-doneCh - errCh <- tk2.ExecToErr("commit") + tk1.MustExec("commit") + wg1.Wait() + tk2.MustExec("commit") tk1.MustQuery(fmt.Sprintf("select * from %s", tableName)).Check(testkit.Rows( "1 2 1", "2 3 2", @@ -782,7 +781,6 @@ func TestPointGetLockExistKey(t *testing.T) { "4 4 4", "3 3 30", )) - wg.Done() } for i, one := range []struct { @@ -794,18 +792,12 @@ func TestPointGetLockExistKey(t *testing.T) { {rc: true, key: "primary key"}, {rc: true, key: "unique key"}, } { - wg.Add(1) tableName := fmt.Sprintf("t_%d", i) - go testLock(one.rc, one.key, tableName) - } - - go func() { - wg.Wait() - close(errCh) - }() - for err := range errCh { - require.NoError(t, err) + wg.Run(func() { + testLock(one.rc, one.key, tableName) + }) } + wg.Wait() } func TestWithTiDBSnapshot(t *testing.T) { diff --git a/executor/prepared.go b/executor/prepared.go index 675293c941a35..00b920182e491 100644 --- a/executor/prepared.go +++ b/executor/prepared.go @@ -224,6 +224,7 @@ func (e *PrepareExec) Next(ctx context.Context, req *chunk.Chunk) error { var p plannercore.Plan e.ctx.GetSessionVars().PlanID = 0 e.ctx.GetSessionVars().PlanColumnID = 0 + e.ctx.GetSessionVars().MapHashCode2UniqueID4ExtendedCol = nil destBuilder, _ := plannercore.NewPlanBuilder().Init(e.ctx, ret.InfoSchema, &hint.BlockHintProcessor{}) p, err = destBuilder.Build(ctx, stmt) if err != nil { @@ -244,6 +245,8 @@ func (e *PrepareExec) Next(ctx context.Context, req *chunk.Chunk) error { preparedObj := &plannercore.CachedPrepareStmt{ PreparedAst: prepared, + StmtDB: e.ctx.GetSessionVars().CurrentDB, + StmtText: stmt.Text(), VisitInfos: destBuilder.GetVisitInfo(), NormalizedSQL: normalizedSQL, SQLDigest: digest, @@ -330,9 +333,13 @@ func (e *DeallocateExec) Next(ctx context.Context, req *chunk.Chunk) error { prepared := preparedObj.PreparedAst delete(vars.PreparedStmtNameToID, e.Name) if plannercore.PreparedPlanCacheEnabled() { - e.ctx.PreparedPlanCache().Delete(plannercore.NewPlanCacheKey( - vars, id, prepared.SchemaVersion, - )) + cacheKey, err := plannercore.NewPlanCacheKey(vars, preparedObj.StmtText, preparedObj.StmtDB, prepared.SchemaVersion) + if err != nil { + return err + } + if !vars.IgnorePreparedCacheCloseStmt { // keep the plan in cache + e.ctx.PreparedPlanCache().Delete(cacheKey) + } } vars.RemovePreparedStmt(id) return nil diff --git a/executor/prepared_test.go b/executor/prepared_test.go index ab251b9e4853d..570d46ed49955 100644 --- a/executor/prepared_test.go +++ b/executor/prepared_test.go @@ -168,7 +168,7 @@ func TestPreparedNullParam(t *testing.T) { ps := []*util.ProcessInfo{tkProcess} tk.Session().SetSessionManager(&mockSessionManager1{PS: ps}) tk.MustQuery(fmt.Sprintf("explain for connection %d", tkProcess.ID)).Check(testkit.Rows( - "TableDual_5 8000.00 root rows:0")) + "TableDual_5 0.00 root rows:0")) } } diff --git a/executor/revoke_test.go b/executor/revoke_test.go index 9607736a3ee65..92cd7d79517b6 100644 --- a/executor/revoke_test.go +++ b/executor/revoke_test.go @@ -92,7 +92,7 @@ func TestRevokeTableScope(t *testing.T) { // Make sure all the table privs for new user is Y. res := tk.MustQuery(`SELECT Table_priv FROM mysql.tables_priv WHERE User="testTblRevoke" and host="localhost" and db="test" and Table_name="test1"`) - res.Check(testkit.Rows("Select,Insert,Update,Delete,Create,Drop,Index,Alter,Create View,Show View,References")) + res.Check(testkit.Rows("Select,Insert,Update,Delete,Create,Drop,Index,Alter,Create View,Show View,Trigger,References")) // Revoke each priv from the user. for _, v := range mysql.AllTablePrivs { diff --git a/executor/rowid_test.go b/executor/rowid_test.go index 5d49062d874e0..6a32fb6086977 100644 --- a/executor/rowid_test.go +++ b/executor/rowid_test.go @@ -65,7 +65,7 @@ func TestExportRowID(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") _, err = tk1.Exec("insert into t (a, _tidb_rowid) values(10, 1);") - require.EqualError(t, err, "insert, update and replace statements for _tidb_rowid are not supported.") + require.EqualError(t, err, "insert, update and replace statements for _tidb_rowid are not supported") } func TestNotAllowWriteRowID(t *testing.T) { @@ -81,13 +81,13 @@ func TestNotAllowWriteRowID(t *testing.T) { Check(testkit.Rows("1\x00\x00\x00\x00\x00\x00\x00\x00\x00 10 1")) // insert statement _, err := tk.Exec("insert into tt (id, c, _tidb_rowid) values(30000,10,1);") - require.EqualError(t, err, "insert, update and replace statements for _tidb_rowid are not supported.") + require.EqualError(t, err, "insert, update and replace statements for _tidb_rowid are not supported") // replace statement _, err = tk.Exec("replace into tt (id, c, _tidb_rowid) values(30000,10,1);") - require.EqualError(t, err, "insert, update and replace statements for _tidb_rowid are not supported.") + require.EqualError(t, err, "insert, update and replace statements for _tidb_rowid are not supported") // update statement _, err = tk.Exec("update tt set id = 2, _tidb_rowid = 1 where _tidb_rowid = 1") - require.EqualError(t, err, "insert, update and replace statements for _tidb_rowid are not supported.") + require.EqualError(t, err, "insert, update and replace statements for _tidb_rowid are not supported") tk.MustExec("update tt set id = 2 where _tidb_rowid = 1") tk.MustExec("admin check table tt;") tk.MustExec("drop table tt") diff --git a/executor/seqtest/main_test.go b/executor/seqtest/main_test.go index 39253aff765fb..73f1353e98fc6 100644 --- a/executor/seqtest/main_test.go +++ b/executor/seqtest/main_test.go @@ -29,6 +29,7 @@ func TestMain(m *testing.M) { conf.TiKVClient.AsyncCommit.AllowedClockDrift = 0 }) opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("github.com/pingcap/tidb/executor.readProjectionInput"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), diff --git a/executor/seqtest/prepared_test.go b/executor/seqtest/prepared_test.go index a5aafc326d0c5..76f98d0c80560 100644 --- a/executor/seqtest/prepared_test.go +++ b/executor/seqtest/prepared_test.go @@ -713,11 +713,11 @@ func TestPrepareDealloc(t *testing.T) { tk.MustExec("create table prepare_test (id int PRIMARY KEY, c1 int)") require.Equal(t, 0, tk.Session().PreparedPlanCache().Size()) - tk.MustExec(`prepare stmt1 from 'select * from prepare_test'`) + tk.MustExec(`prepare stmt1 from 'select id from prepare_test'`) tk.MustExec("execute stmt1") - tk.MustExec(`prepare stmt2 from 'select * from prepare_test'`) + tk.MustExec(`prepare stmt2 from 'select c1 from prepare_test'`) tk.MustExec("execute stmt2") - tk.MustExec(`prepare stmt3 from 'select * from prepare_test'`) + tk.MustExec(`prepare stmt3 from 'select id, c1 from prepare_test'`) tk.MustExec("execute stmt3") tk.MustExec(`prepare stmt4 from 'select * from prepare_test'`) tk.MustExec("execute stmt4") @@ -729,6 +729,20 @@ func TestPrepareDealloc(t *testing.T) { tk.MustExec("deallocate prepare stmt3") tk.MustExec("deallocate prepare stmt4") require.Equal(t, 0, tk.Session().PreparedPlanCache().Size()) + + tk.MustExec(`prepare stmt1 from 'select * from prepare_test'`) + tk.MustExec(`execute stmt1`) + tk.MustExec(`prepare stmt2 from 'select * from prepare_test'`) + tk.MustExec(`execute stmt2`) + require.Equal(t, 1, tk.Session().PreparedPlanCache().Size()) // use the same cached plan since they have the same statement + + tk.MustExec(`drop database if exists plan_cache`) + tk.MustExec(`create database plan_cache`) + tk.MustExec(`use plan_cache`) + tk.MustExec(`create table prepare_test (id int PRIMARY KEY, c1 int)`) + tk.MustExec(`prepare stmt3 from 'select * from prepare_test'`) + tk.MustExec(`execute stmt3`) + require.Equal(t, 2, tk.Session().PreparedPlanCache().Size()) // stmt3 has different DB } func TestPreparedIssue8153(t *testing.T) { diff --git a/executor/seqtest/seq_executor_test.go b/executor/seqtest/seq_executor_test.go index 856ad043ec8df..8db34810f99ee 100644 --- a/executor/seqtest/seq_executor_test.go +++ b/executor/seqtest/seq_executor_test.go @@ -33,8 +33,8 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/ddl" ddltestutil "github.com/pingcap/tidb/ddl/testutil" + "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" @@ -1402,15 +1402,15 @@ func TestAutoRandRecoverTable(t *testing.T) { tk.MustExec("drop table if exists t_recover_auto_rand") defer func(originGC bool) { if originGC { - ddl.EmulatorGCEnable() + util.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) + }(util.IsEmulatorGCEnable()) // Disable emulator GC. // Otherwise, emulator GC will delete table record as soon as possible after execute drop table ddl. - ddl.EmulatorGCDisable() + util.EmulatorGCDisable() gcTimeFormat := "20060102-15:04:05 -0700 MST" timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) safePointSQL := `INSERT HIGH_PRIORITY INTO mysql.tidb VALUES ('tikv_gc_safe_point', '%[1]s', '') @@ -1477,16 +1477,16 @@ func TestOOMPanicInHashJoinWhenFetchBuildRows(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() - fpName := "github.com/pingcap/tidb/executor/errorFetchBuildSideRowsMockOOMPanic" - require.NoError(t, failpoint.Enable(fpName, `panic("ERROR 1105 (HY000): Out Of Memory Quota![conn_id=1]")`)) - defer func() { - require.NoError(t, failpoint.Disable(fpName)) - }() tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(c1 int, c2 int)") tk.MustExec("insert into t values(1,1),(2,2)") + fpName := "github.com/pingcap/tidb/executor/errorFetchBuildSideRowsMockOOMPanic" + require.NoError(t, failpoint.Enable(fpName, `panic("ERROR 1105 (HY000): Out Of Memory Quota![conn_id=1]")`)) + defer func() { + require.NoError(t, failpoint.Disable(fpName)) + }() err := tk.QueryToErr("select * from t as t2 join t as t1 where t1.c1=t2.c1") require.EqualError(t, err, "failpoint panic: ERROR 1105 (HY000): Out Of Memory Quota![conn_id=1]") } diff --git a/executor/set.go b/executor/set.go index 65e21d470cc78..a79055abb5dbe 100644 --- a/executor/set.go +++ b/executor/set.go @@ -115,6 +115,14 @@ func (e *SetExecutor) setSysVariable(ctx context.Context, name string, v *expres } return variable.ErrUnknownSystemVar.GenWithStackByArgs(name) } + + if sysVar.HasInstanceScope() && !v.IsGlobal && sessionVars.EnableLegacyInstanceScope { + // For backward compatibility we will change the v.IsGlobal to true, + // and append a warning saying this will not be supported in future. + v.IsGlobal = true + sessionVars.StmtCtx.AppendWarning(ErrInstanceScope.GenWithStackByArgs(sysVar.Name)) + } + if v.IsGlobal { valStr, err := e.getVarValue(v, sysVar) if err != nil { diff --git a/executor/set_test.go b/executor/set_test.go index c64b6d8cb8a8e..42cd1340f09c0 100644 --- a/executor/set_test.go +++ b/executor/set_test.go @@ -396,15 +396,15 @@ func TestSetVar(t *testing.T) { tk.MustQuery(`select @@tidb_mem_quota_apply_cache`).Check(testkit.Rows("123")) // test for tidb_mem_quota_bind_cache - defVal = fmt.Sprintf("%v", variable.DefTiDBMemQuotaBindCache) - tk.MustQuery(`select @@tidb_mem_quota_bind_cache`).Check(testkit.Rows(defVal)) - tk.MustExec(`set global tidb_mem_quota_bind_cache = 1`) - tk.MustQuery(`select @@global.tidb_mem_quota_bind_cache`).Check(testkit.Rows("1")) - tk.MustExec(`set global tidb_mem_quota_bind_cache = 0`) - tk.MustQuery(`select @@global.tidb_mem_quota_bind_cache`).Check(testkit.Rows("0")) - tk.MustExec(`set global tidb_mem_quota_bind_cache = 123`) - tk.MustQuery(`select @@global.tidb_mem_quota_bind_cache`).Check(testkit.Rows("123")) - tk.MustQuery(`select @@global.tidb_mem_quota_bind_cache`).Check(testkit.Rows("123")) + defVal = fmt.Sprintf("%v", variable.DefTiDBMemQuotaBindingCache) + tk.MustQuery(`select @@tidb_mem_quota_binding_cache`).Check(testkit.Rows(defVal)) + tk.MustExec(`set global tidb_mem_quota_binding_cache = 1`) + tk.MustQuery(`select @@global.tidb_mem_quota_binding_cache`).Check(testkit.Rows("1")) + tk.MustExec(`set global tidb_mem_quota_binding_cache = 0`) + tk.MustQuery(`select @@global.tidb_mem_quota_binding_cache`).Check(testkit.Rows("0")) + tk.MustExec(`set global tidb_mem_quota_binding_cache = 123`) + tk.MustQuery(`select @@global.tidb_mem_quota_binding_cache`).Check(testkit.Rows("123")) + tk.MustQuery(`select @@global.tidb_mem_quota_binding_cache`).Check(testkit.Rows("123")) // test for tidb_enable_parallel_apply tk.MustQuery(`select @@tidb_enable_parallel_apply`).Check(testkit.Rows("0")) @@ -416,19 +416,19 @@ func TestSetVar(t *testing.T) { tk.MustQuery(`select @@global.tidb_enable_parallel_apply`).Check(testkit.Rows("0")) tk.MustQuery(`select @@tidb_enable_parallel_apply`).Check(testkit.Rows("1")) - tk.MustQuery(`select @@session.tidb_general_log;`).Check(testkit.Rows("0")) + tk.MustQuery(`select @@global.tidb_general_log;`).Check(testkit.Rows("0")) tk.MustQuery(`show variables like 'tidb_general_log';`).Check(testkit.Rows("tidb_general_log OFF")) tk.MustExec("set tidb_general_log = 1") - tk.MustQuery(`select @@session.tidb_general_log;`).Check(testkit.Rows("1")) + tk.MustQuery(`select @@global.tidb_general_log;`).Check(testkit.Rows("1")) tk.MustQuery(`show variables like 'tidb_general_log';`).Check(testkit.Rows("tidb_general_log ON")) tk.MustExec("set tidb_general_log = 0") - tk.MustQuery(`select @@session.tidb_general_log;`).Check(testkit.Rows("0")) + tk.MustQuery(`select @@global.tidb_general_log;`).Check(testkit.Rows("0")) tk.MustQuery(`show variables like 'tidb_general_log';`).Check(testkit.Rows("tidb_general_log OFF")) tk.MustExec("set tidb_general_log = on") - tk.MustQuery(`select @@session.tidb_general_log;`).Check(testkit.Rows("1")) + tk.MustQuery(`select @@global.tidb_general_log;`).Check(testkit.Rows("1")) tk.MustQuery(`show variables like 'tidb_general_log';`).Check(testkit.Rows("tidb_general_log ON")) tk.MustExec("set tidb_general_log = off") - tk.MustQuery(`select @@session.tidb_general_log;`).Check(testkit.Rows("0")) + tk.MustQuery(`select @@global.tidb_general_log;`).Check(testkit.Rows("0")) tk.MustQuery(`show variables like 'tidb_general_log';`).Check(testkit.Rows("tidb_general_log OFF")) require.Error(t, tk.ExecToErr("set tidb_general_log = abc")) require.Error(t, tk.ExecToErr("set tidb_general_log = 123")) @@ -576,6 +576,15 @@ func TestSetVar(t *testing.T) { require.Error(t, tk.ExecToErr("select @@session.tidb_enable_column_tracking")) require.Error(t, tk.ExecToErr("set tidb_enable_column_tracking = 0")) require.Error(t, tk.ExecToErr("set global tidb_enable_column_tracking = -1")) + + // test for tidb_ignore_prepared_cache_close_stmt + tk.MustQuery("select @@global.tidb_ignore_prepared_cache_close_stmt").Check(testkit.Rows("0")) // default value is 0 + tk.MustExec("set global tidb_ignore_prepared_cache_close_stmt=1") + tk.MustQuery("select @@global.tidb_ignore_prepared_cache_close_stmt").Check(testkit.Rows("1")) + tk.MustQuery("show global variables like 'tidb_ignore_prepared_cache_close_stmt'").Check(testkit.Rows("tidb_ignore_prepared_cache_close_stmt ON")) + tk.MustExec("set global tidb_ignore_prepared_cache_close_stmt=0") + tk.MustQuery("select @@global.tidb_ignore_prepared_cache_close_stmt").Check(testkit.Rows("0")) + tk.MustQuery("show global variables like 'tidb_ignore_prepared_cache_close_stmt'").Check(testkit.Rows("tidb_ignore_prepared_cache_close_stmt OFF")) } func TestTruncateIncorrectIntSessionVar(t *testing.T) { @@ -794,6 +803,7 @@ func TestValidateSetVar(t *testing.T) { tk.MustQuery("select @@tidb_constraint_check_in_place;").Check(testkit.Rows("1")) tk.MustExec("set @@tidb_general_log=0;") + tk.MustQuery(`show warnings`).Check(testkit.Rows(fmt.Sprintf("Warning %d modifying tidb_general_log will require SET GLOBAL in a future version of TiDB", errno.ErrInstanceScope))) tk.MustQuery("select @@tidb_general_log;").Check(testkit.Rows("0")) tk.MustExec("set @@tidb_pprof_sql_cpu=1;") @@ -801,9 +811,6 @@ func TestValidateSetVar(t *testing.T) { tk.MustExec("set @@tidb_pprof_sql_cpu=0;") tk.MustQuery("select @@tidb_pprof_sql_cpu;").Check(testkit.Rows("0")) - tk.MustExec("set @@tidb_enable_streaming=1;") - tk.MustQuery("select @@tidb_enable_streaming;").Check(testkit.Rows("1")) - err = tk.ExecToErr("set @@tidb_batch_delete=3;") require.True(t, terror.ErrorEqual(err, variable.ErrWrongValueForVar), fmt.Sprintf("err %v", err)) @@ -1568,3 +1575,19 @@ func TestSetTopSQLVariables(t *testing.T) { tk.MustQuery("show variables like '%top_sql%'").Check(testkit.Rows("tidb_enable_top_sql OFF", "tidb_top_sql_max_meta_count 5000", "tidb_top_sql_max_time_series_count 20")) tk.MustQuery("show global variables like '%top_sql%'").Check(testkit.Rows("tidb_enable_top_sql OFF", "tidb_top_sql_max_meta_count 5000", "tidb_top_sql_max_time_series_count 20")) } + +func TestInstanceScopeSwitching(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + // enable 'switching' to SESSION variables + tk.MustExec("set tidb_enable_legacy_instance_scope = 1") + tk.MustExec("set tidb_general_log = 1") + tk.MustQuery(`show warnings`).Check(testkit.Rows(fmt.Sprintf("Warning %d modifying tidb_general_log will require SET GLOBAL in a future version of TiDB", errno.ErrInstanceScope))) + + // disable 'switching' to SESSION variables + tk.MustExec("set tidb_enable_legacy_instance_scope = 0") + tk.MustGetErrCode("set tidb_general_log = 1", errno.ErrGlobalVariable) +} diff --git a/executor/show.go b/executor/show.go index 08dbdf634972e..cc26c4a0d86c5 100644 --- a/executor/show.go +++ b/executor/show.go @@ -19,7 +19,6 @@ import ( "context" gjson "encoding/json" "fmt" - "regexp" "sort" "strconv" "strings" @@ -27,9 +26,6 @@ import ( "github.com/cznic/mathutil" "github.com/pingcap/errors" - "github.com/pingcap/tidb-tools/pkg/etcd" - "github.com/pingcap/tidb-tools/pkg/utils" - "github.com/pingcap/tidb-tools/tidb-binlog/node" "github.com/pingcap/tidb/bindinfo" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" @@ -55,14 +51,17 @@ import ( "github.com/pingcap/tidb/store/helper" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" + "github.com/pingcap/tidb/tidb-binlog/node" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/etcd" "github.com/pingcap/tidb/util/format" "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/hint" + "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/sem" "github.com/pingcap/tidb/util/set" "github.com/pingcap/tidb/util/sqlexec" @@ -212,6 +211,8 @@ func (e *ShowExec) fetchAll(ctx context.Context) error { return e.fetchShowPrivileges() case ast.ShowBindings: return e.fetchShowBind() + case ast.ShowBindingCacheStatus: + return e.fetchShowBindingCacheStatus(ctx) case ast.ShowAnalyzeStatus: e.fetchShowAnalyzeStatus() return nil @@ -340,6 +341,37 @@ func (e *ShowExec) fetchShowBind() error { return nil } +func (e *ShowExec) fetchShowBindingCacheStatus(ctx context.Context) error { + exec := e.ctx.(sqlexec.RestrictedSQLExecutor) + + rows, _, err := exec.ExecRestrictedSQL(ctx, nil, fmt.Sprintf("SELECT count(*) FROM mysql.bind_info where status = '%s' or status = '%s';", bindinfo.Enabled, bindinfo.Using)) + if err != nil { + return errors.Trace(err) + } + + handle := domain.GetDomain(e.ctx).BindHandle() + + bindRecords := handle.GetAllBindRecord() + numBindings := 0 + for _, bindRecord := range bindRecords { + for _, binding := range bindRecord.Bindings { + if binding.IsBindingEnabled() { + numBindings++ + } + } + } + + memUsage := handle.GetMemUsage() + memCapacity := handle.GetMemCapacity() + e.appendRow([]interface{}{ + numBindings, + rows[0].GetInt64(0), + memory.FormatBytes(memUsage), + memory.FormatBytes(memCapacity), + }) + return nil +} + func (e *ShowExec) fetchShowEngines(ctx context.Context) error { exec := e.ctx.(sqlexec.RestrictedSQLExecutor) @@ -430,15 +462,16 @@ func (e *ShowExec) fetchShowTables() error { tableNames := make([]string, 0, len(schemaTables)) activeRoles := e.ctx.GetSessionVars().ActiveRoles var ( - tableTypes = make(map[string]string) - fieldPatternsRegexp *regexp.Regexp - FieldFilterEnable bool - fieldFilter string + tableTypes = make(map[string]string) + fieldPatternsLike collate.WildcardPattern + FieldFilterEnable bool + fieldFilter string ) if e.Extractor != nil { extractor := (e.Extractor).(*plannercore.ShowTablesTableExtractor) if extractor.FieldPatterns != "" { - fieldPatternsRegexp = regexp.MustCompile(extractor.FieldPatterns) + fieldPatternsLike = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() + fieldPatternsLike.Compile(extractor.FieldPatterns, byte('\\')) } FieldFilterEnable = extractor.Field != "" fieldFilter = extractor.Field @@ -450,7 +483,7 @@ func (e *ShowExec) fetchShowTables() error { continue } else if FieldFilterEnable && v.Meta().Name.L != fieldFilter { continue - } else if fieldPatternsRegexp != nil && !fieldPatternsRegexp.MatchString(v.Meta().Name.L) { + } else if fieldPatternsLike != nil && !fieldPatternsLike.DoMatch(v.Meta().Name.L) { continue } tableNames = append(tableNames, v.Meta().Name.O) @@ -528,14 +561,15 @@ func (e *ShowExec) fetchShowColumns(ctx context.Context) error { return errors.Trace(err) } var ( - fieldPatternsRegexp *regexp.Regexp - FieldFilterEnable bool - fieldFilter string + fieldPatternsLike collate.WildcardPattern + FieldFilterEnable bool + fieldFilter string ) if e.Extractor != nil { extractor := (e.Extractor).(*plannercore.ShowColumnsTableExtractor) if extractor.FieldPatterns != "" { - fieldPatternsRegexp = regexp.MustCompile(extractor.FieldPatterns) + fieldPatternsLike = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() + fieldPatternsLike.Compile(extractor.FieldPatterns, byte('\\')) } FieldFilterEnable = extractor.Field != "" fieldFilter = extractor.Field @@ -561,7 +595,7 @@ func (e *ShowExec) fetchShowColumns(ctx context.Context) error { for _, col := range cols { if FieldFilterEnable && col.Name.L != fieldFilter { continue - } else if fieldPatternsRegexp != nil && !fieldPatternsRegexp.MatchString(col.Name.L) { + } else if fieldPatternsLike != nil && !fieldPatternsLike.DoMatch(col.Name.L) { continue } desc := table.NewColDesc(col) @@ -750,6 +784,20 @@ func (e *ShowExec) fetchShowVariables() (err error) { value string sessionVars = e.ctx.GetSessionVars() ) + var ( + fieldPatternsLike collate.WildcardPattern + FieldFilterEnable bool + fieldFilter string + ) + if e.Extractor != nil { + extractor := (e.Extractor).(*plannercore.ShowVariablesExtractor) + if extractor.FieldPatterns != "" { + fieldPatternsLike = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() + fieldPatternsLike.Compile(extractor.FieldPatterns, byte('\\')) + } + FieldFilterEnable = extractor.Field != "" + fieldFilter = extractor.Field + } if e.GlobalScope { // Collect global scope variables, // 1. Exclude the variables of ScopeSession in variable.SysVars; @@ -757,6 +805,11 @@ func (e *ShowExec) fetchShowVariables() (err error) { // otherwise, fetch the value from table `mysql.Global_Variables`. for _, v := range variable.GetSysVars() { if v.Scope != variable.ScopeSession { + if FieldFilterEnable && v.Name != fieldFilter { + continue + } else if fieldPatternsLike != nil && !fieldPatternsLike.DoMatch(v.Name) { + continue + } if v.Hidden || e.sysVarHiddenForSem(v.Name) { continue } @@ -774,6 +827,11 @@ func (e *ShowExec) fetchShowVariables() (err error) { // If it is a session only variable, use the default value defined in code, // otherwise, fetch the value from table `mysql.Global_Variables`. for _, v := range variable.GetSysVars() { + if FieldFilterEnable && v.Name != fieldFilter { + continue + } else if fieldPatternsLike != nil && !fieldPatternsLike.DoMatch(v.Name) { + continue + } if v.Hidden || e.sysVarHiddenForSem(v.Name) { continue } @@ -1357,6 +1415,11 @@ func ConstructResultOfShowCreateDatabase(ctx sessionctx.Context, dbInfo *model.D return nil } +// ConstructResultOfShowCreatePlacementPolicy constructs the result for show create placement policy. +func ConstructResultOfShowCreatePlacementPolicy(policyInfo *model.PolicyInfo) string { + return fmt.Sprintf("CREATE PLACEMENT POLICY `%s` %s", policyInfo.Name.O, policyInfo.PlacementSettings.String()) +} + // fetchShowCreateDatabase composes show create database result. func (e *ShowExec) fetchShowCreateDatabase() error { checker := privilege.GetPrivilegeManager(e.ctx) @@ -1385,7 +1448,7 @@ func (e *ShowExec) fetchShowCreatePlacementPolicy() error { if !found { return infoschema.ErrPlacementPolicyNotExists.GenWithStackByArgs(e.DBName.O) } - showCreate := fmt.Sprintf("CREATE PLACEMENT POLICY `%s` %s", e.DBName.O, policy.PlacementSettings.String()) + showCreate := ConstructResultOfShowCreatePlacementPolicy(policy) e.appendRow([]interface{}{e.DBName.O, showCreate}) return nil } @@ -1615,7 +1678,7 @@ func (e *ShowExec) fetchShowPumpOrDrainerStatus(kind string) error { if n.State == node.Offline { continue } - e.appendRow([]interface{}{n.NodeID, n.Addr, n.State, n.MaxCommitTS, utils.TSOToRoughTime(n.UpdateTS).Format(types.TimeFormat)}) + e.appendRow([]interface{}{n.NodeID, n.Addr, n.State, n.MaxCommitTS, util.TSOToRoughTime(n.UpdateTS).Format(types.TimeFormat)}) } return nil @@ -1623,7 +1686,7 @@ func (e *ShowExec) fetchShowPumpOrDrainerStatus(kind string) error { // createRegistry returns an ectd registry func createRegistry(urls string) (*node.EtcdRegistry, error) { - ectdEndpoints, err := utils.ParseHostPortAddr(urls) + ectdEndpoints, err := util.ParseHostPortAddr(urls) if err != nil { return nil, errors.Trace(err) } diff --git a/executor/show_test.go b/executor/show_test.go index d3171873518bf..2e6f69688b09f 100644 --- a/executor/show_test.go +++ b/executor/show_test.go @@ -1008,6 +1008,17 @@ func TestShowCreateTable(t *testing.T) { ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin\n"+ "PARTITION BY HASH (`id`) PARTITIONS 1", )) + + // default value escape character '\\' display case + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a int primary key, b varchar(20) default '\\\\');") + tk.MustQuery("show create table t;").Check(testkit.RowsWithSep("|", + ""+ + "t CREATE TABLE `t` (\n"+ + " `a` int(11) NOT NULL,\n"+ + " `b` varchar(20) DEFAULT '\\\\',\n"+ + " PRIMARY KEY (`a`) /*T![clustered_index] CLUSTERED */\n"+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) } func TestShowCreateTablePlacement(t *testing.T) { @@ -1580,9 +1591,24 @@ func TestShowVar(t *testing.T) { // Test Hidden tx_read_ts res = tk.MustQuery("show variables like '%tx_read_ts'") require.Len(t, res.Rows(), 0) - // Test Hidden tidb_enable_streaming - res = tk.MustQuery("show variables like '%tidb_enable_streaming%';") - require.Len(t, res.Rows(), 0) + + // Test versions' related variables + res = tk.MustQuery("show variables like 'version%'") + for _, row := range res.Rows() { + line := fmt.Sprint(row) + if strings.HasPrefix(line, "version ") { + require.Equal(t, mysql.ServerVersion, line[len("version "):]) + } else if strings.HasPrefix(line, "version_comment ") { + require.Equal(t, variable.GetSysVar(variable.VersionComment), line[len("version_comment "):]) + } + } + + // Test case insensitive case for show session variables + tk.MustExec("SET @@SQL_MODE='NO_BACKSLASH_ESCAPES'") + tk.MustQuery("SHOW SESSION VARIABLES like 'sql_mode'").Check( + testkit.RowsWithSep("|", "sql_mode|NO_BACKSLASH_ESCAPES")) + tk.MustQuery("SHOW SESSION VARIABLES like 'SQL_MODE'").Check( + testkit.RowsWithSep("|", "sql_mode|NO_BACKSLASH_ESCAPES")) } func TestIssue19507(t *testing.T) { @@ -1728,8 +1754,8 @@ func TestShowBindingCache(t *testing.T) { tk.MustExec("use test") tk.MustExec("drop table if exists t;") tk.MustExec("create table t(a int, b int)") - tk.MustExec(`set global tidb_mem_quota_bind_cache = 1`) - tk.MustQuery("select @@global.tidb_mem_quota_bind_cache").Check(testkit.Rows("1")) + tk.MustExec(`set global tidb_mem_quota_binding_cache = 1`) + tk.MustQuery("select @@global.tidb_mem_quota_binding_cache").Check(testkit.Rows("1")) tk.MustExec("admin reload bindings;") res := tk.MustQuery("show global bindings") require.Equal(t, 0, len(res.Rows())) @@ -1738,8 +1764,8 @@ func TestShowBindingCache(t *testing.T) { res = tk.MustQuery("show global bindings") require.Equal(t, 0, len(res.Rows())) - tk.MustExec(`set global tidb_mem_quota_bind_cache = default`) - tk.MustQuery("select @@global.tidb_mem_quota_bind_cache").Check(testkit.Rows("67108864")) + tk.MustExec(`set global tidb_mem_quota_binding_cache = default`) + tk.MustQuery("select @@global.tidb_mem_quota_binding_cache").Check(testkit.Rows("67108864")) tk.MustExec("admin reload bindings") res = tk.MustQuery("show global bindings") require.Equal(t, 1, len(res.Rows())) @@ -1748,3 +1774,60 @@ func TestShowBindingCache(t *testing.T) { res = tk.MustQuery("show global bindings") require.Equal(t, 2, len(res.Rows())) } + +func TestShowBindingCacheStatus(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustQuery("show binding_cache status").Check(testkit.Rows( + "0 0 0 Bytes 64 MB")) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int, index idx_a(a), index idx_b(b))") + result := tk.MustQuery("show global bindings") + rows := result.Rows() + require.Equal(t, len(rows), 0) + tk.MustExec("create global binding for select * from t using select * from t") + + result = tk.MustQuery("show global bindings") + rows = result.Rows() + require.Equal(t, len(rows), 1) + + tk.MustQuery("show binding_cache status").Check(testkit.Rows( + "1 1 159 Bytes 64 MB")) + + tk.MustExec(`set global tidb_mem_quota_binding_cache = 250`) + tk.MustQuery(`select @@global.tidb_mem_quota_binding_cache`).Check(testkit.Rows("250")) + tk.MustExec("admin reload bindings;") + tk.MustExec("create global binding for select * from t where a > 1 using select * from t where a > 1") + result = tk.MustQuery("show global bindings") + rows = result.Rows() + require.Equal(t, len(rows), 1) + tk.MustQuery("show binding_cache status").Check(testkit.Rows( + "1 2 187 Bytes 250 Bytes")) + + tk.MustExec("drop global binding for select * from t where a > 1") + result = tk.MustQuery("show global bindings") + rows = result.Rows() + require.Equal(t, len(rows), 0) + tk.MustQuery("show binding_cache status").Check(testkit.Rows( + "0 1 0 Bytes 250 Bytes")) + + tk.MustExec("admin reload bindings") + result = tk.MustQuery("show global bindings") + rows = result.Rows() + require.Equal(t, len(rows), 1) + tk.MustQuery("show binding_cache status").Check(testkit.Rows( + "1 1 159 Bytes 250 Bytes")) + + tk.MustExec("create global binding for select * from t using select * from t use index(idx_a)") + + result = tk.MustQuery("show global bindings") + rows = result.Rows() + require.Equal(t, len(rows), 1) + + tk.MustQuery("show binding_cache status").Check(testkit.Rows( + "1 1 198 Bytes 250 Bytes")) +} diff --git a/executor/simple.go b/executor/simple.go index ae3e0b197f8fc..8fbe8ee40498e 100644 --- a/executor/simple.go +++ b/executor/simple.go @@ -786,6 +786,12 @@ func (e *SimpleExec) executeCreateUser(ctx context.Context, s *ast.CreateUserStm users := make([]*auth.UserIdentity, 0, len(s.Specs)) for _, spec := range s.Specs { + if len(spec.User.Username) > auth.UserNameMaxLength { + return ErrWrongStringLength.GenWithStackByArgs(spec.User.Username, "user name", auth.UserNameMaxLength) + } + if len(spec.User.Hostname) > auth.HostNameMaxLength { + return ErrWrongStringLength.GenWithStackByArgs(spec.User.Hostname, "host name", auth.HostNameMaxLength) + } if len(users) > 0 { sqlexec.MustFormatSQL(sql, ",") } @@ -1081,6 +1087,12 @@ func (e *SimpleExec) executeRenameUser(s *ast.RenameUserStmt) error { for _, userToUser := range s.UserToUsers { oldUser, newUser := userToUser.OldUser, userToUser.NewUser + if len(newUser.Username) > auth.UserNameMaxLength { + return ErrWrongStringLength.GenWithStackByArgs(newUser.Username, "user name", auth.UserNameMaxLength) + } + if len(newUser.Hostname) > auth.HostNameMaxLength { + return ErrWrongStringLength.GenWithStackByArgs(newUser.Hostname, "host name", auth.HostNameMaxLength) + } exists, err := userExistsInternal(sqlExecutor, oldUser.Username, oldUser.Hostname) if err != nil { return err diff --git a/executor/simple_test.go b/executor/simple_test.go index a637ad72efb16..8cb304e2ef43b 100644 --- a/executor/simple_test.go +++ b/executor/simple_test.go @@ -54,6 +54,17 @@ func TestDo(t *testing.T) { tk.MustQuery("select * from t").Check(testkit.Rows("1", "2")) } +func TestDoWithAggFunc(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("DO sum(1)") + tk.MustExec("DO avg(@e+@f)") + tk.MustExec("DO GROUP_CONCAT(NULLIF(ELT(1, @e), 2.0) ORDER BY 1)") +} + func TestSetRoleAllCorner(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -606,7 +617,7 @@ func TestKillStmt(t *testing.T) { result.Check(testkit.Rows("Warning 1105 Parse ConnectionID failed: Unexpected connectionID excceeds int64")) // local kill - connID := util.GlobalConnID{Is64bits: true, ServerID: 1, LocalConnID: 101} + connID := util.NewGlobalConnID(1, true) tk.MustExec("kill " + strconv.FormatUint(connID.ID(), 10)) result = tk.MustQuery("show warnings") result.Check(testkit.Rows()) @@ -642,8 +653,6 @@ func TestFlushPrivileges(t *testing.T) { } -type testFlushSuite struct{} - func TestFlushPrivilegesPanic(t *testing.T) { // Run in a separate suite because this test need to set SkipGrantTable config. store, err := mockstore.NewMockStore() diff --git a/executor/split_table_test.go b/executor/split_table_test.go new file mode 100644 index 0000000000000..d19dbfed2daf5 --- /dev/null +++ b/executor/split_table_test.go @@ -0,0 +1,596 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 executor_test + +import ( + "fmt" + "sync/atomic" + "testing" + + "github.com/pingcap/tidb/ddl" + "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/parser/terror" + plannercore "github.com/pingcap/tidb/planner/core" + "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + "github.com/pingcap/tidb/util/dbterror" + "github.com/stretchr/testify/require" +) + +func TestSplitTableRegion(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a varchar(100),b int, index idx1(b,a))") + tk.MustExec(`split table t index idx1 by (10000,"abcd"),(10000000);`) + tk.MustGetErrCode(`split table t index idx1 by ("abcd");`, mysql.WarnDataTruncated) + + // Test for split index region. + // Check min value is more than max value. + tk.MustExec(`split table t index idx1 between (0) and (1000000000) regions 10`) + tk.MustGetErrCode(`split table t index idx1 between (2,'a') and (1,'c') regions 10`, errno.ErrInvalidSplitRegionRanges) + + // Check min value is invalid. + tk.MustGetErrMsg(`split table t index idx1 between () and (1) regions 10`, "Split index `idx1` region lower value count should more than 0") + + // Check max value is invalid. + tk.MustGetErrMsg(`split table t index idx1 between (1) and () regions 10`, "Split index `idx1` region upper value count should more than 0") + + // Check pre-split region num is too large. + tk.MustGetErrMsg(`split table t index idx1 between (0) and (1000000000) regions 10000`, "Split index region num exceeded the limit 1000") + + // Check pre-split region num 0 is invalid. + tk.MustGetErrMsg(`split table t index idx1 between (0) and (1000000000) regions 0`, "Split index region num should more than 0") + + // Test truncate error msg. + tk.MustGetErrMsg(`split table t index idx1 between ("aa") and (1000000000) regions 0`, "[types:1265]Incorrect value: 'aa' for column 'b'") + + // Test for split table region. + tk.MustExec(`split table t between (0) and (1000000000) regions 10`) + // Check the lower value is more than the upper value. + tk.MustGetErrCode(`split table t between (2) and (1) regions 10`, errno.ErrInvalidSplitRegionRanges) + + // Check the lower value is invalid. + tk.MustGetErrMsg(`split table t between () and (1) regions 10`, "Split table region lower value count should be 1") + + // Check upper value is invalid. + tk.MustGetErrMsg(`split table t between (1) and () regions 10`, "Split table region upper value count should be 1") + + // Check pre-split region num is too large. + tk.MustGetErrMsg(`split table t between (0) and (1000000000) regions 10000`, "Split table region num exceeded the limit 1000") + + // Check pre-split region num 0 is invalid. + tk.MustGetErrMsg(`split table t between (0) and (1000000000) regions 0`, "Split table region num should more than 0") + + // Test truncate error msg. + tk.MustGetErrMsg(`split table t between ("aa") and (1000000000) regions 10`, "[types:1265]Incorrect value: 'aa' for column '_tidb_rowid'") + + // Test split table region step is too small. + tk.MustGetErrCode(`split table t between (0) and (100) regions 10`, errno.ErrInvalidSplitRegionRanges) + + // Test split region by syntax. + tk.MustExec(`split table t by (0),(1000),(1000000)`) + + // Test split region twice to test for multiple batch split region requests. + tk.MustExec("create table t1(a int, b int)") + tk.MustQuery("split table t1 between(0) and (10000) regions 10;").Check(testkit.Rows("9 1")) + tk.MustQuery("split table t1 between(10) and (10010) regions 5;").Check(testkit.Rows("4 1")) + + // Test split region for partition table. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int,b int) partition by hash(a) partitions 5;") + tk.MustQuery("split table t between (0) and (1000000) regions 5;").Check(testkit.Rows("20 1")) + // Test for `split for region` syntax. + tk.MustQuery("split region for partition table t between (1000000) and (100000000) regions 10;").Check(testkit.Rows("45 1")) + + // Test split region for partition table with specified partition. + tk.MustQuery("split table t partition (p1,p2) between (100000000) and (1000000000) regions 5;").Check(testkit.Rows("8 1")) + // Test for `split for region` syntax. + tk.MustQuery("split region for partition table t partition (p3,p4) between (100000000) and (1000000000) regions 5;").Check(testkit.Rows("8 1")) +} + +func TestSplitRegionEdgeCase(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a bigint(20) auto_increment primary key);") + tk.MustExec("split table t between (-9223372036854775808) and (9223372036854775807) regions 16;") + + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a int(20) auto_increment primary key);") + tk.MustGetErrCode("split table t between (-9223372036854775808) and (9223372036854775807) regions 16;", errno.ErrDataOutOfRange) +} + +func TestClusterIndexSplitTableIntegration(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("drop database if exists test_cluster_index_index_split_table_integration;") + tk.MustExec("create database test_cluster_index_index_split_table_integration;") + tk.MustExec("use test_cluster_index_index_split_table_integration;") + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + + tk.MustExec("create table t (a varchar(255), b double, c int, primary key (a, b));") + + // Value list length not match. + lowerMsg := "Split table region lower value count should be 2" + upperMsg := "Split table region upper value count should be 2" + tk.MustGetErrMsg("split table t between ('aaa') and ('aaa', 100.0) regions 10;", lowerMsg) + tk.MustGetErrMsg("split table t between ('aaa', 1.0) and ('aaa', 100.0, 11) regions 10;", upperMsg) + + // Value type not match. + errMsg := "[types:1265]Incorrect value: 'aaa' for column 'b'" + tk.MustGetErrMsg("split table t between ('aaa', 0.0) and (100.0, 'aaa') regions 10;", errMsg) + + // lower bound >= upper bound. + errMsg = "[executor:8212]Failed to split region ranges: Split table `t` region lower value (aaa,0) should less than the upper value (aaa,0)" + tk.MustGetErrMsg("split table t between ('aaa', 0.0) and ('aaa', 0.0) regions 10;", errMsg) + errMsg = "[executor:8212]Failed to split region ranges: Split table `t` region lower value (bbb,0) should less than the upper value (aaa,0)" + tk.MustGetErrMsg("split table t between ('bbb', 0.0) and ('aaa', 0.0) regions 10;", errMsg) + + // Exceed limit 1000. + errMsg = "Split table region num exceeded the limit 1000" + tk.MustGetErrMsg("split table t between ('aaa', 0.0) and ('aaa', 0.1) regions 100000;", errMsg) + + // Split on null values. + errMsg = "[planner:1048]Column 'a' cannot be null" + tk.MustGetErrMsg("split table t between (null, null) and (null, null) regions 1000;", errMsg) + tk.MustGetErrMsg("split table t by (null, null);", errMsg) + + // Success. + tk.MustExec("split table t between ('aaa', 0.0) and ('aaa', 100.0) regions 10;") + tk.MustExec("split table t by ('aaa', 0.0), ('aaa', 20.0), ('aaa', 100.0);") + tk.MustExec("split table t by ('aaa', 100.0), ('qqq', 20.0), ('zzz', 100.0), ('zzz', 1000.0);") + + tk.MustExec("drop table t;") + tk.MustExec("create table t (a int, b int, c int, d int, primary key(a, c, d));") + tk.MustQuery("split table t between (0, 0, 0) and (0, 0, 1) regions 1000;").Check(testkit.Rows("999 1")) + + tk.MustExec("drop table t;") + tk.MustExec("create table t (a int, b int, c int, d int, primary key(d, a, c));") + tk.MustQuery("split table t by (0, 0, 0), (1, 2, 3), (65535, 65535, 65535);").Check(testkit.Rows("3 1")) + + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (a varchar(255), b decimal, c int, primary key (a, b));") + errMsg = "[types:1265]Incorrect value: '' for column 'b'" + tk.MustGetErrMsg("split table t by ('aaa', '')", errMsg) +} + +func TestClusterIndexShowTableRegion(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) + tk.MustExec("set global tidb_scatter_region = 1") + tk.MustExec("drop database if exists cluster_index_regions;") + tk.MustExec("create database cluster_index_regions;") + tk.MustExec("use cluster_index_regions;") + tk.Session().GetSessionVars().EnableClusteredIndex = variable.ClusteredIndexDefModeOn + tk.MustExec("create table t (a int, b int, c int, primary key(a, b));") + tk.MustExec("insert t values (1, 1, 1), (2, 2, 2);") + tk.MustQuery("split table t between (1, 0) and (2, 3) regions 2;").Check(testkit.Rows("1 1")) + rows := tk.MustQuery("show table t regions").Rows() + tbl := external.GetTableByName(t, tk, "cluster_index_regions", "t") + // Check the region start key. + require.Regexp(t, fmt.Sprintf("t_%d_", tbl.Meta().ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_r_03800000000000000183800000000000", tbl.Meta().ID), rows[1][1]) + + tk.MustExec("drop table t;") + tk.MustExec("create table t (a int, b int);") + tk.MustQuery("split table t between (0) and (100000) regions 2;").Check(testkit.Rows("1 1")) + rows = tk.MustQuery("show table t regions").Rows() + tbl = external.GetTableByName(t, tk, "cluster_index_regions", "t") + // Check the region start key is int64. + require.Regexp(t, fmt.Sprintf("t_%d_", tbl.Meta().ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_r_50000", tbl.Meta().ID), rows[1][1]) +} + +func TestShowTableRegion(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t_regions") + tk.MustExec("set global tidb_scatter_region = 1") + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) + tk.MustExec("create table t_regions (a int key, b int, c int, index idx(b), index idx2(c))") + tk.MustGetErrMsg( + "split partition table t_regions partition (p1,p2) index idx between (0) and (20000) regions 2;", + plannercore.ErrPartitionClauseOnNonpartitioned.Error()) + + // Test show table regions. + tk.MustQuery(`split table t_regions between (-10000) and (10000) regions 4;`).Check(testkit.Rows("4 1")) + re := tk.MustQuery("show table t_regions regions") + + // Test show table regions and split table on global temporary table. + tk.MustExec("drop table if exists t_regions_temporary_table") + tk.MustExec("create global temporary table t_regions_temporary_table (a int key, b int, c int, index idx(b), index idx2(c)) ON COMMIT DELETE ROWS;") + // Test show table regions. + tk.MustGetErrMsg( + "show table t_regions_temporary_table regions", + plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("show table regions").Error()) + // Test split table. + tk.MustGetErrMsg( + "split table t_regions_temporary_table between (-10000) and (10000) regions 4;", + plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("split table").Error()) + tk.MustGetErrMsg( + "split partition table t_regions_temporary_table partition (p1,p2) index idx between (0) and (20000) regions 2;", + plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("split table").Error()) + tk.MustExec("drop table if exists t_regions_temporary_table") + // Test pre split regions + tk.MustGetErrMsg( + "create global temporary table temporary_table_pre_split(id int ) pre_split_regions=2 ON COMMIT DELETE ROWS;", + dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions").Error()) + + // Test show table regions and split table on local temporary table + tk.MustExec("drop table if exists t_regions_local_temporary_table") + tk.MustExec("create temporary table t_regions_local_temporary_table (a int key, b int, c int, index idx(b), index idx2(c));") + // Test show table regions. + tk.MustGetErrMsg( + "show table t_regions_local_temporary_table regions", + plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("show table regions").Error()) + // Test split table. + tk.MustGetErrMsg( + "split table t_regions_local_temporary_table between (-10000) and (10000) regions 4;", + plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("split table").Error()) + tk.MustGetErrMsg( + "split partition table t_regions_local_temporary_table partition (p1,p2) index idx between (0) and (20000) regions 2;", + plannercore.ErrOptOnTemporaryTable.GenWithStackByArgs("split table").Error()) + tk.MustExec("drop table if exists t_regions_local_temporary_table") + // Test pre split regions + tk.MustGetErrMsg( + "create temporary table local_temporary_table_pre_split(id int ) pre_split_regions=2;", + dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions").Error()) + + rows := re.Rows() + // Table t_regions should have 5 regions now. + // 4 regions to store record data. + // 1 region to store index data. + require.Len(t, rows, 5) + require.Len(t, rows[0], 11) + tbl := external.GetTableByName(t, tk, "test", "t_regions") + // Check the region start key. + require.Equal(t, fmt.Sprintf("t_%d_r", tbl.Meta().ID), rows[0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_-5000", tbl.Meta().ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_0", tbl.Meta().ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_5000", tbl.Meta().ID), rows[3][1]) + require.Equal(t, fmt.Sprintf("t_%d_r", tbl.Meta().ID), rows[4][2]) + + // Test show table index regions. + tk.MustQuery(`split table t_regions index idx between (-1000) and (1000) regions 4;`).Check(testkit.Rows("4 1")) + re = tk.MustQuery("show table t_regions index idx regions") + rows = re.Rows() + // The index `idx` of table t_regions should have 4 regions now. + require.Len(t, rows, 4) + // Check the region start key. + require.Regexp(t, fmt.Sprintf("t_%d.*", tbl.Meta().ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID), rows[1][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID), rows[2][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID), rows[3][1]) + + re = tk.MustQuery("show table t_regions regions") + rows = re.Rows() + // The index `idx` of table t_regions should have 9 regions now. + // 4 regions to store record data. + // 4 region to store index idx data. + // 1 region to store index idx2 data. + require.Len(t, rows, 9) + // Check the region start key. + require.Equal(t, fmt.Sprintf("t_%d_r", tbl.Meta().ID), rows[0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_-5000", tbl.Meta().ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_0", tbl.Meta().ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_5000", tbl.Meta().ID), rows[3][1]) + require.Regexp(t, fmt.Sprintf("t_%d_", tbl.Meta().ID), rows[4][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID), rows[5][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID), rows[6][1]) + require.Equal(t, fmt.Sprintf("t_%d_i_2_", tbl.Meta().ID), rows[7][2]) + require.Equal(t, fmt.Sprintf("t_%d_r", tbl.Meta().ID), rows[8][2]) + + // Test unsigned primary key and wait scatter finish. + tk.MustExec("drop table if exists t_regions") + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) + tk.MustExec("create table t_regions (a int unsigned key, b int, index idx(b))") + + // Test show table regions. + tk.MustExec(`set @@session.tidb_wait_split_region_finish=1;`) + tk.MustQuery(`split table t_regions by (2500),(5000),(7500);`).Check(testkit.Rows("3 1")) + re = tk.MustQuery("show table t_regions regions") + rows = re.Rows() + // Table t_regions should have 4 regions now. + require.Len(t, rows, 4) + tbl = external.GetTableByName(t, tk, "test", "t_regions") + // Check the region start key. + require.Regexp(t, "t_.*", rows[0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2500", tbl.Meta().ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_5000", tbl.Meta().ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_7500", tbl.Meta().ID), rows[3][1]) + + // Test show table index regions. + tk.MustQuery(`split table t_regions index idx by (250),(500),(750);`).Check(testkit.Rows("4 1")) + re = tk.MustQuery("show table t_regions index idx regions") + rows = re.Rows() + // The index `idx` of table t_regions should have 4 regions now. + require.Len(t, rows, 4) + // Check the region start key. + require.Equal(t, fmt.Sprintf("t_%d_", tbl.Meta().ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID), rows[1][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID), rows[2][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", tbl.Meta().ID), rows[3][1]) + + // Test show table regions for partition table when disable split region when create table. + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) + tk.MustExec("drop table if exists partition_t;") + tk.MustExec("set @@session.tidb_enable_table_partition = '1';") + tk.MustExec("create table partition_t (a int, b int,index(a)) partition by hash (a) partitions 3") + re = tk.MustQuery("show table partition_t regions") + rows = re.Rows() + require.Len(t, rows, 1) + require.Regexp(t, "t_.*", rows[0][1]) + + // Test show table regions for partition table when enable split region when create table. + atomic.StoreUint32(&ddl.EnableSplitTableRegion, 1) + tk.MustExec("set @@global.tidb_scatter_region=1;") + tk.MustExec("drop table if exists partition_t;") + tk.MustExec("create table partition_t (a int, b int,index(a)) partition by hash (a) partitions 3") + re = tk.MustQuery("show table partition_t regions") + rows = re.Rows() + require.Len(t, rows, 3) + tbl = external.GetTableByName(t, tk, "test", "partition_t") + partitionDef := tbl.Meta().GetPartitionInfo().Definitions + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[0].ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[1].ID), rows[1][1]) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[2].ID), rows[2][1]) + + // Test split partition region when add new partition. + tk.MustExec("drop table if exists partition_t;") + tk.MustExec(`create table partition_t (a int, b int,index(a)) PARTITION BY RANGE (a) ( + PARTITION p0 VALUES LESS THAN (10), + PARTITION p1 VALUES LESS THAN (20), + PARTITION p2 VALUES LESS THAN (30));`) + tk.MustExec(`alter table partition_t add partition ( partition p3 values less than (40), partition p4 values less than (50) );`) + re = tk.MustQuery("show table partition_t regions") + rows = re.Rows() + require.Len(t, rows, 5) + tbl = external.GetTableByName(t, tk, "test", "partition_t") + partitionDef = tbl.Meta().GetPartitionInfo().Definitions + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[0].ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[1].ID), rows[1][1]) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[2].ID), rows[2][1]) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[3].ID), rows[3][1]) + require.Regexp(t, fmt.Sprintf("t_%d_.*", partitionDef[4].ID), rows[4][1]) + + // Test pre-split table region when create table. + tk.MustExec("drop table if exists t_pre") + tk.MustExec("create table t_pre (a int, b int) shard_row_id_bits = 2 pre_split_regions=2;") + re = tk.MustQuery("show table t_pre regions") + rows = re.Rows() + // Table t_regions should have 4 regions now. + require.Len(t, rows, 4) + tbl = external.GetTableByName(t, tk, "test", "t_pre") + require.Equal(t, fmt.Sprintf("t_%d_r_2305843009213693952", tbl.Meta().ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_4611686018427387904", tbl.Meta().ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_6917529027641081856", tbl.Meta().ID), rows[3][1]) + + // Test pre-split table region when create table. + tk.MustExec("drop table if exists pt_pre") + tk.MustExec("create table pt_pre (a int, b int) shard_row_id_bits = 2 pre_split_regions=2 partition by hash(a) partitions 3;") + re = tk.MustQuery("show table pt_pre regions") + rows = re.Rows() + // Table t_regions should have 4 regions now. + require.Len(t, rows, 12) + tbl = external.GetTableByName(t, tk, "test", "pt_pre") + pi := tbl.Meta().GetPartitionInfo().Definitions + require.Len(t, pi, 3) + for i, p := range pi { + require.Equal(t, fmt.Sprintf("t_%d_r_2305843009213693952", p.ID), rows[1+4*i][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_4611686018427387904", p.ID), rows[2+4*i][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_6917529027641081856", p.ID), rows[3+4*i][1]) + } + + defer atomic.StoreUint32(&ddl.EnableSplitTableRegion, 0) + + // Test split partition table. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int,b int) partition by hash(a) partitions 5;") + tk.MustQuery("split table t between (0) and (4000000) regions 4;").Check(testkit.Rows("15 1")) + re = tk.MustQuery("show table t regions") + rows = re.Rows() + require.Len(t, rows, 20) + tbl = external.GetTableByName(t, tk, "test", "t") + require.Len(t, tbl.Meta().GetPartitionInfo().Definitions, 5) + for i, p := range tbl.Meta().GetPartitionInfo().Definitions { + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[i*4+0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[i*4+1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[i*4+2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[i*4+3][1]) + } + + // Test split region for partition table with specified partition. + tk.MustQuery("split table t partition (p4) between (1000000) and (2000000) regions 5;").Check(testkit.Rows("4 1")) + re = tk.MustQuery("show table t regions") + rows = re.Rows() + require.Len(t, rows, 24) + tbl = external.GetTableByName(t, tk, "test", "t") + require.Len(t, tbl.Meta().GetPartitionInfo().Definitions, 5) + for i := 0; i < 4; i++ { + p := tbl.Meta().GetPartitionInfo().Definitions[i] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[i*4+0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[i*4+1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[i*4+2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[i*4+3][1]) + } + for i := 4; i < 5; i++ { + p := tbl.Meta().GetPartitionInfo().Definitions[i] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[i*4+0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[i*4+1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1200000", p.ID), rows[i*4+2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1400000", p.ID), rows[i*4+3][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1600000", p.ID), rows[i*4+4][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1800000", p.ID), rows[i*4+5][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[i*4+6][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[i*4+7][1]) + } + + // Test for show table partition regions. + for i := 0; i < 4; i++ { + re = tk.MustQuery(fmt.Sprintf("show table t partition (p%v) regions", i)) + rows = re.Rows() + require.Len(t, rows, 4) + p := tbl.Meta().GetPartitionInfo().Definitions[i] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[3][1]) + } + re = tk.MustQuery("show table t partition (p0, p4) regions") + rows = re.Rows() + require.Len(t, rows, 12) + p := tbl.Meta().GetPartitionInfo().Definitions[0] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[3][1]) + p = tbl.Meta().GetPartitionInfo().Definitions[4] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[4][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[5][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1200000", p.ID), rows[6][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1400000", p.ID), rows[7][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1600000", p.ID), rows[8][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1800000", p.ID), rows[9][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[10][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[11][1]) + // Test for duplicate partition names. + re = tk.MustQuery("show table t partition (p0, p0, p0) regions") + rows = re.Rows() + require.Len(t, rows, 4) + p = tbl.Meta().GetPartitionInfo().Definitions[0] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[3][1]) + + // Test split partition table index. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int,b int,index idx(a)) partition by hash(a) partitions 5;") + tk.MustQuery("split table t between (0) and (4000000) regions 4;").Check(testkit.Rows("20 1")) + tk.MustQuery("split table t index idx between (0) and (4000000) regions 4;").Check(testkit.Rows("20 1")) + re = tk.MustQuery("show table t regions") + rows = re.Rows() + require.Len(t, rows, 40) + tbl = external.GetTableByName(t, tk, "test", "t") + require.Len(t, tbl.Meta().GetPartitionInfo().Definitions, 5) + for i := 0; i < 5; i++ { + p := tbl.Meta().GetPartitionInfo().Definitions[i] + require.Equal(t, fmt.Sprintf("t_%d_r", p.ID), rows[i*8+0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[i*8+1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[i*8+2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[i*8+3][1]) + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[i*8+4][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+5][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+6][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+7][1]) + } + + // Test split index region for partition table with specified partition. + tk.MustQuery("split table t partition (p4) index idx between (0) and (1000000) regions 5;").Check(testkit.Rows("4 1")) + re = tk.MustQuery("show table t regions") + rows = re.Rows() + require.Len(t, rows, 44) + tbl = external.GetTableByName(t, tk, "test", "t") + require.Len(t, tbl.Meta().GetPartitionInfo().Definitions, 5) + for i := 0; i < 4; i++ { + p := tbl.Meta().GetPartitionInfo().Definitions[i] + require.Equal(t, fmt.Sprintf("t_%d_r", p.ID), rows[i*8+0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[i*8+1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[i*8+2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[i*8+3][1]) + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[i*8+4][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+5][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+6][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+7][1]) + } + for i := 4; i < 5; i++ { + p := tbl.Meta().GetPartitionInfo().Definitions[i] + require.Equal(t, fmt.Sprintf("t_%d_r", p.ID), rows[i*8+0][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_1000000", p.ID), rows[i*8+1][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_2000000", p.ID), rows[i*8+2][1]) + require.Equal(t, fmt.Sprintf("t_%d_r_3000000", p.ID), rows[i*8+3][1]) + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[i*8+4][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+5][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+6][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+7][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+8][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+9][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+10][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[i*8+11][1]) + } + + // Test show table partition region on unknown-partition. + err := tk.QueryToErr("show table t partition (p_unknown) index idx regions") + require.True(t, terror.ErrorEqual(err, table.ErrUnknownPartition)) + + // Test show table partition index. + for i := 0; i < 4; i++ { + re = tk.MustQuery(fmt.Sprintf("show table t partition (p%v) index idx regions", i)) + rows = re.Rows() + require.Len(t, rows, 4) + p := tbl.Meta().GetPartitionInfo().Definitions[i] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[1][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[2][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[3][1]) + } + re = tk.MustQuery("show table t partition (p3,p4) index idx regions") + rows = re.Rows() + require.Len(t, rows, 12) + p = tbl.Meta().GetPartitionInfo().Definitions[3] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[0][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[1][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[2][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[3][1]) + p = tbl.Meta().GetPartitionInfo().Definitions[4] + require.Equal(t, fmt.Sprintf("t_%d_", p.ID), rows[4][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[5][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[6][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[7][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[8][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[9][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[10][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_1_.*", p.ID), rows[11][1]) + + // Test split for the second index. + tk.MustExec("drop table if exists t") + tk.MustExec("create table t (a int,b int,index idx(a), index idx2(b))") + tk.MustQuery("split table t index idx2 between (0) and (4000000) regions 2;").Check(testkit.Rows("3 1")) + re = tk.MustQuery("show table t regions") + rows = re.Rows() + require.Len(t, rows, 4) + tbl = external.GetTableByName(t, tk, "test", "t") + require.Equal(t, fmt.Sprintf("t_%d_i_3_", tbl.Meta().ID), rows[0][1]) + require.Equal(t, fmt.Sprintf("t_%d_", tbl.Meta().ID), rows[1][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_2_.*", tbl.Meta().ID), rows[2][1]) + require.Regexp(t, fmt.Sprintf("t_%d_i_2_.*", tbl.Meta().ID), rows[3][1]) + + // Test show table partition region on non-partition table. + err = tk.QueryToErr("show table t partition (p3,p4) index idx regions") + require.True(t, terror.ErrorEqual(err, plannercore.ErrPartitionClauseOnNonpartitioned)) +} diff --git a/executor/stale_txn_test.go b/executor/stale_txn_test.go index 8ce913abdee1b..b0336e4693b22 100644 --- a/executor/stale_txn_test.go +++ b/executor/stale_txn_test.go @@ -15,6 +15,7 @@ package executor_test import ( + "context" "fmt" "testing" "time" @@ -1051,6 +1052,16 @@ func TestStaleReadPrepare(t *testing.T) { tk.MustExec(fmt.Sprintf(`set transaction read only as of timestamp '%s'`, time1.Format("2006-1-2 15:04:05.000"))) _, err = tk.Exec("execute p1") require.Error(t, err) + tk.MustExec("execute p2") + + tk.MustExec("create table t1 (id int, v int)") + tk.MustExec("insert into t1 values (1,10)") + tk.MustExec("set @a=now(6)") + time.Sleep(5 * time.Millisecond) + tk.MustExec("update t1 set v=100 where id=1") + tk.MustQuery("select * from t1").Check(testkit.Rows("1 100")) + tk.MustExec("prepare s1 from 'select * from t1 as of timestamp @a where id=1'") + tk.MustQuery("execute s1").Check(testkit.Rows("1 10")) } func TestStmtCtxStaleFlag(t *testing.T) { @@ -1282,3 +1293,26 @@ func TestStaleReadNoExtraTSORequest(t *testing.T) { tk.MustQuery("select * from t") require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/session/assertTSONotRequest")) } + +func TestPlanCacheWithStaleReadByBinaryProto(t *testing.T) { + store, _, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (id int primary key, v int)") + tk.MustExec("insert into t1 values(1, 10)") + se := tk.Session() + time.Sleep(time.Millisecond * 100) + tk.MustExec("set @a=now(6)") + time.Sleep(time.Second) + tk.MustExec("update t1 set v=100 where id=1") + stmtID1, _, _, err := se.PrepareStmt("select * from t1 as of timestamp @a where id=1") + require.NoError(t, err) + + for i := 0; i < 3; i++ { + rs, err := se.ExecutePreparedStmt(context.TODO(), stmtID1, nil) + require.NoError(t, err) + tk.ResultSetToResult(rs, fmt.Sprintf("%v", rs)).Check(testkit.Rows("1 10")) + } +} diff --git a/executor/table_reader.go b/executor/table_reader.go index 4b7678ebd961f..a9decdd55b1a7 100644 --- a/executor/table_reader.go +++ b/executor/table_reader.go @@ -17,13 +17,14 @@ package executor import ( "context" "sort" + "time" "github.com/opentracing/opentracing-go" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/model" - "github.com/pingcap/tidb/parser/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/statistics" @@ -55,7 +56,7 @@ func (sr selectResultHook) SelectResult(ctx context.Context, sctx sessionctx.Con } type kvRangeBuilder interface { - buildKeyRange(pid int64, ranges []*ranger.Range) ([]kv.KeyRange, error) + buildKeyRange(ranges []*ranger.Range) ([]kv.KeyRange, error) buildKeyRangeSeparately(ranges []*ranger.Range) ([]int64, [][]kv.KeyRange, error) } @@ -109,34 +110,20 @@ type TableReaderExecutor struct { // batchCop indicates whether use super batch coprocessor request, only works for TiFlash engine. batchCop bool - // extraPIDColumnIndex is used for partition reader to add an extra partition ID column. - extraPIDColumnIndex offsetOptional - // If dummy flag is set, this is not a real TableReader, it just provides the KV ranges for UnionScan. // Used by the temporary table, cached table. dummy bool } -// offsetOptional may be a positive integer, or invalid. -type offsetOptional int - -func newOffset(i int) offsetOptional { - return offsetOptional(i + 1) -} - -func (i offsetOptional) valid() bool { - return i != 0 -} - -func (i offsetOptional) value() int { - return int(i - 1) -} - // Table implements the dataSourceExecutor interface. func (e *TableReaderExecutor) Table() table.Table { return e.table } +func (e *TableReaderExecutor) setDummy() { + e.dummy = true +} + // Open initializes necessary variables for using this executor. func (e *TableReaderExecutor) Open(ctx context.Context) error { if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { @@ -144,6 +131,10 @@ func (e *TableReaderExecutor) Open(ctx context.Context) error { defer span1.Finish() ctx = opentracing.ContextWithSpan(ctx, span1) } + failpoint.Inject("mockSleepInTableReaderNext", func(v failpoint.Value) { + ms := v.(int) + time.Sleep(time.Millisecond * time.Duration(ms)) + }) e.memTracker = memory.NewTracker(e.id, -1) e.memTracker.AttachTo(e.ctx.GetSessionVars().StmtCtx.MemTracker) @@ -190,6 +181,17 @@ func (e *TableReaderExecutor) Open(ctx context.Context) error { // Calculate the kv ranges here, UnionScan rely on this kv ranges. // cached table and temporary table are similar if e.dummy { + if e.desc && len(secondPartRanges) != 0 { + // TiKV support reverse scan and the `resultHandler` process the range order. + // While in UnionScan, it doesn't use reverse scan and reverse the final result rows manually. + // So things are differ, we need to reverse the kv range here. + // TODO: If we refactor UnionScan to use reverse scan, update the code here. + // [9734095886065816708 9734095886065816709] | [1 3] [65535 9734095886065816707] => before the following change + // [1 3] [65535 9734095886065816707] | [9734095886065816708 9734095886065816709] => ranges part reverse here + // [1 3 65535 9734095886065816707 9734095886065816708 9734095886065816709] => scan (normal order) in UnionScan + // [9734095886065816709 9734095886065816708 9734095886065816707 65535 3 1] => rows reverse in UnionScan + firstPartRanges, secondPartRanges = secondPartRanges, firstPartRanges + } kvReq, err := e.buildKVReq(ctx, firstPartRanges) if err != nil { return err @@ -250,37 +252,19 @@ func (e *TableReaderExecutor) Next(ctx context.Context, req *chunk.Chunk) error return err } - // When 'select ... for update' work on a partitioned table, the table reader should - // add the partition ID as an extra column. The SelectLockExec need this information - // to construct the lock key. - physicalID := getPhysicalTableID(e.table) - if e.extraPIDColumnIndex.valid() { - fillExtraPIDColumn(req, e.extraPIDColumnIndex.value(), physicalID) - } - return nil } -func fillExtraPIDColumn(req *chunk.Chunk, extraPIDColumnIndex int, physicalID int64) { - numRows := req.NumRows() - pidColumn := chunk.NewColumn(types.NewFieldType(mysql.TypeLonglong), numRows) - for i := 0; i < numRows; i++ { - pidColumn.AppendInt64(physicalID) - } - req.SetCol(extraPIDColumnIndex, pidColumn) -} - // Close implements the Executor Close interface. func (e *TableReaderExecutor) Close() error { - if e.dummy { - return nil - } - var err error if e.resultHandler != nil { err = e.resultHandler.Close() } e.kvRanges = e.kvRanges[:0] + if e.dummy { + return nil + } e.ctx.StoreQueryFeedback(e.feedback) return err } @@ -289,20 +273,32 @@ func (e *TableReaderExecutor) Close() error { // to fetch all results. func (e *TableReaderExecutor) buildResp(ctx context.Context, ranges []*ranger.Range) (distsql.SelectResult, error) { if e.storeType == kv.TiFlash && e.kvRangeBuilder != nil { - // TiFlash cannot support to access multiple tables/partitions within one KVReq, so we have to build KVReq for each partition separately. - kvReqs, err := e.buildKVReqSeparately(ctx, ranges) - if err != nil { - return nil, err - } - var results []distsql.SelectResult - for _, kvReq := range kvReqs { - result, err := e.SelectResult(ctx, e.ctx, kvReq, retTypes(e), e.feedback, getPhysicalPlanIDs(e.plans), e.id) + if !e.batchCop { + // TiFlash cannot support to access multiple tables/partitions within one KVReq, so we have to build KVReq for each partition separately. + kvReqs, err := e.buildKVReqSeparately(ctx, ranges) if err != nil { return nil, err } - results = append(results, result) + var results []distsql.SelectResult + for _, kvReq := range kvReqs { + result, err := e.SelectResult(ctx, e.ctx, kvReq, retTypes(e), e.feedback, getPhysicalPlanIDs(e.plans), e.id) + if err != nil { + return nil, err + } + results = append(results, result) + } + return distsql.NewSerialSelectResults(results), nil } - return distsql.NewSerialSelectResults(results), nil + // Use PartitionTable Scan + kvReq, err := e.buildKVReqForPartitionTableScan(ctx, ranges) + if err != nil { + return nil, err + } + result, err := e.SelectResult(ctx, e.ctx, kvReq, retTypes(e), e.feedback, getPhysicalPlanIDs(e.plans), e.id) + if err != nil { + return nil, err + } + return result, nil } kvReq, err := e.buildKVReq(ctx, ranges) @@ -326,7 +322,7 @@ func (e *TableReaderExecutor) buildKVReqSeparately(ctx context.Context, ranges [ kvReqs := make([]*kv.Request, 0, len(kvRanges)) for i, kvRange := range kvRanges { e.kvRanges = append(e.kvRanges, kvRange...) - if err := updateExecutorTableID(ctx, e.dagPB.RootExecutor, pids[i], true); err != nil { + if err := updateExecutorTableID(ctx, e.dagPB.RootExecutor, true, []int64{pids[i]}); err != nil { return nil, err } var builder distsql.RequestBuilder @@ -351,11 +347,47 @@ func (e *TableReaderExecutor) buildKVReqSeparately(ctx context.Context, ranges [ return kvReqs, nil } +func (e *TableReaderExecutor) buildKVReqForPartitionTableScan(ctx context.Context, ranges []*ranger.Range) (*kv.Request, error) { + pids, kvRanges, err := e.kvRangeBuilder.buildKeyRangeSeparately(ranges) + if err != nil { + return nil, err + } + partitionIDAndRanges := make([]kv.PartitionIDAndRanges, 0, len(pids)) + for i, kvRange := range kvRanges { + e.kvRanges = append(e.kvRanges, kvRange...) + partitionIDAndRanges = append(partitionIDAndRanges, kv.PartitionIDAndRanges{ + ID: pids[i], + KeyRanges: kvRange, + }) + } + if err := updateExecutorTableID(ctx, e.dagPB.RootExecutor, true, pids); err != nil { + return nil, err + } + var builder distsql.RequestBuilder + reqBuilder := builder.SetPartitionIDAndRanges(partitionIDAndRanges) + kvReq, err := reqBuilder. + SetDAGRequest(e.dagPB). + SetStartTS(e.startTS). + SetDesc(e.desc). + SetKeepOrder(e.keepOrder). + SetStreaming(e.streaming). + SetReadReplicaScope(e.readReplicaScope). + SetFromSessionVars(e.ctx.GetSessionVars()). + SetFromInfoSchema(e.ctx.GetInfoSchema()). + SetMemTracker(e.memTracker). + SetStoreType(e.storeType). + SetAllowBatchCop(e.batchCop).Build() + if err != nil { + return nil, err + } + return kvReq, nil +} + func (e *TableReaderExecutor) buildKVReq(ctx context.Context, ranges []*ranger.Range) (*kv.Request, error) { var builder distsql.RequestBuilder var reqBuilder *distsql.RequestBuilder if e.kvRangeBuilder != nil { - kvRange, err := e.kvRangeBuilder.buildKeyRange(getPhysicalTableID(e.table), ranges) + kvRange, err := e.kvRangeBuilder.buildKeyRange(ranges) if err != nil { return nil, err } diff --git a/executor/tiflash_test.go b/executor/tiflash_test.go index 5aefde2d562c1..e70c717c0227a 100644 --- a/executor/tiflash_test.go +++ b/executor/tiflash_test.go @@ -22,37 +22,30 @@ import ( "strings" "sync" "sync/atomic" + "testing" "time" - . "github.com/pingcap/check" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/parser/terror" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/mockstore/unistore" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/util/israce" "github.com/pingcap/tidb/util/kvcache" - "github.com/pingcap/tidb/util/testkit" - "github.com/pingcap/tidb/util/testleak" + "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/testutils" ) -type tiflashTestSuite struct { - store kv.Storage - dom *domain.Domain - *parser.Parser -} - -func (s *tiflashTestSuite) SetUpSuite(c *C) { - var err error - s.store, err = mockstore.NewMockStore( +func createTiFlashStore(t *testing.T) (kv.Storage, func()) { + store, clean := testkit.CreateMockStore(t, mockstore.WithClusterInspector(func(c testutils.Cluster) { mockCluster := c.(*unistore.Cluster) _, _, region1 := mockstore.BootstrapWithSingleStore(c) @@ -68,45 +61,36 @@ func (s *tiflashTestSuite) SetUpSuite(c *C) { }), mockstore.WithStoreType(mockstore.EmbedUnistore), ) - - c.Assert(err, IsNil) - - session.SetSchemaLease(0) - session.DisableStats4Test() - - s.dom, err = session.BootstrapSession(s.store) - c.Assert(err, IsNil) - s.dom.SetStatsUpdating(true) -} - -func (s *tiflashTestSuite) TearDownSuite(c *C) { - s.dom.Close() - c.Assert(s.store.Close(), IsNil) + return store, clean } -func (s *tiflashTestSuite) TestNonsupportCharsetTable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestNonsupportCharsetTable(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int, b char(10) charset gbk collate gbk_bin)") err := tk.ExecToErr("alter table t set tiflash replica 1") - c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[ddl:8200]Unsupported ALTER table replica for table contain gbk charset") + require.Error(t, err) + require.Equal(t, "[ddl:8200]Unsupported ALTER table replica for table contain gbk charset", err.Error()) tk.MustExec("drop table if exists t") tk.MustExec("create table t(a char(10) charset utf8)") tk.MustExec("alter table t set tiflash replica 1") } -func (s *tiflashTestSuite) TestReadPartitionTable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestReadPartitionTable(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int not null primary key, b int not null) partition by hash(a) partitions 2") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1,0)") tk.MustExec("insert into t values(2,0)") tk.MustExec("insert into t values(3,0)") @@ -125,19 +109,27 @@ func (s *tiflashTestSuite) TestReadPartitionTable(c *C) { tk.MustQuery("select /*+ STREAM_AGG() */ count(*) from t").Check(testkit.Rows("5")) tk.MustExec("insert into t values(6,0)") tk.MustQuery("select /*+ STREAM_AGG() */ count(*) from t").Check(testkit.Rows("6")) + // test dynamic prune + union scan + tk.MustExec("set tidb_partition_prune_mode=dynamic") + tk.MustQuery("select /*+ STREAM_AGG() */ count(*) from t").Check(testkit.Rows("6")) + // test dynamic prune + batch cop + union scan + tk.MustExec("set tidb_allow_batch_cop=2") + tk.MustQuery("select /*+ STREAM_AGG() */ count(*) from t").Check(testkit.Rows("6")) tk.MustExec("commit") } -func (s *tiflashTestSuite) TestReadUnsigedPK(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestReadUnsigedPK(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("drop table if exists t1") tk.MustExec("create table t(a bigint unsigned not null primary key, b int not null)") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1,0)") tk.MustExec("insert into t values(2,0)") tk.MustExec("insert into t values(3,0)") @@ -146,9 +138,9 @@ func (s *tiflashTestSuite) TestReadUnsigedPK(c *C) { tk.MustExec("create table t1(a bigint unsigned not null primary key, b int not null)") tk.MustExec("alter table t1 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t1") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t1") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t1 values(1,0)") tk.MustExec("insert into t1 values(2,0)") tk.MustExec("insert into t1 values(3,0)") @@ -157,7 +149,6 @@ func (s *tiflashTestSuite) TestReadUnsigedPK(c *C) { tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\"") tk.MustExec("set @@session.tidb_allow_mpp=ON") - tk.MustExec("set @@session.tidb_opt_broadcast_join=ON") // mock executor does not support use outer table as build side for outer join, so need to // force the inner table as build side tk.MustExec("set tidb_opt_mpp_outer_join_fixed_build_side=1") @@ -167,15 +158,17 @@ func (s *tiflashTestSuite) TestReadUnsigedPK(c *C) { } // to fix https://github.com/pingcap/tidb/issues/27952 -func (s *tiflashTestSuite) TestJoinRace(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestJoinRace(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int not null, b int not null)") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1,1)") tk.MustExec("insert into t values(2,1)") tk.MustExec("insert into t values(3,1)") @@ -195,27 +188,29 @@ func (s *tiflashTestSuite) TestJoinRace(c *C) { } -func (s *tiflashTestSuite) TestMppExecution(c *C) { +func TestMppExecution(t *testing.T) { if israce.RaceEnabled { - c.Skip("skip race test because of long running") + t.Skip("skip race test because of long running") } - tk := testkit.NewTestKit(c, s.store) + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int not null primary key, b int not null)") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1,0)") tk.MustExec("insert into t values(2,0)") tk.MustExec("insert into t values(3,0)") tk.MustExec("create table t1(a int primary key, b int not null)") tk.MustExec("alter table t1 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t1") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t1") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t1 values(1,0)") tk.MustExec("insert into t1 values(2,0)") tk.MustExec("insert into t1 values(3,0)") @@ -232,9 +227,9 @@ func (s *tiflashTestSuite) TestMppExecution(c *C) { // test multi-way join tk.MustExec("create table t2(a int primary key, b int not null)") tk.MustExec("alter table t2 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t2") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t2") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t2 values(1,0)") tk.MustExec("insert into t2 values(2,0)") @@ -262,14 +257,14 @@ func (s *tiflashTestSuite) TestMppExecution(c *C) { tk.MustExec("begin") tk.MustQuery("select count(*) from ( select * from t2 group by a, b) A group by A.b").Check(testkit.Rows("3")) tk.MustQuery("select count(*) from t1 where t1.a+100 > ( select count(*) from t2 where t1.a=t2.a and t1.b=t2.b) group by t1.b").Check(testkit.Rows("4")) - txn, err := tk.Se.Txn(true) - c.Assert(err, IsNil) + txn, err := tk.Session().Txn(true) + require.NoError(t, err) ts := txn.StartTS() - taskID := tk.Se.GetSessionVars().AllocMPPTaskID(ts) - c.Assert(taskID, Equals, int64(6)) + taskID := tk.Session().GetSessionVars().AllocMPPTaskID(ts) + require.Equal(t, int64(6), taskID) tk.MustExec("commit") - taskID = tk.Se.GetSessionVars().AllocMPPTaskID(ts + 1) - c.Assert(taskID, Equals, int64(1)) + taskID = tk.Session().GetSessionVars().AllocMPPTaskID(ts + 1) + require.Equal(t, int64(1), taskID) failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(3)`) // all the data is related to one store, so there are three tasks. @@ -279,9 +274,9 @@ func (s *tiflashTestSuite) TestMppExecution(c *C) { tk.MustExec("drop table if exists t") tk.MustExec("create table t (c1 decimal(8, 5) not null, c2 decimal(9, 5), c3 decimal(9, 4) , c4 decimal(8, 4) not null)") tk.MustExec("alter table t set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1.00000,1.00000,1.0000,1.0000)") tk.MustExec("insert into t values(1.00010,1.00010,1.0001,1.0001)") tk.MustExec("insert into t values(1.00001,1.00001,1.0000,1.0002)") @@ -292,15 +287,17 @@ func (s *tiflashTestSuite) TestMppExecution(c *C) { tk.MustQuery("select /*+ nth_plan(2) */ t1.c1 from t t1 join t t2 on t1.c1 = t2.c3 order by t1.c1").Check(testkit.Rows("1.00000", "1.00000", "1.00010")) } -func (s *tiflashTestSuite) TestInjectExtraProj(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestInjectExtraProj(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a bigint(20))") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values (9223372036854775807)") tk.MustExec("insert into t values (9223372036854775807)") tk.MustExec("insert into t values (9223372036854775807)") @@ -312,10 +309,12 @@ func (s *tiflashTestSuite) TestInjectExtraProj(c *C) { tk.MustQuery("select avg(a), a from t group by a").Check(testkit.Rows("9223372036854775807.0000 9223372036854775807")) } -func (s *tiflashTestSuite) TestTiFlashPartitionTableShuffledHashJoin(c *C) { - c.Skip("too slow") +func TestTiFlashPartitionTableShuffledHashJoin(t *testing.T) { + t.Skip("too slow") - tk := testkit.NewTestKit(c, s.store) + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec(`create database tiflash_partition_SHJ`) tk.MustExec("use tiflash_partition_SHJ") tk.MustExec(`create table thash (a int, b int) partition by hash(a) partitions 4`) @@ -337,9 +336,9 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableShuffledHashJoin(c *C) { for _, tbl := range []string{`thash`, `trange`, `tlist`, `tnormal`} { tk.MustExec("alter table " + tbl + " set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "tiflash_partition_SHJ", tbl) - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "tiflash_partition_SHJ", tbl) + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) } vals := make([]string, 0, 100) @@ -352,7 +351,6 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableShuffledHashJoin(c *C) { } tk.MustExec("SET tidb_enforce_mpp=1") - tk.MustExec("SET tidb_opt_broadcast_join=0") tk.MustExec("SET tidb_broadcast_join_threshold_count=0") tk.MustExec("SET tidb_broadcast_join_threshold_size=0") tk.MustExec("set @@session.tidb_isolation_read_engines='tiflash'") @@ -386,10 +384,12 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableShuffledHashJoin(c *C) { } } -func (s *tiflashTestSuite) TestTiFlashPartitionTableReader(c *C) { - c.Skip("too slow") +func TestTiFlashPartitionTableReader(t *testing.T) { + t.Skip("too slow") - tk := testkit.NewTestKit(c, s.store) + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec(`create database tiflash_partition_tablereader`) tk.MustExec("use tiflash_partition_tablereader") tk.MustExec(`create table thash (a int, b int) partition by hash(a) partitions 4`) @@ -411,9 +411,9 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableReader(c *C) { for _, tbl := range []string{`thash`, `trange`, `tlist`, `tnormal`} { tk.MustExec("alter table " + tbl + " set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "tiflash_partition_tablereader", tbl) - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "tiflash_partition_tablereader", tbl) + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) } // mock executor does not support use outer table as build side for outer join, so need to // force the inner table as build side @@ -450,17 +450,19 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableReader(c *C) { } } -func (s *tiflashTestSuite) TestPartitionTable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestPartitionTable(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("drop table if exists t1") tk.MustExec("drop table if exists t2") tk.MustExec("create table t(a int not null primary key, b int not null) partition by hash(a+1) partitions 4") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1,0)") tk.MustExec("insert into t values(2,0)") tk.MustExec("insert into t values(3,0)") @@ -471,7 +473,7 @@ func (s *tiflashTestSuite) TestPartitionTable(c *C) { // mock executor does not support use outer table as build side for outer join, so need to // force the inner table as build side tk.MustExec("set tidb_opt_mpp_outer_join_fixed_build_side=1") - failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(4)`) + failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(1)`) tk.MustQuery("select count(*) from t").Check(testkit.Rows("4")) failpoint.Disable("github.com/pingcap/tidb/executor/checkTotalMPPTasks") tk.MustExec("set @@session.tidb_partition_prune_mode='static-only'") @@ -482,9 +484,9 @@ func (s *tiflashTestSuite) TestPartitionTable(c *C) { tk.MustExec("create table t1(a int not null primary key, b int not null) partition by hash(a) partitions 4") tk.MustExec("alter table t1 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t1") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t1") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t1 values(1,4)") tk.MustExec("insert into t1 values(2,3)") tk.MustExec("insert into t1 values(3,2)") @@ -492,9 +494,8 @@ func (s *tiflashTestSuite) TestPartitionTable(c *C) { tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\"") tk.MustExec("set @@session.tidb_allow_mpp=ON") - tk.MustExec("set @@session.tidb_opt_broadcast_join=ON") // test if it is really work. - failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(8)`) + failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(2)`) tk.MustQuery("select count(*) from t1 , t where t1.a = t.a").Check(testkit.Rows("4")) // test partition prune tk.MustQuery("select count(*) from t1 , t where t1.a = t.a and t1.a < 2 and t.a < 2").Check(testkit.Rows("1")) @@ -503,16 +504,16 @@ func (s *tiflashTestSuite) TestPartitionTable(c *C) { // test multi-way join tk.MustExec("create table t2(a int not null primary key, b int not null)") tk.MustExec("alter table t2 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t2") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t2") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t2 values(1,0)") tk.MustExec("insert into t2 values(2,0)") tk.MustExec("insert into t2 values(3,0)") tk.MustExec("insert into t2 values(4,0)") // test with no partition table - failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(9)`) + failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(3)`) tk.MustQuery("select count(*) from t1 , t, t2 where t1.a = t.a and t2.a = t.a").Check(testkit.Rows("4")) failpoint.Disable("github.com/pingcap/tidb/executor/checkTotalMPPTasks") @@ -523,33 +524,35 @@ func (s *tiflashTestSuite) TestPartitionTable(c *C) { PARTITION p3 VALUES LESS THAN (7) );`) tk.MustExec("alter table t3 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t3") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t3") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t3 values(1,0)") tk.MustExec("insert into t3 values(2,2)") tk.MustExec("insert into t3 values(3,4)") tk.MustExec("insert into t3 values(4,6)") - failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(7)`) + failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(2)`) tk.MustQuery("select count(*) from t, t3 where t3.a = t.a and t3.b <= 4").Check(testkit.Rows("3")) failpoint.Disable("github.com/pingcap/tidb/executor/checkTotalMPPTasks") - failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(5)`) + failpoint.Enable("github.com/pingcap/tidb/executor/checkTotalMPPTasks", `return(2)`) tk.MustQuery("select count(*) from t, t3 where t3.a = t.a and t3.b > 10").Check(testkit.Rows("0")) failpoint.Disable("github.com/pingcap/tidb/executor/checkTotalMPPTasks") failpoint.Disable("github.com/pingcap/tidb/executor/checkUseMPP") } -func (s *tiflashTestSuite) TestMppEnum(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestMppEnum(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int not null primary key, b enum('aca','bca','zca'))") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1,'aca')") tk.MustExec("insert into t values(2,'bca')") tk.MustExec("insert into t values(3,'zca')") @@ -561,28 +564,30 @@ func (s *tiflashTestSuite) TestMppEnum(c *C) { tk.MustQuery("select t1.b from t t1 join t t2 on t1.a = t2.a order by t1.b").Check(testkit.Rows("aca", "bca", "zca")) } -func (s *tiflashTestSuite) TestTiFlashPlanCacheable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestTiFlashPlanCacheable(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) orgEnable := plannercore.PreparedPlanCacheEnabled() defer func() { plannercore.SetPreparedPlanCache(orgEnable) }() plannercore.SetPreparedPlanCache(true) - var err error - tk.Se, err = session.CreateSession4TestWithOpt(s.store, &session.Opt{ + sess, err := session.CreateSession4TestWithOpt(store, &session.Opt{ PreparedPlanCache: kvcache.NewSimpleLRUCache(100, 0.1, math.MaxUint64), }) - c.Assert(err, IsNil) + tk.SetSession(sess) + require.NoError(t, err) tk.MustExec("use test;") tk.MustExec("drop table if exists t;") tk.MustExec("create table t(a int);") tk.MustExec("set @@tidb_enable_collect_execution_info=0;") tk.MustExec("alter table test.t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("set @@session.tidb_isolation_read_engines = 'tikv, tiflash'") tk.MustExec("insert into t values(1);") tk.MustExec("prepare stmt from 'select /*+ read_from_storage(tiflash[t]) */ * from t;';") @@ -612,8 +617,10 @@ func (s *tiflashTestSuite) TestTiFlashPlanCacheable(c *C) { tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("0")) } -func (s *tiflashTestSuite) TestDispatchTaskRetry(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestDispatchTaskRetry(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int not null primary key, b int not null)") @@ -622,20 +629,20 @@ func (s *tiflashTestSuite) TestDispatchTaskRetry(c *C) { tk.MustExec("insert into t values(2,0)") tk.MustExec("insert into t values(3,0)") tk.MustExec("insert into t values(4,0)") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("set @@session.tidb_enforce_mpp=ON") - c.Assert(failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/mppDispatchTimeout", "3*return(true)"), IsNil) + require.Nil(t, failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/mppDispatchTimeout", "3*return(true)")) tk.MustQuery("select count(*) from t").Check(testkit.Rows("4")) - c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/mppDispatchTimeout"), IsNil) + require.Nil(t, failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/mppDispatchTimeout")) } -func (s *tiflashTestSuite) TestCancelMppTasks(c *C) { - testleak.BeforeTest() - defer testleak.AfterTest(c)() +func TestCancelMppTasks(t *testing.T) { var hang = "github.com/pingcap/tidb/store/mockstore/unistore/mppRecvHang" - tk := testkit.NewTestKit(c, s.store) + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int not null primary key, b int not null)") @@ -644,53 +651,55 @@ func (s *tiflashTestSuite) TestCancelMppTasks(c *C) { tk.MustExec("insert into t values(2,0)") tk.MustExec("insert into t values(3,0)") tk.MustExec("insert into t values(4,0)") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\"") tk.MustExec("set @@session.tidb_allow_mpp=ON") // mock executor does not support use outer table as build side for outer join, so need to // force the inner table as build side tk.MustExec("set tidb_opt_mpp_outer_join_fixed_build_side=1") - atomic.StoreUint32(&tk.Se.GetSessionVars().Killed, 0) - c.Assert(failpoint.Enable(hang, `return(true)`), IsNil) + atomic.StoreUint32(&tk.Session().GetSessionVars().Killed, 0) + require.Nil(t, failpoint.Enable(hang, `return(true)`)) wg := &sync.WaitGroup{} wg.Add(1) go func() { defer wg.Done() err := tk.QueryToErr("select count(*) from t as t1 , t where t1.a = t.a") - c.Assert(err, NotNil) - c.Assert(int(terror.ToSQLError(errors.Cause(err).(*terror.Error)).Code), Equals, int(executor.ErrQueryInterrupted.Code())) + require.Error(t, err) + require.Equal(t, int(executor.ErrQueryInterrupted.Code()), int(terror.ToSQLError(errors.Cause(err).(*terror.Error)).Code)) }() time.Sleep(1 * time.Second) - atomic.StoreUint32(&tk.Se.GetSessionVars().Killed, 1) + atomic.StoreUint32(&tk.Session().GetSessionVars().Killed, 1) wg.Wait() - c.Assert(failpoint.Disable(hang), IsNil) + require.Nil(t, failpoint.Disable(hang)) } // all goroutines exit if one goroutine hangs but another return errors -func (s *tiflashTestSuite) TestMppGoroutinesExitFromErrors(c *C) { +func TestMppGoroutinesExitFromErrors(t *testing.T) { // mock non-root tasks return error var mppNonRootTaskError = "github.com/pingcap/tidb/store/copr/mppNonRootTaskError" // mock root tasks hang var hang = "github.com/pingcap/tidb/store/mockstore/unistore/mppRecvHang" - tk := testkit.NewTestKit(c, s.store) + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int not null primary key, b int not null)") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1,0)") tk.MustExec("insert into t values(2,0)") tk.MustExec("insert into t values(3,0)") tk.MustExec("drop table if exists t1") tk.MustExec("create table t1(a int not null primary key, b int not null)") tk.MustExec("alter table t1 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t1") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t1") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t1 values(1,0)") tk.MustExec("insert into t1 values(2,0)") tk.MustExec("insert into t1 values(3,0)") @@ -699,18 +708,20 @@ func (s *tiflashTestSuite) TestMppGoroutinesExitFromErrors(c *C) { // mock executor does not support use outer table as build side for outer join, so need to // force the inner table as build side tk.MustExec("set tidb_opt_mpp_outer_join_fixed_build_side=1") - c.Assert(failpoint.Enable(mppNonRootTaskError, `return(true)`), IsNil) - c.Assert(failpoint.Enable(hang, `return(true)`), IsNil) + require.Nil(t, failpoint.Enable(mppNonRootTaskError, `return(true)`)) + require.Nil(t, failpoint.Enable(hang, `return(true)`)) // generate 2 root tasks, one will hang and another will return errors err = tk.QueryToErr("select count(*) from t as t1 , t where t1.a = t.a") - c.Assert(err, NotNil) - c.Assert(failpoint.Disable(mppNonRootTaskError), IsNil) - c.Assert(failpoint.Disable(hang), IsNil) + require.Error(t, err) + require.Nil(t, failpoint.Disable(mppNonRootTaskError)) + require.Nil(t, failpoint.Disable(hang)) } -func (s *tiflashTestSuite) TestMppUnionAll(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestMppUnionAll(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists x1") tk.MustExec("create table x1(a int , b int);") @@ -718,12 +729,12 @@ func (s *tiflashTestSuite) TestMppUnionAll(c *C) { tk.MustExec("drop table if exists x2") tk.MustExec("create table x2(a int , b int);") tk.MustExec("alter table x2 set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "x1") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) - tb = testGetTableByName(c, tk.Se, "test", "x2") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "x1") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) + tb = external.GetTableByName(t, tk, "test", "x2") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into x1 values (1, 1), (2, 2), (3, 3), (4, 4)") tk.MustExec("insert into x2 values (5, 1), (2, 2), (3, 3), (4, 4)") @@ -738,9 +749,9 @@ func (s *tiflashTestSuite) TestMppUnionAll(c *C) { tk.MustExec("drop table if exists x3") tk.MustExec("create table x3(a int , b int);") tk.MustExec("alter table x3 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "x3") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "x3") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into x3 values (2, 2), (2, 3), (2, 4)") // test nested union all @@ -755,9 +766,9 @@ func (s *tiflashTestSuite) TestMppUnionAll(c *C) { tk.MustExec("drop table if exists x4") tk.MustExec("create table x4(a int not null, b int not null);") tk.MustExec("alter table x4 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "x4") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "x4") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("set @@tidb_enforce_mpp=1") tk.MustExec("insert into x4 values (2, 2), (2, 3)") @@ -765,8 +776,10 @@ func (s *tiflashTestSuite) TestMppUnionAll(c *C) { } -func (s *tiflashTestSuite) TestUnionWithEmptyDualTable(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestUnionWithEmptyDualTable(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("drop table if exists t1") @@ -774,12 +787,12 @@ func (s *tiflashTestSuite) TestUnionWithEmptyDualTable(c *C) { tk.MustExec("create table t1 (a int, b int not null, c double)") tk.MustExec("alter table t set tiflash replica 1") tk.MustExec("alter table t1 set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) - tb = testGetTableByName(c, tk.Se, "test", "t1") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) + tb = external.GetTableByName(t, tk, "test", "t1") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(1,2,3)") tk.MustExec("insert into t1 values(1,2,3)") tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\"") @@ -787,16 +800,18 @@ func (s *tiflashTestSuite) TestUnionWithEmptyDualTable(c *C) { tk.MustQuery("select count(*) from (select a , b from t union all select a , c from t1 where false) tt").Check(testkit.Rows("1")) } -func (s *tiflashTestSuite) TestAvgOverflow(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestAvgOverflow(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") // avg int tk.MustExec("drop table if exists t") tk.MustExec("create table t (a decimal(1,0))") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t values(9)") for i := 0; i < 16; i++ { tk.MustExec("insert into t select * from t") @@ -810,9 +825,9 @@ func (s *tiflashTestSuite) TestAvgOverflow(c *C) { tk.MustExec("drop table if exists td;") tk.MustExec("create table td (col_bigint bigint(20), col_smallint smallint(6));") tk.MustExec("alter table td set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "td") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "td") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into td values (null, 22876);") tk.MustExec("insert into td values (9220557287087669248, 32767);") tk.MustExec("insert into td values (28030, 32767);") @@ -830,22 +845,24 @@ func (s *tiflashTestSuite) TestAvgOverflow(c *C) { tk.MustExec("drop table if exists td;") } -func (s *tiflashTestSuite) TestMppApply(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestMppApply(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists x1") tk.MustExec("create table x1(a int primary key, b int);") tk.MustExec("alter table x1 set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "x1") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "x1") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into x1 values(1, 1),(2, 10),(0,11);") tk.MustExec("create table x2(a int primary key, b int);") tk.MustExec("alter table x2 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "x2") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "x2") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into x2 values(1,2),(0,1),(2,-3);") tk.MustExec("analyze table x1, x2;") @@ -860,29 +877,31 @@ func (s *tiflashTestSuite) TestMppApply(c *C) { tk.MustQuery("select /*+ agg_to_cop(), hash_agg()*/ count(*) from x1 where b > any (select x2.a from x2 where x1.a = x2.a);").Check(testkit.Rows("2")) } -func (s *tiflashTestSuite) TestTiFlashVirtualColumn(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestTiFlashVirtualColumn(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t1,t2,t3") tk.MustExec("create table t1 (a bit(4), b bit(4), c bit(4) generated always as (a) virtual)") tk.MustExec("alter table t1 set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t1") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t1") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t1(a,b) values(b'01',b'01'),(b'10',b'10'),(b'11',b'11')") tk.MustExec("create table t2 (a int, b int, c int generated always as (a) virtual)") tk.MustExec("alter table t2 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t2") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t2") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t2(a,b) values(1,1),(2,2),(3,3)") tk.MustExec("create table t3 (a bit(4), b bit(4), c bit(4) generated always as (b'01'+b'10') virtual)") tk.MustExec("alter table t3 set tiflash replica 1") - tb = testGetTableByName(c, tk.Se, "test", "t3") - err = domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb = external.GetTableByName(t, tk, "test", "t3") + err = domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) tk.MustExec("insert into t3(a,b) values(b'01',b'01'),(b'10',b'10'),(b'11',b'11')") tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\"") @@ -896,10 +915,12 @@ func (s *tiflashTestSuite) TestTiFlashVirtualColumn(c *C) { tk.MustQuery("select /*+ hash_agg() */ count(*) from t3 where c > b'01'").Check(testkit.Rows("3")) } -func (s *tiflashTestSuite) TestTiFlashPartitionTableShuffledHashAggregation(c *C) { - c.Skip("too slow") +func TestTiFlashPartitionTableShuffledHashAggregation(t *testing.T) { + t.Skip("too slow") - tk := testkit.NewTestKit(c, s.store) + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database tiflash_partition_AGG") tk.MustExec("use tiflash_partition_AGG") tk.MustExec(`create table thash (a int, b int) partition by hash(a) partitions 4`) @@ -921,9 +942,9 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableShuffledHashAggregation(c *C for _, tbl := range []string{`thash`, `trange`, `tlist`, `tnormal`} { tk.MustExec("alter table " + tbl + " set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "tiflash_partition_AGG", tbl) - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "tiflash_partition_AGG", tbl) + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) } vals := make([]string, 0, 100) @@ -955,7 +976,7 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableShuffledHashAggregation(c *C tk.MustExec(fmt.Sprintf("set @@tidb_partition_prune_mode = '%v'", mode)) for _, tbl := range []string{`thash`, `trange`, `tlist`, `tnormal`} { q := fmt.Sprintf("select /*+ HASH_AGG() */ count(*) from %v t1 where %v", tbl, cond) - c.Assert(tk.HasPlan(q, "HashAgg"), IsTrue) + require.True(t, tk.HasPlan(q, "HashAgg")) if res == nil { res = tk.MustQuery(q).Sort().Rows() } else { @@ -966,10 +987,12 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableShuffledHashAggregation(c *C } } -func (s *tiflashTestSuite) TestTiFlashPartitionTableBroadcastJoin(c *C) { - c.Skip("too slow") +func TestTiFlashPartitionTableBroadcastJoin(t *testing.T) { + t.Skip("too slow") - tk := testkit.NewTestKit(c, s.store) + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("create database tiflash_partition_BCJ") tk.MustExec("use tiflash_partition_BCJ") tk.MustExec(`create table thash (a int, b int) partition by hash(a) partitions 4`) @@ -991,9 +1014,9 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableBroadcastJoin(c *C) { for _, tbl := range []string{`thash`, `trange`, `tlist`, `tnormal`} { tk.MustExec("alter table " + tbl + " set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "tiflash_partition_BCJ", tbl) - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "tiflash_partition_BCJ", tbl) + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) } vals := make([]string, 0, 100) @@ -1006,7 +1029,6 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableBroadcastJoin(c *C) { } tk.MustExec("set @@session.tidb_isolation_read_engines='tiflash'") tk.MustExec("set @@session.tidb_enforce_mpp=1") - tk.MustExec("set @@session.tidb_opt_broadcast_join=ON") // mock executor does not support use outer table as build side for outer join, so need to // force the inner table as build side tk.MustExec("set tidb_opt_mpp_outer_join_fixed_build_side=1") @@ -1037,15 +1059,17 @@ func (s *tiflashTestSuite) TestTiFlashPartitionTableBroadcastJoin(c *C) { } } -func (s *tiflashTestSuite) TestForbidTiflashDuringStaleRead(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestForbidTiflashDuringStaleRead(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a bigint(20))") tk.MustExec("alter table t set tiflash replica 1") - tb := testGetTableByName(c, tk.Se, "test", "t") - err := domain.GetDomain(tk.Se).DDL().UpdateTableReplicaInfo(tk.Se, tb.Meta().ID, true) - c.Assert(err, IsNil) + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) time.Sleep(2 * time.Second) tk.MustExec("insert into t values (9223372036854775807)") tk.MustExec("insert into t values (9223372036854775807)") @@ -1059,8 +1083,8 @@ func (s *tiflashTestSuite) TestForbidTiflashDuringStaleRead(c *C) { fmt.Fprintf(resBuff, "%s\n", row) } res := resBuff.String() - c.Assert(strings.Contains(res, "tiflash"), IsTrue) - c.Assert(strings.Contains(res, "tikv"), IsFalse) + require.Contains(t, res, "tiflash") + require.NotContains(t, res, "tikv") tk.MustExec("set transaction read only as of timestamp now(1)") rows = tk.MustQuery("explain select avg(a) from t").Rows() resBuff = bytes.NewBufferString("") @@ -1068,6 +1092,111 @@ func (s *tiflashTestSuite) TestForbidTiflashDuringStaleRead(c *C) { fmt.Fprintf(resBuff, "%s\n", row) } res = resBuff.String() - c.Assert(strings.Contains(res, "tiflash"), IsFalse) - c.Assert(strings.Contains(res, "tikv"), IsTrue) + require.NotContains(t, res, "tiflash") + require.Contains(t, res, "tikv") +} + +func TestForbidTiFlashIfExtraPhysTableIDIsNeeded(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int not null primary key, b int not null) partition by hash(a) partitions 2") + tk.MustExec("alter table t set tiflash replica 1") + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) + tk.MustExec("set tidb_partition_prune_mode=dynamic") + tk.MustExec("set tidb_enforce_mpp=1") + + rows := tk.MustQuery("explain select count(*) from t").Rows() + resBuff := bytes.NewBufferString("") + for _, row := range rows { + fmt.Fprintf(resBuff, "%s\n", row) + } + res := resBuff.String() + require.Contains(t, res, "tiflash") + require.NotContains(t, res, "tikv") + + rows = tk.MustQuery("explain select count(*) from t for update").Rows() + resBuff = bytes.NewBufferString("") + for _, row := range rows { + fmt.Fprintf(resBuff, "%s\n", row) + } + res = resBuff.String() + require.NotContains(t, res, "tiflash") + require.Contains(t, res, "tikv") + + tk.MustExec("begin") + rows = tk.MustQuery("explain select count(*) from t").Rows() + resBuff = bytes.NewBufferString("") + for _, row := range rows { + fmt.Fprintf(resBuff, "%s\n", row) + } + res = resBuff.String() + require.Contains(t, res, "tiflash") + require.NotContains(t, res, "tikv") + tk.MustExec("insert into t values(1,2)") + rows = tk.MustQuery("explain select count(*) from t").Rows() + resBuff = bytes.NewBufferString("") + for _, row := range rows { + fmt.Fprintf(resBuff, "%s\n", row) + } + res = resBuff.String() + require.Contains(t, res, "tiflash") + require.NotContains(t, res, "tikv") + tk.MustExec("rollback") +} + +func TestTiflashPartitionTableScan(t *testing.T) { + store, clean := createTiFlashStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(\n a int,\n primary key(a)\n) partition by range(a) (\n partition p1 values less than (10),\n partition p2 values less than (20),\n partition p3 values less than (30),\n partition p4 values less than (40),\n partition p5 values less than (50)\n);") + tk.MustExec("alter table t set tiflash replica 1") + tb := external.GetTableByName(t, tk, "test", "t") + err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) + require.NoError(t, err) + time.Sleep(2 * time.Second) + tk.MustExec("insert into t values(1),(11),(21),(31),(41);") + tk.MustExec("set @@tidb_partition_prune_mode = 'dynamic';") + tk.MustExec("set @@session.tidb_isolation_read_engines=\"tiflash\";") + // MPP + tk.MustExec("set @@session.tidb_allow_mpp=ON;") + tk.MustQuery("select count(*) from t where a < 12;").Check(testkit.Rows("2")) + + // BatchCop + tk.MustExec("set @@session.tidb_allow_mpp=OFF;") + tk.MustExec("set @@tidb_allow_batch_cop = 2;") + tk.MustQuery("select count(*) from t where a < 12;").Check(testkit.Rows("2")) + + // test retry batch cop + // MPP + wg := sync.WaitGroup{} + wg.Add(1) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/rpcServerBusy", `return(true)`)) + go func() { + time.Sleep(100 * time.Millisecond) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/rpcServerBusy")) + wg.Done() + }() + tk.MustExec("set @@session.tidb_allow_mpp=ON;") + tk.MustQuery("select count(*) from t where a < 12;").Check(testkit.Rows("2")) + wg.Wait() + + // BatchCop + wg.Add(1) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/rpcServerBusy", `return(true)`)) + go func() { + time.Sleep(100 * time.Millisecond) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/rpcServerBusy")) + wg.Done() + }() + tk.MustExec("set @@session.tidb_allow_mpp=OFF;") + tk.MustExec("set @@tidb_allow_batch_cop = 2;") + tk.MustQuery("select count(*) from t where a < 12;").Check(testkit.Rows("2")) + wg.Wait() } diff --git a/executor/union_scan.go b/executor/union_scan.go index 36af94bd07db8..f57c86ee32cd2 100644 --- a/executor/union_scan.go +++ b/executor/union_scan.go @@ -62,6 +62,11 @@ type UnionScanExec struct { // cacheTable not nil means it's reading from cached table. cacheTable kv.MemBuffer collators []collate.Collator + + // If partitioned table and the physical table id is encoded in the chuck at this column index + // used with dynamic prune mode + // < 0 if not used. + physTblIDIdx int } // Open implements the Executor Open interface. @@ -93,6 +98,13 @@ func (us *UnionScanExec) open(ctx context.Context) error { return err } + us.physTblIDIdx = -1 + for i := len(us.columns) - 1; i >= 0; i-- { + if us.columns[i].ID == model.ExtraPhysTblID { + us.physTblIDIdx = i + break + } + } mb := txn.GetMemBuffer() mb.RLock() defer mb.RUnlock() @@ -127,7 +139,7 @@ func (us *UnionScanExec) Next(ctx context.Context, req *chunk.Chunk) error { defer us.memBuf.RUnlock() req.GrowAndReset(us.maxChunkSize) mutableRow := chunk.MutRowFromTypes(retTypes(us)) - for i, batchSize := 0, req.Capacity(); i < batchSize; i++ { + for batchSize := req.Capacity(); req.NumRows() < batchSize; { row, err := us.getOneRow(ctx) if err != nil { return err @@ -237,7 +249,13 @@ func (us *UnionScanExec) getSnapshotRow(ctx context.Context) ([]types.Datum, err if err != nil { return nil, err } - checkKey := tablecodec.EncodeRecordKey(us.table.RecordPrefix(), snapshotHandle) + var checkKey kv.Key + if us.physTblIDIdx >= 0 { + tblID := row.GetInt64(us.physTblIDIdx) + checkKey = tablecodec.EncodeRowKeyWithHandle(tblID, snapshotHandle) + } else { + checkKey = tablecodec.EncodeRecordKey(us.table.RecordPrefix(), snapshotHandle) + } if _, err := us.memBufSnap.Get(context.TODO(), checkKey); err == nil { // If src handle appears in added rows, it means there is conflict and the transaction will fail to // commit, but for simplicity, we don't handle it here. diff --git a/executor/union_scan_test.go b/executor/union_scan_test.go index bdf521427dcda..4979af65273bd 100644 --- a/executor/union_scan_test.go +++ b/executor/union_scan_test.go @@ -17,8 +17,10 @@ package executor_test import ( "fmt" "testing" + "time" "github.com/pingcap/tidb/executor" + "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/util/benchdaily" "github.com/stretchr/testify/require" @@ -419,6 +421,105 @@ func TestForApplyAndUnionScan(t *testing.T) { tk.MustExec("rollback") } +func TestIssue28073(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2") + tk.MustExec("create table t1 (c_int int, c_str varchar(40), primary key (c_int, c_str) , key(c_int)) partition by hash (c_int) partitions 4") + tk.MustExec("create table t2 like t1") + tk.MustExec("insert into t1 values (1, 'flamboyant mcclintock')") + tk.MustExec("insert into t2 select * from t1") + + tk.MustExec("begin") + tk.MustExec("insert into t2 (c_int, c_str) values (2, 'romantic grothendieck')") + tk.MustQuery("select * from t2 left join t1 on t1.c_int = t2.c_int for update").Sort().Check( + testkit.Rows( + "1 flamboyant mcclintock 1 flamboyant mcclintock", + "2 romantic grothendieck ", + )) + tk.MustExec("commit") + + // Check no key is written to table ID 0 + txn, err := store.Begin() + require.NoError(t, err) + start := tablecodec.EncodeTablePrefix(0) + end := tablecodec.EncodeTablePrefix(1) + iter, err := txn.Iter(start, end) + require.NoError(t, err) + + exist := false + for iter.Valid() { + require.Nil(t, iter.Next()) + exist = true + break + } + require.False(t, exist) +} + +func TestIssue32422(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + + tk.MustExec("create table t (id int, c int, index(id));") + tk.MustExec("insert into t values (3,3), (4,4), (5,5);") + tk.MustExec("alter table t cache;") + + var cacheUsed bool + for i := 0; i < 20; i++ { + tk.MustQuery("select id+1, c from t where c = 4;").Check(testkit.Rows("5 4")) + if tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache { + cacheUsed = true + break + } + time.Sleep(50 * time.Millisecond) + } + require.True(t, cacheUsed) + + tk.MustQuery("select id+1, c from t where c = 4;").Check(testkit.Rows("5 4")) + + // Some extra tests. + // Since cached table use UnionScanExec utilities, check what happens when they work together. + // In these cases, the cache data serve as the snapshot, tikv is skipped, and txn membuffer works the same way. + tk.MustExec("begin") + tk.MustQuery("select id+1, c from t where c = 4;").Check(testkit.Rows("5 4")) + tk.MustExec("insert into t values (6, 6)") + // Check for the new added data. + tk.HasPlan("select id+1, c from t where c = 6;", "UnionScan") + tk.MustQuery("select id+1, c from t where c = 6;").Check(testkit.Rows("7 6")) + require.True(t, tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache) + // Check for the old data. + tk.MustQuery("select id+1, c from t where c = 4;").Check(testkit.Rows("5 4")) + require.True(t, tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache) + + // Point get + tk.HasPlan("select id+1, c from t where id = 6", "PointGet") + tk.MustQuery("select id+1, c from t where id = 6").Check(testkit.Rows("7 6")) + require.True(t, tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache) + tk.MustQuery("select id+1, c from t where id = 4").Check(testkit.Rows("5 4")) + require.True(t, tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache) + + // Index Lookup + tk.HasPlan("select id+1, c from t where id = 6", "IndexLookUp") + tk.MustQuery("select id+1, c from t use index(id) where id = 6").Check(testkit.Rows("7 6")) + require.True(t, tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache) + tk.MustQuery("select id+1, c from t use index(id) where id = 4").Check(testkit.Rows("5 4")) + require.True(t, tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache) + + // Index Reader + tk.HasPlan("select id from t where id = 6", "IndexReader") + tk.MustQuery("select id from t use index(id) where id = 6").Check(testkit.Rows("6")) + require.True(t, tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache) + tk.MustQuery("select id from t use index(id) where id = 4").Check(testkit.Rows("4")) + require.True(t, tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache) + + tk.MustExec("rollback") +} + func BenchmarkUnionScanRead(b *testing.B) { store, clean := testkit.CreateMockStore(b) defer clean() diff --git a/executor/update.go b/executor/update.go index 7173897757fc2..ed5c76f44c278 100644 --- a/executor/update.go +++ b/executor/update.go @@ -96,7 +96,7 @@ func (e *UpdateExec) prepare(row []types.Datum) (err error) { break } } - if e.unmatchedOuterRow(content, row) { + if unmatchedOuterRow(content, row) { updatable = false } e.tableUpdatable = append(e.tableUpdatable, updatable) @@ -211,7 +211,7 @@ func (e *UpdateExec) exec(ctx context.Context, schema *expression.Schema, row, n // the inner handle field is filled with a NULL value. // // This fixes: https://github.com/pingcap/tidb/issues/7176. -func (e *UpdateExec) unmatchedOuterRow(tblPos plannercore.TblColPosInfo, waitUpdateRow []types.Datum) bool { +func unmatchedOuterRow(tblPos plannercore.TblColPosInfo, waitUpdateRow []types.Datum) bool { firstHandleIdx := tblPos.HandleCols.GetCol(0) return waitUpdateRow[firstHandleIdx.Index].IsNull() } diff --git a/executor/write_test.go b/executor/write_test.go index 441cf3359c3af..8ef2c1568393b 100644 --- a/executor/write_test.go +++ b/executor/write_test.go @@ -301,16 +301,16 @@ func TestInsert(t *testing.T) { tk.MustExec("create view v as select * from t") _, err = tk.Exec("insert into v values(1,2)") - require.EqualError(t, err, "insert into view v is not supported now.") + require.EqualError(t, err, "insert into view v is not supported now") _, err = tk.Exec("replace into v values(1,2)") - require.EqualError(t, err, "replace into view v is not supported now.") + require.EqualError(t, err, "replace into view v is not supported now") tk.MustExec("drop view v") tk.MustExec("create sequence seq") _, err = tk.Exec("insert into seq values()") - require.EqualError(t, err, "insert into sequence seq is not supported now.") + require.EqualError(t, err, "insert into sequence seq is not supported now") _, err = tk.Exec("replace into seq values()") - require.EqualError(t, err, "replace into sequence seq is not supported now.") + require.EqualError(t, err, "replace into sequence seq is not supported now") tk.MustExec("drop sequence seq") // issue 22851 @@ -1729,7 +1729,7 @@ func TestDelete(t *testing.T) { tk.MustExec("create sequence seq") _, err = tk.Exec("delete from seq") - require.EqualError(t, err, "delete sequence seq is not supported now.") + require.EqualError(t, err, "delete sequence seq is not supported now") tk.MustExec("drop sequence seq") } diff --git a/expression/aggregation/concat.go b/expression/aggregation/concat.go index 21b3e0d787954..a5f6ae8f0468e 100644 --- a/expression/aggregation/concat.go +++ b/expression/aggregation/concat.go @@ -52,7 +52,7 @@ func (cf *concatFunction) initSeparator(sc *stmtctx.StatementContext, row chunk. return err } if sepDatum.IsNull() { - return errors.Errorf("Invalid separator argument.") + return errors.Errorf("Invalid separator argument") } cf.separator, err = sepDatum.ToString() return err diff --git a/expression/aggregation/main_test.go b/expression/aggregation/main_test.go index 53126014ead5b..40ea88a12c516 100644 --- a/expression/aggregation/main_test.go +++ b/expression/aggregation/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/expression/builtin_arithmetic.go b/expression/builtin_arithmetic.go index 681cf34a84c0a..7291889a24812 100644 --- a/expression/builtin_arithmetic.go +++ b/expression/builtin_arithmetic.go @@ -90,11 +90,6 @@ func numericContextResultType(ft *types.FieldType) types.EvalType { // type according to the two input parameter's types. func setFlenDecimal4RealOrDecimal(ctx sessionctx.Context, retTp *types.FieldType, arg0, arg1 Expression, isReal bool, isMultiply bool) { a, b := arg0.GetType(), arg1.GetType() - if MaybeOverOptimized4PlanCache(ctx, []Expression{arg0, arg1}) { - // set length and decimal to unspecified if arguments depend on parameters - retTp.Flen, retTp.Decimal = types.UnspecifiedLength, types.UnspecifiedLength - return - } if a.Decimal != types.UnspecifiedLength && b.Decimal != types.UnspecifiedLength { retTp.Decimal = a.Decimal + b.Decimal if !isMultiply { diff --git a/expression/builtin_encryption_vec.go b/expression/builtin_encryption_vec.go index 4433463429127..1c2124b8c3001 100644 --- a/expression/builtin_encryption_vec.go +++ b/expression/builtin_encryption_vec.go @@ -567,6 +567,7 @@ func (b *builtinCompressSig) vecEvalString(input *chunk.Chunk, result *chunk.Col // According to doc: Empty strings are stored as empty strings. if len(strBytes) == 0 { result.AppendString("") + continue } compressed, err := deflate(strBytes) diff --git a/expression/builtin_other.go b/expression/builtin_other.go index e4a0a57028084..9ffd17b96b7d6 100644 --- a/expression/builtin_other.go +++ b/expression/builtin_other.go @@ -85,7 +85,8 @@ type inFunctionClass struct { } func (c *inFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) (sig builtinFunc, err error) { - if err := c.verifyArgs(args); err != nil { + args, err = c.verifyArgs(ctx, args) + if err != nil { return nil, err } argTps := make([]types.EvalType, len(args)) @@ -156,6 +157,27 @@ func (c *inFunctionClass) getFunction(ctx sessionctx.Context, args []Expression) return sig, nil } +func (c *inFunctionClass) verifyArgs(ctx sessionctx.Context, args []Expression) ([]Expression, error) { + columnType := args[0].GetType() + validatedArgs := make([]Expression, 0, len(args)) + for _, arg := range args { + if constant, ok := arg.(*Constant); ok { + switch { + case columnType.Tp == mysql.TypeBit && constant.Value.Kind() == types.KindInt64: + if constant.Value.GetInt64() < 0 { + if MaybeOverOptimized4PlanCache(ctx, args) { + ctx.GetSessionVars().StmtCtx.SkipPlanCache = true + } + continue + } + } + } + validatedArgs = append(validatedArgs, arg) + } + err := c.baseFunctionClass.verifyArgs(validatedArgs) + return validatedArgs, err +} + // nolint:structcheck type baseInSig struct { baseBuiltinFunc diff --git a/expression/builtin_string.go b/expression/builtin_string.go index 4fe2821322447..a3b6824fdebc4 100644 --- a/expression/builtin_string.go +++ b/expression/builtin_string.go @@ -679,9 +679,6 @@ func (b *builtinRepeatSig) evalString(row chunk.Row) (d string, isNull bool, err return "", true, handleAllowedPacketOverflowed(b.ctx, "repeat", b.maxAllowedPacket) } - if int64(byteLength) > int64(b.tp.Flen)/num { - return "", true, nil - } return strings.Repeat(str, int(num)), false, nil } diff --git a/expression/builtin_string_test.go b/expression/builtin_string_test.go index b2e4fde64fcf0..e45e92b2e3b0b 100644 --- a/expression/builtin_string_test.go +++ b/expression/builtin_string_test.go @@ -507,7 +507,7 @@ func TestRepeat(t *testing.T) { require.NoError(t, err) v, err = evalBuiltinFunc(f, chunk.Row{}) require.NoError(t, err) - require.True(t, v.IsNull()) + require.False(t, v.IsNull()) args = []interface{}{"a", uint64(16777216)} f, err = fc.getFunction(ctx, datumsToConstants(types.MakeDatums(args...))) diff --git a/expression/builtin_time.go b/expression/builtin_time.go index e00fc36025cb9..d9cdcb9504e4b 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -2419,10 +2419,10 @@ func (b *builtinUTCTimestampWithArgSig) evalTime(row chunk.Row) (types.Time, boo } if !isNull && num > int64(types.MaxFsp) { - return types.ZeroTime, true, errors.Errorf("Too-big precision %v specified for 'utc_timestamp'. Maximum is %v.", num, types.MaxFsp) + return types.ZeroTime, true, errors.Errorf("Too-big precision %v specified for 'utc_timestamp'. Maximum is %v", num, types.MaxFsp) } if !isNull && num < int64(types.MinFsp) { - return types.ZeroTime, true, errors.Errorf("Invalid negative %d specified, must in [0, 6].", num) + return types.ZeroTime, true, errors.Errorf("Invalid negative %d specified, must in [0, 6]", num) } result, isNull, err := evalUTCTimestampWithFsp(b.ctx, int(num)) @@ -2543,9 +2543,9 @@ func (b *builtinNowWithArgSig) evalTime(row chunk.Row) (types.Time, bool, error) if isNull { fsp = 0 } else if fsp > int64(types.MaxFsp) { - return types.ZeroTime, true, errors.Errorf("Too-big precision %v specified for 'now'. Maximum is %v.", fsp, types.MaxFsp) + return types.ZeroTime, true, errors.Errorf("Too-big precision %v specified for 'now'. Maximum is %v", fsp, types.MaxFsp) } else if fsp < int64(types.MinFsp) { - return types.ZeroTime, true, errors.Errorf("Invalid negative %d specified, must in [0, 6].", fsp) + return types.ZeroTime, true, errors.Errorf("Invalid negative %d specified, must in [0, 6]", fsp) } result, isNull, err := evalNowWithFsp(b.ctx, int(fsp)) @@ -5391,21 +5391,16 @@ func strDatetimeSubDuration(sc *stmtctx.StatementContext, d string, arg1 types.D sc.AppendWarning(err) return "", true, nil } - arg1time, err := arg1.ConvertToTime(sc, uint8(types.GetFsp(arg1.String()))) + resultTime, err := arg0.Add(sc, arg1.Neg()) if err != nil { return "", false, err } - tmpDuration := arg0.Sub(sc, &arg1time) fsp := types.MaxFsp - if tmpDuration.MicroSecond() == 0 { + if resultTime.Microsecond() == 0 { fsp = types.MinFsp } - resultDuration, err := tmpDuration.ConvertToTime(sc, mysql.TypeDatetime) - if err != nil { - return "", false, err - } - resultDuration.SetFsp(fsp) - return resultDuration.String(), false, nil + resultTime.SetFsp(fsp) + return resultTime.String(), false, nil } // strDurationSubDuration subtracts duration from duration string, returns a string value. @@ -6476,12 +6471,7 @@ func (b *builtinSubDatetimeAndDurationSig) evalTime(row chunk.Row) (types.Time, return types.ZeroDatetime, isNull, err } sc := b.ctx.GetSessionVars().StmtCtx - arg1time, err := arg1.ConvertToTime(sc, mysql.TypeDatetime) - if err != nil { - return arg1time, true, err - } - tmpDuration := arg0.Sub(sc, &arg1time) - result, err := tmpDuration.ConvertToTime(sc, arg0.Type()) + result, err := arg0.Add(sc, arg1.Neg()) return result, err != nil, err } @@ -6521,12 +6511,7 @@ func (b *builtinSubDatetimeAndStringSig) evalTime(row chunk.Row) (types.Time, bo } return types.ZeroDatetime, true, err } - arg1time, err := arg1.ConvertToTime(sc, mysql.TypeDatetime) - if err != nil { - return types.ZeroDatetime, true, err - } - tmpDuration := arg0.Sub(sc, &arg1time) - result, err := tmpDuration.ConvertToTime(sc, mysql.TypeDatetime) + result, err := arg0.Add(sc, arg1.Neg()) return result, err != nil, err } @@ -7168,10 +7153,10 @@ func (b *builtinUTCTimeWithArgSig) evalDuration(row chunk.Row) (types.Duration, return types.Duration{}, isNull, err } if fsp > int64(types.MaxFsp) { - return types.Duration{}, true, errors.Errorf("Too-big precision %v specified for 'utc_time'. Maximum is %v.", fsp, types.MaxFsp) + return types.Duration{}, true, errors.Errorf("Too-big precision %v specified for 'utc_time'. Maximum is %v", fsp, types.MaxFsp) } if fsp < int64(types.MinFsp) { - return types.Duration{}, true, errors.Errorf("Invalid negative %d specified, must in [0, 6].", fsp) + return types.Duration{}, true, errors.Errorf("Invalid negative %d specified, must in [0, 6]", fsp) } nowTs, err := getStmtTimestamp(b.ctx) if err != nil { @@ -7432,9 +7417,9 @@ func getFspByIntArg(ctx sessionctx.Context, exps []Expression) (int, error) { return 0, err } if fsp > int64(types.MaxFsp) { - return 0, errors.Errorf("Too-big precision %v specified for 'curtime'. Maximum is %v.", fsp, types.MaxFsp) + return 0, errors.Errorf("Too-big precision %v specified for 'curtime'. Maximum is %v", fsp, types.MaxFsp) } else if fsp < int64(types.MinFsp) { - return 0, errors.Errorf("Invalid negative %d specified, must in [0, 6].", fsp) + return 0, errors.Errorf("Invalid negative %d specified, must in [0, 6]", fsp) } return int(fsp), nil } diff --git a/expression/builtin_time_test.go b/expression/builtin_time_test.go index 26e2e82c31e89..4d9c610400565 100644 --- a/expression/builtin_time_test.go +++ b/expression/builtin_time_test.go @@ -1036,6 +1036,8 @@ func TestSubTimeSig(t *testing.T) { {"110:00:00", "1 02:00:00", "84:00:00"}, {"2017-01-01 01:01:01.11", "01:01:01.11111", "2016-12-31 23:59:59.998890"}, {"2007-12-31 23:59:59.999999", "1 1:1:1.000002", "2007-12-30 22:58:58.999997"}, + {"1000-01-01 01:00:00.000000", "00:00:00.000001", "1000-01-01 00:59:59.999999"}, + {"1000-01-01 01:00:00.000001", "00:00:00.000001", "1000-01-01 01:00:00"}, {"1", "xxcvadfgasd", ""}, {"xxcvadfgasd", "1", ""}, } @@ -1614,6 +1616,7 @@ func TestTimeDiff(t *testing.T) { {[]interface{}{"10:10:10", "10:9:0"}, "00:01:10", false, 0, 10, false}, {[]interface{}{"2016-12-00 12:00:00", "10:9:0"}, "", true, 0, 10, false}, {[]interface{}{"2016-12-00 12:00:00", ""}, "", true, 0, 10, true}, + {[]interface{}{"00:00:00.000000", "00:00:00.000001"}, "-00:00:00.000001", false, 6, 17, false}, } for _, c := range tests { diff --git a/expression/builtin_time_vec.go b/expression/builtin_time_vec.go index 2afcb67059113..47ede27eea6ee 100644 --- a/expression/builtin_time_vec.go +++ b/expression/builtin_time_vec.go @@ -416,10 +416,10 @@ func (b *builtinUTCTimeWithArgSig) vecEvalDuration(input *chunk.Chunk, result *c } fsp := i64s[i] if fsp > int64(types.MaxFsp) { - return errors.Errorf("Too-big precision %v specified for 'utc_time'. Maximum is %v.", fsp, types.MaxFsp) + return errors.Errorf("Too-big precision %v specified for 'utc_time'. Maximum is %v", fsp, types.MaxFsp) } if fsp < int64(types.MinFsp) { - return errors.Errorf("Invalid negative %d specified, must in [0, 6].", fsp) + return errors.Errorf("Invalid negative %d specified, must in [0, 6]", fsp) } res, err := types.ParseDuration(stmtCtx, utc, int(fsp)) if err != nil { @@ -557,10 +557,10 @@ func (b *builtinNowWithArgSig) vecEvalTime(input *chunk.Chunk, result *chunk.Col fsp := 0 if !bufFsp.IsNull(i) { if fsps[i] > int64(types.MaxFsp) { - return errors.Errorf("Too-big precision %v specified for 'now'. Maximum is %v.", fsps[i], types.MaxFsp) + return errors.Errorf("Too-big precision %v specified for 'now'. Maximum is %v", fsps[i], types.MaxFsp) } if fsps[i] < int64(types.MinFsp) { - return errors.Errorf("Invalid negative %d specified, must in [0, 6].", fsps[i]) + return errors.Errorf("Invalid negative %d specified, must in [0, 6]", fsps[i]) } fsp = int(fsps[i]) } @@ -1417,10 +1417,10 @@ func (b *builtinUTCTimestampWithArgSig) vecEvalTime(input *chunk.Chunk, result * } fsp := i64s[i] if fsp > int64(types.MaxFsp) { - return errors.Errorf("Too-big precision %v specified for 'utc_timestamp'. Maximum is %v.", fsp, types.MaxFsp) + return errors.Errorf("Too-big precision %v specified for 'utc_timestamp'. Maximum is %v", fsp, types.MaxFsp) } if fsp < int64(types.MinFsp) { - return errors.Errorf("Invalid negative %d specified, must in [0, 6].", fsp) + return errors.Errorf("Invalid negative %d specified, must in [0, 6]", fsp) } res, isNull, err := evalUTCTimestampWithFsp(b.ctx, int(fsp)) if err != nil { diff --git a/expression/builtin_time_vec_generated.go b/expression/builtin_time_vec_generated.go index 4081890fb23c3..87a89e8208cc6 100644 --- a/expression/builtin_time_vec_generated.go +++ b/expression/builtin_time_vec_generated.go @@ -677,12 +677,7 @@ func (b *builtinSubDatetimeAndDurationSig) vecEvalTime(input *chunk.Chunk, resul sc := b.ctx.GetSessionVars().StmtCtx arg1Duration := types.Duration{Duration: arg1, Fsp: -1} - arg1time, err := arg1Duration.ConvertToTime(sc, mysql.TypeDatetime) - if err != nil { - return err - } - tmpDuration := arg0.Sub(sc, &arg1time) - output, err := tmpDuration.ConvertToTime(sc, arg0.Type()) + output, err := arg0.Add(sc, arg1Duration.Neg()) if err != nil { return err @@ -751,12 +746,7 @@ func (b *builtinSubDatetimeAndStringSig) vecEvalTime(input *chunk.Chunk, result } return err } - arg1time, err := arg1Duration.ConvertToTime(sc, mysql.TypeDatetime) - if err != nil { - return err - } - tmpDuration := arg0.Sub(sc, &arg1time) - output, err := tmpDuration.ConvertToTime(sc, mysql.TypeDatetime) + output, err := arg0.Add(sc, arg1Duration.Neg()) if err != nil { return err diff --git a/expression/column.go b/expression/column.go index 9eda8d9e11089..b30b067fa55f7 100644 --- a/expression/column.go +++ b/expression/column.go @@ -224,6 +224,8 @@ type Column struct { InOperand bool collationInfo + + CorrelatedColUniqueID int64 } // Equal implements Expression interface. diff --git a/expression/constant.go b/expression/constant.go index 7cb44b17675cc..e77bd5aea39a0 100644 --- a/expression/constant.go +++ b/expression/constant.go @@ -32,6 +32,8 @@ import ( func NewOne() *Constant { retT := types.NewFieldType(mysql.TypeTiny) retT.Flag |= mysql.UnsignedFlag // shrink range to avoid integral promotion + retT.Flen = 1 + retT.Decimal = 0 return &Constant{ Value: types.NewDatum(1), RetType: retT, @@ -42,6 +44,8 @@ func NewOne() *Constant { func NewZero() *Constant { retT := types.NewFieldType(mysql.TypeTiny) retT.Flag |= mysql.UnsignedFlag // shrink range to avoid integral promotion + retT.Flen = 1 + retT.Decimal = 0 return &Constant{ Value: types.NewDatum(0), RetType: retT, @@ -50,9 +54,12 @@ func NewZero() *Constant { // NewNull stands for null constant. func NewNull() *Constant { + retT := types.NewFieldType(mysql.TypeTiny) + retT.Flen = 1 + retT.Decimal = 0 return &Constant{ Value: types.NewDatum(nil), - RetType: types.NewFieldType(mysql.TypeTiny), + RetType: retT, } } diff --git a/expression/constant_test.go b/expression/constant_test.go index 3b01be365121a..37181483e6e79 100644 --- a/expression/constant_test.go +++ b/expression/constant_test.go @@ -488,3 +488,23 @@ func TestGetTypeThreadSafe(t *testing.T) { ft2 := con.GetType() require.NotSame(t, ft1, ft2) } + +func TestSpecificConstant(t *testing.T) { + one := NewOne() + require.Equal(t, one.Value, types.NewDatum(1)) + require.Equal(t, one.RetType.Tp, mysql.TypeTiny) + require.Equal(t, one.RetType.Flen, 1) + require.Equal(t, one.RetType.Decimal, 0) + + zero := NewZero() + require.Equal(t, zero.Value, types.NewDatum(0)) + require.Equal(t, zero.RetType.Tp, mysql.TypeTiny) + require.Equal(t, zero.RetType.Flen, 1) + require.Equal(t, zero.RetType.Decimal, 0) + + null := NewNull() + require.Equal(t, null.Value, types.NewDatum(nil)) + require.Equal(t, null.RetType.Tp, mysql.TypeTiny) + require.Equal(t, null.RetType.Flen, 1) + require.Equal(t, null.RetType.Decimal, 0) +} diff --git a/expression/distsql_builtin.go b/expression/distsql_builtin.go index 8d2c2ad4d7826..5f344cbad8478 100644 --- a/expression/distsql_builtin.go +++ b/expression/distsql_builtin.go @@ -668,10 +668,10 @@ func getSignatureByPB(ctx sessionctx.Context, sigCode tipb.ScalarFuncSig, tp *ti f = &builtinUUIDSig{base} case tipb.ScalarFuncSig_LikeSig: f = &builtinLikeSig{base, nil, false, sync.Once{}} - // case tipb.ScalarFuncSig_RegexpSig: - // f = &builtinRegexpSig{base} - // case tipb.ScalarFuncSig_RegexpUTF8Sig: - // f = &builtinRegexpUTF8Sig{base} + case tipb.ScalarFuncSig_RegexpSig: + f = newBuiltinRegexpSig(base) + case tipb.ScalarFuncSig_RegexpUTF8Sig: + f = newBuiltinRegexpUTF8Sig(base) case tipb.ScalarFuncSig_JsonExtractSig: f = &builtinJSONExtractSig{base} case tipb.ScalarFuncSig_JsonUnquoteSig: diff --git a/expression/distsql_builtin_test.go b/expression/distsql_builtin_test.go index 26f47169e9098..7cb7cc972b029 100644 --- a/expression/distsql_builtin_test.go +++ b/expression/distsql_builtin_test.go @@ -847,6 +847,28 @@ func TestPBToExprWithNewCollation(t *testing.T) { } } +// Test convert various scalar functions. +func TestPBToScalarFuncExpr(t *testing.T) { + sc := new(stmtctx.StatementContext) + fieldTps := make([]*types.FieldType, 1) + exprs := []*tipb.Expr{ + { + Tp: tipb.ExprType_ScalarFunc, + Sig: tipb.ScalarFuncSig_RegexpSig, + FieldType: ToPBFieldType(newStringFieldType()), + }, + { + Tp: tipb.ExprType_ScalarFunc, + Sig: tipb.ScalarFuncSig_RegexpUTF8Sig, + FieldType: ToPBFieldType(newStringFieldType()), + }, + } + for _, expr := range exprs { + _, err := PBToExpr(expr, fieldTps, sc) + require.NoError(t, err) + } +} + func datumExpr(t *testing.T, d types.Datum) *tipb.Expr { expr := new(tipb.Expr) switch d.Kind() { diff --git a/expression/expr_to_pb.go b/expression/expr_to_pb.go index 436a87ff90c1d..db89438a7febe 100644 --- a/expression/expr_to_pb.go +++ b/expression/expr_to_pb.go @@ -20,6 +20,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/mysql" + ast "github.com/pingcap/tidb/parser/types" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" @@ -182,6 +183,10 @@ func (pc PbConverter) columnToPBExpr(column *Column) *tipb.Expr { return nil } switch column.GetType().Tp { + case mysql.TypeBit: + if !IsPushDownEnabled(ast.TypeStr(column.GetType().Tp), kv.TiKV) { + return nil + } case mysql.TypeSet, mysql.TypeGeometry, mysql.TypeUnspecified: return nil case mysql.TypeEnum: diff --git a/expression/expr_to_pb_test.go b/expression/expr_to_pb_test.go index a0e05f48fc919..3c4dc9afa5f23 100644 --- a/expression/expr_to_pb_test.go +++ b/expression/expr_to_pb_test.go @@ -1035,6 +1035,74 @@ func TestExprPushDownToFlash(t *testing.T) { require.NoError(t, err) exprs = append(exprs, function) + // greatest + function, err = NewFunction(mock.NewContext(), ast.Greatest, types.NewFieldType(mysql.TypeLonglong), int32Column, intColumn) + require.NoError(t, err) + exprs = append(exprs, function) + + function, err = NewFunction(mock.NewContext(), ast.Greatest, types.NewFieldType(mysql.TypeDouble), float32Column, intColumn) + require.NoError(t, err) + exprs = append(exprs, function) + + // least + function, err = NewFunction(mock.NewContext(), ast.Least, types.NewFieldType(mysql.TypeLonglong), int32Column, intColumn) + require.NoError(t, err) + exprs = append(exprs, function) + + function, err = NewFunction(mock.NewContext(), ast.Least, types.NewFieldType(mysql.TypeDouble), float32Column, intColumn) + require.NoError(t, err) + exprs = append(exprs, function) + // is true + function, err = NewFunction(mock.NewContext(), ast.IsTruthWithoutNull, types.NewFieldType(mysql.TypeLonglong), int32Column) + require.NoError(t, err) + exprs = append(exprs, function) + function, err = NewFunction(mock.NewContext(), ast.IsTruthWithoutNull, types.NewFieldType(mysql.TypeLonglong), float32Column) + require.NoError(t, err) + exprs = append(exprs, function) + function, err = NewFunction(mock.NewContext(), ast.IsTruthWithoutNull, types.NewFieldType(mysql.TypeLonglong), decimalColumn) + require.NoError(t, err) + exprs = append(exprs, function) + // is true with null + function, err = NewFunction(mock.NewContext(), ast.IsTruthWithNull, types.NewFieldType(mysql.TypeLonglong), int32Column) + require.NoError(t, err) + exprs = append(exprs, function) + function, err = NewFunction(mock.NewContext(), ast.IsTruthWithNull, types.NewFieldType(mysql.TypeLonglong), float32Column) + require.NoError(t, err) + exprs = append(exprs, function) + function, err = NewFunction(mock.NewContext(), ast.IsTruthWithNull, types.NewFieldType(mysql.TypeLonglong), decimalColumn) + require.NoError(t, err) + exprs = append(exprs, function) + // is false, note seems there is actually no is_false_with_null, so unable to add ut for it + function, err = NewFunction(mock.NewContext(), ast.IsFalsity, types.NewFieldType(mysql.TypeLonglong), int32Column) + require.NoError(t, err) + exprs = append(exprs, function) + function, err = NewFunction(mock.NewContext(), ast.IsFalsity, types.NewFieldType(mysql.TypeLonglong), float32Column) + require.NoError(t, err) + exprs = append(exprs, function) + function, err = NewFunction(mock.NewContext(), ast.IsFalsity, types.NewFieldType(mysql.TypeLonglong), decimalColumn) + require.NoError(t, err) + exprs = append(exprs, function) + + // DayOfWeek + function, err = NewFunction(mock.NewContext(), ast.DayOfWeek, types.NewFieldType(mysql.TypeDatetime), datetimeColumn) + require.NoError(t, err) + exprs = append(exprs, function) + + // DayOfMonth + function, err = NewFunction(mock.NewContext(), ast.DayOfMonth, types.NewFieldType(mysql.TypeDatetime), datetimeColumn) + require.NoError(t, err) + exprs = append(exprs, function) + + // DayOfYear + function, err = NewFunction(mock.NewContext(), ast.DayOfYear, types.NewFieldType(mysql.TypeDatetime), datetimeColumn) + require.NoError(t, err) + exprs = append(exprs, function) + + // LastDay + function, err = NewFunction(mock.NewContext(), ast.LastDay, types.NewFieldType(mysql.TypeDatetime), datetimeColumn) + require.NoError(t, err) + exprs = append(exprs, function) + pushed, remained = PushDownExprs(sc, exprs, client, kv.TiFlash) require.Len(t, pushed, len(exprs)) require.Len(t, remained, 0) @@ -1173,16 +1241,6 @@ func TestExprPushDownToTiKV(t *testing.T) { retType: types.NewFieldType(mysql.TypeString), args: []Expression{stringColumn}, }, - { - functionName: ast.Right, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn, intColumn}, - }, - { - functionName: ast.Left, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn, intColumn}, - }, { functionName: ast.Sin, retType: types.NewFieldType(mysql.TypeDouble), @@ -1203,11 +1261,6 @@ func TestExprPushDownToTiKV(t *testing.T) { retType: types.NewFieldType(mysql.TypeDouble), args: []Expression{intColumn}, }, - { - functionName: ast.Tan, - retType: types.NewFieldType(mysql.TypeDouble), - args: []Expression{intColumn}, - }, { functionName: ast.Atan, retType: types.NewFieldType(mysql.TypeDouble), @@ -1268,86 +1321,6 @@ func TestExprPushDownToTiKV(t *testing.T) { // retType: types.NewFieldType(mysql.TypeDouble), // args: []Expression{intColumn, intColumn}, //}, - { - functionName: ast.Bin, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{intColumn}, - }, - { - functionName: ast.Unhex, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn}, - }, - { - functionName: ast.Locate, - retType: types.NewFieldType(mysql.TypeInt24), - args: []Expression{stringColumn, stringColumn}, - }, - { - functionName: ast.Ord, - retType: types.NewFieldType(mysql.TypeInt24), - args: []Expression{stringColumn}, - }, - { - functionName: ast.Lpad, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn, intColumn, stringColumn}, - }, - { - functionName: ast.Rpad, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn, intColumn, stringColumn}, - }, - { - functionName: ast.Trim, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn}, - }, - { - functionName: ast.FromBase64, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn}, - }, - { - functionName: ast.ToBase64, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn}, - }, - { - functionName: ast.MakeSet, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{intColumn, stringColumn}, - }, - { - functionName: ast.SubstringIndex, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn, stringColumn, intColumn}, - }, - { - functionName: ast.Instr, - retType: types.NewFieldType(mysql.TypeInt24), - args: []Expression{stringColumn, stringColumn}, - }, - { - functionName: ast.Quote, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn}, - }, - { - functionName: ast.Oct, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{intColumn}, - }, - { - functionName: ast.FindInSet, - retType: types.NewFieldType(mysql.TypeInt24), - args: []Expression{stringColumn, stringColumn}, - }, - { - functionName: ast.Repeat, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn, intColumn}, - }, { functionName: ast.Date, retType: types.NewFieldType(mysql.TypeDate), @@ -1358,11 +1331,6 @@ func TestExprPushDownToTiKV(t *testing.T) { retType: types.NewFieldType(mysql.TypeDate), args: []Expression{dateColumn}, }, - { - functionName: ast.YearWeek, - retType: types.NewFieldType(mysql.TypeDate), - args: []Expression{dateColumn}, - }, { functionName: ast.ToSeconds, retType: types.NewFieldType(mysql.TypeDate), @@ -1373,31 +1341,6 @@ func TestExprPushDownToTiKV(t *testing.T) { retType: types.NewFieldType(mysql.TypeDate), args: []Expression{dateColumn, dateColumn}, }, - { - functionName: ast.Lower, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn}, - }, - { - functionName: ast.InsertFunc, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn, intColumn, intColumn, stringColumn}, - }, - { - functionName: ast.Greatest, - retType: types.NewFieldType(mysql.TypeInt24), - args: []Expression{intColumn, intColumn}, - }, - { - functionName: ast.Least, - retType: types.NewFieldType(mysql.TypeInt24), - args: []Expression{intColumn, intColumn}, - }, - { - functionName: ast.Upper, - retType: types.NewFieldType(mysql.TypeString), - args: []Expression{stringColumn}, - }, { functionName: ast.Mod, retType: types.NewFieldType(mysql.TypeInt24), @@ -1420,7 +1363,7 @@ func TestExprOnlyPushDownToTiKV(t *testing.T) { sc := new(stmtctx.StatementContext) client := new(mock.Client) - function, err := NewFunction(mock.NewContext(), "dayofyear", types.NewFieldType(mysql.TypeLonglong), genColumn(mysql.TypeDatetime, 1)) + function, err := NewFunction(mock.NewContext(), "weekofyear", types.NewFieldType(mysql.TypeLonglong), genColumn(mysql.TypeDatetime, 1)) require.NoError(t, err) var exprs = make([]Expression, 0) exprs = append(exprs, function) diff --git a/expression/expression.go b/expression/expression.go index 92583380aa723..91994b9c6687c 100644 --- a/expression/expression.go +++ b/expression/expression.go @@ -950,7 +950,7 @@ func scalarExprSupportedByTiKV(sf *ScalarFunction) bool { // compare functions. ast.LT, ast.LE, ast.EQ, ast.NE, ast.GE, ast.GT, ast.NullEQ, ast.In, ast.IsNull, ast.Like, ast.IsTruthWithoutNull, ast.IsTruthWithNull, ast.IsFalsity, - ast.Greatest, ast.Least, /* ast.Interval */ + // ast.Greatest, ast.Least, ast.Interval // arithmetical functions. ast.PI, /* ast.Truncate */ @@ -961,21 +961,21 @@ func scalarExprSupportedByTiKV(sf *ScalarFunction) bool { // Rust use the llvm math functions, which have different precision with Golang/MySQL(cmath) // open the following switchers if we implement them in coprocessor via `cmath` - ast.Sin, ast.Asin, ast.Cos, ast.Acos, ast.Tan, ast.Atan, ast.Atan2, ast.Cot, + ast.Sin, ast.Asin, ast.Cos, ast.Acos /* ast.Tan */, ast.Atan, ast.Atan2, ast.Cot, ast.Radians, ast.Degrees, ast.Conv, ast.CRC32, // control flow functions. ast.Case, ast.If, ast.Ifnull, ast.Coalesce, // string functions. - ast.Bin, ast.Unhex, ast.Locate, ast.Ord, ast.Lpad, ast.Rpad, - ast.Trim, ast.FromBase64, ast.ToBase64, ast.Upper, ast.Lower, ast.InsertFunc, - ast.MakeSet, ast.SubstringIndex, ast.Instr, ast.Quote, ast.Oct, - ast.FindInSet, ast.Repeat, + // ast.Bin, ast.Unhex, ast.Locate, ast.Ord, ast.Lpad, ast.Rpad, + // ast.Trim, ast.FromBase64, ast.ToBase64, ast.Upper, ast.Lower, ast.InsertFunc, + // ast.MakeSet, ast.SubstringIndex, ast.Instr, ast.Quote, ast.Oct, + // ast.FindInSet, ast.Repeat, ast.Length, ast.BitLength, ast.Concat, ast.ConcatWS, ast.Replace, ast.ASCII, ast.Hex, ast.Reverse, ast.LTrim, ast.RTrim, ast.Strcmp, ast.Space, ast.Elt, ast.Field, InternalFuncFromBinary, InternalFuncToBinary, ast.Mid, ast.Substring, ast.Substr, ast.CharLength, - ast.Right, ast.Left, + ast.Right, /* ast.Left */ // json functions. ast.JSONType, ast.JSONExtract, ast.JSONObject, ast.JSONArray, ast.JSONMerge, ast.JSONSet, @@ -984,7 +984,7 @@ func scalarExprSupportedByTiKV(sf *ScalarFunction) bool { ast.JSONUnquote, // date functions. - ast.Date, ast.Week, ast.YearWeek, ast.ToSeconds, ast.DateDiff, + ast.Date, ast.Week /* ast.YearWeek */, ast.ToSeconds, ast.DateDiff, /* ast.TimeDiff, ast.AddTime, ast.SubTime, */ ast.MonthName, ast.MakeDate, ast.TimeToSec, ast.MakeTime, ast.DateFormat, @@ -1056,6 +1056,7 @@ func scalarExprSupportedByFlash(function *ScalarFunction) bool { ast.Concat, ast.ConcatWS, ast.Date, ast.Year, ast.Month, ast.Day, ast.Quarter, ast.DayName, ast.MonthName, ast.DateDiff, ast.TimestampDiff, ast.DateFormat, ast.FromUnixTime, + ast.DayOfWeek, ast.DayOfMonth, ast.DayOfYear, ast.LastDay, ast.Sqrt, ast.Log, ast.Log2, ast.Log10, ast.Ln, ast.Exp, ast.Pow, ast.Sign, ast.Radians, ast.Degrees, ast.Conv, ast.CRC32, @@ -1151,6 +1152,14 @@ func scalarExprSupportedByFlash(function *ScalarFunction) bool { return true case ast.Sysdate: return true + case ast.Least, ast.Greatest: + switch function.Function.PbCode() { + case tipb.ScalarFuncSig_GreatestInt, tipb.ScalarFuncSig_GreatestReal, + tipb.ScalarFuncSig_LeastInt, tipb.ScalarFuncSig_LeastReal: + return true + } + case ast.IsTruthWithNull, ast.IsTruthWithoutNull, ast.IsFalsity: + return true } return false } diff --git a/expression/function_traits.go b/expression/function_traits.go index 654e52a50bfab..ed0188b13f36a 100644 --- a/expression/function_traits.go +++ b/expression/function_traits.go @@ -49,6 +49,7 @@ var unFoldableFunctions = map[string]struct{}{ ast.NextVal: {}, ast.LastVal: {}, ast.SetVal: {}, + ast.AnyValue: {}, } // DisableFoldFunctions stores functions which prevent child scope functions from being constant folded. diff --git a/expression/generator/time_vec.go b/expression/generator/time_vec.go index 86a8f6703d8d8..5d18b9a4a17b4 100644 --- a/expression/generator/time_vec.go +++ b/expression/generator/time_vec.go @@ -175,12 +175,7 @@ func (b *{{.SigName}}) vecEval{{ .Output.TypeName }}(input *chunk.Chunk, result {{ else }} sc := b.ctx.GetSessionVars().StmtCtx arg1Duration := types.Duration{Duration: arg1, Fsp: -1} - arg1time, err := arg1Duration.ConvertToTime(sc, mysql.TypeDatetime) - if err != nil { - return err - } - tmpDuration := arg0.Sub(sc, &arg1time) - output, err := tmpDuration.ConvertToTime(sc, arg0.Type()) + output, err := arg0.Add(sc, arg1Duration.Neg()) {{ end }} if err != nil { return err @@ -205,12 +200,7 @@ func (b *{{.SigName}}) vecEval{{ .Output.TypeName }}(input *chunk.Chunk, result } return err } - arg1time, err := arg1Duration.ConvertToTime(sc, mysql.TypeDatetime) - if err != nil { - return err - } - tmpDuration := arg0.Sub(sc, &arg1time) - output, err := tmpDuration.ConvertToTime(sc, mysql.TypeDatetime) + output, err := arg0.Add(sc, arg1Duration.Neg()) {{ end }} if err != nil { return err diff --git a/expression/integration_serial_test.go b/expression/integration_serial_test.go index 9b6751e2f5893..a28db0ac0d16d 100644 --- a/expression/integration_serial_test.go +++ b/expression/integration_serial_test.go @@ -35,7 +35,6 @@ import ( "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/kvcache" - "github.com/pingcap/tidb/util/testutil" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/oracle" ) @@ -1138,49 +1137,49 @@ func TestClusteredIndexAndNewCollationIndexEncodeDecodeV5(t *testing.T) { tk.MustExec("insert into t values (1, '啊 ', '啊 ', '啊 ', '啊 ', '啊 ', '啊 ')") // Single Read. - tk.MustQuery("select * from t ").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - - tk.MustQuery("select * from t use index(a)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(ua)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(b)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(ub)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(c)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(uc)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(d)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(ud)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(e)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(ue)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(f)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(uf)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(g)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) - tk.MustQuery("select * from t use index(ug)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t ").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + + tk.MustQuery("select * from t use index(a)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(ua)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(b)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(ub)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(c)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(uc)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(d)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(ud)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(e)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(ue)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(f)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(uf)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(g)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) + tk.MustQuery("select * from t use index(ug)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ")) tk.MustExec("alter table t add column h varchar(10) collate utf8mb4_general_ci default '🐸'") tk.MustExec("alter table t add column i varchar(10) collate utf8mb4_general_ci default '🐸'") tk.MustExec("alter table t add index h(h)") tk.MustExec("alter table t add unique index uh(h)") - tk.MustQuery("select * from t use index(h)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(uh)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(h)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(uh)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) // Double read. - tk.MustQuery("select * from t use index(a)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(ua)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(b)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(ub)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(c)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(uc)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(d)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(ud)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(e)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) - tk.MustQuery("select * from t use index(ue)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(a)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(ua)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(b)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(ub)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(c)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(uc)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(d)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(ud)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(e)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) + tk.MustQuery("select * from t use index(ue)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸")) tk.MustExec("admin check table t") tk.MustExec("admin recover index t a") tk.MustExec("alter table t add column n char(10) COLLATE utf8mb4_unicode_ci") tk.MustExec("alter table t add index n(n)") tk.MustExec("update t set n = '吧';") - tk.MustQuery("select * from t").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸,吧")) - tk.MustQuery("select * from t use index(n)").Check(testutil.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸,吧")) + tk.MustQuery("select * from t").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸,吧")) + tk.MustQuery("select * from t use index(n)").Check(testkit.RowsWithSep(",", "1,啊,啊,啊 ,啊 ,啊,啊 ,🐸,🐸,吧")) tk.MustExec("admin check table t") tk.MustExec("drop table if exists t;") @@ -1847,7 +1846,7 @@ func TestTimeBuiltin(t *testing.T) { tk.MustExec(`insert into t select year("0000-00-00 00:00:00")`) tk.MustExec(`set sql_mode="NO_ZERO_DATE";`) // with zero date tk.MustExec(`insert into t select year("0000-00-00 00:00:00")`) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) tk.MustExec(`set sql_mode="NO_ZERO_DATE,STRICT_TRANS_TABLES";`) _, err = tk.Exec(`insert into t select year("0000-00-00 00:00:00");`) require.Error(t, err) @@ -1879,7 +1878,7 @@ func TestTimeBuiltin(t *testing.T) { tk.MustExec(`insert into t select month("0000-00-00 00:00:00")`) tk.MustExec(`set sql_mode="NO_ZERO_DATE";`) tk.MustExec(`insert into t select month("0000-00-00 00:00:00")`) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) tk.MustExec(`set sql_mode="NO_ZERO_DATE,STRICT_TRANS_TABLES";`) _, err = tk.Exec(`insert into t select month("0000-00-00 00:00:00");`) require.Error(t, err) @@ -2116,6 +2115,13 @@ func TestTimeBuiltin(t *testing.T) { tk.MustQuery("select subtime(cast('10:10:10' as time), cast('9:10:10' as time))").Check(testkit.Rows("01:00:00")) tk.MustQuery("select subtime('10:10:10', cast('9:10:10' as time))").Check(testkit.Rows("01:00:00")) + // SUBTIME issue #31868 + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a DATETIME(6))") + tk.MustExec(`insert into t values ("1000-01-01 01:00:00.000000"), ("1000-01-01 01:00:00.000001")`) + tk.MustQuery(`SELECT SUBTIME(a, '00:00:00.000001') FROM t ORDER BY a;`).Check(testkit.Rows("1000-01-01 00:59:59.999999", "1000-01-01 01:00:00.000000")) + tk.MustQuery(`SELECT SUBTIME(a, '10:00:00.000001') FROM t ORDER BY a;`).Check(testkit.Rows("0999-12-31 14:59:59.999999", "0999-12-31 15:00:00.000000")) + // ADDTIME & SUBTIME issue #5966 tk.MustExec("drop table if exists t") tk.MustExec("create table t(a datetime, b timestamp, c time, d date, e bit(1))") @@ -2136,34 +2142,34 @@ func TestTimeBuiltin(t *testing.T) { result = tk.MustQuery("select addtime(-32073, 0), addtime(0, -32073);") result.Check(testkit.Rows(" ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect time value: '-32073'", "Warning|1292|Truncated incorrect time value: '-32073'")) result = tk.MustQuery("select addtime(-32073, c), addtime(c, -32073) from t;") result.Check(testkit.Rows(" ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect time value: '-32073'", "Warning|1292|Truncated incorrect time value: '-32073'")) result = tk.MustQuery("select addtime(a, -32073), addtime(b, -32073), addtime(d, -32073) from t;") result.Check(testkit.Rows(" ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect time value: '-32073'", "Warning|1292|Truncated incorrect time value: '-32073'", "Warning|1292|Truncated incorrect time value: '-32073'")) result = tk.MustQuery("select subtime(-32073, 0), subtime(0, -32073);") result.Check(testkit.Rows(" ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect time value: '-32073'", "Warning|1292|Truncated incorrect time value: '-32073'")) result = tk.MustQuery("select subtime(-32073, c), subtime(c, -32073) from t;") result.Check(testkit.Rows(" ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect time value: '-32073'", "Warning|1292|Truncated incorrect time value: '-32073'")) result = tk.MustQuery("select subtime(a, -32073), subtime(b, -32073), subtime(d, -32073) from t;") result.Check(testkit.Rows(" ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect time value: '-32073'", "Warning|1292|Truncated incorrect time value: '-32073'", "Warning|1292|Truncated incorrect time value: '-32073'")) @@ -2303,11 +2309,11 @@ func TestTimeBuiltin(t *testing.T) { result.Check(testkit.Rows("Friday November 13 2015 10:20:19 AM 15")) result = tk.MustQuery(`SELECT DATE_FORMAT('0000-00-00', '%W %M %e %Y %r %y');`) result.Check(testkit.Rows("")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) result = tk.MustQuery(`SELECT DATE_FORMAT('0', '%W %M %e %Y %r %y'), DATE_FORMAT('0.0', '%W %M %e %Y %r %y'), DATE_FORMAT(0, 0);`) result.Check(testkit.Rows(" 0")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect time value: '0'", "Warning|1292|Incorrect datetime value: '0.0'")) result = tk.MustQuery(`SELECT DATE_FORMAT(0, '%W %M %e %Y %r %y'), DATE_FORMAT(0.0, '%W %M %e %Y %r %y');`) @@ -2355,7 +2361,7 @@ func TestTimeBuiltin(t *testing.T) { tk.MustExec(`update t set a = dayOfMonth("0000-00-00")`) tk.MustExec("set sql_mode = 'NO_ZERO_DATE';") tk.MustExec("insert into t value(dayOfMonth('0000-00-00'))") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) tk.MustExec(`update t set a = dayOfMonth("0000-00-00")`) tk.MustExec("set sql_mode = 'NO_ZERO_DATE,STRICT_TRANS_TABLES';") _, err = tk.Exec("insert into t value(dayOfMonth('0000-00-00'))") @@ -2444,7 +2450,7 @@ func TestTimeBuiltin(t *testing.T) { tk.MustExec(`update t set a = monthname("0000-00-00")`) tk.MustExec("set sql_mode = 'NO_ZERO_DATE'") tk.MustExec("insert into t value(monthname('0000-00-00'))") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) tk.MustExec(`update t set a = monthname("0000-00-00")`) tk.MustExec("set sql_mode = ''") tk.MustExec("insert into t value(monthname('0000-00-00'))") @@ -2455,7 +2461,7 @@ func TestTimeBuiltin(t *testing.T) { require.NoError(t, err) result = tk.MustQuery(`select monthname("2017-12-01"), monthname("0000-00-00"), monthname("0000-01-00"), monthname("0000-01-00 00:00:00")`) result.Check(testkit.Rows("December January January")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'")) // for dayname tk.MustExec(`drop table if exists t`) @@ -2471,7 +2477,7 @@ func TestTimeBuiltin(t *testing.T) { require.NoError(t, err) result = tk.MustQuery(`select dayname("2017-12-01"), dayname("0000-00-00"), dayname("0000-01-00"), dayname("0000-01-00 00:00:00")`) result.Check(testkit.Rows("Friday ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00.000000'", "Warning|1292|Incorrect datetime value: '0000-01-00 00:00:00.000000'", "Warning|1292|Incorrect datetime value: '0000-01-00 00:00:00.000000'")) @@ -2523,7 +2529,7 @@ func TestTimeBuiltin(t *testing.T) { // TODO: MySQL returns " ". result.Check(testkit.Rows("0000-00-01 ")) result = tk.MustQuery("show warnings") - result.Sort().Check(testutil.RowsWithSep("|", + result.Sort().Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '0000-00-00 00:00:00'", "Warning|1292|Truncated incorrect datetime value: '01-01-2017'")) @@ -2533,7 +2539,7 @@ func TestTimeBuiltin(t *testing.T) { result = tk.MustQuery("select str_to_date('2020-07-04 11:22:33 PM c', '%Y-%m-%d %r')") result.Check(testkit.Rows("2020-07-04 23:22:33")) result = tk.MustQuery("show warnings") - result.Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect datetime value: '2020-07-04 11:22:33 PM c'")) + result.Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect datetime value: '2020-07-04 11:22:33 PM c'")) result = tk.MustQuery("select str_to_date('11:22:33 PM', ' %r')") result.Check(testkit.Rows("23:22:33")) @@ -3736,8 +3742,8 @@ func TestSetVariables(t *testing.T) { tk.MustExec("set global tidb_enable_noop_functions=1") _, err = tk.Exec("set @@global.max_user_connections='';") - require.NoError(t, err) - //require.Error(t, err, variable.ErrWrongTypeForVar.GenWithStackByArgs("max_user_connections").Error()) + require.Error(t, err) + require.Error(t, err, variable.ErrWrongTypeForVar.GenWithStackByArgs("max_user_connections").Error()) _, err = tk.Exec("set @@global.max_prepared_stmt_count='';") require.Error(t, err) require.Error(t, err, variable.ErrWrongTypeForVar.GenWithStackByArgs("max_prepared_stmt_count").Error()) @@ -3803,6 +3809,7 @@ func TestPreparePlanCacheOnCachedTable(t *testing.T) { readFromTableCache = true break } + time.Sleep(50 * time.Millisecond) } require.True(t, readFromTableCache) // already read cache after reading first time diff --git a/expression/integration_test.go b/expression/integration_test.go index 7091f50818c4f..d7a7717e5b34f 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -38,7 +38,6 @@ import ( "github.com/pingcap/tidb/parser/terror" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" - "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" @@ -50,7 +49,8 @@ import ( "github.com/pingcap/tidb/util/kvcache" "github.com/pingcap/tidb/util/sem" "github.com/pingcap/tidb/util/sqlexec" - "github.com/pingcap/tidb/util/testutil" + "github.com/pingcap/tidb/util/versioninfo" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -519,16 +519,16 @@ func TestStringBuiltin(t *testing.T) { // for space result = tk.MustQuery(`select space(0), space(2), space(-1), space(1.1), space(1.9)`) - result.Check(testutil.RowsWithSep(",", ", ,, , ")) + result.Check(testkit.RowsWithSep(",", ", ,, , ")) result = tk.MustQuery(`select space("abc"), space("2"), space("1.1"), space(''), space(null)`) - result.Check(testutil.RowsWithSep(",", ", , ,,")) + result.Check(testkit.RowsWithSep(",", ", , ,,")) // for replace tk.MustExec("drop table if exists t") tk.MustExec("create table t(a char(20), b int, c double, d datetime, e time)") tk.MustExec(`insert into t values('www.mysql.com', 1234, 12.34, "2017-01-01 12:01:01", "12:01:01")`) result = tk.MustQuery(`select replace(a, 'mysql', 'pingcap'), replace(b, 2, 55), replace(c, 34, 0), replace(d, '-', '/'), replace(e, '01', '22') from t`) - result.Check(testutil.RowsWithSep(",", "www.pingcap.com,15534,12.0,2017/01/01 12:01:01,12:22:22")) + result.Check(testkit.RowsWithSep(",", "www.pingcap.com,15534,12.0,2017/01/01 12:01:01,12:22:22")) result = tk.MustQuery(`select replace('aaa', 'a', ''), replace(null, 'a', 'b'), replace('a', null, 'b'), replace('a', 'b', null)`) result.Check(testkit.Rows(" ")) @@ -552,7 +552,7 @@ func TestStringBuiltin(t *testing.T) { result = tk.MustQuery(`select substr(a, 3), substr(b, 2, 3), substr(c, -3), substr(d, -8), substr(e, -3, 100) from t`) result.Check(testkit.Rows("kila 234 .45 12:01:01 :01")) result = tk.MustQuery(`select substr('Sakila', 100), substr('Sakila', -100), substr('Sakila', -5, 3), substr('Sakila', 2, -1)`) - result.Check(testutil.RowsWithSep(",", ",,aki,")) + result.Check(testkit.RowsWithSep(",", ",,aki,")) result = tk.MustQuery(`select substr('foobarbar' from 4), substr('Sakila' from -4 for 2)`) result.Check(testkit.Rows("barbar ki")) result = tk.MustQuery(`select substr(null, 2, 3), substr('foo', null, 3), substr('foo', 2, null)`) @@ -583,7 +583,7 @@ func TestStringBuiltin(t *testing.T) { result = tk.MustQuery(`select substring_index('www.pingcap.com', '.', 0), substring_index('www.pingcap.com', '.', 100), substring_index('www.pingcap.com', '.', -100)`) result.Check(testkit.Rows(" www.pingcap.com www.pingcap.com")) result = tk.MustQuery(`select substring_index('www.pingcap.com', 'd', 1), substring_index('www.pingcap.com', '', 1), substring_index('', '.', 1)`) - result.Check(testutil.RowsWithSep(",", "www.pingcap.com,,")) + result.Check(testkit.RowsWithSep(",", "www.pingcap.com,,")) result = tk.MustQuery(`select substring_index(null, '.', 1), substring_index('www.pingcap.com', null, 1), substring_index('www.pingcap.com', '.', null)`) result.Check(testkit.Rows(" ")) @@ -624,13 +624,13 @@ func TestStringBuiltin(t *testing.T) { // for ltrim and rtrim result = tk.MustQuery(`select ltrim(' bar '), ltrim('bar'), ltrim(''), ltrim(null)`) - result.Check(testutil.RowsWithSep(",", "bar ,bar,,")) + result.Check(testkit.RowsWithSep(",", "bar ,bar,,")) result = tk.MustQuery(`select rtrim(' bar '), rtrim('bar'), rtrim(''), rtrim(null)`) - result.Check(testutil.RowsWithSep(",", " bar,bar,,")) + result.Check(testkit.RowsWithSep(",", " bar,bar,,")) result = tk.MustQuery(`select ltrim("\t bar "), ltrim(" \tbar"), ltrim("\n bar"), ltrim("\r bar")`) - result.Check(testutil.RowsWithSep(",", "\t bar ,\tbar,\n bar,\r bar")) + result.Check(testkit.RowsWithSep(",", "\t bar ,\tbar,\n bar,\r bar")) result = tk.MustQuery(`select rtrim(" bar \t"), rtrim("bar\t "), rtrim("bar \n"), rtrim("bar \r")`) - result.Check(testutil.RowsWithSep(",", " bar \t,bar\t,bar \n,bar \r")) + result.Check(testkit.RowsWithSep(",", " bar \t,bar\t,bar \n,bar \r")) // for reverse tk.MustExec(`DROP TABLE IF EXISTS t;`) @@ -645,11 +645,11 @@ func TestStringBuiltin(t *testing.T) { result = tk.MustQuery(`select trim(' bar '), trim(leading 'x' from 'xxxbarxxx'), trim(trailing 'xyz' from 'barxxyz'), trim(both 'x' from 'xxxbarxxx')`) result.Check(testkit.Rows("bar barxxx barx bar")) result = tk.MustQuery(`select trim('\t bar\n '), trim(' \rbar \t')`) - result.Check(testutil.RowsWithSep(",", "\t bar\n,\rbar \t")) + result.Check(testkit.RowsWithSep(",", "\t bar\n,\rbar \t")) result = tk.MustQuery(`select trim(leading from ' bar'), trim('x' from 'xxxbarxxx'), trim('x' from 'bar'), trim('' from ' bar ')`) - result.Check(testutil.RowsWithSep(",", "bar,bar,bar, bar ")) + result.Check(testkit.RowsWithSep(",", "bar,bar,bar, bar ")) result = tk.MustQuery(`select trim(''), trim('x' from '')`) - result.Check(testutil.RowsWithSep(",", ",")) + result.Check(testkit.RowsWithSep(",", ",")) result = tk.MustQuery(`select trim(null from 'bar'), trim('x' from null), trim(null), trim(leading null from 'bar')`) result.Check(testkit.Rows(" ")) @@ -902,7 +902,7 @@ func TestEncryptionBuiltin(t *testing.T) { result.Check(testkit.Rows(`45ABDD5C4802EFA6771A94C43F805208 45ABDD5C4802EFA6771A94C43F805208 791F1AEB6A6B796E6352BF381895CA0E D0147E2EB856186F146D9F6DE33F9546 `)) result = tk.MustQuery("select HEX(AES_ENCRYPT(a, 'key', 'iv')), HEX(AES_ENCRYPT(b, 'key', 'iv')) from t") result.Check(testkit.Rows("B3800B3A3CB4ECE2051A3E80FE373EAC B3800B3A3CB4ECE2051A3E80FE373EAC")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1618| option ignored", "Warning|1618| option ignored")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1618| option ignored", "Warning|1618| option ignored")) tk.MustExec("SET block_encryption_mode='aes-128-cbc';") result = tk.MustQuery("select HEX(AES_ENCRYPT(a, 'key', '1234567890123456')), HEX(AES_ENCRYPT(b, 'key', '1234567890123456')), HEX(AES_ENCRYPT(c, 'key', '1234567890123456')), HEX(AES_ENCRYPT(d, 'key', '1234567890123456')), HEX(AES_ENCRYPT(e, 'key', '1234567890123456')), HEX(AES_ENCRYPT(f, 'key', '1234567890123456')), HEX(AES_ENCRYPT(g, 'key', '1234567890123456')), HEX(AES_ENCRYPT(h, 'key', '1234567890123456')), HEX(AES_ENCRYPT(i, 'key', '1234567890123456')) from t") result.Check(testkit.Rows("341672829F84CB6B0BE690FEC4C4DAE9 341672829F84CB6B0BE690FEC4C4DAE9 D43734E147A12BB96C6897C4BBABA283 16F2C972411948DCEF3659B726D2CCB04AD1379A1A367FA64242058A50211B67 41E71D0C58967C1F50EEC074523946D1 1117D292E2D39C3EAA3B435371BE56FC 8ACB7ECC0883B672D7BD1CFAA9FA5FAF5B731ADE978244CD581F114D591C2E7E D2B13C30937E3251AEDA73859BA32E4B 2CF4A6051FF248A67598A17AA2C17267")) @@ -1193,6 +1193,16 @@ func TestInfoBuiltin(t *testing.T) { result = tk.MustQuery("select version()") result.Check(testkit.Rows(mysql.ServerVersion)) + // for tidb_version + result = tk.MustQuery("select tidb_version()") + tidbVersionResult := "" + for _, line := range result.Rows() { + tidbVersionResult += fmt.Sprint(line) + } + lines := strings.Split(tidbVersionResult, "\n") + assert.Equal(t, true, strings.Split(lines[0], " ")[2] == mysql.TiDBReleaseVersion, "errors in 'select tidb_version()'") + assert.Equal(t, true, strings.Split(lines[1], " ")[1] == versioninfo.TiDBEdition, "errors in 'select tidb_version()'") + // for row_count tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int, b int, PRIMARY KEY (a))") @@ -1484,7 +1494,7 @@ func TestArithmeticBuiltin(t *testing.T) { result.Check(testkit.Rows("2 2 1")) result = tk.MustQuery("SELECT 1.175494351E-37 div 1.7976931348623157E+308, 1.7976931348623157E+308 div -1.7976931348623157E+307, 1 div 1e-82;") result.Check(testkit.Rows("0 -1 ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect DECIMAL value: '1.7976931348623157e+308'", "Warning|1292|Truncated incorrect DECIMAL value: '1.7976931348623157e+308'", "Warning|1292|Truncated incorrect DECIMAL value: '-1.7976931348623158e+307'", @@ -1549,7 +1559,7 @@ func TestArithmeticBuiltin(t *testing.T) { tk.MustExec("insert into t value(1.2)") result = tk.MustQuery("select * from t where a/0 > 1") result.Check(testkit.Rows()) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1365|Division by 0")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1365|Division by 0")) tk.MustExec("USE test;") tk.MustExec("DROP TABLE IF EXISTS t;") @@ -1760,14 +1770,14 @@ func TestCompareBuiltin(t *testing.T) { tk.MustQuery("show warnings").Check(testkit.Rows()) result = tk.MustQuery(`select greatest(cast("2017-01-01" as datetime), "123", "234", cast("2018-01-01" as date)), greatest(cast("2017-01-01" as date), "123", null)`) result.Check(testkit.Rows("234 ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect time value: '123'", "Warning|1292|Incorrect time value: '234'", "Warning|1292|Incorrect time value: '123'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect time value: '123'", "Warning|1292|Incorrect time value: '234'", "Warning|1292|Incorrect time value: '123'")) // for least result = tk.MustQuery(`select least(1, 2, 3), least("a", "b", "c"), least(1.1, 1.2, 1.3), least("123a", 1, 2)`) result.Check(testkit.Rows("1 a 1.1 1")) tk.MustQuery("show warnings").Check(testkit.Rows()) result = tk.MustQuery(`select least(cast("2017-01-01" as datetime), "123", "234", cast("2018-01-01" as date)), least(cast("2017-01-01" as date), "123", null)`) result.Check(testkit.Rows("123 ")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Incorrect time value: '123'", "Warning|1292|Incorrect time value: '234'", "Warning|1292|Incorrect time value: '123'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect time value: '123'", "Warning|1292|Incorrect time value: '234'", "Warning|1292|Incorrect time value: '123'")) tk.MustQuery(`select 1 < 17666000000000000000, 1 > 17666000000000000000, 1 = 17666000000000000000`).Check(testkit.Rows("1 0 0")) tk.MustExec("drop table if exists t") @@ -1949,7 +1959,7 @@ func TestAggregationBuiltinGroupConcat(t *testing.T) { tk.MustExec("set @@group_concat_max_len=7") result = tk.MustQuery("select group_concat(a) from t") result.Check(testkit.Rows("hello,h")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning 1260 Some rows were cut by GROUPCONCAT(test.t.a)")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning 1260 Some rows were cut by GROUPCONCAT(test.t.a)")) _, err := tk.Exec("insert into d select group_concat(a) from t") require.Equal(t, errors.ErrCode(mysql.ErrCutValueGroupConcat), errors.Cause(err).(*terror.Error).Code()) @@ -1957,7 +1967,7 @@ func TestAggregationBuiltinGroupConcat(t *testing.T) { _, err = tk.Exec("set sql_mode=''") require.NoError(t, err) tk.MustExec("insert into d select group_concat(a) from t") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning 1260 Some rows were cut by GROUPCONCAT(test.t.a)")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning 1260 Some rows were cut by GROUPCONCAT(test.t.a)")) tk.MustQuery("select * from d").Check(testkit.Rows("hello,h")) } @@ -2317,7 +2327,7 @@ func TestTimeLiteral(t *testing.T) { _, err = tk.Exec("select ADDDATE('2008-01-34', -1);") require.NoError(t, err) - tk.MustQuery("Show warnings;").Check(testutil.RowsWithSep("|", + tk.MustQuery("Show warnings;").Check(testkit.RowsWithSep("|", "Warning|1292|Incorrect datetime value: '2008-01-34'")) } @@ -2566,7 +2576,7 @@ func TestColumnInfoModified(t *testing.T) { testKit.MustExec("drop table if exists tab0") testKit.MustExec("CREATE TABLE tab0(col0 INTEGER, col1 INTEGER, col2 INTEGER)") testKit.MustExec("SELECT + - (- CASE + col0 WHEN + CAST( col0 AS SIGNED ) THEN col1 WHEN 79 THEN NULL WHEN + - col1 THEN col0 / + col0 END ) * - 16 FROM tab0") - ctx := testKit.Session().(sessionctx.Context) + ctx := testKit.Session() is := domain.GetDomain(ctx).InfoSchema() tbl, _ := is.TableByName(model.NewCIStr("test"), model.NewCIStr("tab0")) col := table.FindCol(tbl.Cols(), "col1") @@ -2607,12 +2617,12 @@ func TestIssues(t *testing.T) { tk.MustExec("insert into t values('1e649'),('-1e649');") r = tk.MustQuery(`SELECT * FROM t where c < 1;`) r.Check(testkit.Rows("-1e649")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect DOUBLE value: '1e649'", "Warning|1292|Truncated incorrect DOUBLE value: '-1e649'")) r = tk.MustQuery(`SELECT * FROM t where c > 1;`) r.Check(testkit.Rows("1e649")) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect DOUBLE value: '1e649'", "Warning|1292|Truncated incorrect DOUBLE value: '-1e649'")) @@ -2698,7 +2708,7 @@ func TestFilterExtractFromDNF(t *testing.T) { ctx := context.Background() for _, tt := range tests { sql := "select * from t where " + tt.exprStr - sctx := tk.Session().(sessionctx.Context) + sctx := tk.Session() sc := sctx.GetSessionVars().StmtCtx stmts, err := session.Parse(sctx, sql) require.NoError(t, err, "error %v, for expr %s", err, tt.exprStr) @@ -2786,8 +2796,8 @@ func TestTiDBDecodeKeyFunc(t *testing.T) { // Row Keys result = tk.MustQuery("select tidb_decode_key( '74800000000000002B5F72800000000000A5D3' )") result.Check(testkit.Rows(`{"_tidb_rowid":42451,"table_id":"43"}`)) - result = tk.MustQuery("select tidb_decode_key( '7480000000000000325f7205bff199999999999a013131000000000000f9' )") - result.Check(testkit.Rows(`{"handle":"{1.1, 11}","table_id":50}`)) + result = tk.MustQuery("select tidb_decode_key( '74800000000000ffff5f7205bff199999999999a013131000000000000f9' )") + result.Check(testkit.Rows(`{"handle":"{1.1, 11}","table_id":65535}`)) // Index Keys result = tk.MustQuery("select tidb_decode_key( '74800000000000019B5F698000000000000001015257303100000000FB013736383232313130FF3900000000000000F8010000000000000000F7' )") @@ -2804,7 +2814,7 @@ func TestTiDBDecodeKeyFunc(t *testing.T) { result.Check(testkit.Rows("7480000000000000FF2E5F728000000011FFE1A3000000000000")) warns := tk.Session().GetSessionVars().StmtCtx.GetWarnings() require.Len(t, warns, 1) - require.Error(t, warns[0].Err, "invalid record/index key: 7480000000000000FF2E5F728000000011FFE1A3000000000000") + require.EqualError(t, warns[0].Err, "invalid key: 7480000000000000FF2E5F728000000011FFE1A3000000000000") // Test in real tables. tk.MustExec("use test;") @@ -2867,10 +2877,15 @@ func TestTiDBDecodeKeyFunc(t *testing.T) { result.Check(testkit.Rows(rs)) // https://github.com/pingcap/tidb/issues/27434. - hexKey = "7480000000000000375F69800000000000000103800000000001D4C1023B6458" - sql = fmt.Sprintf("select tidb_decode_key( '%s' )", hexKey) + hexKey = "7480000000000100375F69800000000000000103800000000001D4C1023B6458" + sql = fmt.Sprintf("select tidb_decode_key('%s')", hexKey) tk.MustQuery(sql).Check(testkit.Rows(hexKey)) + // https://github.com/pingcap/tidb/issues/33015. + hexKey = "74800000000000012B5F72800000000000A5D3" + sql = fmt.Sprintf("select tidb_decode_key('%s')", hexKey) + tk.MustQuery(sql).Check(testkit.Rows(`{"_tidb_rowid":42451,"table_id":"299"}`)) + // Test the table with the nonclustered index. const rowID = 10 tk.MustExec("drop table if exists t;") @@ -3483,29 +3498,33 @@ func TestExprPushdown(t *testing.T) { // case 1, index scan without double read, some filters can not be pushed to cop task rows := tk.MustQuery("explain format = 'brief' select col2, col1 from t use index(key1) where col2 like '5%' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Rows() - require.Equal(t, "cop[tikv]", fmt.Sprintf("%v", rows[2][2])) - require.Equal(t, "eq(from_base64(to_base64(substr(test.t.col1, 1, 1))), \"4\"), like(test.t.col2, \"5%\", 92)", fmt.Sprintf("%v", rows[2][4])) + require.Equal(t, "root", fmt.Sprintf("%v", rows[1][2])) + require.Equal(t, "eq(from_base64(to_base64(substr(test.t.col1, 1, 1))), \"4\")", fmt.Sprintf("%v", rows[1][4])) + require.Equal(t, "cop[tikv]", fmt.Sprintf("%v", rows[3][2])) + require.Equal(t, "like(test.t.col2, \"5%\", 92)", fmt.Sprintf("%v", rows[3][4])) tk.MustQuery("select col2, col1 from t use index(key1) where col2 like '5%' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Check(testkit.Rows("511 411111")) tk.MustQuery("select count(col2) from t use index(key1) where col2 like '5%' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Check(testkit.Rows("1")) // case 2, index scan without double read, none of the filters can be pushed to cop task rows = tk.MustQuery("explain format = 'brief' select col1, col2 from t use index(key2) where from_base64(to_base64(substr(col2, 1, 1))) = '5' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Rows() - require.Equal(t, "cop[tikv]", fmt.Sprintf("%v", rows[1][2])) - require.Equal(t, `eq(from_base64(to_base64(substr(test.t.col1, 1, 1))), "4"), eq(from_base64(to_base64(substr(test.t.col2, 1, 1))), "5")`, fmt.Sprintf("%v", rows[1][4])) + require.Equal(t, "root", fmt.Sprintf("%v", rows[0][2])) + require.Equal(t, "eq(from_base64(to_base64(substr(test.t.col1, 1, 1))), \"4\"), eq(from_base64(to_base64(substr(test.t.col2, 1, 1))), \"5\")", fmt.Sprintf("%v", rows[0][4])) tk.MustQuery("select col1, col2 from t use index(key2) where from_base64(to_base64(substr(col2, 1, 1))) = '5' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Check(testkit.Rows("411111 511")) tk.MustQuery("select count(col1) from t use index(key2) where from_base64(to_base64(substr(col2, 1, 1))) = '5' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Check(testkit.Rows("1")) // case 3, index scan with double read, some filters can not be pushed to cop task rows = tk.MustQuery("explain format = 'brief' select id from t use index(key1) where col2 like '5%' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Rows() - require.Equal(t, "cop[tikv]", fmt.Sprintf("%v", rows[2][2])) - require.Equal(t, `eq(from_base64(to_base64(substr(test.t.col1, 1, 1))), "4"), like(test.t.col2, "5%", 92)`, fmt.Sprintf("%v", rows[2][4])) + require.Equal(t, "root", fmt.Sprintf("%v", rows[1][2])) + require.Equal(t, "eq(from_base64(to_base64(substr(test.t.col1, 1, 1))), \"4\")", fmt.Sprintf("%v", rows[1][4])) + require.Equal(t, "cop[tikv]", fmt.Sprintf("%v", rows[3][2])) + require.Equal(t, "like(test.t.col2, \"5%\", 92)", fmt.Sprintf("%v", rows[3][4])) tk.MustQuery("select id from t use index(key1) where col2 like '5%' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Check(testkit.Rows("3")) tk.MustQuery("select count(id) from t use index(key1) where col2 like '5%' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Check(testkit.Rows("1")) // case 4, index scan with double read, none of the filters can be pushed to cop task rows = tk.MustQuery("explain format = 'brief' select id from t use index(key2) where from_base64(to_base64(substr(col2, 1, 1))) = '5' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Rows() - require.Equal(t, "cop[tikv]", fmt.Sprintf("%v", rows[2][2])) - require.Equal(t, `eq(from_base64(to_base64(substr(test.t.col1, 1, 1))), "4"), eq(from_base64(to_base64(substr(test.t.col2, 1, 1))), "5")`, fmt.Sprintf("%v", rows[2][4])) + require.Equal(t, "root", fmt.Sprintf("%v", rows[1][2])) + require.Equal(t, "eq(from_base64(to_base64(substr(test.t.col1, 1, 1))), \"4\"), eq(from_base64(to_base64(substr(test.t.col2, 1, 1))), \"5\")", fmt.Sprintf("%v", rows[1][4])) tk.MustQuery("select id from t use index(key2) where from_base64(to_base64(substr(col2, 1, 1))) = '5' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Check(testkit.Rows("3")) tk.MustQuery("select count(id) from t use index(key2) where from_base64(to_base64(substr(col2, 1, 1))) = '5' and from_base64(to_base64(substr(col1, 1, 1))) = '4'").Check(testkit.Rows("1")) } @@ -7059,3 +7078,16 @@ func TestIssue32488(t *testing.T) { tk.MustQuery("select binary upper(a), lower(a) from t order by upper(a);").Check([][]interface{}{{"İ i"}, {"Ʞ ʞ"}}) tk.MustQuery("select distinct upper(a), lower(a) from t order by upper(a);").Check([][]interface{}{{"İ i"}, {"Ʞ ʞ"}}) } + +func TestIssue33397(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a varchar(32)) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;") + tk.MustExec("insert into t values(''), ('');") + tk.MustExec("set @@tidb_enable_vectorized_expression = true;") + result := tk.MustQuery("select compress(a) from t").Rows() + require.Equal(t, [][]interface{}{{""}, {""}}, result) +} diff --git a/expression/main_test.go b/expression/main_test.go index 9fa0037ca462c..3c785e9a95f07 100644 --- a/expression/main_test.go +++ b/expression/main_test.go @@ -52,6 +52,7 @@ func TestMain(m *testing.M) { testDataMap.LoadTestSuiteData("testdata", "expression_suite") opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/expression/scalar_function.go b/expression/scalar_function.go index 5c2332c80a51f..8e70a1a42af24 100644 --- a/expression/scalar_function.go +++ b/expression/scalar_function.go @@ -176,7 +176,7 @@ func typeInferForNull(args []Expression) { // -1 means try to fold constants if without errors/warnings, otherwise not. func newFunctionImpl(ctx sessionctx.Context, fold int, funcName string, retType *types.FieldType, args ...Expression) (Expression, error) { if retType == nil { - return nil, errors.Errorf("RetType cannot be nil for ScalarFunction.") + return nil, errors.Errorf("RetType cannot be nil for ScalarFunction") } switch funcName { case ast.Cast: diff --git a/expression/testdata/expression_suite_out.json b/expression/testdata/expression_suite_out.json index 8b89ee1e4dc81..7047b62ba1156 100644 --- a/expression/testdata/expression_suite_out.json +++ b/expression/testdata/expression_suite_out.json @@ -197,8 +197,8 @@ { "SQL": "explain format = 'brief' select * from t1 left join t2 on false", "Result": [ - "HashJoin 80000000.00 root CARTESIAN left outer join", - "├─TableDual(Build) 8000.00 root rows:0", + "HashJoin 10000.00 root CARTESIAN left outer join", + "├─TableDual(Build) 0.00 root rows:0", "└─TableReader(Probe) 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ] @@ -206,8 +206,8 @@ { "SQL": "explain format = 'brief' select * from t1 right join t2 on false", "Result": [ - "HashJoin 80000000.00 root CARTESIAN right outer join", - "├─TableDual(Build) 8000.00 root rows:0", + "HashJoin 10000.00 root CARTESIAN right outer join", + "├─TableDual(Build) 0.00 root rows:0", "└─TableReader(Probe) 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo" ] @@ -215,8 +215,8 @@ { "SQL": "explain format = 'brief' select * from t1 left join t2 on t1.a = 1 and t1.a = 2", "Result": [ - "HashJoin 80000000.00 root CARTESIAN left outer join", - "├─TableDual(Build) 8000.00 root rows:0", + "HashJoin 10000.00 root CARTESIAN left outer join", + "├─TableDual(Build) 0.00 root rows:0", "└─TableReader(Probe) 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ] @@ -224,18 +224,18 @@ { "SQL": "explain format = 'brief' select * from t1 left join t2 on t1.a =1 where t1.a = 2", "Result": [ - "HashJoin 80000.00 root CARTESIAN left outer join", - "├─TableReader(Build) 10.00 root data:Selection", - "│ └─Selection 10.00 cop[tikv] eq(test.t1.a, 2)", - "│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", - "└─TableDual(Probe) 8000.00 root rows:0" + "HashJoin 10.00 root CARTESIAN left outer join", + "├─TableDual(Build) 0.00 root rows:0", + "└─TableReader(Probe) 10.00 root data:Selection", + " └─Selection 10.00 cop[tikv] eq(test.t1.a, 2)", + " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ] }, { "SQL": "explain format = 'brief' select * from t1 left join t2 on t2.a = 1 and t2.a = 2", "Result": [ - "HashJoin 80000000.00 root CARTESIAN left outer join", - "├─TableDual(Build) 8000.00 root rows:0", + "HashJoin 10000.00 root CARTESIAN left outer join", + "├─TableDual(Build) 0.00 root rows:0", "└─TableReader(Probe) 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ] diff --git a/expression/util.go b/expression/util.go index 6092ac5057b0e..109b68f5c9985 100644 --- a/expression/util.go +++ b/expression/util.go @@ -166,6 +166,68 @@ func extractColumns(result []*Column, expr Expression, filter func(*Column) bool return result } +// ExtractEquivalenceColumns detects the equivalence from CNF exprs. +func ExtractEquivalenceColumns(result [][]Expression, exprs []Expression) [][]Expression { + // exprs are CNF expressions, EQ condition only make sense in the top level of every expr. + for _, expr := range exprs { + result = extractEquivalenceColumns(result, expr) + } + return result +} + +func extractEquivalenceColumns(result [][]Expression, expr Expression) [][]Expression { + switch v := expr.(type) { + case *ScalarFunction: + // a==b, a<=>b, the latter one is evaluated to true when a,b are both null. + if v.FuncName.L == ast.EQ || v.FuncName.L == ast.NullEQ { + args := v.GetArgs() + if len(args) == 2 { + col1, ok1 := args[0].(*Column) + col2, ok2 := args[1].(*Column) + if ok1 && ok2 { + result = append(result, []Expression{col1, col2}) + } + col, ok1 := args[0].(*Column) + scl, ok2 := args[1].(*ScalarFunction) + if ok1 && ok2 { + result = append(result, []Expression{col, scl}) + } + col, ok1 = args[1].(*Column) + scl, ok2 = args[0].(*ScalarFunction) + if ok1 && ok2 { + result = append(result, []Expression{col, scl}) + } + } + return result + } + if v.FuncName.L == ast.In { + args := v.GetArgs() + // only `col in (only 1 element)`, can we build an equivalence here. + if len(args[1:]) == 1 { + col1, ok1 := args[0].(*Column) + col2, ok2 := args[1].(*Column) + if ok1 && ok2 { + result = append(result, []Expression{col1, col2}) + } + col, ok1 := args[0].(*Column) + scl, ok2 := args[1].(*ScalarFunction) + if ok1 && ok2 { + result = append(result, []Expression{col, scl}) + } + col, ok1 = args[1].(*Column) + scl, ok2 = args[0].(*ScalarFunction) + if ok1 && ok2 { + result = append(result, []Expression{col, scl}) + } + } + return result + } + // For Non-EQ function, we don't have to traverse down. + // eg: (a=b or c=d) doesn't make any definitely equivalence assertion. + } + return result +} + // extractColumnsAndCorColumns extracts columns and correlated columns from `expr` and append them to `result`. func extractColumnsAndCorColumns(result []*Column, expr Expression) []*Column { switch v := expr.(type) { @@ -181,6 +243,99 @@ func extractColumnsAndCorColumns(result []*Column, expr Expression) []*Column { return result } +// ExtractConstantEqColumnsOrScalar detects the constant equal relationship from CNF exprs. +func ExtractConstantEqColumnsOrScalar(ctx sessionctx.Context, result []Expression, exprs []Expression) []Expression { + // exprs are CNF expressions, EQ condition only make sense in the top level of every expr. + for _, expr := range exprs { + result = extractConstantEqColumnsOrScalar(ctx, result, expr) + } + return result +} + +func extractConstantEqColumnsOrScalar(ctx sessionctx.Context, result []Expression, expr Expression) []Expression { + switch v := expr.(type) { + case *ScalarFunction: + if v.FuncName.L == ast.EQ || v.FuncName.L == ast.NullEQ { + args := v.GetArgs() + if len(args) == 2 { + col, ok1 := args[0].(*Column) + _, ok2 := args[1].(*Constant) + if ok1 && ok2 { + result = append(result, col) + } + col, ok1 = args[1].(*Column) + _, ok2 = args[0].(*Constant) + if ok1 && ok2 { + result = append(result, col) + } + // take the correlated column as constant here. + col, ok1 = args[0].(*Column) + _, ok2 = args[1].(*CorrelatedColumn) + if ok1 && ok2 { + result = append(result, col) + } + col, ok1 = args[1].(*Column) + _, ok2 = args[0].(*CorrelatedColumn) + if ok1 && ok2 { + result = append(result, col) + } + scl, ok1 := args[0].(*ScalarFunction) + _, ok2 = args[1].(*Constant) + if ok1 && ok2 { + result = append(result, scl) + } + scl, ok1 = args[1].(*ScalarFunction) + _, ok2 = args[0].(*Constant) + if ok1 && ok2 { + result = append(result, scl) + } + // take the correlated column as constant here. + scl, ok1 = args[0].(*ScalarFunction) + _, ok2 = args[1].(*CorrelatedColumn) + if ok1 && ok2 { + result = append(result, scl) + } + scl, ok1 = args[1].(*ScalarFunction) + _, ok2 = args[0].(*CorrelatedColumn) + if ok1 && ok2 { + result = append(result, scl) + } + } + return result + } + if v.FuncName.L == ast.In { + args := v.GetArgs() + allArgsIsConst := true + // only `col in (all same const)`, can col be the constant column. + // eg: a in (1, "1") does, while a in (1, '2') doesn't. + guard := args[1] + for i, v := range args[1:] { + if _, ok := v.(*Constant); !ok { + allArgsIsConst = false + break + } + if i == 0 { + continue + } + if !guard.Equal(ctx, v) { + allArgsIsConst = false + break + } + } + if allArgsIsConst { + if col, ok := args[0].(*Column); ok { + result = append(result, col) + } else if scl, ok := args[0].(*ScalarFunction); ok { + result = append(result, scl) + } + } + return result + } + // For Non-EQ function, we don't have to traverse down. + } + return result +} + // ExtractColumnsAndCorColumnsFromExpressions extracts columns and correlated columns from expressions and append them to `result`. func ExtractColumnsAndCorColumnsFromExpressions(result []*Column, list []Expression) []*Column { for _, expr := range list { @@ -861,6 +1016,42 @@ func IsRuntimeConstExpr(expr Expression) bool { return false } +// CheckNonDeterministic checks whether the current expression contains a non-deterministic func. +func CheckNonDeterministic(e Expression) bool { + switch x := e.(type) { + case *Constant, *Column, *CorrelatedColumn: + return false + case *ScalarFunction: + if _, ok := unFoldableFunctions[x.FuncName.L]; ok { + return true + } + for _, arg := range x.GetArgs() { + if CheckNonDeterministic(arg) { + return true + } + } + } + return false +} + +// CheckFuncInExpr checks whether there's a given function in the expression. +func CheckFuncInExpr(e Expression, funcName string) bool { + switch x := e.(type) { + case *Constant, *Column, *CorrelatedColumn: + return false + case *ScalarFunction: + if x.FuncName.L == funcName { + return true + } + for _, arg := range x.GetArgs() { + if CheckFuncInExpr(arg, funcName) { + return true + } + } + } + return false +} + // IsMutableEffectsExpr checks if expr contains function which is mutable or has side effects. func IsMutableEffectsExpr(expr Expression) bool { switch x := expr.(type) { diff --git a/go.mod b/go.mod index 7e816eadbb7f6..e3c62e83978e5 100644 --- a/go.mod +++ b/go.mod @@ -1,79 +1,72 @@ module github.com/pingcap/tidb -go 1.16 +go 1.18 require ( - cloud.google.com/go/storage v1.16.1 + cloud.google.com/go/storage v1.21.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.12.0 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.2.0 github.com/BurntSushi/toml v0.3.1 github.com/DATA-DOG/go-sqlmock v1.5.0 - github.com/HdrHistogram/hdrhistogram-go v1.1.0 // indirect github.com/Jeffail/gabs/v2 v2.5.1 + github.com/Shopify/sarama v1.32.0 github.com/aws/aws-sdk-go v1.35.3 github.com/blacktear23/go-proxyprotocol v0.0.0-20180807104634-af7a81e8dd0d github.com/carlmjohnson/flagext v0.21.0 github.com/cheggaaa/pb/v3 v3.0.8 github.com/cheynewallace/tabby v1.1.1 github.com/cockroachdb/pebble v0.0.0-20210719141320-8c3bd06debb5 - github.com/coocood/freecache v1.1.1 + github.com/coocood/freecache v1.2.1 github.com/coreos/go-semver v0.3.0 github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8 github.com/danjacques/gofslock v0.0.0-20191023191349-0a45f885bc37 - github.com/dgraph-io/ristretto v0.0.1 - github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 + github.com/dgraph-io/ristretto v0.1.0 + github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 github.com/docker/go-units v0.4.0 - github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect github.com/fsouza/fake-gcs-server v1.19.0 github.com/go-sql-driver/mysql v1.6.0 github.com/gogo/protobuf v1.3.2 github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.2 - github.com/golang/snappy v0.0.3 + github.com/golang/snappy v0.0.4 github.com/google/btree v1.0.1 github.com/google/pprof v0.0.0-20211122183932-1daafda22083 github.com/google/uuid v1.1.2 - github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 - github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 + github.com/iancoleman/strcase v0.2.0 github.com/jedib0t/go-pretty/v6 v6.2.2 github.com/joho/sqltocsv v0.0.0-20210428211105-a6d6801d59df github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7 - github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef // indirect github.com/opentracing/basictracer-go v1.0.0 github.com/opentracing/opentracing-go v1.2.0 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 - github.com/pingcap/badger v1.5.1-0.20210831093107-2f6cb8008145 + github.com/pingcap/badger v1.5.1-0.20220314162537-ab58fbf40580 github.com/pingcap/check v0.0.0-20211026125417-57bd13f7b5f0 github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c github.com/pingcap/failpoint v0.0.0-20220303073211-00fea37feb66 github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059 - github.com/pingcap/kvproto v0.0.0-20220215045702-d229fcc888c8 + github.com/pingcap/kvproto v0.0.0-20220328072018-6e75c12dbd73 github.com/pingcap/log v0.0.0-20211215031037-e024ba4eb0ee github.com/pingcap/sysutil v0.0.0-20220114020952-ea68d2dbf5b4 - github.com/pingcap/tidb-tools v5.4.1-0.20220221041303-00998a9a4bfd+incompatible github.com/pingcap/tidb/parser v0.0.0-20211011031125-9b13dc409c5e - github.com/pingcap/tipb v0.0.0-20220110031732-29e23c62eeac + github.com/pingcap/tipb v0.0.0-20220215045658-d12dec7a7609 github.com/prometheus/client_golang v1.11.0 github.com/prometheus/client_model v0.2.0 - github.com/prometheus/common v0.26.0 + github.com/prometheus/common v0.32.1 github.com/shirou/gopsutil/v3 v3.21.12 - github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect - github.com/sirupsen/logrus v1.8.1 // indirect github.com/soheilhy/cmux v0.1.5 - github.com/spf13/cobra v1.1.3 + github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.7.0 github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 - github.com/tikv/client-go/v2 v2.0.0-rc.0.20220217140116-589cf79b2ab5 - github.com/tikv/pd/client v0.0.0-20220216080339-1b8f82378ee7 + github.com/tikv/client-go/v2 v2.0.1-0.20220328083738-8489c3e8c3d9 + github.com/tikv/pd/client v0.0.0-20220307081149-841fa61e9710 github.com/twmb/murmur3 v1.1.3 github.com/uber/jaeger-client-go v2.22.1+incompatible - github.com/uber/jaeger-lib v2.4.1+incompatible // indirect github.com/wangjohn/quickselect v0.0.0-20161129230411-ed8402a42d5f github.com/xitongsys/parquet-go v1.5.5-0.20201110004701-b09c49d6d457 github.com/xitongsys/parquet-go-source v0.0.0-20200817004010-026bad9b25d0 @@ -85,23 +78,129 @@ require ( go.uber.org/atomic v1.9.0 go.uber.org/automaxprocs v1.4.0 go.uber.org/goleak v1.1.12 - go.uber.org/multierr v1.7.0 - go.uber.org/zap v1.20.0 - golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f - golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a + go.uber.org/multierr v1.8.0 + go.uber.org/zap v1.21.0 + golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e + golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 golang.org/x/text v0.3.7 - golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba + golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 golang.org/x/tools v0.1.8 - google.golang.org/api v0.54.0 - google.golang.org/grpc v1.43.0 + google.golang.org/api v0.69.0 + google.golang.org/grpc v1.44.0 gopkg.in/yaml.v2 v2.4.0 modernc.org/mathutil v1.4.1 sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 ) +require ( + cloud.google.com/go v0.100.2 // indirect + cloud.google.com/go/compute v1.2.0 // indirect + cloud.google.com/go/iam v0.1.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v0.20.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.1 // indirect + github.com/DataDog/zstd v1.4.5 // indirect + github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect + github.com/VividCortex/ewma v1.1.1 // indirect + github.com/apache/thrift v0.13.1-0.20201008052519-daf620915714 // indirect + github.com/benbjohnson/clock v1.3.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cockroachdb/errors v1.8.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect + github.com/cockroachdb/redact v1.0.8 // indirect + github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect + github.com/coocood/bbloom v0.0.0-20190830030839-58deb6228d64 // indirect + github.com/coocood/rtutil v0.0.0-20190304133409-c84515f646f2 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect + github.com/eapache/go-resiliency v1.2.0 // indirect + github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect + github.com/eapache/queue v1.1.0 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/felixge/httpsnoop v1.0.1 // indirect + github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect + github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/golang/glog v1.0.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/go-cmp v0.5.7 // indirect + github.com/googleapis/gax-go/v2 v2.1.1 // indirect + github.com/gorilla/handlers v1.5.1 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/hashicorp/go-uuid v1.0.2 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/jcmturner/aescts/v2 v2.0.0 // indirect + github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect + github.com/jcmturner/gofork v1.0.0 // indirect + github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect + github.com/jcmturner/rpc/v2 v2.0.3 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jonboulle/clockwork v0.2.2 // indirect + github.com/json-iterator/go v1.1.11 // indirect + github.com/klauspost/compress v1.15.1 // indirect + github.com/klauspost/cpuid v1.3.1 // indirect + github.com/kr/pretty v0.3.0 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-runewidth v0.0.12 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/ncw/directio v1.0.5 // indirect + github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 // indirect + github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/prometheus/procfs v0.6.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/rogpeppe/go-internal v1.6.1 // indirect + github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect + github.com/tklauser/go-sysconf v0.3.9 // indirect + github.com/tklauser/numcpus v0.3.0 // indirect + github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect + go.etcd.io/bbolt v1.3.6 // indirect + go.etcd.io/etcd/client/v2 v2.305.2 // indirect + go.etcd.io/etcd/pkg/v3 v3.5.2 // indirect + go.etcd.io/etcd/raft/v3 v3.5.2 // indirect + go.opencensus.io v0.23.0 // indirect + go.opentelemetry.io/contrib v0.20.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0 // indirect + go.opentelemetry.io/otel v0.20.0 // indirect + go.opentelemetry.io/otel/exporters/otlp v0.20.0 // indirect + go.opentelemetry.io/otel/metric v0.20.0 // indirect + go.opentelemetry.io/otel/sdk v0.20.0 // indirect + go.opentelemetry.io/otel/sdk/export/metric v0.20.0 // indirect + go.opentelemetry.io/otel/sdk/metric v0.20.0 // indirect + go.opentelemetry.io/otel/trace v0.20.0 // indirect + go.opentelemetry.io/proto/otlp v0.7.0 // indirect + golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect + golang.org/x/exp v0.0.0-20200513190911-00229845015e // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8 // indirect + google.golang.org/protobuf v1.27.1 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + sigs.k8s.io/yaml v1.2.0 // indirect +) + replace github.com/pingcap/tidb/parser => ./parser // fix potential security issue(CVE-2020-26160) introduced by indirect dependency. diff --git a/go.sum b/go.sum index 4afcad9f16ca1..21958902d31d5 100644 --- a/go.sum +++ b/go.sum @@ -22,17 +22,27 @@ cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAV cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3 h1:wPBktZFzYBcCZVARvwVKqH1uEj+aLXofJEtrb4oOsio= cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.2.0 h1:EKki8sSdvDU0OO9mAXGwPXOTOgPz2l08R0/IutDH11I= +cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/iam v0.1.1 h1:4CapQyNFjiksks1/x7jsvsygFPhihslYk5GptIrlX68= +cloud.google.com/go/iam v0.1.1/go.mod h1:CKqrcnI/suGpybEHxZ7BMehL0oA4LpdyJdUlTl9jVMw= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -42,8 +52,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.16.1 h1:sMEIc4wxvoY3NXG7Rn9iP7jb/2buJgWR1vNXCR/UPfs= -cloud.google.com/go/storage v1.16.1/go.mod h1:LaNorbty3ehnU3rEjXSNV/NRgQA0O8Y+uh6bPe5UOk4= +cloud.google.com/go/storage v1.21.0 h1:HwnT2u2D309SFDHQII6m18HlrCi3jAXhUMTLOWXYH14= +cloud.google.com/go/storage v1.21.0/go.mod h1:XmRlxkgPjlBONznT2dDUU/5XlpU2OjMnKuqnZI01LAA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.20.0 h1:KQgdWmEOmaJKxaUUZwHAYh12t+b+ZJf8q3friycK1kA= @@ -63,15 +73,18 @@ github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20O github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/HdrHistogram/hdrhistogram-go v1.1.0 h1:6dpdDPTRoo78HxAJ6T1HfMiKSnqhgRRqzCuPshRkQ7I= -github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Jeffail/gabs/v2 v2.5.1 h1:ANfZYjpMlfTTKebycu4X1AgkVWumFVDYQl7JwOr4mDk= github.com/Jeffail/gabs/v2 v2.5.1/go.mod h1:xCn81vdHKxFUuWWAaD5jCTQDNPBMh5pPs9IJ+NcziBI= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= +github.com/Shopify/sarama v1.32.0 h1:P+RUjEaRU0GMMbYexGMDyrMkLhbbBVUVISDywi+IlFU= +github.com/Shopify/sarama v1.32.0/go.mod h1:+EmJJKZWVT/faR9RcOxJerP+LId4iWdQPBGLy1Y1Njs= +github.com/Shopify/toxiproxy/v2 v2.3.0 h1:62YkpiP4bzdhKMH+6uC5E95y608k3zDwdzuBMsnn3uQ= +github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM= github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= @@ -95,8 +108,9 @@ github.com/aws/aws-sdk-go v1.35.3 h1:r0puXncSaAfRt7Btml2swUo74Kao+vKhO3VLjwDjK54 github.com/aws/aws-sdk-go v1.35.3/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -110,10 +124,10 @@ github.com/carlmjohnson/flagext v0.21.0/go.mod h1:Eenv0epIUAr4NuedNmkzI8WmBmjIxZ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA= github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/ow1EJTA= github.com/cheynewallace/tabby v1.1.1 h1:JvUR8waht4Y0S3JF17G6Vhyt+FRhnqVCkk8l4YrOU54= @@ -150,8 +164,8 @@ github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcju github.com/colinmarc/hdfs/v2 v2.1.1/go.mod h1:M3x+k8UKKmxtFu++uAZ0OtDU8jR3jnaZIAc6yK4Ue0c= github.com/coocood/bbloom v0.0.0-20190830030839-58deb6228d64 h1:W1SHiII3e0jVwvaQFglwu3kS9NLxOeTpvik7MbKCyuQ= github.com/coocood/bbloom v0.0.0-20190830030839-58deb6228d64/go.mod h1:F86k/6c7aDUdwSUevnLpHS/3Q9hzYCE99jGk2xsHnt0= -github.com/coocood/freecache v1.1.1 h1:uukNF7QKCZEdZ9gAV7WQzvh0SbjwdMF6m3x3rxEkaPc= -github.com/coocood/freecache v1.1.1/go.mod h1:OKrEjkGVoxZhyWAJoeFi5BMLUJm2Tit0kpGkIr7NGYY= +github.com/coocood/freecache v1.2.1 h1:/v1CqMq45NFH9mp/Pt142reundeBM0dVUD3osQBeu/U= +github.com/coocood/freecache v1.2.1/go.mod h1:RBUWa/Cy+OHdfTGFEhEuE1pMCMX51Ncizj7rthiQ3vk= github.com/coocood/rtutil v0.0.0-20190304133409-c84515f646f2 h1:NnLfQ77q0G4k2Of2c1ceQ0ec6MkLQyDp+IGdVM0D8XM= github.com/coocood/rtutil v0.0.0-20190304133409-c84515f646f2/go.mod h1:7qG7YFnOALvsx6tKTNmQot8d7cGFXM9TidzvRFLWYwM= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -161,13 +175,14 @@ github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8Nz github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= @@ -181,11 +196,12 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgraph-io/ristretto v0.0.1 h1:cJwdnj42uV8Jg4+KLrYovLiCgIfz9wtWm6E6KA+1tLs= -github.com/dgraph-io/ristretto v0.0.1/go.mod h1:T40EBc7CJke8TkpiYfGGKAeFjSaxuFXhuXRyumBd6RE= +github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= @@ -194,6 +210,12 @@ github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= +github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -208,8 +230,9 @@ github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHj github.com/etcd-io/gofail v0.0.0-20190801230047-ad7f989257ca/go.mod h1:49H/RkXP8pKaZy4h0d+NW16rSLhyVBt4o6VLJbmOqDE= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -219,9 +242,14 @@ github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8= github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.6-0.20210809144907-32ab6a8243d7+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.14.2 h1:SPb1KFFmM+ybpEjPUhCCkZOM5xlovT5UbrMvWnXyBns= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsouza/fake-gcs-server v1.19.0 h1:XyaGOlqo+R5sjT03x2ymk0xepaQlgwhRLTT2IopW0zA= github.com/fsouza/fake-gcs-server v1.19.0/go.mod h1:JtXHY/QzHhtyIxsNfIuQ+XgHtRb5B/w8nqbL5O8zqo0= github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= @@ -267,6 +295,8 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69 github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -306,8 +336,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2-0.20190904063534-ff6b7dc882cf/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -324,8 +355,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= @@ -355,8 +387,10 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= @@ -364,6 +398,8 @@ github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -390,6 +426,8 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v0.0.0-20180228145832-27454136f036/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -401,8 +439,8 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 h1:VHgatEHNcBFEB7inlalqfNqw65aNkM1lGX2yt3NmbS8= -github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= +github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= @@ -413,7 +451,19 @@ github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbk github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= +github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= github.com/jcmturner/gofork v0.0.0-20180107083740-2aebee971930/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA= +github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= +github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jedib0t/go-pretty/v6 v6.2.2 h1:o3McN0rQ4X+IU+HduppSp9TwRdGLRW2rhJXy9CJaCRw= github.com/jedib0t/go-pretty/v6 v6.2.2/go.mod h1:+nE9fyyHGil+PuISTCrp7avEdo6bqoMwqZnuiK2r2a0= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= @@ -455,16 +505,20 @@ github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0 github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= +github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= +github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -477,14 +531,17 @@ github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= @@ -517,8 +574,9 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/ncw/directio v1.0.4 h1:CojwI07mCEmRkajgx42Pf8jyCwTs1ji9/Ij9/PJG12k= github.com/ncw/directio v1.0.4/go.mod h1:CKGdcN7StAaqjT7Qack3lAXeX4pjnyc46YeqZH1yWVY= +github.com/ncw/directio v1.0.5 h1:JSUBhdjEvVaJvOoyPAbcW0fnd0tvRXD76wEfZ1KcQz4= +github.com/ncw/directio v1.0.5/go.mod h1:rX/pKEYkOXBGOggmcyJeJGloCkleSvphPx2eV3t6ROk= github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7 h1:7KAv7KMGTTqSmYZtNdcNTgsos+vFzULLwyElndwn+5c= github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7/go.mod h1:iWMfgwqYW+e8n5lC/jjNEhwcjbRDpl5NT7n2h+4UNcI= github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef h1:K0Fn+DoFqNqktdZtdV3bPQ/0cuYh2H4rkg0tytX/07k= @@ -551,8 +609,10 @@ github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwp github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pingcap/badger v1.5.1-0.20210831093107-2f6cb8008145 h1:t7sdxmfyZ3p9K7gD8t5B50TerzTvHuAPYt+VubTVKDY= -github.com/pingcap/badger v1.5.1-0.20210831093107-2f6cb8008145/go.mod h1:LyrqUOHZrUDf9oGi1yoz1+qw9ckSIhQb5eMa1acOLNQ= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pingcap/badger v1.5.1-0.20220314162537-ab58fbf40580 h1:MKVFZuqFvAMiDtv3AbihOQ6rY5IE8LWflI1BuZ/hF0Y= +github.com/pingcap/badger v1.5.1-0.20220314162537-ab58fbf40580/go.mod h1:upwDfet29M5y5koWilbWWA6ca3Lr0YVuzwX/DK58Vdk= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= github.com/pingcap/check v0.0.0-20191107115940-caf2b9e6ccf4/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= github.com/pingcap/check v0.0.0-20211026125417-57bd13f7b5f0 h1:HVl5539r48eA+uDuX/ziBmQCxzT1pGrzWbKuXT46Bq0= @@ -571,9 +631,10 @@ github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059/go.mod h1:fMRU1BA1y+r89 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20191211054548-3c6b38ea5107/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= -github.com/pingcap/kvproto v0.0.0-20220106070556-3fa8fa04f898/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20220215045702-d229fcc888c8 h1:8VizThgCQJTVwCrfp5JOsiUdpvB8F9nsUcLrnHqjpNY= -github.com/pingcap/kvproto v0.0.0-20220215045702-d229fcc888c8/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= +github.com/pingcap/kvproto v0.0.0-20220302110454-c696585a961b/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= +github.com/pingcap/kvproto v0.0.0-20220304032058-ccd676426a27/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= +github.com/pingcap/kvproto v0.0.0-20220328072018-6e75c12dbd73 h1:jKixsi6Iw00hL0+o23hmr8BNzlsQP9pShHTOwyuf/Os= +github.com/pingcap/kvproto v0.0.0-20220328072018-6e75c12dbd73/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20200511115504-543df19646ad/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= @@ -581,10 +642,8 @@ github.com/pingcap/log v0.0.0-20211215031037-e024ba4eb0ee h1:VO2t6IBpfvW34TdtD/G github.com/pingcap/log v0.0.0-20211215031037-e024ba4eb0ee/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/sysutil v0.0.0-20220114020952-ea68d2dbf5b4 h1:HYbcxtnkN3s5tqrZ/z3eJS4j3Db8wMphEm1q10lY/TM= github.com/pingcap/sysutil v0.0.0-20220114020952-ea68d2dbf5b4/go.mod h1:sDCsM39cGiv2vwunZkaFA917vVkqDTGSPbbV7z4Oops= -github.com/pingcap/tidb-tools v5.4.1-0.20220221041303-00998a9a4bfd+incompatible h1:t5NkebXbboNFUh8Z/yOvezIxdx7rt1/FSh5jBj6mmjI= -github.com/pingcap/tidb-tools v5.4.1-0.20220221041303-00998a9a4bfd+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= -github.com/pingcap/tipb v0.0.0-20220110031732-29e23c62eeac h1:bVklq/Np5uHUylW4Htyhi92TNrvIqVwht/+bHk0R/Tk= -github.com/pingcap/tipb v0.0.0-20220110031732-29e23c62eeac/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= +github.com/pingcap/tipb v0.0.0-20220215045658-d12dec7a7609 h1:BiCS1ZRnW0szOvTAa3gCqWIhyo+hv83SVaBgrUghXIU= +github.com/pingcap/tipb v0.0.0-20220215045658-d12dec7a7609/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -614,8 +673,9 @@ github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7q github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -623,6 +683,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -631,8 +693,11 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= @@ -658,14 +723,14 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -684,11 +749,10 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 h1:mbAskLJ0oJfDRtkanvQPiooDH8HvJ2FBh+iKT/OmiQQ= github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2/go.mod h1:2PfKggNGDuadAa0LElHrByyrz4JPZ9fFx6Gs7nx7ZZU= -github.com/tikv/client-go/v2 v2.0.0-rc.0.20220217140116-589cf79b2ab5 h1:xfhhUvnueHqt+mYfRR5ONAVezrqNBCvcWSh4Ml6Isjc= -github.com/tikv/client-go/v2 v2.0.0-rc.0.20220217140116-589cf79b2ab5/go.mod h1:gaHSp8rnxZ0w36qb6QPPNPh9P0Mu5vAEwCQcc0Brni4= -github.com/tikv/pd/client v0.0.0-20220216070739-26c668271201/go.mod h1:fEvI5fhAuJn1Fn87VJF8ByE9Vc16EzWGoePZB21/nL8= -github.com/tikv/pd/client v0.0.0-20220216080339-1b8f82378ee7 h1:RRiYmyzHgTgV0mrp6Ue6cGn0EAB7U1YHnEfVWEGCKk8= -github.com/tikv/pd/client v0.0.0-20220216080339-1b8f82378ee7/go.mod h1:fEvI5fhAuJn1Fn87VJF8ByE9Vc16EzWGoePZB21/nL8= +github.com/tikv/client-go/v2 v2.0.1-0.20220328083738-8489c3e8c3d9 h1:TgSywPECh84B5S6Z97jhMdQVrezPwUbOKbCZFie2kPI= +github.com/tikv/client-go/v2 v2.0.1-0.20220328083738-8489c3e8c3d9/go.mod h1:0scaG+seu7L56apm+Gjz9vckyO7ABIzM6T7n00mrIXs= +github.com/tikv/pd/client v0.0.0-20220307081149-841fa61e9710 h1:jxgmKOscXSjaFEKQGRyY5qOpK8hLqxs2irb/uDJMtwk= +github.com/tikv/pd/client v0.0.0-20220307081149-841fa61e9710/go.mod h1:AtvppPwkiyUgQlR1W9qSqfTB+OsOIu19jDCOxOsPkmU= github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= @@ -704,6 +768,7 @@ github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVK github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= @@ -711,6 +776,9 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/wangjohn/quickselect v0.0.0-20161129230411-ed8402a42d5f h1:9DDCDwOyEy/gId+IEMrFHLuQ5R/WV0KNxWLler8X2OY= github.com/wangjohn/quickselect v0.0.0-20161129230411-ed8402a42d5f/go.mod h1:8sdOQnirw1PrcnTJYkmW1iOHtUmblMmGdUOHyWYycLI= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= @@ -732,7 +800,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -802,8 +869,9 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -811,8 +879,9 @@ go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.20.0 h1:N4oPlghZwYG55MlU6LXk/Zp00FVNE9X9wrYO8CEs4lc= go.uber.org/zap v1.20.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -824,8 +893,10 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -869,7 +940,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -919,10 +989,12 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -936,8 +1008,10 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a h1:4Kd8OPUx1xgUwrHDaviWZO8MsgoZTZYC3g+8m16RBww= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1018,16 +1092,25 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 h1:y/woIyUBFbpQGKS0u1aHF/40WUDnek3fPOyD08H5Vng= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1041,8 +1124,9 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs= +golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1146,8 +1230,16 @@ google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59t google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0 h1:ECJUVngj71QI6XEm7b1sAf8BljU5inEhMbKPR8Lxhhk= google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM= +google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M= +google.golang.org/api v0.69.0 h1:yHW5s2SFyDapr/43kYtIQmoaaFVW4baLMLwqV4auj2A= +google.golang.org/api v0.69.0/go.mod h1:boanBiw+h5c3s+tBPgEzLDRHfFLWV0qXxRHz3ws7C80= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1210,8 +1302,23 @@ google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda h1:iT5uhT54PtbqUsWddv/nnEWdE5e/MTr+Nv3vjxlBP1A= -google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8 h1:divpuJZKgX3Qt7MFDE5v62yu0yQcQbTCD9VJp9leX58= +google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v0.0.0-20180607172857-7a6a684ca69e/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1240,8 +1347,10 @@ google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/infoschema/cluster_tables_test.go b/infoschema/cluster_tables_test.go index 258f35141c0f7..888e0954e0359 100644 --- a/infoschema/cluster_tables_test.go +++ b/infoschema/cluster_tables_test.go @@ -42,7 +42,6 @@ import ( "github.com/pingcap/tidb/util/pdapi" "github.com/pingcap/tidb/util/resourcegrouptag" "github.com/pingcap/tidb/util/set" - "github.com/pingcap/tidb/util/testutil" "github.com/pingcap/tipb/go-tipb" "github.com/stretchr/testify/require" "google.golang.org/grpc" @@ -230,39 +229,43 @@ func TestSelectClusterTable(t *testing.T) { slowLogFileName := "tidb-slow.log" prepareSlowLogfile(t, slowLogFileName) defer func() { require.NoError(t, os.Remove(slowLogFileName)) }() - for i := 0; i < 2; i++ { - tk.MustExec("use information_schema") - tk.MustExec(fmt.Sprintf("set @@tidb_enable_streaming=%d", i)) - tk.MustExec("set @@global.tidb_enable_stmt_summary=1") - tk.MustExec("set time_zone = '+08:00';") - tk.MustQuery("select count(*) from `CLUSTER_SLOW_QUERY`").Check(testkit.Rows("2")) - tk.MustQuery("select time from `CLUSTER_SLOW_QUERY` where time='2019-02-12 19:33:56.571953'").Check(testutil.RowsWithSep("|", "2019-02-12 19:33:56.571953")) - tk.MustQuery("select count(*) from `CLUSTER_PROCESSLIST`").Check(testkit.Rows("1")) - tk.MustQuery("select * from `CLUSTER_PROCESSLIST`").Check(testkit.Rows(fmt.Sprintf(":10080 1 root 127.0.0.1 Query 9223372036 %s 0 0 ", ""))) - tk.MustQuery("select query_time, conn_id from `CLUSTER_SLOW_QUERY` order by time limit 1").Check(testkit.Rows("4.895492 6")) - tk.MustQuery("select count(*) from `CLUSTER_SLOW_QUERY` group by digest").Check(testkit.Rows("1", "1")) - tk.MustQuery("select digest, count(*) from `CLUSTER_SLOW_QUERY` group by digest order by digest").Check(testkit.Rows("124acb3a0bec903176baca5f9da00b4e7512a41c93b417923f26502edeb324cc 1", "42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772 1")) - tk.MustQuery(`select length(query) as l,time from information_schema.cluster_slow_query where time > "2019-02-12 19:33:56" order by abs(l) desc limit 10;`).Check(testkit.Rows("21 2019-02-12 19:33:56.571953")) - tk.MustQuery("select count(*) from `CLUSTER_SLOW_QUERY` where time > now() group by digest").Check(testkit.Rows()) - re := tk.MustQuery("select * from `CLUSTER_statements_summary`") - require.NotNil(t, re) - require.Greater(t, len(re.Rows()), 0) - // Test for TiDB issue 14915. - re = tk.MustQuery("select sum(exec_count*avg_mem) from cluster_statements_summary_history group by schema_name,digest,digest_text;") - require.NotNil(t, re) - require.Greater(t, len(re.Rows()), 0) - tk.MustQuery("select * from `CLUSTER_statements_summary_history`") - require.NotNil(t, re) - require.Greater(t, len(re.Rows()), 0) - tk.MustExec("set @@global.tidb_enable_stmt_summary=0") - re = tk.MustQuery("select * from `CLUSTER_statements_summary`") - require.NotNil(t, re) - require.Equal(t, 0, len(re.Rows())) - tk.MustQuery("select * from `CLUSTER_statements_summary_history`") - require.NotNil(t, re) - require.Equal(t, 0, len(re.Rows())) - } + tk.MustExec("use information_schema") + tk.MustExec("set @@global.tidb_enable_stmt_summary=1") + tk.MustExec("set time_zone = '+08:00';") + tk.MustQuery("select count(*) from `CLUSTER_SLOW_QUERY`").Check(testkit.Rows("2")) + tk.MustQuery("select time from `CLUSTER_SLOW_QUERY` where time='2019-02-12 19:33:56.571953'").Check(testkit.RowsWithSep("|", "2019-02-12 19:33:56.571953")) + tk.MustQuery("select count(*) from `CLUSTER_PROCESSLIST`").Check(testkit.Rows("1")) + // skip instance and host column because it now includes the TCP socket details (unstable) + tk.MustQuery("select id, user, db, command, time, state, info, digest, mem, disk, txnstart from `CLUSTER_PROCESSLIST`").Check(testkit.Rows(fmt.Sprintf("1 root Query 9223372036 %s 0 0 ", ""))) + tk.MustQuery("select query_time, conn_id from `CLUSTER_SLOW_QUERY` order by time limit 1").Check(testkit.Rows("4.895492 6")) + tk.MustQuery("select count(*) from `CLUSTER_SLOW_QUERY` group by digest").Check(testkit.Rows("1", "1")) + tk.MustQuery("select digest, count(*) from `CLUSTER_SLOW_QUERY` group by digest order by digest").Check(testkit.Rows("124acb3a0bec903176baca5f9da00b4e7512a41c93b417923f26502edeb324cc 1", "42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772 1")) + tk.MustQuery(`select length(query) as l,time from information_schema.cluster_slow_query where time > "2019-02-12 19:33:56" order by abs(l) desc limit 10;`).Check(testkit.Rows("21 2019-02-12 19:33:56.571953")) + tk.MustQuery("select count(*) from `CLUSTER_SLOW_QUERY` where time > now() group by digest").Check(testkit.Rows()) + re := tk.MustQuery("select * from `CLUSTER_statements_summary`") + require.NotNil(t, re) + require.Greater(t, len(re.Rows()), 0) + re = tk.MustQuery("select * from `CLUSTER_statements_summary` where table_names REGEXP '\\binformation_schema\\.'") + require.NotNil(t, re) + require.Equal(t, len(re.Rows()), 0) + re = tk.MustQuery("select * from `CLUSTER_statements_summary` where table_names REGEXP 'information_schema\\.'") + require.NotNil(t, re) + require.Greater(t, len(re.Rows()), 0) + // Test for TiDB issue 14915. + re = tk.MustQuery("select sum(exec_count*avg_mem) from cluster_statements_summary_history group by schema_name,digest,digest_text;") + require.NotNil(t, re) + require.Greater(t, len(re.Rows()), 0) + tk.MustQuery("select * from `CLUSTER_statements_summary_history`") + require.NotNil(t, re) + require.Greater(t, len(re.Rows()), 0) + tk.MustExec("set @@global.tidb_enable_stmt_summary=0") + re = tk.MustQuery("select * from `CLUSTER_statements_summary`") + require.NotNil(t, re) + require.Equal(t, 0, len(re.Rows())) + tk.MustQuery("select * from `CLUSTER_statements_summary_history`") + require.NotNil(t, re) + require.Equal(t, 0, len(re.Rows())) } func SubTestSelectClusterTablePrivilege(t *testing.T) { diff --git a/infoschema/infoschema_test.go b/infoschema/infoschema_test.go index a179a3865bc3b..46e60d924cd69 100644 --- a/infoschema/infoschema_test.go +++ b/infoschema/infoschema_test.go @@ -33,9 +33,9 @@ import ( "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/testutil" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/testutil" ) func TestBasic(t *testing.T) { diff --git a/infoschema/main_test.go b/infoschema/main_test.go index a7a4c26e3161a..7ca5612d5f13d 100644 --- a/infoschema/main_test.go +++ b/infoschema/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/infoschema/perfschema/main_test.go b/infoschema/perfschema/main_test.go index ff4b9ed022c02..acfdc80447866 100644 --- a/infoschema/perfschema/main_test.go +++ b/infoschema/perfschema/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/infoschema/tables.go b/infoschema/tables.go index e955cac48a8ba..61a454833f4b6 100644 --- a/infoschema/tables.go +++ b/infoschema/tables.go @@ -390,7 +390,7 @@ var tablesCols = []columnInfo{ {name: "TIDB_PLACEMENT_POLICY_NAME", tp: mysql.TypeVarchar, size: 64}, } -// See: http://dev.mysql.com/doc/refman/5.7/en/columns-table.html +// See: http://dev.mysql.com/doc/refman/5.7/en/information-schema-columns-table.html var columnsCols = []columnInfo{ {name: "TABLE_CATALOG", tp: mysql.TypeVarchar, size: 512}, {name: "TABLE_SCHEMA", tp: mysql.TypeVarchar, size: 64}, @@ -495,7 +495,7 @@ var keyColumnUsageCols = []columnInfo{ {name: "REFERENCED_COLUMN_NAME", tp: mysql.TypeVarchar, size: 64}, } -// See http://dev.mysql.com/doc/refman/5.7/en/referential-constraints-table.html +// See http://dev.mysql.com/doc/refman/5.7/en/information-schema-referential-constraints-table.html var referConstCols = []columnInfo{ {name: "CONSTRAINT_CATALOG", tp: mysql.TypeVarchar, size: 512, flag: mysql.NotNullFlag}, {name: "CONSTRAINT_SCHEMA", tp: mysql.TypeVarchar, size: 64, flag: mysql.NotNullFlag}, @@ -510,13 +510,13 @@ var referConstCols = []columnInfo{ {name: "REFERENCED_TABLE_NAME", tp: mysql.TypeVarchar, size: 64, flag: mysql.NotNullFlag}, } -// See http://dev.mysql.com/doc/refman/5.7/en/variables-table.html +// See http://dev.mysql.com/doc/refman/5.7/en/information-schema-variables-table.html var sessionVarCols = []columnInfo{ {name: "VARIABLE_NAME", tp: mysql.TypeVarchar, size: 64}, {name: "VARIABLE_VALUE", tp: mysql.TypeVarchar, size: 1024}, } -// See https://dev.mysql.com/doc/refman/5.7/en/plugins-table.html +// See https://dev.mysql.com/doc/refman/5.7/en/information-schema-plugins-table.html var pluginsCols = []columnInfo{ {name: "PLUGIN_NAME", tp: mysql.TypeVarchar, size: 64}, {name: "PLUGIN_VERSION", tp: mysql.TypeVarchar, size: 20}, @@ -531,7 +531,7 @@ var pluginsCols = []columnInfo{ {name: "LOAD_OPTION", tp: mysql.TypeVarchar, size: 64}, } -// See https://dev.mysql.com/doc/refman/5.7/en/partitions-table.html +// See https://dev.mysql.com/doc/refman/5.7/en/information-schema-partitions-table.html var partitionsCols = []columnInfo{ {name: "TABLE_CATALOG", tp: mysql.TypeVarchar, size: 512}, {name: "TABLE_SCHEMA", tp: mysql.TypeVarchar, size: 64}, @@ -1496,6 +1496,8 @@ const ( PrimaryConstraint = "PRIMARY" // UniqueKeyType is the string constant of UNIQUE. UniqueKeyType = "UNIQUE" + // ForeignKeyType is the string constant of Foreign Key. + ForeignKeyType = "FOREIGN KEY" ) // ServerInfo represents the basic server information of single cluster component diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 00e191a541178..e705e02448db4 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -41,7 +41,6 @@ import ( "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/kvcache" - "github.com/pingcap/tidb/util/testutil" "github.com/stretchr/testify/require" ) @@ -558,12 +557,12 @@ func TestSlowQuery(t *testing.T) { tk.MustExec(fmt.Sprintf("set @@tidb_slow_query_file='%v'", slowLogFileName)) tk.MustExec("set time_zone = '+08:00';") re := tk.MustQuery("select * from information_schema.slow_query") - re.Check(testutil.RowsWithSep("|", "2019-02-12 19:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.00000001|0.000000003|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|100|10|10|10|100|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|0|0|0|0|10||0|1|0|0|1|0|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;", + re.Check(testkit.RowsWithSep("|", "2019-02-12 19:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.00000001|0.000000003|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|100|10|10|10|100|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|0|0|0|0|10||0|1|0|0|1|0|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;", "2021-09-08|14:39:54.506967|427578666238083075|root|172.16.0.0|40507|0|0|25.571605962|0.002923536|0.006800973|0.002100764|0|0|0|0.000015801|25.542014572|0|0.002294647|0.000605473|12.483|[tikvRPC regionMiss tikvRPC regionMiss regionMiss]|0|0|624|172064|60|0|0|0|0|0|0|0|0|0|0|0|0|0|0|rtdb||0|124acb3a0bec903176baca5f9da00b4e7512a41c93b417923f26502edeb324cc||0|0|0||0|0|0||856544|0|86.635049185|0.015486658|100.054|0|0||0|1|0|0|0|0||||INSERT INTO ...;", )) tk.MustExec("set time_zone = '+00:00';") re = tk.MustQuery("select * from information_schema.slow_query") - re.Check(testutil.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.00000001|0.000000003|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|100|10|10|10|100|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|0|0|0|0|10||0|1|0|0|1|0|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;", + re.Check(testkit.RowsWithSep("|", "2019-02-12 11:33:56.571953|406315658548871171|root|localhost|6|57|0.12|4.895492|0.4|0.2|0.000000003|2|0.000000002|0.00000001|0.000000003|0.19|0.21|0.01|0|0.18|[txnLock]|0.03|0|15|480|1|8|0.3824278|0.161|0.101|0.092|1.71|1|100001|100000|100|10|10|10|100|test||0|42a1c8aae6f133e934d4bf0147491709a8812ea05ff8819ec522780fe657b772|t1:1,t2:2|0.1|0.2|0.03|127.0.0.1:20160|0.05|0.6|0.8|0.0.0.0:20160|70724|65536|0|0|0|0|10||0|1|0|0|1|0|abcd|60e9378c746d9a2be1c791047e008967cf252eb6de9167ad3aa6098fa2d523f4|update t set i = 2;|select * from t_slim;", "2021-09-08|06:39:54.506967|427578666238083075|root|172.16.0.0|40507|0|0|25.571605962|0.002923536|0.006800973|0.002100764|0|0|0|0.000015801|25.542014572|0|0.002294647|0.000605473|12.483|[tikvRPC regionMiss tikvRPC regionMiss regionMiss]|0|0|624|172064|60|0|0|0|0|0|0|0|0|0|0|0|0|0|0|rtdb||0|124acb3a0bec903176baca5f9da00b4e7512a41c93b417923f26502edeb324cc||0|0|0||0|0|0||856544|0|86.635049185|0.015486658|100.054|0|0||0|1|0|0|0|0||||INSERT INTO ...;", )) @@ -699,7 +698,7 @@ func TestFormatVersion(t *testing.T) { } } -// Test statements_summary. +// TestStmtSummaryTable Test statements_summary. func TestStmtSummaryTable(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -935,6 +934,62 @@ func TestStmtSummaryTablePrivilege(t *testing.T) { require.Equal(t, 2, len(result.Rows())) } +func TestCapturePrivilege(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := newTestKitWithRoot(t, store) + + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b varchar(10), key k(a))") + defer tk.MustExec("drop table if exists t") + + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1(a int, b varchar(10), key k(a))") + defer tk.MustExec("drop table if exists t1") + + // Disable refreshing summary. + tk.MustExec("set global tidb_stmt_summary_refresh_interval = 999999999") + tk.MustQuery("select @@global.tidb_stmt_summary_refresh_interval").Check(testkit.Rows("999999999")) + // Clear all statements. + tk.MustExec("set global tidb_enable_stmt_summary = 0") + tk.MustExec("set global tidb_enable_stmt_summary = 1") + + // Create a new user to test statements summary table privilege + tk.MustExec("drop user if exists 'test_user'@'localhost'") + tk.MustExec("create user 'test_user'@'localhost'") + defer tk.MustExec("drop user if exists 'test_user'@'localhost'") + tk.MustExec("grant select on test.t1 to 'test_user'@'localhost'") + tk.MustExec("select * from t where a=1") + tk.MustExec("select * from t where a=1") + tk.MustExec("admin capture bindings") + rows := tk.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk1.Session().Auth(&auth.UserIdentity{ + Username: "test_user", + Hostname: "localhost", + AuthUsername: "test_user", + AuthHostname: "localhost", + }, nil, nil) + + rows = tk1.MustQuery("show global bindings").Rows() + // Ordinary users can not see others' records + require.Len(t, rows, 0) + tk1.MustExec("select * from t1 where b=1") + tk1.MustExec("select * from t1 where b=1") + tk1.MustExec("admin capture bindings") + rows = tk1.MustQuery("show global bindings").Rows() + require.Len(t, rows, 1) + + tk.MustExec("grant all on *.* to 'test_user'@'localhost'") + tk1.MustExec("admin capture bindings") + rows = tk1.MustQuery("show global bindings").Rows() + require.Len(t, rows, 2) +} + func TestIssue18845(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -950,7 +1005,7 @@ func TestIssue18845(t *testing.T) { tk.MustQuery(`select count(*) from information_schema.columns;`) } -// Test statements_summary_history. +// TestStmtSummaryInternalQuery Test statements_summary_history. func TestStmtSummaryInternalQuery(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -1009,7 +1064,7 @@ func TestStmtSummaryInternalQuery(t *testing.T) { require.Contains(t, rows[0][0].(string), "Projection") } -// Test error count and warning count. +// TestStmtSummaryErrorCount Test error count and warning count. func TestStmtSummaryErrorCount(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -1080,7 +1135,7 @@ func TestStmtSummarySensitiveQuery(t *testing.T) { )) } -// test stmtSummaryEvictedCount +// TestSimpleStmtSummaryEvictedCount test stmtSummaryEvictedCount func TestSimpleStmtSummaryEvictedCount(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -1443,3 +1498,16 @@ func TestReferentialConstraints(t *testing.T) { tk.MustQuery(`SELECT * FROM information_schema.referential_constraints WHERE table_name='t2'`).Check(testkit.Rows("def referconstraints fk_to_t1 def referconstraints PRIMARY NONE NO ACTION NO ACTION t2 t1")) } + +// TestTableConstraintsContainForeignKeys TiDB Issue: https://github.com/pingcap/tidb/issues/28918 +func TestTableConstraintsContainForeignKeys(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("CREATE DATABASE tableconstraints") + tk.MustExec("use tableconstraints") + tk.MustExec("CREATE TABLE `t1` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(25) DEFAULT NULL, PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;") + tk.MustExec("CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT, `t1_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */, CONSTRAINT `fk_t2_t1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;") + tk.MustQuery("SELECT * FROM INFORMATION_SCHEMA.table_constraints WHERE constraint_schema = 'tableconstraints' AND table_name = 't2'").Sort().Check(testkit.Rows("def tableconstraints PRIMARY tableconstraints t2 PRIMARY KEY", "def tableconstraints fk_t2_t1 tableconstraints t2 FOREIGN KEY")) + tk.MustQuery("SELECT * FROM INFORMATION_SCHEMA.table_constraints WHERE constraint_schema = 'tableconstraints' AND table_name = 't1'").Sort().Check(testkit.Rows("def tableconstraints PRIMARY tableconstraints t1 PRIMARY KEY")) +} diff --git a/kv/kv.go b/kv/kv.go index df6d985fee59a..58aecb5195891 100644 --- a/kv/kv.go +++ b/kv/kv.go @@ -313,6 +313,9 @@ type Request struct { Data []byte KeyRanges []KeyRange + // For PartitionTableScan used by tiflash. + PartitionIDAndRanges []PartitionIDAndRanges + // Concurrency is 1, if it only sends the request to a single storage unit when // ResponseIterator.Next is called. If concurrency is greater than 1, the request will be // sent to multiple storage units concurrently. @@ -329,8 +332,6 @@ type Request struct { Desc bool // NotFillCache makes this request do not touch the LRU cache of the underlying storage. NotFillCache bool - // SyncLog decides whether the WAL(write-ahead log) of this request should be synchronized. - SyncLog bool // Streaming indicates using streaming API for this request, result in that one Next() // call would not corresponds to a whole region result. Streaming bool @@ -360,6 +361,12 @@ type Request struct { Paging bool } +// PartitionIDAndRanges used by PartitionTableScan in tiflash. +type PartitionIDAndRanges struct { + ID int64 + KeyRanges []KeyRange +} + const ( // GlobalReplicaScope indicates the default replica scope for tidb to request GlobalReplicaScope = oracle.GlobalTxnScope @@ -504,4 +511,6 @@ const ( SI IsoLevel = iota // RC stands for 'read committed'. RC + // RCCheckTS stands for 'read consistency read with ts check'. + RCCheckTS ) diff --git a/kv/main_test.go b/kv/main_test.go index 40587cb4acdff..9a4d9e0891574 100644 --- a/kv/main_test.go +++ b/kv/main_test.go @@ -25,6 +25,7 @@ func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/kv/mpp.go b/kv/mpp.go index 231f0cccb2325..012a182aacd1a 100644 --- a/kv/mpp.go +++ b/kv/mpp.go @@ -33,6 +33,8 @@ type MPPTask struct { ID int64 // mppTaskID StartTs uint64 TableID int64 // physical table id + + PartitionTableIDs []int64 } // ToPB generates the pb structure. @@ -89,4 +91,6 @@ type MPPClient interface { type MPPBuildTasksRequest struct { KeyRanges []KeyRange StartTS uint64 + + PartitionIDAndRanges []PartitionIDAndRanges } diff --git a/kv/option.go b/kv/option.go index 2e9418e755e3e..56a2e58e9196e 100644 --- a/kv/option.go +++ b/kv/option.go @@ -26,7 +26,7 @@ const ( Priority // NotFillCache makes this request do not touch the LRU cache of the underlying storage. NotFillCache - // SyncLog decides whether the WAL(write-ahead log) of this request should be synchronized. + // SyncLog is not used anymore. SyncLog // KeyOnly retrieve only keys, it can be used in scan now. KeyOnly diff --git a/meta/autoid/main_test.go b/meta/autoid/main_test.go index c9ee29c2200f7..509401d81b105 100644 --- a/meta/autoid/main_test.go +++ b/meta/autoid/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/meta/main_test.go b/meta/main_test.go index 59fbb4a95b08c..2b58b89851eae 100644 --- a/meta/main_test.go +++ b/meta/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), } diff --git a/meta/meta.go b/meta/meta.go index 9a92a9380848d..591457252ac10 100644 --- a/meta/meta.go +++ b/meta/meta.go @@ -121,7 +121,6 @@ type Meta struct { // If the current Meta needs to handle a job, jobListKey is the type of the job's list. func NewMeta(txn kv.Transaction, jobListKeys ...JobListKeyType) *Meta { txn.SetOption(kv.Priority, kv.PriorityHigh) - txn.SetOption(kv.SyncLog, struct{}{}) txn.SetDiskFullOpt(kvrpcpb.DiskFullOpt_AllowedOnAlmostFull) t := structure.NewStructure(txn, txn, mMetaPrefix) listKey := DefaultJobListKey @@ -165,6 +164,14 @@ func (m *Meta) GenGlobalIDs(n int) ([]int64, error) { return ids, nil } +// GenPlacementPolicyID generates next placement policy id globally. +func (m *Meta) GenPlacementPolicyID() (int64, error) { + policyIDMutex.Lock() + defer policyIDMutex.Unlock() + + return m.txn.Inc(mPolicyGlobalID, 1) +} + // GetGlobalID gets current global id. func (m *Meta) GetGlobalID() (int64, error) { return m.txn.GetInt64(mNextGlobalIDKey) @@ -284,22 +291,15 @@ func (m *Meta) checkTableNotExists(dbKey []byte, tableKey []byte) error { // CreatePolicy creates a policy. func (m *Meta) CreatePolicy(policy *model.PolicyInfo) error { - if policy.ID != 0 { - policyKey := m.policyKey(policy.ID) - if err := m.checkPolicyNotExists(policyKey); err != nil { - return errors.Trace(err) - } - } else { - // Autofill the policy ID. - policyIDMutex.Lock() - genID, err := m.txn.Inc(mPolicyGlobalID, 1) - if err != nil { - return errors.Trace(err) - } - policyIDMutex.Unlock() - policy.ID = genID + if policy.ID == 0 { + return errors.New("policy.ID is invalid") } + policyKey := m.policyKey(policy.ID) + if err := m.checkPolicyNotExists(policyKey); err != nil { + return errors.Trace(err) + } + data, err := json.Marshal(policy) if err != nil { return errors.Trace(err) diff --git a/meta/meta_test.go b/meta/meta_test.go index 1d238004983d5..cbafd64404163 100644 --- a/meta/meta_test.go +++ b/meta/meta_test.go @@ -49,6 +49,7 @@ func TestPlacementPolicy(t *testing.T) { // test the meta storage of placemnt policy. policy := &model.PolicyInfo{ + ID: 1, Name: model.NewCIStr("aa"), PlacementSettings: &model.PlacementSettings{ PrimaryRegion: "my primary", diff --git a/metrics/grafana/performance_overview.json b/metrics/grafana/performance_overview.json index a24df9d26dd33..c7cbbe216abb3 100644 --- a/metrics/grafana/performance_overview.json +++ b/metrics/grafana/performance_overview.json @@ -64,10 +64,6 @@ { "collapsed": false, "datasource": "${DS_TEST-CLUSTER}", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "gridPos": { "h": 1, "w": 24, @@ -86,10 +82,6 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "description": "Service Time Per Second, show service time distribution among different components and execution phase.\n1. Total Database Time, the time which tidb cluster is processing application requests.\n2. Per SQL Type dimension\n3. Per parse/compile/execute dimension\n4. Per KV/PD request dimension", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -110,6 +102,7 @@ "min": false, "rightSide": true, "show": true, + "sideWidth": null, "sort": "avg", "sortDesc": true, "total": false, @@ -123,7 +116,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -209,6 +202,7 @@ }, "yaxes": [ { + "$$hashKey": "object:3528", "format": "s", "label": null, "logBase": 1, @@ -217,6 +211,7 @@ "show": true }, { + "$$hashKey": "object:3529", "format": "short", "label": null, "logBase": 1, @@ -237,13 +232,9 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "decimals": null, - "description": "TiDB statement statistics", + "description": "TiDB statement statistics. Bold red line on right Y axis for Failed Queries per second", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -278,11 +269,19 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", - "seriesOverrides": [], + "seriesOverrides": [ + { + "$$hashKey": "object:1069", + "alias": "Failed", + "color": "#C4162A", + "linewidth": 2, + "yaxis": 2 + } + ], "spaceLength": 10, "stack": false, "steppedLine": false, @@ -302,8 +301,18 @@ "expr": "sum(rate(tidb_executor_statement_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m]))", "hide": false, "interval": "", - "legendFormat": "total", + "legendFormat": "Total", "refId": "B" + }, + { + "exemplar": true, + "expr": "sum(rate(tidb_server_execute_error_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) ", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Failed", + "refId": "C" } ], "thresholds": [], @@ -327,6 +336,7 @@ }, "yaxes": [ { + "$$hashKey": "object:822", "decimals": 0, "format": "short", "label": null, @@ -336,11 +346,12 @@ "show": true }, { + "$$hashKey": "object:823", "format": "short", - "label": null, + "label": "", "logBase": 1, "max": null, - "min": null, + "min": "0", "show": true } ], @@ -359,10 +370,6 @@ "description": "TiDB command total statistics including both successful and failed ones", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -397,7 +404,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -470,10 +477,6 @@ "description": "TiDB plan cache hit total.", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -491,12 +494,12 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, "rightSide": true, "show": true, - "sort": null, - "sortDesc": null, + "sort": "avg", + "sortDesc": true, "total": false, "values": true }, @@ -508,7 +511,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -549,6 +552,7 @@ }, "yaxes": [ { + "$$hashKey": "object:3416", "decimals": 0, "format": "short", "label": null, @@ -558,6 +562,7 @@ "show": true }, { + "$$hashKey": "object:3417", "format": "short", "label": null, "logBase": 1, @@ -581,10 +586,6 @@ "description": "kv/tso request total by command type", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -619,7 +620,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -716,10 +717,6 @@ "description": "TiDB current connection counts", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -737,7 +734,7 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, "rightSide": true, "show": true, @@ -754,7 +751,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -812,6 +809,7 @@ }, "yaxes": [ { + "$$hashKey": "object:3472", "decimals": 0, "format": "short", "label": null, @@ -821,6 +819,7 @@ "show": true }, { + "$$hashKey": "object:3473", "format": "short", "label": null, "logBase": 1, @@ -841,13 +840,9 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "decimals": null, - "description": "avg: average cpu usage for all instance.\ndelta: max(cpu utilization) - min(cpu utilization)\nmax: max(cpu utilization)", + "description": "- avg: average cpu usage for all instance.\n- delta: max(cpu utilization) - min(cpu utilization)\n- max: max(cpu utilization)", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -869,8 +864,6 @@ "min": false, "rightSide": true, "show": true, - "sort": "avg", - "sortDesc": true, "total": false, "values": true }, @@ -882,7 +875,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -903,19 +896,19 @@ }, { "exemplar": true, - "expr": "(max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m])) - min(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m])))", + "expr": "max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\",job=\"tidb\"}[1m]))", "hide": false, "interval": "", - "legendFormat": "delta", - "refId": "B" + "legendFormat": "max", + "refId": "C" }, { "exemplar": true, - "expr": "max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\",job=\"tidb\"}[1m]))", + "expr": "(max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m])) - min(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m])))", "hide": false, "interval": "", - "legendFormat": "max", - "refId": "C" + "legendFormat": "delta", + "refId": "B" } ], "thresholds": [], @@ -939,6 +932,7 @@ }, "yaxes": [ { + "$$hashKey": "object:188", "decimals": null, "format": "percentunit", "label": null, @@ -948,6 +942,7 @@ "show": true }, { + "$$hashKey": "object:189", "format": "short", "label": null, "logBase": 1, @@ -968,13 +963,9 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "decimals": null, - "description": "avg: average cpu usage for all instance.\ndelta: max(cpu utilization) - min(cpu utilization)\nmax: max(cpu utilization)", + "description": "#### CPU: CPU usage for all instance.\n- CPU-Avg: average cpu usage for all instance.\n- CPU-Delta: max(cpu utilization) - min(cpu utilization)\n- CPU-Max: max(cpu utilization)\n\n#### IO MBps: The total bytes of read and write in all TiKV instances.", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -996,8 +987,6 @@ "min": false, "rightSide": true, "show": true, - "sort": "avg", - "sortDesc": true, "total": false, "values": true }, @@ -1009,11 +998,27 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", - "seriesOverrides": [], + "seriesOverrides": [ + { + "$$hashKey": "object:371", + "alias": "IO-Avg", + "yaxis": 2 + }, + { + "$$hashKey": "object:563", + "alias": "IO-Max", + "yaxis": 2 + }, + { + "$$hashKey": "object:576", + "alias": "IO-Delta", + "yaxis": 2 + } + ], "spaceLength": 10, "stack": false, "steppedLine": false, @@ -1022,34 +1027,61 @@ "exemplar": true, "expr": "avg(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=~\".*tikv\"}[1m]))", "format": "time_series", + "hide": false, "interval": "", "intervalFactor": 2, - "legendFormat": "avg", + "legendFormat": "CPU-Avg", "refId": "A", "step": 30 }, + { + "exemplar": true, + "expr": "max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=~\".*tikv\"}[1m]))", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU-Max", + "refId": "C" + }, { "exemplar": true, "expr": "(max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=~\".*tikv\"}[1m])) - min(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=~\".*tikv\"}[1m])))", "hide": false, "interval": "", - "legendFormat": "delta", + "legendFormat": "CPU-Delta", "refId": "B" }, { "exemplar": true, - "expr": "max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=~\".*tikv\"}[1m]))", + "expr": "avg(sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"wal_file_bytes|bytes_read|iter_bytes_read\"}[1m])) by (instance))", "hide": false, + "instant": false, "interval": "", - "legendFormat": "max", - "refId": "C" + "legendFormat": "IO-Avg", + "refId": "D" + }, + { + "exemplar": true, + "expr": "max(sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"wal_file_bytes|bytes_read|iter_bytes_read\"}[1m])) by (instance))", + "hide": false, + "interval": "", + "legendFormat": "IO-Max", + "refId": "E" + }, + { + "exemplar": true, + "expr": "max(sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"wal_file_bytes|bytes_read|iter_bytes_read\"}[1m])) by (instance)) - min(sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"wal_file_bytes|bytes_read|iter_bytes_read\"}[1m])) by (instance))", + "hide": false, + "interval": "", + "legendFormat": "IO-Delta", + "refId": "F" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "TiKV CPU", + "title": "TiKV CPU/IO MBps", "tooltip": { "msResolution": false, "shared": true, @@ -1066,20 +1098,23 @@ }, "yaxes": [ { - "decimals": 0, + "$$hashKey": "object:208", + "decimals": null, "format": "percentunit", - "label": null, + "label": "CPU (%)", "logBase": 1, "max": null, "min": "0", "show": true }, { - "format": "short", - "label": null, + "$$hashKey": "object:209", + "decimals": null, + "format": "Bps", + "label": "MBps ", "logBase": 1, "max": null, - "min": null, + "min": "0", "show": true } ], @@ -1095,10 +1130,6 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "description": "TiDB query durations", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -1115,12 +1146,10 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, "rightSide": true, "show": true, - "sort": "avg", - "sortDesc": true, "total": false, "values": true }, @@ -1132,7 +1161,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -1143,21 +1172,21 @@ "targets": [ { "exemplar": true, - "expr": "histogram_quantile(0.99, sum(rate(tidb_server_handle_query_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type!=\"internal\"}[1m])) by (le))", + "expr": "sum(rate(tidb_server_handle_query_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type!=\"internal\"}[1m])) / sum(rate(tidb_server_handle_query_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type!=\"internal\"}[1m]))", "format": "time_series", "interval": "", "intervalFactor": 2, - "legendFormat": "99", - "refId": "B" + "legendFormat": "avg", + "refId": "D" }, { "exemplar": true, - "expr": "sum(rate(tidb_server_handle_query_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type!=\"internal\"}[1m])) / sum(rate(tidb_server_handle_query_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type!=\"internal\"}[1m]))", + "expr": "histogram_quantile(0.99, sum(rate(tidb_server_handle_query_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type!=\"internal\"}[1m])) by (le))", "format": "time_series", "interval": "", "intervalFactor": 2, - "legendFormat": "avg", - "refId": "D" + "legendFormat": "99", + "refId": "B" }, { "exemplar": true, @@ -1188,6 +1217,7 @@ }, "yaxes": [ { + "$$hashKey": "object:3308", "format": "s", "label": null, "logBase": 1, @@ -1196,6 +1226,7 @@ "show": true }, { + "$$hashKey": "object:3309", "format": "short", "label": null, "logBase": 1, @@ -1219,10 +1250,6 @@ "description": "TiDB connection idle durations", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -1241,12 +1268,10 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, "rightSide": true, "show": true, - "sort": "avg", - "sortDesc": true, "total": false, "values": true }, @@ -1258,7 +1283,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -1267,6 +1292,14 @@ "stack": false, "steppedLine": false, "targets": [ + { + "exemplar": true, + "expr": "(sum(rate(tidb_server_conn_idle_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", in_txn='1'}[1m])) / sum(rate(tidb_server_conn_idle_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", in_txn='1'}[1m])))", + "hide": false, + "interval": "", + "legendFormat": "avg-in-txn", + "refId": "C" + }, { "exemplar": true, "expr": "(sum(rate(tidb_server_conn_idle_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", in_txn='0'}[1m])) / sum(rate(tidb_server_conn_idle_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", in_txn='0'}[1m])))", @@ -1278,14 +1311,6 @@ "refId": "A", "step": 30 }, - { - "exemplar": true, - "expr": "(sum(rate(tidb_server_conn_idle_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", in_txn='1'}[1m])) / sum(rate(tidb_server_conn_idle_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", in_txn='1'}[1m])))", - "hide": false, - "interval": "", - "legendFormat": "avg-in-txn", - "refId": "C" - }, { "exemplar": true, "expr": "histogram_quantile(0.99, sum(rate(tidb_server_conn_idle_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", in_txn='1'}[1m])) by (le,in_txn))", @@ -1324,6 +1349,7 @@ }, "yaxes": [ { + "$$hashKey": "object:3364", "decimals": null, "format": "s", "label": null, @@ -1333,6 +1359,7 @@ "show": true }, { + "$$hashKey": "object:3365", "format": "short", "label": null, "logBase": 1, @@ -1356,16 +1383,12 @@ "description": "The time cost of parsing SQL to AST", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 7, - "w": 12, + "h": 8, + "w": 8, "x": 0, "y": 36 }, @@ -1378,9 +1401,9 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "sort": null, "sortDesc": null, @@ -1395,7 +1418,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -1404,15 +1427,6 @@ "stack": false, "steppedLine": false, "targets": [ - { - "expr": "histogram_quantile(0.99, sum(rate(tidb_session_parse_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) by (le))", - "format": "time_series", - "instant": false, - "intervalFactor": 2, - "legendFormat": "99", - "refId": "A", - "step": 30 - }, { "expr": "histogram_quantile(0.95, sum(rate(tidb_session_parse_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) by (le))", "format": "time_series", @@ -1428,6 +1442,15 @@ "interval": "", "legendFormat": "avg", "refId": "C" + }, + { + "expr": "histogram_quantile(0.99, sum(rate(tidb_session_parse_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) by (le))", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "99", + "refId": "D", + "step": 30 } ], "thresholds": [], @@ -1451,6 +1474,7 @@ }, "yaxes": [ { + "$$hashKey": "object:1955", "decimals": null, "format": "s", "label": null, @@ -1460,6 +1484,7 @@ "show": true }, { + "$$hashKey": "object:1956", "format": "short", "label": null, "logBase": 1, @@ -1482,17 +1507,13 @@ "description": "the time to build plan", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 7, - "w": 12, - "x": 12, + "h": 8, + "w": 8, + "x": 8, "y": 36 }, "hiddenSeries": false, @@ -1501,9 +1522,9 @@ "alignAsTable": true, "avg": true, "current": false, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "total": false, "values": true @@ -1516,7 +1537,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -1525,6 +1546,14 @@ "stack": false, "steppedLine": false, "targets": [ + { + "exemplar": true, + "expr": "(sum(rate(tidb_session_compile_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) / sum(rate(tidb_session_compile_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])))", + "hide": false, + "interval": "", + "legendFormat": "avg", + "refId": "D" + }, { "exemplar": true, "expr": "histogram_quantile(0.99, sum(rate(tidb_session_compile_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) by (le))", @@ -1533,21 +1562,13 @@ "intervalFactor": 2, "legendFormat": "99", "refId": "B" - }, - { - "exemplar": true, - "expr": "(sum(rate(tidb_session_compile_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) / sum(rate(tidb_session_compile_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])))", - "hide": false, - "interval": "", - "legendFormat": "avg", - "refId": "D" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Compile", + "title": "Compile Duration", "tooltip": { "msResolution": false, "shared": true, @@ -1564,6 +1585,7 @@ }, "yaxes": [ { + "$$hashKey": "object:283", "format": "s", "label": null, "logBase": 1, @@ -1572,6 +1594,7 @@ "show": true }, { + "$$hashKey": "object:284", "format": "short", "label": null, "logBase": 1, @@ -1595,18 +1618,14 @@ "description": "The time cost of executing the SQL which does not include the time to get the results of the query .", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 7, - "w": 12, - "x": 0, - "y": 43 + "h": 8, + "w": 8, + "x": 16, + "y": 36 }, "hiddenSeries": false, "id": 169, @@ -1617,9 +1636,9 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "sort": null, "sortDesc": null, @@ -1634,7 +1653,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -1643,15 +1662,6 @@ "stack": false, "steppedLine": false, "targets": [ - { - "expr": "histogram_quantile(0.99, sum(rate(tidb_session_execute_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) by (le))", - "format": "time_series", - "instant": false, - "intervalFactor": 2, - "legendFormat": "99", - "refId": "A", - "step": 30 - }, { "expr": "histogram_quantile(0.95, sum(rate(tidb_session_execute_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) by (le))", "format": "time_series", @@ -1667,6 +1677,15 @@ "interval": "", "legendFormat": "avg", "refId": "C" + }, + { + "expr": "histogram_quantile(0.99, sum(rate(tidb_session_execute_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", sql_type=\"general\"}[1m])) by (le))", + "format": "time_series", + "instant": false, + "intervalFactor": 2, + "legendFormat": "99", + "refId": "A", + "step": 30 } ], "thresholds": [], @@ -1690,6 +1709,7 @@ }, "yaxes": [ { + "$$hashKey": "object:2109", "decimals": null, "format": "s", "label": null, @@ -1699,6 +1719,7 @@ "show": true }, { + "$$hashKey": "object:2110", "format": "short", "label": null, "logBase": 1, @@ -1718,32 +1739,34 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "The duration of a client starting to wait for the TS until received the TS result.", + "decimals": null, + "description": "tidb avg kv request duration", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 43 + "h": 8, + "w": 8, + "x": 0, + "y": 44 }, "hiddenSeries": false, - "id": 77, + "id": 172, + "interval": "", "legend": { "alignAsTable": true, "avg": true, "current": false, - "max": true, + "hideEmpty": true, + "hideZero": true, + "max": false, "min": false, "rightSide": true, "show": true, + "sort": "avg", + "sortDesc": true, "total": false, "values": true }, @@ -1755,7 +1778,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -1766,48 +1789,18 @@ "targets": [ { "exemplar": true, - "expr": "histogram_quantile(0.999, sum(rate(pd_client_cmd_handle_cmds_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])) by (le))", - "format": "time_series", - "hide": true, - "interval": "", - "intervalFactor": 2, - "legendFormat": "999", - "refId": "A", - "step": 10 - }, - { - "exemplar": true, - "expr": "histogram_quantile(0.99, sum(rate(pd_client_cmd_handle_cmds_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])) by (le))", - "format": "time_series", - "interval": "", - "intervalFactor": 2, - "legendFormat": "99", - "refId": "B" - }, - { - "exemplar": true, - "expr": "histogram_quantile(0.90, sum(rate(pd_client_cmd_handle_cmds_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])) by (le))", - "format": "time_series", - "hide": true, - "interval": "", - "intervalFactor": 2, - "legendFormat": "90", - "refId": "C" - }, - { - "exemplar": true, - "expr": "(sum(rate(pd_client_cmd_handle_cmds_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])) / sum(rate(pd_client_cmd_handle_cmds_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])))", + "expr": "sum(rate(tidb_tikvclient_request_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", store!=\"0\"}[1m])) by (type)/ sum(rate(tidb_tikvclient_request_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", store!=\"0\"}[1m])) by (type)", "hide": false, "interval": "", - "legendFormat": "avg", - "refId": "D" + "legendFormat": "{{type}}", + "refId": "C" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "PD TSO Wait Duration", + "title": "Avg TiDB KV Request Duration", "tooltip": { "msResolution": false, "shared": true, @@ -1824,6 +1817,8 @@ }, "yaxes": [ { + "$$hashKey": "object:2161", + "decimals": null, "format": "s", "label": null, "logBase": 1, @@ -1832,12 +1827,13 @@ "show": true }, { + "$$hashKey": "object:2162", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, - "show": true + "show": false } ], "yaxis": { @@ -1852,24 +1848,20 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "decimals": null, - "description": "tidb avg kv request duration", + "description": "tikv grpc avg duration", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 11, - "w": 12, - "x": 0, - "y": 50 + "h": 8, + "w": 8, + "x": 8, + "y": 44 }, "hiddenSeries": false, - "id": 172, + "id": 173, "interval": "", "legend": { "alignAsTable": true, @@ -1877,12 +1869,12 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, "rightSide": true, "show": true, "sort": "avg", - "sortDesc": false, + "sortDesc": true, "total": false, "values": true }, @@ -1894,7 +1886,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -1905,7 +1897,7 @@ "targets": [ { "exemplar": true, - "expr": "sum(rate(tidb_tikvclient_request_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", store!=\"0\"}[1m])) by (type)/ sum(rate(tidb_tikvclient_request_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", store!=\"0\"}[1m])) by (type)", + "expr": "sum(rate(tikv_grpc_msg_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", store!=\"0\"}[1m])) by (type)/ sum(rate(tikv_grpc_msg_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", store!=\"0\"}[1m])) by (type)", "hide": false, "interval": "", "legendFormat": "{{type}}", @@ -1916,7 +1908,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Avg TiDB KV Request Duration", + "title": "Avg TiKV GRPC Duration", "tooltip": { "msResolution": false, "shared": true, @@ -1933,6 +1925,7 @@ }, "yaxes": [ { + "$$hashKey": "object:2263", "decimals": null, "format": "s", "label": null, @@ -1942,6 +1935,7 @@ "show": true }, { + "$$hashKey": "object:2264", "format": "short", "label": null, "logBase": 1, @@ -1961,38 +1955,28 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "decimals": null, - "description": "tikv grpc avg duration", + "description": "The duration of a client starting to wait for the TS until received the TS result.", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 11, - "w": 12, - "x": 12, - "y": 50 + "h": 8, + "w": 8, + "x": 16, + "y": 44 }, "hiddenSeries": false, - "id": 173, - "interval": "", + "id": 77, "legend": { "alignAsTable": true, "avg": true, "current": false, - "hideEmpty": true, - "hideZero": true, - "max": true, + "max": false, "min": false, "rightSide": true, "show": true, - "sort": null, - "sortDesc": null, "total": false, "values": true }, @@ -2004,7 +1988,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -2015,10 +1999,40 @@ "targets": [ { "exemplar": true, - "expr": "sum(rate(tikv_grpc_msg_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", store!=\"0\"}[1m])) by (type)/ sum(rate(tikv_grpc_msg_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", store!=\"0\"}[1m])) by (type)", + "expr": "(sum(rate(pd_client_cmd_handle_cmds_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])) / sum(rate(pd_client_cmd_handle_cmds_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])))", "hide": false, "interval": "", - "legendFormat": "{{type}}", + "legendFormat": "avg", + "refId": "D" + }, + { + "exemplar": true, + "expr": "histogram_quantile(0.999, sum(rate(pd_client_cmd_handle_cmds_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])) by (le))", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "999", + "refId": "A", + "step": 10 + }, + { + "exemplar": true, + "expr": "histogram_quantile(0.99, sum(rate(pd_client_cmd_handle_cmds_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])) by (le))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "99", + "refId": "B" + }, + { + "exemplar": true, + "expr": "histogram_quantile(0.90, sum(rate(pd_client_cmd_handle_cmds_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", type=\"wait\"}[1m])) by (le))", + "format": "time_series", + "hide": true, + "interval": "", + "intervalFactor": 2, + "legendFormat": "90", "refId": "C" } ], @@ -2026,7 +2040,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Avg TiKV GRPC Duration", + "title": "PD TSO Wait Duration", "tooltip": { "msResolution": false, "shared": true, @@ -2043,7 +2057,7 @@ }, "yaxes": [ { - "decimals": null, + "$$hashKey": "object:2315", "format": "s", "label": null, "logBase": 1, @@ -2052,12 +2066,13 @@ "show": true }, { + "$$hashKey": "object:2316", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, - "show": false + "show": true } ], "yaxis": { @@ -2075,18 +2090,14 @@ "description": "The time consumed by processing asynchronous write requests.\nStorage async write duration = store duration + apply duration", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 7, - "w": 12, + "h": 8, + "w": 8, "x": 0, - "y": 61 + "y": 52 }, "hiddenSeries": false, "id": 185, @@ -2097,12 +2108,10 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, - "sort": null, - "sortDesc": null, "total": false, "values": true }, @@ -2114,7 +2123,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -2161,6 +2170,7 @@ }, "yaxes": [ { + "$$hashKey": "object:2371", "decimals": null, "format": "s", "label": null, @@ -2170,6 +2180,7 @@ "show": true }, { + "$$hashKey": "object:2372", "format": "short", "label": null, "logBase": 1, @@ -2193,18 +2204,14 @@ "description": "The store time duration of each request", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 7, - "w": 12, - "x": 12, - "y": 61 + "h": 8, + "w": 8, + "x": 8, + "y": 52 }, "hiddenSeries": false, "id": 183, @@ -2215,9 +2222,9 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "sort": null, "sortDesc": null, @@ -2232,7 +2239,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -2279,6 +2286,7 @@ }, "yaxes": [ { + "$$hashKey": "object:2520", "decimals": null, "format": "s", "label": null, @@ -2288,6 +2296,7 @@ "show": true }, { + "$$hashKey": "object:2521", "format": "short", "label": null, "logBase": 1, @@ -2311,18 +2320,14 @@ "description": "The store time duration of each request", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { "h": 8, - "w": 12, - "x": 0, - "y": 68 + "w": 8, + "x": 16, + "y": 52 }, "hiddenSeries": false, "id": 174, @@ -2333,9 +2338,9 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "sort": null, "sortDesc": null, @@ -2350,7 +2355,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -2397,6 +2402,7 @@ }, "yaxes": [ { + "$$hashKey": "object:2572", "decimals": null, "format": "s", "label": null, @@ -2406,6 +2412,7 @@ "show": true }, { + "$$hashKey": "object:2573", "format": "short", "label": null, "logBase": 1, @@ -2426,24 +2433,20 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "decimals": null, - "description": "The time consumed when Raft commits log", + "description": "The time consumed when Raft appends log", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 68 + "h": 9, + "w": 8, + "x": 0, + "y": 60 }, "hiddenSeries": false, - "id": 177, + "id": 176, "interval": "", "legend": { "alignAsTable": true, @@ -2451,9 +2454,9 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "sort": null, "sortDesc": null, @@ -2468,7 +2471,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -2479,7 +2482,7 @@ "targets": [ { "exemplar": true, - "expr": "(sum(rate(tikv_raftstore_commit_log_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) / sum(rate(tikv_raftstore_commit_log_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])))", + "expr": "(sum(rate(tikv_raftstore_append_log_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) / sum(rate(tikv_raftstore_append_log_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])))", "hide": false, "interval": "", "legendFormat": "avg", @@ -2487,7 +2490,7 @@ }, { "exemplar": true, - "expr": "histogram_quantile(0.99, sum(rate(tikv_raftstore_commit_log_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) by (le))", + "expr": "histogram_quantile(0.99, sum(rate(tikv_raftstore_append_log_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) by (le))", "hide": false, "interval": "", "legendFormat": "99", @@ -2498,7 +2501,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Commit Log Duration", + "title": "Append Log Duration", "tooltip": { "msResolution": false, "shared": true, @@ -2515,6 +2518,7 @@ }, "yaxes": [ { + "$$hashKey": "object:2672", "decimals": null, "format": "s", "label": null, @@ -2524,6 +2528,7 @@ "show": true }, { + "$$hashKey": "object:2673", "format": "short", "label": null, "logBase": 1, @@ -2544,24 +2549,20 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "decimals": null, - "description": "The time consumed when Raft appends log", + "description": "The time consumed when Raft commits log", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 76 + "h": 9, + "w": 8, + "x": 8, + "y": 60 }, "hiddenSeries": false, - "id": 176, + "id": 177, "interval": "", "legend": { "alignAsTable": true, @@ -2569,9 +2570,9 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "sort": null, "sortDesc": null, @@ -2586,7 +2587,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -2597,7 +2598,7 @@ "targets": [ { "exemplar": true, - "expr": "(sum(rate(tikv_raftstore_append_log_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) / sum(rate(tikv_raftstore_append_log_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])))", + "expr": "(sum(rate(tikv_raftstore_commit_log_duration_seconds_sum{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) / sum(rate(tikv_raftstore_commit_log_duration_seconds_count{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])))", "hide": false, "interval": "", "legendFormat": "avg", @@ -2605,7 +2606,7 @@ }, { "exemplar": true, - "expr": "histogram_quantile(0.99, sum(rate(tikv_raftstore_append_log_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) by (le))", + "expr": "histogram_quantile(0.99, sum(rate(tikv_raftstore_commit_log_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}[1m])) by (le))", "hide": false, "interval": "", "legendFormat": "99", @@ -2616,7 +2617,7 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Append Log Duration", + "title": "Commit Log Duration", "tooltip": { "msResolution": false, "shared": true, @@ -2633,6 +2634,7 @@ }, "yaxes": [ { + "$$hashKey": "object:2724", "decimals": null, "format": "s", "label": null, @@ -2642,6 +2644,7 @@ "show": true }, { + "$$hashKey": "object:2725", "format": "short", "label": null, "logBase": 1, @@ -2665,18 +2668,14 @@ "description": "The time consumed for Raft to apply logs", "editable": true, "error": false, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 76 + "h": 9, + "w": 8, + "x": 16, + "y": 60 }, "hiddenSeries": false, "id": 186, @@ -2687,9 +2686,9 @@ "current": false, "hideEmpty": true, "hideZero": true, - "max": true, + "max": false, "min": false, - "rightSide": true, + "rightSide": false, "show": true, "sort": null, "sortDesc": null, @@ -2704,7 +2703,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "7.5.11", + "pluginVersion": "8.0.7", "pointradius": 5, "points": false, "renderer": "flot", @@ -2751,6 +2750,7 @@ }, "yaxes": [ { + "$$hashKey": "object:2776", "decimals": null, "format": "s", "label": null, @@ -2760,6 +2760,7 @@ "show": true }, { + "$$hashKey": "object:2777", "format": "short", "label": null, "logBase": 1, @@ -2819,28 +2820,6 @@ "tagsQuery": "", "type": "query", "useTags": false - }, - { - "allValue": null, - "current": {}, - "datasource": "${DS_TEST-CLUSTER}", - "definition": "", - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "instance", - "options": [], - "query": "label_values(pd_cluster_status{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\"}, instance)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false } ] }, diff --git a/metrics/grafana/tidb.json b/metrics/grafana/tidb.json index b2889c4dc97d3..c0f3f4b771ec7 100644 --- a/metrics/grafana/tidb.json +++ b/metrics/grafana/tidb.json @@ -12970,7 +12970,668 @@ ], "title": "Batch Client", "type": "row" - } + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 232, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "TiDB TopSQL ignore event information ", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 17 + }, + "hiddenSeries": false, + "id": 234, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.11", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "sum(increase(tidb_topsql_ignored_total{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}[1m])) by (type)", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{type}}", + "refId": "A", + "step": 60 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Ignore Event Per Minute", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "label": null, + "logBase": 2, + "max": null, + "min": "0.001", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "Durations for different TopSQL report types with 99 percent buckets", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 17 + }, + "hiddenSeries": false, + "id": 239, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.11", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "histogram_quantile(0.99, sum(rate(tidb_topsql_report_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", result=\"ok\"}[5m])) by (le, type))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{type}}", + "refId": "A" + }, + { + "exemplar": true, + "expr": "histogram_quantile(0.99, sum(rate(tikv_resource_metering_report_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}[5m])) by (le))", + "hide": false, + "interval": "", + "legendFormat": "tikv-record", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "99 Report Duration", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 2, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 24 + }, + "hiddenSeries": false, + "id": 242, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.11", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "sum(increase(tidb_topsql_report_data_total_sum{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}[1m])) by (type, job)", + "hide": false, + "interval": "", + "legendFormat": "{{job}}-{{type}}", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Report Data Count Per Minute", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "Total TiDB/TiKV TopSQL report count.", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 24 + }, + "hiddenSeries": false, + "id": 243, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.11", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "sum(tidb_topsql_report_duration_seconds_count{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}) by (type, result)", + "hide": false, + "interval": "", + "legendFormat": "{{type}}-{{result}}", + "refId": "B" + }, + { + "exemplar": true, + "expr": "sum(increase(tidb_topsql_report_duration_seconds_count{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}[1m])) by (type, result)", + "hide": true, + "interval": "", + "legendFormat": "", + "refId": "A" + }, + { + "exemplar": true, + "expr": "sum(tikv_resource_metering_report_data_count{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", type=\"sent\"}) by (type)", + "hide": false, + "interval": "", + "legendFormat": "tikv-{{type}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Total Report Count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 31 + }, + "hiddenSeries": false, + "id": 241, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": false, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.11", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "rate(tidb_server_cpu_profile_total{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}[30s])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A", + "step": 40 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU Profiling OPS", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "description": "", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 31 + }, + "hiddenSeries": false, + "id": 245, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": true, + "min": false, + "rightSide": true, + "show": false, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.11", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "rate(tikv_resource_metering_stat_task_count{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{instance}}", + "refId": "A", + "step": 40 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "TiKV Stat Task OPS", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "title": "TopSQL", + "type": "row" + } ], "refresh": "30s", "schemaVersion": 18, diff --git a/metrics/main_test.go b/metrics/main_test.go index 96050f378e142..d207a172d0eda 100644 --- a/metrics/main_test.go +++ b/metrics/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/owner/main_test.go b/owner/main_test.go index ba902fed7556b..1aff62becfd64 100644 --- a/owner/main_test.go +++ b/owner/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), } goleak.VerifyTestMain(m, opts...) diff --git a/owner/manager.go b/owner/manager.go index 3bed53a1907b5..d7708854ce298 100644 --- a/owner/manager.go +++ b/owner/manager.go @@ -200,7 +200,7 @@ func (m *ownerManager) CampaignOwner() error { func (m *ownerManager) ResignOwner(ctx context.Context) error { elec := (*concurrency.Election)(atomic.LoadPointer(&m.elec)) if elec == nil { - return errors.Errorf("This node is not a ddl owner, can't be resigned.") + return errors.Errorf("This node is not a ddl owner, can't be resigned") } childCtx, cancel := context.WithTimeout(ctx, keyOpDefaultTimeout) diff --git a/parser/ast/ddl.go b/parser/ast/ddl.go index 6ab941275c14b..54b2734b8fde5 100644 --- a/parser/ast/ddl.go +++ b/parser/ast/ddl.go @@ -175,6 +175,9 @@ type AlterDatabaseStmt struct { // Restore implements Node interface. func (n *AlterDatabaseStmt) Restore(ctx *format.RestoreCtx) error { + if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() && n.isAllPlacementOptions() { + return nil + } // If all options placement options and RestoreTiDBSpecialComment flag is on, // we should restore the whole node in special comment. For example, the restore result should be: // /*T![placement] ALTER DATABASE `db1` PLACEMENT POLICY = `p1` */ @@ -1936,6 +1939,9 @@ type PlacementOption struct { } func (n *PlacementOption) Restore(ctx *format.RestoreCtx) error { + if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() { + return nil + } fn := func() error { switch n.Tp { case PlacementOptionPrimaryRegion: @@ -2324,6 +2330,9 @@ func (n *TableOption) Restore(ctx *format.RestoreCtx) error { ctx.WritePlain("= ") ctx.WriteString(n.StrValue) case TableOptionPlacementPolicy: + if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() { + return nil + } placementOpt := PlacementOption{ Tp: PlacementOptionPolicy, UintValue: n.UintValue, @@ -2685,8 +2694,25 @@ func (n *AlterOrderItem) Restore(ctx *format.RestoreCtx) error { return nil } +func (n *AlterTableSpec) IsAllPlacementRule() bool { + switch n.Tp { + case AlterTablePartitionAttributes, AlterTablePartitionOptions, AlterTableOption, AlterTableAttributes: + for _, o := range n.Options { + if o.Tp != TableOptionPlacementPolicy { + return false + } + } + return true + default: + return false + } +} + // Restore implements Node interface. func (n *AlterTableSpec) Restore(ctx *format.RestoreCtx) error { + if n.IsAllPlacementRule() && ctx.Flags.HasSkipPlacementRuleForRestoreFlag() { + return nil + } switch n.Tp { case AlterTableSetTiFlashReplica: ctx.WriteKeyWord("SET TIFLASH REPLICA ") @@ -3275,13 +3301,36 @@ type AlterTableStmt struct { Specs []*AlterTableSpec } +func (n *AlterTableStmt) HaveOnlyPlacementOptions() bool { + for _, n := range n.Specs { + if n.Tp == AlterTablePartitionOptions { + if !n.IsAllPlacementRule() { + return false + } + } else { + return false + } + + } + return true +} + // Restore implements Node interface. func (n *AlterTableStmt) Restore(ctx *format.RestoreCtx) error { + if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() && n.HaveOnlyPlacementOptions() { + return nil + } ctx.WriteKeyWord("ALTER TABLE ") if err := n.Table.Restore(ctx); err != nil { return errors.Annotate(err, "An error occurred while restore AlterTableStmt.Table") } - for i, spec := range n.Specs { + var specs []*AlterTableSpec + for _, spec := range n.Specs { + if !(spec.IsAllPlacementRule() && ctx.Flags.HasSkipPlacementRuleForRestoreFlag()) { + specs = append(specs, spec) + } + } + for i, spec := range specs { if i == 0 || spec.Tp == AlterTablePartition || spec.Tp == AlterTableRemovePartitioning || spec.Tp == AlterTableImportTablespace || spec.Tp == AlterTableDiscardTablespace { ctx.WritePlain(" ") } else { @@ -3991,6 +4040,9 @@ type AlterPlacementPolicyStmt struct { } func (n *AlterPlacementPolicyStmt) Restore(ctx *format.RestoreCtx) error { + if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() { + return nil + } if ctx.Flags.HasTiDBSpecialCommentFlag() { return restorePlacementStmtInSpecialComment(ctx, n) } diff --git a/parser/ast/ddl_test.go b/parser/ast/ddl_test.go index 108c4c609f329..beb3a27b97370 100644 --- a/parser/ast/ddl_test.go +++ b/parser/ast/ddl_test.go @@ -754,3 +754,76 @@ func TestDropPlacementPolicyRestore(t *testing.T) { runNodeRestoreTestWithFlags(t, testCases, "%s", extractNodeFunc, ca.flags) } } + +func TestRemovePlacementRestore(t *testing.T) { + f := format.DefaultRestoreFlags | format.SkipPlacementRuleForRestore + cases := []struct { + sourceSQL string + expectSQL string + }{ + { + "CREATE TABLE t1 (id BIGINT NOT NULL PRIMARY KEY auto_increment, b varchar(255)) PLACEMENT POLICY=placement1;", + "CREATE TABLE `t1` (`id` BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,`b` VARCHAR(255)) ", + }, + { + "CREATE TABLE `t1` (\n `a` int(11) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![placement] PLACEMENT POLICY=`p2` */", + "CREATE TABLE `t1` (`a` INT(11) DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARACTER SET = UTF8MB4 DEFAULT COLLATE = UTF8MB4_BIN ", + }, + { + "CREATE TABLE t4 (firstname VARCHAR(25) NOT NULL,lastname VARCHAR(25) NOT NULL,username VARCHAR(16) NOT NULL,email VARCHAR(35),joined DATE NOT NULL) PARTITION BY RANGE( YEAR(joined) ) (PARTITION p0 VALUES LESS THAN (1960) PLACEMENT POLICY=p1,PARTITION p1 VALUES LESS THAN (1970),PARTITION p2 VALUES LESS THAN (1980),PARTITION p3 VALUES LESS THAN (1990),PARTITION p4 VALUES LESS THAN MAXVALUE);", + "CREATE TABLE `t4` (`firstname` VARCHAR(25) NOT NULL,`lastname` VARCHAR(25) NOT NULL,`username` VARCHAR(16) NOT NULL,`email` VARCHAR(35),`joined` DATE NOT NULL) PARTITION BY RANGE (YEAR(`joined`)) (PARTITION `p0` VALUES LESS THAN (1960) ,PARTITION `p1` VALUES LESS THAN (1970),PARTITION `p2` VALUES LESS THAN (1980),PARTITION `p3` VALUES LESS THAN (1990),PARTITION `p4` VALUES LESS THAN (MAXVALUE))", + }, + { + "ALTER TABLE t3 PLACEMENT POLICY=DEFAULT;", + "ALTER TABLE `t3`", + }, + { + "ALTER TABLE t1 PLACEMENT POLICY=p10", + "ALTER TABLE `t1`", + }, + { + "ALTER TABLE t1 PLACEMENT POLICY=p10, add d text(50)", + "ALTER TABLE `t1` ADD COLUMN `d` TEXT(50)", + }, + { + "alter table tp PARTITION p1 placement policy p2", + "", + }, + { + "alter table t add d text(50) PARTITION p1 placement policy p2", + "ALTER TABLE `t` ADD COLUMN `d` TEXT(50)", + }, + { + "alter table tp set tiflash replica 1 PARTITION p1 placement policy p2", + "ALTER TABLE `tp` SET TIFLASH REPLICA 1", + }, + { + "ALTER DATABASE TestResetPlacementDB PLACEMENT POLICY SET DEFAULT", + "", + }, + + { + "ALTER DATABASE TestResetPlacementDB PLACEMENT POLICY p1 charset utf8mb4", + "ALTER DATABASE `TestResetPlacementDB` CHARACTER SET = utf8mb4", + }, + { + "/*T![placement] ALTER DATABASE `db1` PLACEMENT POLICY = `p1` */", + "", + }, + { + "ALTER PLACEMENT POLICY p3 PRIMARY_REGION='us-east-1' REGIONS='us-east-1,us-east-2,us-west-1';", + "", + }, + } + + extractNodeFunc := func(node Node) Node { + return node + } + + for _, ca := range cases { + testCases := []NodeRestoreTestCase{ + {ca.sourceSQL, ca.expectSQL}, + } + runNodeRestoreTestWithFlagsStmtChange(t, testCases, "%s", extractNodeFunc, f) + } +} diff --git a/parser/ast/dml.go b/parser/ast/dml.go index cd29e293ba875..1da250553bac0 100644 --- a/parser/ast/dml.go +++ b/parser/ast/dml.go @@ -119,7 +119,9 @@ func (*Join) resultSet() {} // We get (t1 join t3) left join t2, the semantics is correct. func NewCrossJoin(left, right ResultSetNode) (n *Join) { rj, ok := right.(*Join) - if !ok || rj.Right == nil { + // don't break the explicit parents name scope constraints. + // this kind of join re-order can be done in logical-phase after the name resolution. + if !ok || rj.Right == nil || rj.ExplicitParens { return &Join{Left: left, Right: right, Tp: CrossJoin} } @@ -690,7 +692,9 @@ type SelectField struct { // Auxiliary stands for if this field is auxiliary. // When we add a Field into SelectField list which is used for having/orderby clause but the field is not in select clause, // we should set its Auxiliary to true. Then the TrimExec will trim the field. - Auxiliary bool + Auxiliary bool + AuxiliaryColInAgg bool + AuxiliaryColInOrderBy bool } // Restore implements Node interface. @@ -2589,6 +2593,7 @@ const ( ShowPrivileges ShowErrors ShowBindings + ShowBindingCacheStatus ShowPumpStatus ShowDrainerStatus ShowOpenTables @@ -2915,6 +2920,8 @@ func (n *ShowStmt) Restore(ctx *format.RestoreCtx) error { ctx.WriteKeyWord("SESSION ") } ctx.WriteKeyWord("BINDINGS") + case ShowBindingCacheStatus: + ctx.WriteKeyWord("BINDING_CACHE STATUS") case ShowPumpStatus: ctx.WriteKeyWord("PUMP STATUS") case ShowDrainerStatus: diff --git a/parser/ast/dml_test.go b/parser/ast/dml_test.go index 624717d2d7c54..f7bfd78e25901 100644 --- a/parser/ast/dml_test.go +++ b/parser/ast/dml_test.go @@ -17,6 +17,7 @@ import ( "testing" . "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/parser/format" "github.com/stretchr/testify/require" ) @@ -228,17 +229,17 @@ func TestJoinRestore(t *testing.T) { //{"(select a from t) t1 join t t2, t3;", "((SELECT `a` FROM `t`) AS `t1` JOIN `t` AS `t2`) JOIN `t3`"}, } testChangedCases := []NodeRestoreTestCase{ - {"(a al left join b bl on al.a1 > bl.b1) join (a ar right join b br on ar.a1 > br.b1)", "((`a` AS `al` LEFT JOIN `b` AS `bl` ON `al`.`a1`>`bl`.`b1`) JOIN `b` AS `br`) LEFT JOIN `a` AS `ar` ON `ar`.`a1`>`br`.`b1`"}, + {"(a al left join b bl on al.a1 > bl.b1) join (a ar right join b br on ar.a1 > br.b1)", "(`a` AS `al` LEFT JOIN `b` AS `bl` ON `al`.`a1`>`bl`.`b1`) JOIN (`a` AS `ar` RIGHT JOIN `b` AS `br` ON `ar`.`a1`>`br`.`b1`)"}, {"a al left join b bl on al.a1 > bl.b1, a ar right join b br on ar.a1 > br.b1", "(`a` AS `al` LEFT JOIN `b` AS `bl` ON `al`.`a1`>`bl`.`b1`) JOIN (`a` AS `ar` RIGHT JOIN `b` AS `br` ON `ar`.`a1`>`br`.`b1`)"}, - {"t1 join (t2 right join t3 on t2.a > t3.a join (t4 right join t5 on t4.a > t5.a))", "(((`t1` JOIN `t2`) RIGHT JOIN `t3` ON `t2`.`a`>`t3`.`a`) JOIN `t5`) LEFT JOIN `t4` ON `t4`.`a`>`t5`.`a`"}, + {"t1 join (t2 right join t3 on t2.a > t3.a join (t4 right join t5 on t4.a > t5.a))", "`t1` JOIN ((`t2` RIGHT JOIN `t3` ON `t2`.`a`>`t3`.`a`) JOIN (`t4` RIGHT JOIN `t5` ON `t4`.`a`>`t5`.`a`))"}, {"t1 join t2 right join t3 on t2.a=t3.a", "(`t1` JOIN `t2`) RIGHT JOIN `t3` ON `t2`.`a`=`t3`.`a`"}, - {"t1 join (t2 right join t3 on t2.a=t3.a)", "(`t1` JOIN `t3`) LEFT JOIN `t2` ON `t2`.`a`=`t3`.`a`"}, + {"t1 join (t2 right join t3 on t2.a=t3.a)", "`t1` JOIN (`t2` RIGHT JOIN `t3` ON `t2`.`a`=`t3`.`a`)"}, } extractNodeFunc := func(node Node) Node { return node.(*SelectStmt).From.TableRefs } runNodeRestoreTest(t, testCases, "select * from %s", extractNodeFunc) - runNodeRestoreTestWithFlagsStmtChange(t, testChangedCases, "select * from %s", extractNodeFunc) + runNodeRestoreTestWithFlagsStmtChange(t, testChangedCases, "select * from %s", extractNodeFunc, format.DefaultRestoreFlags) } func TestTableRefsClauseRestore(t *testing.T) { diff --git a/parser/ast/misc.go b/parser/ast/misc.go index 2b6a2bd1aa09c..ab42cfbc13192 100644 --- a/parser/ast/misc.go +++ b/parser/ast/misc.go @@ -1687,8 +1687,8 @@ type BindingStatusType int8 // Binding status types. const ( - BindingStatusTypeEnable BindingStatusType = iota - BindingStatusTypeDisable + BindingStatusTypeEnabled BindingStatusType = iota + BindingStatusTypeDisabled ) // SetBindingStmt sets sql binding status. @@ -1704,10 +1704,10 @@ func (n *SetBindingStmt) Restore(ctx *format.RestoreCtx) error { ctx.WriteKeyWord("SET ") ctx.WriteKeyWord("BINDING ") switch n.BindingStatusType { - case BindingStatusTypeEnable: - ctx.WriteKeyWord("ENABLE ") - case BindingStatusTypeDisable: - ctx.WriteKeyWord("DISABLE ") + case BindingStatusTypeEnabled: + ctx.WriteKeyWord("ENABLED ") + case BindingStatusTypeDisabled: + ctx.WriteKeyWord("DISABLED ") } ctx.WriteKeyWord("FOR ") if err := n.OriginNode.Restore(ctx); err != nil { @@ -3430,7 +3430,7 @@ func (n *TableOptimizerHint) Restore(ctx *format.RestoreCtx) error { ctx.WritePlainf("%d", n.HintData.(uint64)) case "nth_plan": ctx.WritePlainf("%d", n.HintData.(int64)) - case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "merge_join", "inl_join", "broadcast_join", "broadcast_join_local", "inl_hash_join", "inl_merge_join": + case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "merge_join", "inl_join", "broadcast_join", "inl_hash_join", "inl_merge_join": for i, table := range n.Tables { if i != 0 { ctx.WritePlain(", ") diff --git a/parser/ast/util_test.go b/parser/ast/util_test.go index 29e813b1131b8..015f5dc5cc4eb 100644 --- a/parser/ast/util_test.go +++ b/parser/ast/util_test.go @@ -190,7 +190,7 @@ func runNodeRestoreTestWithFlags(t *testing.T, nodeTestCases []NodeRestoreTestCa // runNodeRestoreTestWithFlagsStmtChange likes runNodeRestoreTestWithFlags but not check if the ASTs are same. // Sometimes the AST are different and it's expected. -func runNodeRestoreTestWithFlagsStmtChange(t *testing.T, nodeTestCases []NodeRestoreTestCase, template string, extractNodeFunc func(node Node) Node) { +func runNodeRestoreTestWithFlagsStmtChange(t *testing.T, nodeTestCases []NodeRestoreTestCase, template string, extractNodeFunc func(node Node) Node, flags RestoreFlags) { p := parser.New() p.EnableWindowFunc(true) for _, testCase := range nodeTestCases { @@ -200,7 +200,7 @@ func runNodeRestoreTestWithFlagsStmtChange(t *testing.T, nodeTestCases []NodeRes comment := fmt.Sprintf("source %#v", testCase) require.NoError(t, err, comment) var sb strings.Builder - err = extractNodeFunc(stmt).Restore(NewRestoreCtx(DefaultRestoreFlags, &sb)) + err = extractNodeFunc(stmt).Restore(NewRestoreCtx(flags, &sb)) require.NoError(t, err, comment) restoreSql := fmt.Sprintf(template, sb.String()) comment = fmt.Sprintf("source %#v; restore %v", testCase, restoreSql) diff --git a/parser/auth/auth.go b/parser/auth/auth.go index 5657c6c276646..884f11c2f9d53 100644 --- a/parser/auth/auth.go +++ b/parser/auth/auth.go @@ -15,10 +15,14 @@ package auth import ( "fmt" - "github.com/pingcap/tidb/parser/format" ) +const ( + UserNameMaxLength = 32 + HostNameMaxLength = 255 +) + // UserIdentity represents username and hostname. type UserIdentity struct { Username string diff --git a/parser/charset/charset.go b/parser/charset/charset.go index 7c40767a33f22..728b21dd56d94 100644 --- a/parser/charset/charset.go +++ b/parser/charset/charset.go @@ -331,6 +331,7 @@ var collations = []*Collation{ {73, "keybcs2", "keybcs2_bin", false}, {74, "koi8r", "koi8r_bin", false}, {75, "koi8u", "koi8u_bin", false}, + {76, "utf8", "utf8_tolower_ci", false}, {77, "latin2", "latin2_bin", false}, {78, "latin5", "latin5_bin", false}, {79, "latin7", "latin7_bin", false}, @@ -476,7 +477,58 @@ var collations = []*Collation{ {245, "utf8mb4", "utf8mb4_croatian_ci", false}, {246, "utf8mb4", "utf8mb4_unicode_520_ci", false}, {247, "utf8mb4", "utf8mb4_vietnamese_ci", false}, + {248, "gb18030", "gb18030_chinese_ci", false}, + {249, "gb18030", "gb18030_bin", true}, + {250, "gb18030", "gb18030_unicode_520_ci", false}, {255, "utf8mb4", "utf8mb4_0900_ai_ci", false}, + {256, "utf8mb4", "utf8mb4_de_pb_0900_ai_ci", false}, + {257, "utf8mb4", "utf8mb4_is_0900_ai_ci", false}, + {258, "utf8mb4", "utf8mb4_lv_0900_ai_ci", false}, + {259, "utf8mb4", "utf8mb4_ro_0900_ai_ci", false}, + {260, "utf8mb4", "utf8mb4_sl_0900_ai_ci", false}, + {261, "utf8mb4", "utf8mb4_pl_0900_ai_ci", false}, + {262, "utf8mb4", "utf8mb4_et_0900_ai_ci", false}, + {263, "utf8mb4", "utf8mb4_es_0900_ai_ci", false}, + {264, "utf8mb4", "utf8mb4_sv_0900_ai_ci", false}, + {265, "utf8mb4", "utf8mb4_tr_0900_ai_ci", false}, + {266, "utf8mb4", "utf8mb4_cs_0900_ai_ci", false}, + {267, "utf8mb4", "utf8mb4_da_0900_ai_ci", false}, + {268, "utf8mb4", "utf8mb4_lt_0900_ai_ci", false}, + {269, "utf8mb4", "utf8mb4_sk_0900_ai_ci", false}, + {270, "utf8mb4", "utf8mb4_es_trad_0900_ai_ci", false}, + {271, "utf8mb4", "utf8mb4_la_0900_ai_ci", false}, + {273, "utf8mb4", "utf8mb4_eo_0900_ai_ci", false}, + {274, "utf8mb4", "utf8mb4_hu_0900_ai_ci", false}, + {275, "utf8mb4", "utf8mb4_hr_0900_ai_ci", false}, + {277, "utf8mb4", "utf8mb4_vi_0900_ai_ci", false}, + {278, "utf8mb4", "utf8mb4_0900_as_cs", false}, + {279, "utf8mb4", "utf8mb4_de_pb_0900_as_cs", false}, + {280, "utf8mb4", "utf8mb4_is_0900_as_cs", false}, + {281, "utf8mb4", "utf8mb4_lv_0900_as_cs", false}, + {282, "utf8mb4", "utf8mb4_ro_0900_as_cs", false}, + {283, "utf8mb4", "utf8mb4_sl_0900_as_cs", false}, + {284, "utf8mb4", "utf8mb4_pl_0900_as_cs", false}, + {285, "utf8mb4", "utf8mb4_et_0900_as_cs", false}, + {286, "utf8mb4", "utf8mb4_es_0900_as_cs", false}, + {287, "utf8mb4", "utf8mb4_sv_0900_as_cs", false}, + {288, "utf8mb4", "utf8mb4_tr_0900_as_cs", false}, + {289, "utf8mb4", "utf8mb4_cs_0900_as_cs", false}, + {290, "utf8mb4", "utf8mb4_da_0900_as_cs", false}, + {291, "utf8mb4", "utf8mb4_lt_0900_as_cs", false}, + {292, "utf8mb4", "utf8mb4_sk_0900_as_cs", false}, + {293, "utf8mb4", "utf8mb4_es_trad_0900_as_cs", false}, + {294, "utf8mb4", "utf8mb4_la_0900_as_cs", false}, + {296, "utf8mb4", "utf8mb4_eo_0900_as_cs", false}, + {297, "utf8mb4", "utf8mb4_hu_0900_as_cs", false}, + {298, "utf8mb4", "utf8mb4_hr_0900_as_cs", false}, + {300, "utf8mb4", "utf8mb4_vi_0900_as_cs", false}, + {303, "utf8mb4", "utf8mb4_ja_0900_as_cs", false}, + {304, "utf8mb4", "utf8mb4_ja_0900_as_cs_ks", false}, + {305, "utf8mb4", "utf8mb4_0900_as_ci", false}, + {306, "utf8mb4", "utf8mb4_ru_0900_ai_ci", false}, + {307, "utf8mb4", "utf8mb4_ru_0900_as_cs", false}, + {308, "utf8mb4", "utf8mb4_zh_0900_as_cs", false}, + {309, "utf8mb4", "utf8mb4_0900_bin", false}, {2048, "utf8mb4", "utf8mb4_zh_pinyin_tidb_as_cs", false}, } diff --git a/parser/format/format.go b/parser/format/format.go index 3147d992a18a4..4b9582f49fdd3 100644 --- a/parser/format/format.go +++ b/parser/format/format.go @@ -224,6 +224,7 @@ const ( RestoreStringWithoutDefaultCharset RestoreTiDBSpecialComment + SkipPlacementRuleForRestore ) const ( @@ -300,6 +301,10 @@ func (rf RestoreFlags) HasTiDBSpecialCommentFlag() bool { return rf.has(RestoreTiDBSpecialComment) } +func (rf RestoreFlags) HasSkipPlacementRuleForRestoreFlag() bool { + return rf.has(SkipPlacementRuleForRestore) +} + // RestoreCtx is `Restore` context to hold flags and writer. type RestoreCtx struct { Flags RestoreFlags diff --git a/parser/hintparser.go b/parser/hintparser.go index 2a2dcfac5dc2d..4020f5832970d 100644 --- a/parser/hintparser.go +++ b/parser/hintparser.go @@ -41,19 +41,18 @@ type yyhintXError struct { } const ( - yyhintDefault = 57416 + yyhintDefault = 57415 yyhintEOFCode = 57344 yyhintErrCode = 57345 hintAggToCop = 57377 hintBCJoin = 57390 - hintBCJoinPreferLocal = 57391 hintBKA = 57355 hintBNL = 57357 - hintDupsWeedOut = 57412 - hintFalse = 57408 - hintFirstMatch = 57413 - hintForceIndex = 57402 - hintGB = 57411 + hintDupsWeedOut = 57411 + hintFalse = 57407 + hintFirstMatch = 57412 + hintForceIndex = 57401 + hintGB = 57410 hintHashAgg = 57379 hintHashJoin = 57359 hintIdentifier = 57347 @@ -69,11 +68,11 @@ const ( hintJoinOrder = 57352 hintJoinPrefix = 57353 hintJoinSuffix = 57354 - hintLimitToCop = 57401 - hintLooseScan = 57414 - hintMB = 57410 + hintLimitToCop = 57400 + hintLooseScan = 57413 + hintMB = 57409 hintMRR = 57365 - hintMaterialization = 57415 + hintMaterialization = 57414 hintMaxExecutionTime = 57373 hintMemoryQuota = 57384 hintMerge = 57361 @@ -88,10 +87,10 @@ const ( hintNoSemijoin = 57372 hintNoSkipScan = 57370 hintNoSwapJoinInputs = 57385 - hintNthPlan = 57400 - hintOLAP = 57403 - hintOLTP = 57404 - hintPartition = 57405 + hintNthPlan = 57399 + hintOLAP = 57402 + hintOLTP = 57403 + hintPartition = 57404 hintQBName = 57376 hintQueryType = 57386 hintReadConsistentReplica = 57387 @@ -102,145 +101,143 @@ const ( hintSetVar = 57374 hintSingleAtIdentifier = 57349 hintSkipScan = 57369 - hintStreamAgg = 57392 + hintStreamAgg = 57391 hintStringLit = 57350 - hintSwapJoinInputs = 57393 - hintTiFlash = 57407 - hintTiKV = 57406 - hintTimeRange = 57398 - hintTrue = 57409 - hintUseCascades = 57399 - hintUseIndex = 57395 - hintUseIndexMerge = 57394 - hintUsePlanCache = 57396 - hintUseToja = 57397 + hintSwapJoinInputs = 57392 + hintTiFlash = 57406 + hintTiKV = 57405 + hintTimeRange = 57397 + hintTrue = 57408 + hintUseCascades = 57398 + hintUseIndex = 57394 + hintUseIndexMerge = 57393 + hintUsePlanCache = 57395 + hintUseToja = 57396 yyhintMaxDepth = 200 - yyhintTabOfs = -172 + yyhintTabOfs = -170 ) var ( yyhintXLAT = map[int]int{ - 41: 0, // ')' (130x) - 57377: 1, // hintAggToCop (122x) - 57390: 2, // hintBCJoin (122x) - 57391: 3, // hintBCJoinPreferLocal (122x) - 57355: 4, // hintBKA (122x) - 57357: 5, // hintBNL (122x) - 57402: 6, // hintForceIndex (122x) - 57379: 7, // hintHashAgg (122x) - 57359: 8, // hintHashJoin (122x) - 57380: 9, // hintIgnoreIndex (122x) - 57378: 10, // hintIgnorePlanCache (122x) - 57363: 11, // hintIndexMerge (122x) - 57381: 12, // hintInlHashJoin (122x) - 57382: 13, // hintInlJoin (122x) - 57383: 14, // hintInlMergeJoin (122x) - 57351: 15, // hintJoinFixedOrder (122x) - 57352: 16, // hintJoinOrder (122x) - 57353: 17, // hintJoinPrefix (122x) - 57354: 18, // hintJoinSuffix (122x) - 57401: 19, // hintLimitToCop (122x) - 57373: 20, // hintMaxExecutionTime (122x) - 57384: 21, // hintMemoryQuota (122x) - 57361: 22, // hintMerge (122x) - 57365: 23, // hintMRR (122x) - 57356: 24, // hintNoBKA (122x) - 57358: 25, // hintNoBNL (122x) - 57360: 26, // hintNoHashJoin (122x) - 57367: 27, // hintNoICP (122x) - 57364: 28, // hintNoIndexMerge (122x) - 57362: 29, // hintNoMerge (122x) - 57366: 30, // hintNoMRR (122x) - 57368: 31, // hintNoRangeOptimization (122x) - 57372: 32, // hintNoSemijoin (122x) - 57370: 33, // hintNoSkipScan (122x) - 57385: 34, // hintNoSwapJoinInputs (122x) - 57400: 35, // hintNthPlan (122x) - 57376: 36, // hintQBName (122x) - 57386: 37, // hintQueryType (122x) - 57387: 38, // hintReadConsistentReplica (122x) - 57388: 39, // hintReadFromStorage (122x) - 57375: 40, // hintResourceGroup (122x) - 57371: 41, // hintSemijoin (122x) - 57374: 42, // hintSetVar (122x) - 57369: 43, // hintSkipScan (122x) - 57389: 44, // hintSMJoin (122x) - 57392: 45, // hintStreamAgg (122x) - 57393: 46, // hintSwapJoinInputs (122x) - 57398: 47, // hintTimeRange (122x) - 57399: 48, // hintUseCascades (122x) - 57395: 49, // hintUseIndex (122x) - 57394: 50, // hintUseIndexMerge (122x) - 57396: 51, // hintUsePlanCache (122x) - 57397: 52, // hintUseToja (122x) - 44: 53, // ',' (120x) - 57412: 54, // hintDupsWeedOut (100x) - 57413: 55, // hintFirstMatch (100x) - 57414: 56, // hintLooseScan (100x) - 57415: 57, // hintMaterialization (100x) - 57407: 58, // hintTiFlash (100x) - 57406: 59, // hintTiKV (100x) - 57408: 60, // hintFalse (99x) - 57403: 61, // hintOLAP (99x) - 57404: 62, // hintOLTP (99x) - 57409: 63, // hintTrue (99x) - 57411: 64, // hintGB (98x) - 57410: 65, // hintMB (98x) - 57347: 66, // hintIdentifier (97x) - 57349: 67, // hintSingleAtIdentifier (82x) - 93: 68, // ']' (76x) - 57405: 69, // hintPartition (70x) - 46: 70, // '.' (66x) - 61: 71, // '=' (66x) - 40: 72, // '(' (61x) - 57344: 73, // $end (24x) - 57436: 74, // QueryBlockOpt (17x) - 57428: 75, // Identifier (13x) - 57346: 76, // hintIntLit (8x) - 57350: 77, // hintStringLit (5x) - 57418: 78, // CommaOpt (4x) - 57424: 79, // HintTable (4x) - 57425: 80, // HintTableList (4x) - 91: 81, // '[' (3x) - 57417: 82, // BooleanHintName (2x) - 57419: 83, // HintIndexList (2x) - 57421: 84, // HintStorageType (2x) - 57422: 85, // HintStorageTypeAndTable (2x) - 57426: 86, // HintTableListOpt (2x) - 57431: 87, // JoinOrderOptimizerHintName (2x) - 57432: 88, // NullaryHintName (2x) - 57435: 89, // PartitionListOpt (2x) - 57438: 90, // StorageOptimizerHintOpt (2x) - 57439: 91, // SubqueryOptimizerHintName (2x) - 57442: 92, // SubqueryStrategy (2x) - 57443: 93, // SupportedIndexLevelOptimizerHintName (2x) - 57444: 94, // SupportedTableLevelOptimizerHintName (2x) - 57445: 95, // TableOptimizerHintOpt (2x) - 57447: 96, // UnsupportedIndexLevelOptimizerHintName (2x) - 57448: 97, // UnsupportedTableLevelOptimizerHintName (2x) - 57420: 98, // HintQueryType (1x) - 57423: 99, // HintStorageTypeAndTableList (1x) - 57427: 100, // HintTrueOrFalse (1x) - 57429: 101, // IndexNameList (1x) - 57430: 102, // IndexNameListOpt (1x) - 57433: 103, // OptimizerHintList (1x) - 57434: 104, // PartitionList (1x) - 57437: 105, // Start (1x) - 57440: 106, // SubqueryStrategies (1x) - 57441: 107, // SubqueryStrategiesOpt (1x) - 57446: 108, // UnitOfBytes (1x) - 57449: 109, // Value (1x) - 57416: 110, // $default (0x) - 57345: 111, // error (0x) - 57348: 112, // hintInvalid (0x) + 41: 0, // ')' (129x) + 57377: 1, // hintAggToCop (121x) + 57390: 2, // hintBCJoin (121x) + 57355: 3, // hintBKA (121x) + 57357: 4, // hintBNL (121x) + 57401: 5, // hintForceIndex (121x) + 57379: 6, // hintHashAgg (121x) + 57359: 7, // hintHashJoin (121x) + 57380: 8, // hintIgnoreIndex (121x) + 57378: 9, // hintIgnorePlanCache (121x) + 57363: 10, // hintIndexMerge (121x) + 57381: 11, // hintInlHashJoin (121x) + 57382: 12, // hintInlJoin (121x) + 57383: 13, // hintInlMergeJoin (121x) + 57351: 14, // hintJoinFixedOrder (121x) + 57352: 15, // hintJoinOrder (121x) + 57353: 16, // hintJoinPrefix (121x) + 57354: 17, // hintJoinSuffix (121x) + 57400: 18, // hintLimitToCop (121x) + 57373: 19, // hintMaxExecutionTime (121x) + 57384: 20, // hintMemoryQuota (121x) + 57361: 21, // hintMerge (121x) + 57365: 22, // hintMRR (121x) + 57356: 23, // hintNoBKA (121x) + 57358: 24, // hintNoBNL (121x) + 57360: 25, // hintNoHashJoin (121x) + 57367: 26, // hintNoICP (121x) + 57364: 27, // hintNoIndexMerge (121x) + 57362: 28, // hintNoMerge (121x) + 57366: 29, // hintNoMRR (121x) + 57368: 30, // hintNoRangeOptimization (121x) + 57372: 31, // hintNoSemijoin (121x) + 57370: 32, // hintNoSkipScan (121x) + 57385: 33, // hintNoSwapJoinInputs (121x) + 57399: 34, // hintNthPlan (121x) + 57376: 35, // hintQBName (121x) + 57386: 36, // hintQueryType (121x) + 57387: 37, // hintReadConsistentReplica (121x) + 57388: 38, // hintReadFromStorage (121x) + 57375: 39, // hintResourceGroup (121x) + 57371: 40, // hintSemijoin (121x) + 57374: 41, // hintSetVar (121x) + 57369: 42, // hintSkipScan (121x) + 57389: 43, // hintSMJoin (121x) + 57391: 44, // hintStreamAgg (121x) + 57392: 45, // hintSwapJoinInputs (121x) + 57397: 46, // hintTimeRange (121x) + 57398: 47, // hintUseCascades (121x) + 57394: 48, // hintUseIndex (121x) + 57393: 49, // hintUseIndexMerge (121x) + 57395: 50, // hintUsePlanCache (121x) + 57396: 51, // hintUseToja (121x) + 44: 52, // ',' (119x) + 57411: 53, // hintDupsWeedOut (99x) + 57412: 54, // hintFirstMatch (99x) + 57413: 55, // hintLooseScan (99x) + 57414: 56, // hintMaterialization (99x) + 57406: 57, // hintTiFlash (99x) + 57405: 58, // hintTiKV (99x) + 57407: 59, // hintFalse (98x) + 57402: 60, // hintOLAP (98x) + 57403: 61, // hintOLTP (98x) + 57408: 62, // hintTrue (98x) + 57410: 63, // hintGB (97x) + 57409: 64, // hintMB (97x) + 57347: 65, // hintIdentifier (96x) + 57349: 66, // hintSingleAtIdentifier (81x) + 93: 67, // ']' (75x) + 57404: 68, // hintPartition (69x) + 46: 69, // '.' (65x) + 61: 70, // '=' (65x) + 40: 71, // '(' (60x) + 57344: 72, // $end (24x) + 57435: 73, // QueryBlockOpt (17x) + 57427: 74, // Identifier (13x) + 57346: 75, // hintIntLit (8x) + 57350: 76, // hintStringLit (5x) + 57417: 77, // CommaOpt (4x) + 57423: 78, // HintTable (4x) + 57424: 79, // HintTableList (4x) + 91: 80, // '[' (3x) + 57416: 81, // BooleanHintName (2x) + 57418: 82, // HintIndexList (2x) + 57420: 83, // HintStorageType (2x) + 57421: 84, // HintStorageTypeAndTable (2x) + 57425: 85, // HintTableListOpt (2x) + 57430: 86, // JoinOrderOptimizerHintName (2x) + 57431: 87, // NullaryHintName (2x) + 57434: 88, // PartitionListOpt (2x) + 57437: 89, // StorageOptimizerHintOpt (2x) + 57438: 90, // SubqueryOptimizerHintName (2x) + 57441: 91, // SubqueryStrategy (2x) + 57442: 92, // SupportedIndexLevelOptimizerHintName (2x) + 57443: 93, // SupportedTableLevelOptimizerHintName (2x) + 57444: 94, // TableOptimizerHintOpt (2x) + 57446: 95, // UnsupportedIndexLevelOptimizerHintName (2x) + 57447: 96, // UnsupportedTableLevelOptimizerHintName (2x) + 57419: 97, // HintQueryType (1x) + 57422: 98, // HintStorageTypeAndTableList (1x) + 57426: 99, // HintTrueOrFalse (1x) + 57428: 100, // IndexNameList (1x) + 57429: 101, // IndexNameListOpt (1x) + 57432: 102, // OptimizerHintList (1x) + 57433: 103, // PartitionList (1x) + 57436: 104, // Start (1x) + 57439: 105, // SubqueryStrategies (1x) + 57440: 106, // SubqueryStrategiesOpt (1x) + 57445: 107, // UnitOfBytes (1x) + 57448: 108, // Value (1x) + 57415: 109, // $default (0x) + 57345: 110, // error (0x) + 57348: 111, // hintInvalid (0x) } yyhintSymNames = []string{ "')'", "hintAggToCop", "hintBCJoin", - "hintBCJoinPreferLocal", "hintBKA", "hintBNL", "hintForceIndex", @@ -354,81 +351,65 @@ var ( yyhintReductions = []struct{ xsym, components int }{ {0, 1}, - {105, 1}, - {103, 1}, - {103, 3}, + {104, 1}, + {102, 1}, + {102, 3}, + {102, 1}, + {102, 3}, + {94, 4}, + {94, 4}, + {94, 4}, + {94, 4}, + {94, 4}, + {94, 4}, + {94, 5}, + {94, 5}, + {94, 5}, + {94, 6}, + {94, 4}, + {94, 4}, + {94, 6}, + {94, 6}, + {94, 5}, + {94, 4}, + {94, 5}, + {89, 5}, + {98, 1}, + {98, 3}, + {84, 4}, + {73, 0}, + {73, 1}, + {77, 0}, + {77, 1}, + {88, 0}, + {88, 4}, {103, 1}, {103, 3}, - {95, 4}, - {95, 4}, - {95, 4}, - {95, 4}, - {95, 4}, - {95, 4}, - {95, 5}, - {95, 5}, - {95, 5}, - {95, 6}, - {95, 4}, - {95, 4}, - {95, 6}, - {95, 6}, - {95, 5}, - {95, 4}, - {95, 5}, - {90, 5}, - {99, 1}, - {99, 3}, - {85, 4}, - {74, 0}, - {74, 1}, - {78, 0}, - {78, 1}, - {89, 0}, - {89, 4}, - {104, 1}, - {104, 3}, - {86, 1}, - {86, 1}, - {80, 2}, - {80, 3}, + {85, 1}, + {85, 1}, + {79, 2}, {79, 3}, - {79, 5}, - {83, 4}, - {102, 0}, - {102, 1}, + {78, 3}, + {78, 5}, + {82, 4}, + {101, 0}, {101, 1}, - {101, 3}, - {107, 0}, - {107, 1}, + {100, 1}, + {100, 3}, + {106, 0}, {106, 1}, - {106, 3}, - {109, 1}, - {109, 1}, - {109, 1}, + {105, 1}, + {105, 3}, {108, 1}, {108, 1}, - {100, 1}, - {100, 1}, - {87, 1}, - {87, 1}, - {87, 1}, - {97, 1}, - {97, 1}, - {97, 1}, - {97, 1}, - {97, 1}, - {97, 1}, - {97, 1}, - {94, 1}, - {94, 1}, - {94, 1}, - {94, 1}, - {94, 1}, - {94, 1}, - {94, 1}, - {94, 1}, - {94, 1}, + {108, 1}, + {107, 1}, + {107, 1}, + {99, 1}, + {99, 1}, + {86, 1}, + {86, 1}, + {86, 1}, {96, 1}, {96, 1}, {96, 1}, @@ -440,402 +421,414 @@ var ( {93, 1}, {93, 1}, {93, 1}, - {91, 1}, - {91, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {93, 1}, + {95, 1}, + {95, 1}, + {95, 1}, + {95, 1}, + {95, 1}, + {95, 1}, + {95, 1}, {92, 1}, {92, 1}, {92, 1}, {92, 1}, - {82, 1}, - {82, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {98, 1}, - {98, 1}, - {84, 1}, - {84, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, - {75, 1}, + {90, 1}, + {90, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {81, 1}, + {81, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {97, 1}, + {97, 1}, + {83, 1}, + {83, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, + {74, 1}, } yyhintXErrors = map[yyhintXError]string{} - yyhintParseTab = [255][]uint16{ + yyhintParseTab = [253][]uint16{ // 0 - {1: 232, 206, 207, 198, 200, 224, 230, 213, 222, 236, 214, 209, 208, 212, 177, 195, 196, 197, 233, 184, 189, 203, 215, 199, 201, 202, 217, 234, 204, 216, 218, 226, 220, 211, 185, 188, 193, 235, 194, 187, 225, 186, 219, 205, 231, 210, 190, 228, 221, 223, 229, 227, 82: 191, 87: 178, 192, 90: 176, 183, 93: 182, 180, 175, 181, 179, 103: 174, 105: 173}, - {73: 172}, - {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 324, 73: 171, 78: 424}, - {1: 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 73: 170}, - {1: 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 73: 168}, + {1: 229, 204, 196, 198, 221, 227, 210, 219, 233, 211, 206, 205, 209, 175, 193, 194, 195, 230, 182, 187, 201, 212, 197, 199, 200, 214, 231, 202, 213, 215, 223, 217, 208, 183, 186, 191, 232, 192, 185, 222, 184, 216, 203, 228, 207, 188, 225, 218, 220, 226, 224, 81: 189, 86: 176, 190, 89: 174, 181, 92: 180, 178, 173, 179, 177, 102: 172, 104: 171}, + {72: 170}, + {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 320, 72: 169, 77: 420}, + {1: 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 72: 168}, + {1: 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 72: 166}, // 5 - {72: 421}, - {72: 418}, - {72: 415}, - {72: 410}, - {72: 407}, + {71: 417}, + {71: 414}, + {71: 411}, + {71: 406}, + {71: 403}, // 10 - {72: 396}, - {72: 384}, - {72: 380}, - {72: 376}, - {72: 368}, + {71: 392}, + {71: 380}, + {71: 376}, + {71: 372}, + {71: 364}, // 15 - {72: 365}, - {72: 362}, - {72: 355}, - {72: 350}, - {72: 344}, + {71: 361}, + {71: 358}, + {71: 351}, + {71: 346}, + {71: 340}, // 20 - {72: 341}, - {72: 335}, - {72: 237}, - {72: 115}, - {72: 114}, + {71: 337}, + {71: 331}, + {71: 234}, + {71: 113}, + {71: 112}, // 25 - {72: 113}, - {72: 112}, - {72: 111}, - {72: 110}, - {72: 109}, + {71: 111}, + {71: 110}, + {71: 109}, + {71: 108}, + {71: 107}, // 30 - {72: 108}, - {72: 107}, - {72: 106}, - {72: 105}, - {72: 104}, + {71: 106}, + {71: 105}, + {71: 104}, + {71: 103}, + {71: 102}, // 35 - {72: 103}, - {72: 102}, - {72: 101}, - {72: 100}, - {72: 99}, + {71: 101}, + {71: 100}, + {71: 99}, + {71: 98}, + {71: 97}, // 40 - {72: 98}, - {72: 97}, - {72: 96}, - {72: 95}, - {72: 94}, + {71: 96}, + {71: 95}, + {71: 94}, + {71: 93}, + {71: 92}, // 45 - {72: 93}, - {72: 92}, - {72: 91}, - {72: 90}, - {72: 89}, + {71: 91}, + {71: 90}, + {71: 89}, + {71: 88}, + {71: 87}, // 50 - {72: 88}, - {72: 87}, - {72: 86}, - {72: 85}, - {72: 84}, + {71: 86}, + {71: 85}, + {71: 84}, + {71: 83}, + {71: 78}, // 55 - {72: 79}, - {72: 78}, - {72: 77}, - {72: 76}, - {72: 75}, + {71: 77}, + {71: 76}, + {71: 75}, + {71: 74}, + {71: 73}, // 60 - {72: 74}, - {72: 73}, - {72: 72}, - {72: 71}, - {72: 70}, + {71: 72}, + {71: 71}, + {71: 70}, + {71: 69}, + {57: 143, 143, 66: 236, 73: 235}, // 65 - {58: 145, 145, 67: 239, 74: 238}, - {58: 244, 243, 84: 242, 241, 99: 240}, - {144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 68: 144, 144, 76: 144}, - {332, 53: 333}, - {148, 53: 148}, + {57: 241, 240, 83: 239, 238, 98: 237}, + {142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 67: 142, 142, 75: 142}, + {328, 52: 329}, + {146, 52: 146}, + {80: 242}, // 70 - {81: 245}, - {81: 67}, - {81: 66}, - {1: 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, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 54: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 239, 74: 247, 80: 246}, - {53: 330, 68: 329}, + {80: 66}, + {80: 65}, + {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 53: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 236, 73: 244, 79: 243}, + {52: 326, 67: 325}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 246, 78: 245}, // 75 - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 249, 79: 248}, - {135, 53: 135, 68: 135}, - {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, 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, 239, 145, 145, 316, 74: 315}, - {65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65}, - {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}, + {133, 52: 133, 67: 133}, + {143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 236, 143, 143, 312, 73: 311}, + {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64}, + {63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63}, + {62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62}, // 80 - {63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63}, - {62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62}, - {61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61}, - {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, - {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, + {61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61}, + {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, + {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, + {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, + {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, // 85 - {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, - {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, - {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, - {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, - {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, + {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, + {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, + {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, + {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, + {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, // 90 - {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, - {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, - {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, - {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, - {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, + {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, + {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, + {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, + {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, + {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, // 95 - {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, - {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, - {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, - {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, - {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, + {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, + {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, + {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, + {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, + {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, // 100 - {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, - {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, - {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, - {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, - {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, + {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, + {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, + {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, + {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, + {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, // 105 - {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, - {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, - {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, - {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, - {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, + {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, + {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, + {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, + {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, + {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, // 110 - {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, - {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, - {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, - {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, - {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, + {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, + {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, + {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, + {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, + {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, // 115 - {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, - {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, - {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, - {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, - {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, + {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, + {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, + {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, + {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, + {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, // 120 - {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, - {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, - {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, - {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, - {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, + {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, + {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, + {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, + {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, + {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, // 125 - {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, - {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, - {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, - {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, - {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, + {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, + {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, + {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, + {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, + {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, // 130 - {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, - {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, - {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, - {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, + {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, + {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, + {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, + {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, + {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, // 135 - {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, - {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, - {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, - {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, + {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, + {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, // 140 - {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 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}, - {141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 68: 141, 319, 89: 328}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 317}, + {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, 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}, + {139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 67: 139, 315, 88: 324}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 313}, + {143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 236, 143, 143, 73: 314}, + {139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 67: 139, 315, 88: 316}, // 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, 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, 239, 145, 145, 74: 318}, - {141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 68: 141, 319, 89: 320}, - {72: 321}, - {132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 68: 132}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 323, 104: 322}, + {71: 317}, + {130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 67: 130}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 319, 103: 318}, + {321, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 320, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 77: 322}, + {137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137}, // 150 - {325, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 324, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 78: 326}, - {139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139}, - {142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 54: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 77: 142}, - {140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 68: 140}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 327}, + {140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 53: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 76: 140}, + {138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 67: 138}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 323}, + {136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136}, + {131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 67: 131}, // 155 - {138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138}, - {133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 68: 133}, - {146, 53: 146}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 249, 79: 331}, - {134, 53: 134, 68: 134}, + {144, 52: 144}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 246, 78: 327}, + {132, 52: 132, 67: 132}, + {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 72: 147}, + {57: 241, 240, 83: 239, 330}, // 160 - {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 73: 149}, - {58: 244, 243, 84: 242, 334}, - {147, 53: 147}, - {61: 145, 145, 67: 239, 74: 336}, - {61: 338, 339, 98: 337}, - // 165 - {340}, - {69}, + {145, 52: 145}, + {60: 143, 143, 66: 236, 73: 332}, + {60: 334, 335, 97: 333}, + {336}, {68}, - {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 73: 150}, - {145, 67: 239, 74: 342}, + // 165 + {67}, + {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 72: 148}, + {143, 66: 236, 73: 338}, + {339}, + {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 72: 149}, // 170 - {343}, - {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 73: 151}, - {60: 145, 63: 145, 67: 239, 74: 345}, - {60: 348, 63: 347, 100: 346}, - {349}, + {59: 143, 62: 143, 66: 236, 73: 341}, + {59: 344, 62: 343, 99: 342}, + {345}, + {115}, + {114}, // 175 - {117}, - {116}, - {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 73: 152}, - {77: 351}, - {53: 324, 77: 143, 352}, + {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 72: 150}, + {76: 347}, + {52: 320, 76: 141, 348}, + {76: 349}, + {350}, // 180 - {77: 353}, - {354}, - {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 73: 153}, - {67: 239, 74: 356, 76: 145}, - {76: 357}, + {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 72: 151}, + {66: 236, 73: 352, 75: 143}, + {75: 353}, + {63: 356, 355, 107: 354}, + {357}, // 185 - {64: 360, 359, 108: 358}, - {361}, - {119}, - {118}, - {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 73: 154}, + {117}, + {116}, + {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 72: 152}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 359}, + {360}, // 190 - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 363}, - {364}, - {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 73: 155}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 366}, - {367}, + {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 72: 153}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 362}, + {363}, + {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 72: 154}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 365}, // 195 - {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 73: 156}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 369}, - {71: 370}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 373, 374, 372, 109: 371}, - {375}, - // 200 - {122}, - {121}, + {70: 366}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 369, 370, 368, 108: 367}, + {371}, {120}, - {1: 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 73: 157}, - {67: 239, 74: 377, 76: 145}, + {119}, + // 200 + {118}, + {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 72: 155}, + {66: 236, 73: 373, 75: 143}, + {75: 374}, + {375}, // 205 - {76: 378}, + {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 72: 156}, + {66: 236, 73: 377, 75: 143}, + {75: 378}, {379}, - {1: 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 73: 158}, - {67: 239, 74: 381, 76: 145}, - {76: 382}, + {1: 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 72: 157}, // 210 - {383}, - {1: 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 73: 159}, - {145, 54: 145, 145, 145, 145, 67: 239, 74: 385}, - {126, 54: 389, 390, 391, 392, 92: 388, 106: 387, 386}, - {395}, + {143, 53: 143, 143, 143, 143, 66: 236, 73: 381}, + {124, 53: 385, 386, 387, 388, 91: 384, 105: 383, 382}, + {391}, + {123, 52: 389}, + {122, 52: 122}, // 215 - {125, 53: 393}, - {124, 53: 124}, - {83, 53: 83}, - {82, 53: 82}, - {81, 53: 81}, + {82, 52: 82}, + {81, 52: 81}, + {80, 52: 80}, + {79, 52: 79}, + {53: 385, 386, 387, 388, 91: 390}, // 220 - {80, 53: 80}, - {54: 389, 390, 391, 392, 92: 394}, - {123, 53: 123}, - {1: 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 73: 160}, - {1: 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, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 54: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 239, 74: 398, 83: 397}, + {121, 52: 121}, + {1: 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 72: 158}, + {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 53: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 236, 73: 394, 82: 393}, + {402}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 246, 78: 395}, // 225 - {406}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 249, 79: 399}, - {143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 324, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 78: 400}, - {130, 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 403, 101: 402, 401}, - {131}, + {141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 320, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 77: 396}, + {128, 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 399, 100: 398, 397}, + {129}, + {127, 52: 400}, + {126, 52: 126}, // 230 - {129, 53: 404}, - {128, 53: 128}, - {1: 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 405}, - {127, 53: 127}, - {1: 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 73: 161}, + {1: 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 401}, + {125, 52: 125}, + {1: 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 72: 159}, + {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 53: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 236, 73: 394, 82: 404}, + {405}, // 235 - {1: 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, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 54: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 239, 74: 398, 83: 408}, - {409}, - {1: 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 73: 162}, - {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, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 54: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 239, 74: 413, 80: 412, 86: 411}, - {414}, + {1: 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 72: 160}, + {143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 53: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 236, 73: 409, 79: 408, 85: 407}, + {410}, + {135, 52: 326}, + {134, 274, 288, 252, 254, 298, 277, 256, 278, 276, 260, 279, 280, 281, 248, 249, 250, 251, 275, 270, 282, 258, 262, 253, 255, 257, 264, 261, 259, 263, 265, 269, 267, 283, 297, 273, 284, 285, 286, 272, 268, 271, 266, 287, 289, 290, 295, 296, 292, 291, 293, 294, 53: 307, 308, 309, 310, 302, 301, 303, 299, 300, 304, 306, 305, 247, 74: 246, 78: 245}, // 240 - {137, 53: 330}, - {136, 277, 291, 292, 255, 257, 302, 280, 259, 281, 279, 263, 282, 283, 284, 251, 252, 253, 254, 278, 273, 285, 261, 265, 256, 258, 260, 267, 264, 262, 266, 268, 272, 270, 286, 301, 276, 287, 288, 289, 275, 271, 274, 269, 290, 293, 294, 299, 300, 296, 295, 297, 298, 54: 311, 312, 313, 314, 306, 305, 307, 303, 304, 308, 310, 309, 250, 75: 249, 79: 248}, - {1: 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 73: 163}, - {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, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 54: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 239, 74: 413, 80: 412, 86: 416}, - {417}, + {1: 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 72: 161}, + {143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 53: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 236, 73: 409, 79: 408, 85: 412}, + {413}, + {1: 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 72: 162}, + {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 53: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 236, 73: 244, 79: 415}, // 245 - {1: 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 73: 164}, - {1: 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, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 54: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 239, 74: 247, 80: 419}, - {420, 53: 330}, - {1: 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 73: 165}, - {145, 67: 239, 74: 422}, + {416, 52: 326}, + {1: 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 72: 163}, + {143, 66: 236, 73: 418}, + {419}, + {1: 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 72: 164}, // 250 - {423}, - {1: 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 73: 166}, - {1: 232, 206, 207, 198, 200, 224, 230, 213, 222, 236, 214, 209, 208, 212, 177, 195, 196, 197, 233, 184, 189, 203, 215, 199, 201, 202, 217, 234, 204, 216, 218, 226, 220, 211, 185, 188, 193, 235, 194, 187, 225, 186, 219, 205, 231, 210, 190, 228, 221, 223, 229, 227, 82: 191, 87: 178, 192, 90: 426, 183, 93: 182, 180, 425, 181, 179}, - {1: 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 73: 169}, - {1: 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 73: 167}, + {1: 229, 204, 196, 198, 221, 227, 210, 219, 233, 211, 206, 205, 209, 175, 193, 194, 195, 230, 182, 187, 201, 212, 197, 199, 200, 214, 231, 202, 213, 215, 223, 217, 208, 183, 186, 191, 232, 192, 185, 222, 184, 216, 203, 228, 207, 188, 225, 218, 220, 226, 224, 81: 189, 86: 176, 190, 89: 422, 181, 92: 180, 178, 421, 179, 177}, + {1: 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 72: 167}, + {1: 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 72: 165}, } ) @@ -875,7 +868,7 @@ func yyhintlex1(yylex yyhintLexer, lval *yyhintSymType) (n int) { } func yyhintParse(yylex yyhintLexer, parser *hintParser) int { - const yyError = 111 + const yyError = 110 yyEx, _ := yylex.(yyhintLexerEx) var yyn int diff --git a/parser/hintparser.y b/parser/hintparser.y index 45037741984c3..332d53eb7379e 100644 --- a/parser/hintparser.y +++ b/parser/hintparser.y @@ -94,7 +94,6 @@ import ( hintReadFromStorage "READ_FROM_STORAGE" hintSMJoin "MERGE_JOIN" hintBCJoin "BROADCAST_JOIN" - hintBCJoinPreferLocal "BROADCAST_JOIN_LOCAL" hintStreamAgg "STREAM_AGG" hintSwapJoinInputs "SWAP_JOIN_INPUTS" hintUseIndexMerge "USE_INDEX_MERGE" @@ -534,7 +533,6 @@ UnsupportedTableLevelOptimizerHintName: SupportedTableLevelOptimizerHintName: "MERGE_JOIN" | "BROADCAST_JOIN" -| "BROADCAST_JOIN_LOCAL" | "INL_JOIN" | "INL_HASH_JOIN" | "SWAP_JOIN_INPUTS" @@ -635,7 +633,6 @@ Identifier: | "READ_FROM_STORAGE" | "MERGE_JOIN" | "BROADCAST_JOIN" -| "BROADCAST_JOIN_LOCAL" | "STREAM_AGG" | "SWAP_JOIN_INPUTS" | "USE_INDEX_MERGE" diff --git a/parser/misc.go b/parser/misc.go index 97085e40eccc6..ff70e2be56e43 100644 --- a/parser/misc.go +++ b/parser/misc.go @@ -176,6 +176,7 @@ var tokenMap = map[string]int{ "BIGINT": bigIntType, "BINARY": binaryType, "BINDING": binding, + "BINDING_CACHE": bindingCache, "BINDINGS": bindings, "BINLOG": binlog, "BIT_AND": bitAnd, @@ -287,6 +288,7 @@ var tokenMap = map[string]int{ "DESCRIBE": describe, "DIRECTORY": directory, "DISABLE": disable, + "DISABLED": disabled, "DISCARD": discard, "DISK": disk, "DISTINCT": distinct, @@ -303,6 +305,7 @@ var tokenMap = map[string]int{ "DYNAMIC": dynamic, "ELSE": elseKwd, "ENABLE": enable, + "ENABLED": enabled, "ENCLOSED": enclosed, "ENCRYPTION": encryption, "END": end, @@ -917,7 +920,6 @@ var hintTokenMap = map[string]int{ "READ_CONSISTENT_REPLICA": hintReadConsistentReplica, "READ_FROM_STORAGE": hintReadFromStorage, "BROADCAST_JOIN": hintBCJoin, - "BROADCAST_JOIN_LOCAL": hintBCJoinPreferLocal, "MERGE_JOIN": hintSMJoin, "STREAM_AGG": hintStreamAgg, "SWAP_JOIN_INPUTS": hintSwapJoinInputs, diff --git a/parser/model/model.go b/parser/model/model.go index 14f3d17de2f7b..64d9cc98bc9ec 100644 --- a/parser/model/model.go +++ b/parser/model/model.go @@ -234,6 +234,12 @@ const ExtraHandleID = -1 // ExtraPidColID is the column ID of column which store the partitionID decoded in global index values. const ExtraPidColID = -2 +// ExtraPhysTblID is the column ID of column that should be filled in with the physical table id. +// Primarily used for table partition dynamic prune mode, to return which partition (physical table id) the row came from. +// Using a dedicated id for this, since in the future ExtraPidColID and ExtraPhysTblID may be used for the same request. +// Must be after ExtraPidColID! +const ExtraPhysTblID = -3 + const ( // TableInfoVersion0 means the table info version is 0. // Upgrade from v2.1.1 or v2.1.2 to v2.1.3 and later, and then execute a "change/modify column" statement @@ -275,6 +281,9 @@ var ExtraHandleName = NewCIStr("_tidb_rowid") // ExtraPartitionIdName is the name of ExtraPartitionId Column. var ExtraPartitionIdName = NewCIStr("_tidb_pid") +// ExtraPhysTblIdName is the name of ExtraPhysTblID Column. +var ExtraPhysTblIdName = NewCIStr("_tidb_tid") + // TableInfo provides meta data describing a DB table. type TableInfo struct { ID int64 `json:"id"` @@ -661,6 +670,17 @@ func (t *TableInfo) MoveColumnInfo(from, to int) { } } +// ClearPlacement clears all table and partitions' placement settings +func (t *TableInfo) ClearPlacement() { + t.PlacementPolicyRef = nil + if t.Partition != nil { + for i := range t.Partition.Definitions { + def := &t.Partition.Definitions[i] + def.PlacementPolicyRef = nil + } + } +} + // NewExtraHandleColInfo mocks a column info for extra handle column. func NewExtraHandleColInfo() *ColumnInfo { colInfo := &ColumnInfo{ @@ -685,6 +705,17 @@ func NewExtraPartitionIDColInfo() *ColumnInfo { return colInfo } +// NewExtraPhysTblIDColInfo mocks a column info for extra partition id column. +func NewExtraPhysTblIDColInfo() *ColumnInfo { + colInfo := &ColumnInfo{ + ID: ExtraPhysTblID, + Name: ExtraPhysTblIdName, + } + colInfo.Tp = mysql.TypeLonglong + colInfo.Flen, colInfo.Decimal = mysql.GetDefaultFieldLengthAndDecimal(mysql.TypeLonglong) + return colInfo +} + // ColumnIsInIndex checks whether c is included in any indices of t. func (t *TableInfo) ColumnIsInIndex(c *ColumnInfo) bool { for _, index := range t.Indices { @@ -873,7 +904,7 @@ func (pi *PartitionInfo) GetNameByID(id int64) string { // see https://github.com/pingcap/parser/pull/1072 for the benchmark. for i := range definitions { if id == definitions[i].ID { - return definitions[i].Name.L + return definitions[i].Name.O } } return "" @@ -1213,6 +1244,13 @@ type PolicyInfo struct { State SchemaState `json:"state"` } +func (p *PolicyInfo) Clone() *PolicyInfo { + var cloned PolicyInfo + cloned = *p + cloned.PlacementSettings = p.PlacementSettings.Clone() + return &cloned +} + func writeSettingItemToBuilder(sb *strings.Builder, item string) { if sb.Len() != 0 { sb.WriteString(" ") @@ -1269,6 +1307,12 @@ func (p *PlacementSettings) String() string { return sb.String() } +func (p *PlacementSettings) Clone() *PlacementSettings { + var cloned PlacementSettings + cloned = *p + return &cloned +} + type StatsOptions struct { *StatsWindowSettings AutoRecalc bool `json:"auto_recalc"` diff --git a/parser/model/model_test.go b/parser/model/model_test.go index a00c53cda43a2..7e594e245a5dc 100644 --- a/parser/model/model_test.go +++ b/parser/model/model_test.go @@ -519,6 +519,39 @@ func TestPlacementSettingsString(t *testing.T) { require.Equal(t, "CONSTRAINTS=\"{+us-east-1:1,+us-east-2:1}\" VOTERS=3 FOLLOWERS=2 LEARNERS=1", settings.String()) } +func TestPlacementSettingsClone(t *testing.T) { + settings := &PlacementSettings{} + clonedSettings := settings.Clone() + clonedSettings.PrimaryRegion = "r1" + clonedSettings.Regions = "r1,r2" + clonedSettings.Followers = 1 + clonedSettings.Voters = 2 + clonedSettings.Followers = 3 + clonedSettings.Constraints = "[+zone=z1]" + clonedSettings.LearnerConstraints = "[+region=r1]" + clonedSettings.FollowerConstraints = "[+disk=ssd]" + clonedSettings.LeaderConstraints = "[+region=r2]" + clonedSettings.VoterConstraints = "[+zone=z2]" + clonedSettings.Schedule = "even" + require.Equal(t, PlacementSettings{}, *settings) +} + +func TestPlacementPolicyClone(t *testing.T) { + policy := &PolicyInfo{ + PlacementSettings: &PlacementSettings{}, + } + clonedPolicy := policy.Clone() + clonedPolicy.ID = 100 + clonedPolicy.Name = NewCIStr("p2") + clonedPolicy.State = StateDeleteOnly + clonedPolicy.PlacementSettings.Followers = 10 + + require.Equal(t, int64(0), policy.ID) + require.Equal(t, NewCIStr(""), policy.Name) + require.Equal(t, StateNone, policy.State) + require.Equal(t, PlacementSettings{}, *(policy.PlacementSettings)) +} + func TestLocation(t *testing.T) { // test offset = 0 loc := &TimeZoneLocation{} diff --git a/parser/mysql/privs.go b/parser/mysql/privs.go index 93e5db579ad1e..af1c453487a0e 100644 --- a/parser/mysql/privs.go +++ b/parser/mysql/privs.go @@ -77,6 +77,7 @@ var Priv2SetStr = map[PrivilegeType]string{ CreateRolePriv: "Create Role", DropRolePriv: "Drop Role", ShutdownPriv: "Shutdown Role", + TriggerPriv: "Trigger", } // SetStr2Priv is the map for privilege set string to privilege type. @@ -99,6 +100,7 @@ var SetStr2Priv = map[string]PrivilegeType{ "Index": IndexPriv, "Create View": CreateViewPriv, "Show View": ShowViewPriv, + "Trigger": TriggerPriv, } // Priv2UserCol is the privilege to mysql.user table column name. @@ -309,10 +311,10 @@ func (privs Privileges) Has(p PrivilegeType) bool { var AllGlobalPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, ProcessPriv, ReferencesPriv, AlterPriv, ShowDBPriv, SuperPriv, ExecutePriv, IndexPriv, CreateUserPriv, CreateTablespacePriv, TriggerPriv, CreateViewPriv, ShowViewPriv, CreateRolePriv, DropRolePriv, CreateTMPTablePriv, LockTablesPriv, CreateRoutinePriv, AlterRoutinePriv, EventPriv, ShutdownPriv, ReloadPriv, FilePriv, ConfigPriv, ReplicationClientPriv, ReplicationSlavePriv} // AllDBPrivs is all the privileges in database scope. -var AllDBPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, ReferencesPriv, LockTablesPriv, CreateTMPTablePriv, EventPriv, CreateRoutinePriv, AlterRoutinePriv, AlterPriv, ExecutePriv, IndexPriv, CreateViewPriv, ShowViewPriv} +var AllDBPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, ReferencesPriv, LockTablesPriv, CreateTMPTablePriv, EventPriv, CreateRoutinePriv, AlterRoutinePriv, AlterPriv, ExecutePriv, IndexPriv, CreateViewPriv, ShowViewPriv, TriggerPriv} // AllTablePrivs is all the privileges in table scope. -var AllTablePrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, IndexPriv, ReferencesPriv, AlterPriv, CreateViewPriv, ShowViewPriv} +var AllTablePrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, IndexPriv, ReferencesPriv, AlterPriv, CreateViewPriv, ShowViewPriv, TriggerPriv} // AllColumnPrivs is all the privileges in column scope. var AllColumnPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, ReferencesPriv} diff --git a/parser/parser.go b/parser/parser.go index 65ac65130235e..de79b35a51ed7 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -54,13 +54,13 @@ type yyXError struct { } const ( - yyDefault = 58101 + yyDefault = 58104 yyEOFCode = 57344 account = 57573 action = 57574 add = 57359 - addDate = 57908 - admin = 57991 + addDate = 57911 + admin = 57994 advise = 57575 after = 57576 against = 57577 @@ -72,15 +72,15 @@ const ( analyze = 57362 and = 57363 andand = 57354 - andnot = 58062 + andnot = 58065 any = 57581 - approxCountDistinct = 57909 - approxPercentile = 57910 + approxCountDistinct = 57912 + approxPercentile = 57913 as = 57364 asc = 57365 ascii = 57582 asof = 57347 - assignmentEq = 58063 + assignmentEq = 58066 attributes = 57583 autoIdCache = 57588 autoIncrement = 57589 @@ -97,2092 +97,2098 @@ const ( bigIntType = 57367 binaryType = 57368 binding = 57599 - bindings = 57600 - binlog = 57601 - bitAnd = 57911 - bitLit = 58061 - bitOr = 57912 - bitType = 57602 - bitXor = 57913 + bindingCache = 57600 + bindings = 57601 + binlog = 57602 + bitAnd = 57914 + bitLit = 58064 + bitOr = 57915 + bitType = 57603 + bitXor = 57916 blobType = 57369 - block = 57603 - boolType = 57605 - booleanType = 57604 + block = 57604 + boolType = 57606 + booleanType = 57605 both = 57370 - bound = 57914 - briefType = 57915 - btree = 57606 - buckets = 57992 - builtinApproxCountDistinct = 58035 - builtinApproxPercentile = 58036 - builtinBitAnd = 58030 - builtinBitOr = 58031 - builtinBitXor = 58032 - builtinCast = 58033 - builtinCount = 58034 - builtinCurDate = 58037 - builtinCurTime = 58038 - builtinDateAdd = 58039 - builtinDateSub = 58040 - builtinExtract = 58041 - builtinGroupConcat = 58042 - builtinMax = 58043 - builtinMin = 58044 - builtinNow = 58045 - builtinPosition = 58046 - builtinStddevPop = 58050 - builtinStddevSamp = 58051 - builtinSubstring = 58047 - builtinSum = 58048 - builtinSysDate = 58049 - builtinTranslate = 58052 - builtinTrim = 58053 - builtinUser = 58054 - builtinVarPop = 58055 - builtinVarSamp = 58056 - builtins = 57993 + bound = 57917 + briefType = 57918 + btree = 57607 + buckets = 57995 + builtinApproxCountDistinct = 58038 + builtinApproxPercentile = 58039 + builtinBitAnd = 58033 + builtinBitOr = 58034 + builtinBitXor = 58035 + builtinCast = 58036 + builtinCount = 58037 + builtinCurDate = 58040 + builtinCurTime = 58041 + builtinDateAdd = 58042 + builtinDateSub = 58043 + builtinExtract = 58044 + builtinGroupConcat = 58045 + builtinMax = 58046 + builtinMin = 58047 + builtinNow = 58048 + builtinPosition = 58049 + builtinStddevPop = 58053 + builtinStddevSamp = 58054 + builtinSubstring = 58050 + builtinSum = 58051 + builtinSysDate = 58052 + builtinTranslate = 58055 + builtinTrim = 58056 + builtinUser = 58057 + builtinVarPop = 58058 + builtinVarSamp = 58059 + builtins = 57996 by = 57371 - byteType = 57607 - cache = 57608 + byteType = 57608 + cache = 57609 call = 57372 - cancel = 57994 - capture = 57609 - cardinality = 57995 + cancel = 57997 + capture = 57610 + cardinality = 57998 cascade = 57373 - cascaded = 57610 + cascaded = 57611 caseKwd = 57374 - cast = 57916 - causal = 57611 - chain = 57612 + cast = 57919 + causal = 57612 + chain = 57613 change = 57375 charType = 57377 character = 57376 - charsetKwd = 57613 + charsetKwd = 57614 check = 57378 - checkpoint = 57614 - checksum = 57615 - cipher = 57616 - cleanup = 57617 - client = 57618 - clientErrorsSummary = 57619 - clustered = 57645 - cmSketch = 57996 - coalesce = 57620 + checkpoint = 57615 + checksum = 57616 + cipher = 57617 + cleanup = 57618 + client = 57619 + clientErrorsSummary = 57620 + clustered = 57646 + cmSketch = 57999 + coalesce = 57621 collate = 57379 - collation = 57621 + collation = 57622 column = 57380 - columnFormat = 57622 - columnStatsUsage = 57997 - columns = 57623 - comment = 57625 - commit = 57626 - committed = 57627 - compact = 57628 - compressed = 57629 - compression = 57630 - concurrency = 57631 - config = 57624 - connection = 57632 - consistency = 57633 - consistent = 57634 + columnFormat = 57623 + columnStatsUsage = 58000 + columns = 57624 + comment = 57626 + commit = 57627 + committed = 57628 + compact = 57629 + compressed = 57630 + compression = 57631 + concurrency = 57632 + config = 57625 + connection = 57633 + consistency = 57634 + consistent = 57635 constraint = 57381 - constraints = 57918 - context = 57635 + constraints = 57921 + context = 57636 convert = 57382 - copyKwd = 57917 - correlation = 57998 - cpu = 57636 + copyKwd = 57920 + correlation = 58001 + cpu = 57637 create = 57383 - createTableSelect = 58085 + createTableSelect = 58088 cross = 57384 - csvBackslashEscape = 57637 - csvDelimiter = 57638 - csvHeader = 57639 - csvNotNull = 57640 - csvNull = 57641 - csvSeparator = 57642 - csvTrimLastSeparators = 57643 + csvBackslashEscape = 57638 + csvDelimiter = 57639 + csvHeader = 57640 + csvNotNull = 57641 + csvNull = 57642 + csvSeparator = 57643 + csvTrimLastSeparators = 57644 cumeDist = 57385 - curTime = 57919 - current = 57644 + curTime = 57922 + current = 57645 currentDate = 57386 currentRole = 57390 currentTime = 57387 currentTs = 57388 currentUser = 57389 - cycle = 57646 - data = 57647 + cycle = 57647 + data = 57648 database = 57391 databases = 57392 - dateAdd = 57920 - dateSub = 57921 - dateType = 57649 - datetimeType = 57648 - day = 57650 + dateAdd = 57923 + dateSub = 57924 + dateType = 57650 + datetimeType = 57649 + day = 57651 dayHour = 57393 dayMicrosecond = 57394 dayMinute = 57395 daySecond = 57396 - ddl = 57999 - deallocate = 57651 - decLit = 58058 + ddl = 58002 + deallocate = 57652 + decLit = 58061 decimalType = 57397 defaultKwd = 57398 - definer = 57652 - delayKeyWrite = 57653 + definer = 57653 + delayKeyWrite = 57654 delayed = 57399 deleteKwd = 57400 denseRank = 57401 - dependency = 58000 - depth = 58001 + dependency = 58003 + depth = 58004 desc = 57402 describe = 57403 - directory = 57654 - disable = 57655 - discard = 57656 - disk = 57657 + directory = 57655 + disable = 57656 + disabled = 57657 + discard = 57658 + disk = 57659 distinct = 57404 distinctRow = 57405 div = 57406 - do = 57658 - dotType = 57922 + do = 57660 + dotType = 57925 doubleAtIdentifier = 57351 doubleType = 57407 - drainer = 58002 + drainer = 58005 drop = 57408 dual = 57409 - dump = 57923 - duplicate = 57659 - dynamic = 57660 + dump = 57926 + duplicate = 57661 + dynamic = 57662 elseKwd = 57410 - empty = 58076 - enable = 57661 + empty = 58079 + enable = 57663 + enabled = 57664 enclosed = 57411 - encryption = 57662 - end = 57663 - enforced = 57664 - engine = 57665 - engines = 57666 - enum = 57667 - eq = 58064 + encryption = 57665 + end = 57666 + enforced = 57667 + engine = 57668 + engines = 57669 + enum = 57670 + eq = 58067 yyErrCode = 57345 - errorKwd = 57668 - escape = 57669 + errorKwd = 57671 + escape = 57672 escaped = 57412 - event = 57670 - events = 57671 - evolve = 57672 - exact = 57924 + event = 57673 + events = 57674 + evolve = 57675 + exact = 57927 except = 57415 - exchange = 57673 - exclusive = 57674 - execute = 57675 + exchange = 57676 + exclusive = 57677 + execute = 57678 exists = 57413 - expansion = 57676 - expire = 57677 + expansion = 57679 + expire = 57680 explain = 57414 - exprPushdownBlacklist = 57925 - extended = 57678 - extract = 57926 + exprPushdownBlacklist = 57928 + extended = 57681 + extract = 57929 falseKwd = 57416 - faultsSym = 57679 + faultsSym = 57682 fetch = 57417 - fields = 57680 - file = 57681 - first = 57682 + fields = 57683 + file = 57684 + first = 57685 firstValue = 57418 - fixed = 57683 - flashback = 57927 - floatLit = 58057 + fixed = 57686 + flashback = 57930 + floatLit = 58060 floatType = 57419 - flush = 57684 - follower = 57928 - followerConstraints = 57929 - followers = 57930 - following = 57685 + flush = 57687 + follower = 57931 + followerConstraints = 57932 + followers = 57933 + following = 57688 forKwd = 57420 force = 57421 foreign = 57422 - format = 57686 + format = 57689 from = 57423 - full = 57687 + full = 57690 fulltext = 57424 - function = 57688 - ge = 58065 - general = 57689 + function = 57691 + ge = 58068 + general = 57692 generated = 57425 - getFormat = 57931 - global = 57690 + getFormat = 57934 + global = 57693 grant = 57426 - grants = 57691 + grants = 57694 group = 57427 - groupConcat = 57932 + groupConcat = 57935 groups = 57428 - hash = 57692 + hash = 57695 having = 57429 - help = 57693 - hexLit = 58060 + help = 57696 + hexLit = 58063 highPriority = 57430 - higherThanComma = 58100 - higherThanParenthese = 58094 + higherThanComma = 58103 + higherThanParenthese = 58097 hintComment = 57353 - histogram = 57694 - histogramsInFlight = 58019 - history = 57695 - hosts = 57696 - hour = 57697 + histogram = 57697 + histogramsInFlight = 58022 + history = 57698 + hosts = 57699 + hour = 57700 hourMicrosecond = 57431 hourMinute = 57432 hourSecond = 57433 - identSQLErrors = 57699 - identified = 57698 + identSQLErrors = 57702 + identified = 57701 identifier = 57346 ifKwd = 57434 ignore = 57435 - importKwd = 57700 - imports = 57701 + importKwd = 57703 + imports = 57704 in = 57436 - increment = 57702 - incremental = 57703 + increment = 57705 + incremental = 57706 index = 57437 - indexes = 57704 + indexes = 57707 infile = 57438 inner = 57439 - inplace = 57934 + inplace = 57937 insert = 57446 - insertMethod = 57705 - insertValues = 58083 - instance = 57706 - instant = 57935 + insertMethod = 57708 + insertValues = 58086 + instance = 57709 + instant = 57938 int1Type = 57448 int2Type = 57449 int3Type = 57450 int4Type = 57451 int8Type = 57452 - intLit = 58059 + intLit = 58062 intType = 57447 integerType = 57440 - internal = 57936 + internal = 57939 intersect = 57441 interval = 57442 into = 57443 invalid = 57352 - invisible = 57707 - invoker = 57708 - io = 57709 - ipc = 57710 + invisible = 57710 + invoker = 57711 + io = 57712 + ipc = 57713 is = 57445 - isolation = 57711 - issuer = 57712 - job = 58004 - jobs = 58003 + isolation = 57714 + issuer = 57715 + job = 58007 + jobs = 58006 join = 57453 - jsonArrayagg = 57937 - jsonObjectAgg = 57938 - jsonType = 57713 - jss = 58067 - juss = 58068 + jsonArrayagg = 57940 + jsonObjectAgg = 57941 + jsonType = 57716 + jss = 58070 + juss = 58071 key = 57454 - keyBlockSize = 57714 + keyBlockSize = 57717 keys = 57455 kill = 57456 - labels = 57715 + labels = 57718 lag = 57457 - language = 57716 - last = 57717 - lastBackup = 57718 + language = 57719 + last = 57720 + lastBackup = 57721 lastValue = 57458 - lastval = 57719 - le = 58066 + lastval = 57722 + le = 58069 lead = 57459 - leader = 57939 - leaderConstraints = 57940 + leader = 57942 + leaderConstraints = 57943 leading = 57460 - learner = 57941 - learnerConstraints = 57942 - learners = 57943 + learner = 57944 + learnerConstraints = 57945 + learners = 57946 left = 57461 - less = 57720 - level = 57721 + less = 57723 + level = 57724 like = 57462 limit = 57463 linear = 57465 lines = 57464 - list = 57722 + list = 57725 load = 57466 - local = 57723 + local = 57726 localTime = 57467 localTs = 57468 - location = 57725 + location = 57728 lock = 57469 - locked = 57724 - logs = 57726 + locked = 57727 + logs = 57729 long = 57558 longblobType = 57470 longtextType = 57471 lowPriority = 57472 - lowerThanCharsetKwd = 58086 - lowerThanComma = 58099 - lowerThanCreateTableSelect = 58084 - lowerThanEq = 58096 - lowerThanFunction = 58091 - lowerThanInsertValues = 58082 - lowerThanKey = 58087 - lowerThanLocal = 58088 - lowerThanNot = 58098 - lowerThanOn = 58095 - lowerThanParenthese = 58093 - lowerThanRemove = 58089 - lowerThanSelectOpt = 58077 - lowerThanSelectStmt = 58081 - lowerThanSetKeyword = 58080 - lowerThanStringLitToken = 58079 - lowerThanValueKeyword = 58078 - lowerThenOrder = 58090 - lsh = 58069 - master = 57727 + lowerThanCharsetKwd = 58089 + lowerThanComma = 58102 + lowerThanCreateTableSelect = 58087 + lowerThanEq = 58099 + lowerThanFunction = 58094 + lowerThanInsertValues = 58085 + lowerThanKey = 58090 + lowerThanLocal = 58091 + lowerThanNot = 58101 + lowerThanOn = 58098 + lowerThanParenthese = 58096 + lowerThanRemove = 58092 + lowerThanSelectOpt = 58080 + lowerThanSelectStmt = 58084 + lowerThanSetKeyword = 58083 + lowerThanStringLitToken = 58082 + lowerThanValueKeyword = 58081 + lowerThenOrder = 58093 + lsh = 58072 + master = 57730 match = 57473 - max = 57945 - maxConnectionsPerHour = 57730 - maxQueriesPerHour = 57731 - maxRows = 57732 - maxUpdatesPerHour = 57733 - maxUserConnections = 57734 + max = 57948 + maxConnectionsPerHour = 57733 + maxQueriesPerHour = 57734 + maxRows = 57735 + maxUpdatesPerHour = 57736 + maxUserConnections = 57737 maxValue = 57474 - max_idxnum = 57728 - max_minutes = 57729 - mb = 57735 + max_idxnum = 57731 + max_minutes = 57732 + mb = 57738 mediumIntType = 57476 mediumblobType = 57475 mediumtextType = 57477 - memory = 57736 - merge = 57737 - microsecond = 57738 - min = 57944 - minRows = 57739 - minValue = 57741 - minute = 57740 + memory = 57739 + merge = 57740 + microsecond = 57741 + min = 57947 + minRows = 57742 + minValue = 57744 + minute = 57743 minuteMicrosecond = 57478 minuteSecond = 57479 mod = 57480 - mode = 57742 - modify = 57743 - month = 57744 - names = 57745 - national = 57746 + mode = 57745 + modify = 57746 + month = 57747 + names = 57748 + national = 57749 natural = 57572 - ncharType = 57747 - neg = 58097 - neq = 58070 - neqSynonym = 58071 - never = 57748 - next = 57749 - next_row_id = 57933 - nextval = 57750 - no = 57751 + ncharType = 57750 + neg = 58100 + neq = 58073 + neqSynonym = 58074 + never = 57751 + next = 57752 + next_row_id = 57936 + nextval = 57753 + no = 57754 noWriteToBinLog = 57482 - nocache = 57752 - nocycle = 57753 - nodeID = 58005 - nodeState = 58006 - nodegroup = 57754 - nomaxvalue = 57755 - nominvalue = 57756 - nonclustered = 57757 - none = 57758 + nocache = 57755 + nocycle = 57756 + nodeID = 58008 + nodeState = 58009 + nodegroup = 57757 + nomaxvalue = 57758 + nominvalue = 57759 + nonclustered = 57760 + none = 57761 not = 57481 - not2 = 58075 - now = 57946 - nowait = 57759 + not2 = 58078 + now = 57949 + nowait = 57762 nthValue = 57483 ntile = 57484 null = 57485 - nulleq = 58072 - nulls = 57761 + nulleq = 58075 + nulls = 57764 numericType = 57486 - nvarcharType = 57760 + nvarcharType = 57763 odbcDateType = 57356 odbcTimeType = 57357 odbcTimestampType = 57358 of = 57487 - off = 57762 - offset = 57763 + off = 57765 + offset = 57766 on = 57488 - onDuplicate = 57764 - online = 57765 - only = 57766 - open = 57767 - optRuleBlacklist = 57947 - optimistic = 58007 + onDuplicate = 57767 + online = 57768 + only = 57769 + open = 57770 + optRuleBlacklist = 57950 + optimistic = 58010 optimize = 57489 option = 57490 - optional = 57768 + optional = 57771 optionally = 57491 or = 57492 order = 57493 outer = 57494 outfile = 57444 over = 57495 - packKeys = 57769 - pageSym = 57770 - paramMarker = 58073 - parser = 57771 - partial = 57772 + packKeys = 57772 + pageSym = 57773 + paramMarker = 58076 + parser = 57774 + partial = 57775 partition = 57496 - partitioning = 57773 - partitions = 57774 - password = 57775 - per_db = 57777 - per_table = 57778 - percent = 57776 + partitioning = 57776 + partitions = 57777 + password = 57778 + per_db = 57780 + per_table = 57781 + percent = 57779 percentRank = 57497 - pessimistic = 58008 + pessimistic = 58011 pipes = 57355 - pipesAsOr = 57779 - placement = 57948 - plan = 57949 - planCache = 57950 - plugins = 57780 - policy = 57781 - position = 57951 - preSplitRegions = 57782 - preceding = 57783 + pipesAsOr = 57782 + placement = 57951 + plan = 57952 + planCache = 57953 + plugins = 57783 + policy = 57784 + position = 57954 + preSplitRegions = 57785 + preceding = 57786 precisionType = 57498 - predicate = 57952 - prepare = 57784 - preserve = 57785 + predicate = 57955 + prepare = 57787 + preserve = 57788 primary = 57499 - primaryRegion = 57953 - privileges = 57786 + primaryRegion = 57956 + privileges = 57789 procedure = 57500 - process = 57787 - processlist = 57788 - profile = 57789 - profiles = 57790 - proxy = 57791 - pump = 58009 - purge = 57792 - quarter = 57793 - queries = 57794 - query = 57795 - quick = 57796 + process = 57790 + processlist = 57791 + profile = 57792 + profiles = 57793 + proxy = 57794 + pump = 58012 + purge = 57795 + quarter = 57796 + queries = 57797 + query = 57798 + quick = 57799 rangeKwd = 57501 rank = 57502 - rateLimit = 57797 + rateLimit = 57800 read = 57503 realType = 57504 - rebuild = 57798 - recent = 57954 - recover = 57799 + rebuild = 57801 + recent = 57957 + recover = 57802 recursive = 57505 - redundant = 57800 + redundant = 57803 references = 57506 regexpKwd = 57507 - region = 58029 - regions = 58028 + region = 58032 + regions = 58031 release = 57508 - reload = 57801 - remove = 57802 + reload = 57804 + remove = 57805 rename = 57509 - reorganize = 57803 - repair = 57804 + reorganize = 57806 + repair = 57807 repeat = 57510 - repeatable = 57805 + repeatable = 57808 replace = 57511 - replayer = 57955 - replica = 57806 - replicas = 57807 - replication = 57808 + replayer = 57958 + replica = 57809 + replicas = 57810 + replication = 57811 require = 57512 - required = 57809 - reset = 58027 - respect = 57810 - restart = 57811 - restore = 57812 - restores = 57813 + required = 57812 + reset = 58030 + respect = 57813 + restart = 57814 + restore = 57815 + restores = 57816 restrict = 57513 - resume = 57814 - reverse = 57815 + resume = 57817 + reverse = 57818 revoke = 57514 right = 57515 rlike = 57516 - role = 57816 - rollback = 57817 - routine = 57818 + role = 57819 + rollback = 57820 + routine = 57821 row = 57517 - rowCount = 57819 - rowFormat = 57820 + rowCount = 57822 + rowFormat = 57823 rowNumber = 57519 rows = 57518 - rsh = 58074 - rtree = 57821 - running = 57956 - s3 = 57957 - sampleRate = 58011 - samples = 58010 - san = 57822 - schedule = 57958 - second = 57823 + rsh = 58077 + rtree = 57824 + running = 57959 + s3 = 57960 + sampleRate = 58014 + samples = 58013 + san = 57825 + schedule = 57961 + second = 57826 secondMicrosecond = 57520 - secondaryEngine = 57824 - secondaryLoad = 57825 - secondaryUnload = 57826 - security = 57827 + secondaryEngine = 57827 + secondaryLoad = 57828 + secondaryUnload = 57829 + security = 57830 selectKwd = 57521 - sendCredentialsToTiKV = 57828 - separator = 57829 - sequence = 57830 - serial = 57831 - serializable = 57832 - session = 57833 + sendCredentialsToTiKV = 57831 + separator = 57832 + sequence = 57833 + serial = 57834 + serializable = 57835 + session = 57836 set = 57522 - setval = 57834 - shardRowIDBits = 57835 - share = 57836 - shared = 57837 + setval = 57837 + shardRowIDBits = 57838 + share = 57839 + shared = 57840 show = 57523 - shutdown = 57838 - signed = 57839 - simple = 57840 + shutdown = 57841 + signed = 57842 + simple = 57843 singleAtIdentifier = 57350 - skip = 57841 - skipSchemaFiles = 57842 - slave = 57843 - slow = 57844 + skip = 57844 + skipSchemaFiles = 57845 + slave = 57846 + slow = 57847 smallIntType = 57524 - snapshot = 57845 - some = 57846 - source = 57847 + snapshot = 57848 + some = 57849 + source = 57850 spatial = 57525 - split = 58025 + split = 58028 sql = 57526 sqlBigResult = 57527 - sqlBufferResult = 57848 - sqlCache = 57849 + sqlBufferResult = 57851 + sqlCache = 57852 sqlCalcFoundRows = 57528 - sqlNoCache = 57850 + sqlNoCache = 57853 sqlSmallResult = 57529 - sqlTsiDay = 57851 - sqlTsiHour = 57852 - sqlTsiMinute = 57853 - sqlTsiMonth = 57854 - sqlTsiQuarter = 57855 - sqlTsiSecond = 57856 - sqlTsiWeek = 57857 - sqlTsiYear = 57858 + sqlTsiDay = 57854 + sqlTsiHour = 57855 + sqlTsiMinute = 57856 + sqlTsiMonth = 57857 + sqlTsiQuarter = 57858 + sqlTsiSecond = 57859 + sqlTsiWeek = 57860 + sqlTsiYear = 57861 ssl = 57530 - staleness = 57959 - start = 57859 + staleness = 57962 + start = 57862 starting = 57531 - statistics = 58012 - stats = 58013 - statsAutoRecalc = 57860 - statsBuckets = 58016 + statistics = 58015 + stats = 58016 + statsAutoRecalc = 57863 + statsBuckets = 58019 statsColChoice = 57586 statsColList = 57587 statsExtended = 57532 - statsHealthy = 58017 - statsHistograms = 58015 - statsMeta = 58014 + statsHealthy = 58020 + statsHistograms = 58018 + statsMeta = 58017 statsOptions = 57584 - statsPersistent = 57861 - statsSamplePages = 57862 + statsPersistent = 57864 + statsSamplePages = 57865 statsSampleRate = 57585 - statsTopN = 58018 - status = 57863 - std = 57960 - stddev = 57961 - stddevPop = 57962 - stddevSamp = 57963 - stop = 57964 - storage = 57864 + statsTopN = 58021 + status = 57866 + std = 57963 + stddev = 57964 + stddevPop = 57965 + stddevSamp = 57966 + stop = 57967 + storage = 57867 stored = 57536 straightJoin = 57533 - strict = 57965 - strictFormat = 57865 + strict = 57968 + strictFormat = 57868 stringLit = 57349 - strong = 57966 - subDate = 57967 - subject = 57866 - subpartition = 57867 - subpartitions = 57868 - substring = 57969 - sum = 57968 - super = 57869 - swaps = 57870 - switchesSym = 57871 - system = 57872 - systemTime = 57873 - tableChecksum = 57874 + strong = 57969 + subDate = 57970 + subject = 57869 + subpartition = 57870 + subpartitions = 57871 + substring = 57972 + sum = 57971 + super = 57872 + swaps = 57873 + switchesSym = 57874 + system = 57875 + systemTime = 57876 + tableChecksum = 57877 tableKwd = 57534 - tableRefPriority = 58092 + tableRefPriority = 58095 tableSample = 57535 - tables = 57875 - tablespace = 57876 - target = 57970 - telemetry = 58020 - telemetryID = 58021 - temporary = 57877 - temptable = 57878 + tables = 57878 + tablespace = 57879 + target = 57973 + telemetry = 58023 + telemetryID = 58024 + temporary = 57880 + temptable = 57881 terminated = 57537 - textType = 57879 - than = 57880 + textType = 57882 + than = 57883 then = 57538 - tiFlash = 58023 - tidb = 58022 - tikvImporter = 57881 - timeType = 57883 - timestampAdd = 57971 - timestampDiff = 57972 - timestampType = 57882 + tiFlash = 58026 + tidb = 58025 + tikvImporter = 57884 + timeType = 57886 + timestampAdd = 57974 + timestampDiff = 57975 + timestampType = 57885 tinyIntType = 57540 tinyblobType = 57539 tinytextType = 57541 - tls = 57973 + tls = 57976 to = 57542 - tokudbDefault = 57974 - tokudbFast = 57975 - tokudbLzma = 57976 - tokudbQuickLZ = 57977 - tokudbSmall = 57979 - tokudbSnappy = 57978 - tokudbUncompressed = 57980 - tokudbZlib = 57981 - top = 57982 - topn = 58024 - tp = 57884 - trace = 57885 - traditional = 57886 + tokudbDefault = 57977 + tokudbFast = 57978 + tokudbLzma = 57979 + tokudbQuickLZ = 57980 + tokudbSmall = 57982 + tokudbSnappy = 57981 + tokudbUncompressed = 57983 + tokudbZlib = 57984 + top = 57985 + topn = 58027 + tp = 57887 + trace = 57888 + traditional = 57889 trailing = 57543 - transaction = 57887 + transaction = 57890 trigger = 57544 - triggers = 57888 - trim = 57983 + triggers = 57891 + trim = 57986 trueKwd = 57545 - truncate = 57889 - unbounded = 57890 - uncommitted = 57891 - undefined = 57892 + truncate = 57892 + unbounded = 57893 + uncommitted = 57894 + undefined = 57895 underscoreCS = 57348 - unicodeSym = 57893 + unicodeSym = 57896 union = 57547 unique = 57546 - unknown = 57894 + unknown = 57897 unlock = 57548 unsigned = 57549 update = 57550 usage = 57551 use = 57552 - user = 57895 + user = 57898 using = 57553 utcDate = 57554 utcTime = 57556 utcTimestamp = 57555 - validation = 57896 - value = 57897 + validation = 57899 + value = 57900 values = 57557 - varPop = 57985 - varSamp = 57986 + varPop = 57988 + varSamp = 57989 varbinaryType = 57561 varcharType = 57559 varcharacter = 57560 - variables = 57898 - variance = 57984 + variables = 57901 + variance = 57987 varying = 57562 - verboseType = 57987 - view = 57899 + verboseType = 57990 + view = 57902 virtual = 57563 - visible = 57900 - voter = 57988 - voterConstraints = 57989 - voters = 57990 - wait = 57907 - warnings = 57901 - week = 57902 - weightString = 57903 + visible = 57903 + voter = 57991 + voterConstraints = 57992 + voters = 57993 + wait = 57910 + warnings = 57904 + week = 57905 + weightString = 57906 when = 57564 where = 57565 - width = 58026 + width = 58029 window = 57567 with = 57568 - without = 57904 + without = 57907 write = 57566 - x509 = 57905 + x509 = 57908 xor = 57569 yearMonth = 57570 - yearType = 57906 + yearType = 57909 zerofill = 57571 yyMaxDepth = 200 - yyTabOfs = -2464 + yyTabOfs = -2468 ) var ( yyXLAT = map[int]int{ - 57344: 0, // $end (2173x) - 59: 1, // ';' (2172x) - 57802: 2, // remove (1828x) - 57803: 3, // reorganize (1828x) - 57625: 4, // comment (1764x) - 57864: 5, // storage (1740x) - 57589: 6, // autoIncrement (1729x) - 44: 7, // ',' (1648x) - 57682: 8, // first (1628x) - 57576: 9, // after (1626x) - 57831: 10, // serial (1622x) - 57590: 11, // autoRandom (1621x) - 57622: 12, // columnFormat (1621x) - 57775: 13, // password (1596x) - 57613: 14, // charsetKwd (1594x) - 57615: 15, // checksum (1582x) - 57948: 16, // placement (1580x) - 57714: 17, // keyBlockSize (1564x) - 57876: 18, // tablespace (1561x) - 57662: 19, // encryption (1559x) - 57665: 20, // engine (1556x) - 57647: 21, // data (1554x) - 57705: 22, // insertMethod (1552x) - 57732: 23, // maxRows (1552x) - 57739: 24, // minRows (1552x) - 57754: 25, // nodegroup (1552x) - 57632: 26, // connection (1544x) - 57591: 27, // autoRandomBase (1541x) - 58016: 28, // statsBuckets (1539x) - 58018: 29, // statsTopN (1539x) - 57588: 30, // autoIdCache (1538x) - 57593: 31, // avgRowLength (1538x) - 57630: 32, // compression (1538x) - 57653: 33, // delayKeyWrite (1538x) - 57769: 34, // packKeys (1538x) - 57782: 35, // preSplitRegions (1538x) - 57820: 36, // rowFormat (1538x) - 57824: 37, // secondaryEngine (1538x) - 57835: 38, // shardRowIDBits (1538x) - 57860: 39, // statsAutoRecalc (1538x) - 57586: 40, // statsColChoice (1538x) - 57587: 41, // statsColList (1538x) - 57861: 42, // statsPersistent (1538x) - 57862: 43, // statsSamplePages (1538x) - 57585: 44, // statsSampleRate (1538x) - 57874: 45, // tableChecksum (1538x) - 57573: 46, // account (1485x) - 57814: 47, // resume (1475x) - 57839: 48, // signed (1475x) - 57845: 49, // snapshot (1474x) - 41: 50, // ')' (1473x) - 57594: 51, // backend (1473x) - 57614: 52, // checkpoint (1473x) - 57631: 53, // concurrency (1473x) - 57637: 54, // csvBackslashEscape (1473x) - 57638: 55, // csvDelimiter (1473x) - 57639: 56, // csvHeader (1473x) - 57640: 57, // csvNotNull (1473x) - 57641: 58, // csvNull (1473x) - 57642: 59, // csvSeparator (1473x) - 57643: 60, // csvTrimLastSeparators (1473x) - 57718: 61, // lastBackup (1473x) - 57764: 62, // onDuplicate (1473x) - 57765: 63, // online (1473x) - 57797: 64, // rateLimit (1473x) - 57828: 65, // sendCredentialsToTiKV (1473x) - 57842: 66, // skipSchemaFiles (1473x) - 57865: 67, // strictFormat (1473x) - 57881: 68, // tikvImporter (1473x) - 57889: 69, // truncate (1470x) - 57751: 70, // no (1469x) - 57859: 71, // start (1467x) - 57608: 72, // cache (1464x) - 57752: 73, // nocache (1463x) - 57646: 74, // cycle (1462x) - 57741: 75, // minValue (1462x) - 57702: 76, // increment (1461x) - 57753: 77, // nocycle (1461x) - 57755: 78, // nomaxvalue (1461x) - 57756: 79, // nominvalue (1461x) - 57811: 80, // restart (1459x) - 57579: 81, // algorithm (1458x) - 57884: 82, // tp (1458x) - 57645: 83, // clustered (1457x) - 57707: 84, // invisible (1457x) - 57757: 85, // nonclustered (1457x) - 58028: 86, // regions (1457x) - 57900: 87, // visible (1457x) - 57918: 88, // constraints (1450x) - 57929: 89, // followerConstraints (1450x) - 57930: 90, // followers (1450x) - 57940: 91, // leaderConstraints (1450x) - 57942: 92, // learnerConstraints (1450x) - 57943: 93, // learners (1450x) - 57953: 94, // primaryRegion (1450x) - 57958: 95, // schedule (1450x) - 57989: 96, // voterConstraints (1450x) - 57990: 97, // voters (1450x) - 57623: 98, // columns (1449x) - 57899: 99, // view (1449x) - 57867: 100, // subpartition (1445x) - 57582: 101, // ascii (1444x) - 57607: 102, // byteType (1444x) - 57774: 103, // partitions (1444x) - 57893: 104, // unicodeSym (1444x) - 57906: 105, // yearType (1444x) - 57650: 106, // day (1443x) - 57680: 107, // fields (1443x) - 57823: 108, // second (1442x) - 57858: 109, // sqlTsiYear (1442x) - 57875: 110, // tables (1442x) - 57697: 111, // hour (1441x) - 57738: 112, // microsecond (1441x) - 57740: 113, // minute (1441x) - 57744: 114, // month (1441x) - 57793: 115, // quarter (1441x) - 57851: 116, // sqlTsiDay (1441x) - 57852: 117, // sqlTsiHour (1441x) - 57853: 118, // sqlTsiMinute (1441x) - 57854: 119, // sqlTsiMonth (1441x) - 57855: 120, // sqlTsiQuarter (1441x) - 57856: 121, // sqlTsiSecond (1441x) - 57857: 122, // sqlTsiWeek (1441x) - 57902: 123, // week (1441x) - 57829: 124, // separator (1440x) - 57863: 125, // status (1440x) - 57730: 126, // maxConnectionsPerHour (1439x) - 57731: 127, // maxQueriesPerHour (1439x) - 57733: 128, // maxUpdatesPerHour (1439x) - 57734: 129, // maxUserConnections (1439x) - 57783: 130, // preceding (1439x) - 57616: 131, // cipher (1438x) - 57700: 132, // importKwd (1438x) - 57712: 133, // issuer (1438x) - 57822: 134, // san (1438x) - 57866: 135, // subject (1438x) - 57723: 136, // local (1437x) - 57841: 137, // skip (1437x) - 57600: 138, // bindings (1436x) - 57652: 139, // definer (1436x) - 57692: 140, // hash (1436x) - 57698: 141, // identified (1436x) - 57726: 142, // logs (1436x) - 57795: 143, // query (1436x) - 57810: 144, // respect (1436x) - 57626: 145, // commit (1435x) - 57644: 146, // current (1435x) - 57664: 147, // enforced (1435x) - 57685: 148, // following (1435x) - 57759: 149, // nowait (1435x) - 57766: 150, // only (1435x) - 57817: 151, // rollback (1435x) - 57897: 152, // value (1435x) - 57597: 153, // begin (1434x) - 57599: 154, // binding (1434x) - 57663: 155, // end (1434x) - 57690: 156, // global (1434x) - 57933: 157, // next_row_id (1434x) - 57781: 158, // policy (1434x) - 57952: 159, // predicate (1434x) - 57877: 160, // temporary (1434x) - 57890: 161, // unbounded (1434x) - 57895: 162, // user (1434x) - 57346: 163, // identifier (1433x) - 57763: 164, // offset (1433x) - 57950: 165, // planCache (1433x) - 57784: 166, // prepare (1433x) - 57816: 167, // role (1433x) - 57894: 168, // unknown (1433x) - 57907: 169, // wait (1433x) - 57606: 170, // btree (1432x) - 57648: 171, // datetimeType (1432x) - 57649: 172, // dateType (1432x) - 57655: 173, // disable (1432x) - 57661: 174, // enable (1432x) - 57683: 175, // fixed (1432x) - 57711: 176, // isolation (1432x) - 57713: 177, // jsonType (1432x) - 57725: 178, // location (1432x) - 57728: 179, // max_idxnum (1432x) - 57736: 180, // memory (1432x) - 57762: 181, // off (1432x) - 57768: 182, // optional (1432x) - 57777: 183, // per_db (1432x) - 57786: 184, // privileges (1432x) - 57809: 185, // required (1432x) - 57821: 186, // rtree (1432x) - 57956: 187, // running (1432x) - 58011: 188, // sampleRate (1432x) - 57830: 189, // sequence (1432x) - 57833: 190, // session (1432x) - 57844: 191, // slow (1432x) - 57883: 192, // timeType (1432x) - 57896: 193, // validation (1432x) - 57898: 194, // variables (1432x) - 57583: 195, // attributes (1431x) - 57659: 196, // duplicate (1431x) - 57660: 197, // dynamic (1431x) - 57668: 198, // errorKwd (1431x) - 57684: 199, // flush (1431x) - 57687: 200, // full (1431x) - 57699: 201, // identSQLErrors (1431x) - 57735: 202, // mb (1431x) - 57742: 203, // mode (1431x) - 57748: 204, // never (1431x) - 57949: 205, // plan (1431x) - 57780: 206, // plugins (1431x) - 57788: 207, // processlist (1431x) - 57799: 208, // recover (1431x) - 57804: 209, // repair (1431x) - 57805: 210, // repeatable (1431x) - 58012: 211, // statistics (1431x) - 57868: 212, // subpartitions (1431x) - 58022: 213, // tidb (1431x) - 57882: 214, // timestampType (1431x) - 57904: 215, // without (1431x) - 57991: 216, // admin (1430x) - 57595: 217, // backup (1430x) - 57601: 218, // binlog (1430x) - 57603: 219, // block (1430x) - 57604: 220, // booleanType (1430x) - 57992: 221, // buckets (1430x) - 57995: 222, // cardinality (1430x) - 57612: 223, // chain (1430x) - 57619: 224, // clientErrorsSummary (1430x) - 57996: 225, // cmSketch (1430x) - 57620: 226, // coalesce (1430x) - 57628: 227, // compact (1430x) - 57629: 228, // compressed (1430x) - 57635: 229, // context (1430x) - 57917: 230, // copyKwd (1430x) - 57998: 231, // correlation (1430x) - 57636: 232, // cpu (1430x) - 57651: 233, // deallocate (1430x) - 58000: 234, // dependency (1430x) - 57654: 235, // directory (1430x) - 57656: 236, // discard (1430x) - 57657: 237, // disk (1430x) - 57658: 238, // do (1430x) - 58002: 239, // drainer (1430x) - 57673: 240, // exchange (1430x) - 57675: 241, // execute (1430x) - 57676: 242, // expansion (1430x) - 57927: 243, // flashback (1430x) - 57689: 244, // general (1430x) - 57693: 245, // help (1430x) - 57694: 246, // histogram (1430x) - 57696: 247, // hosts (1430x) - 57934: 248, // inplace (1430x) - 57706: 249, // instance (1430x) - 57935: 250, // instant (1430x) - 57710: 251, // ipc (1430x) - 58004: 252, // job (1430x) - 58003: 253, // jobs (1430x) - 57715: 254, // labels (1430x) - 57724: 255, // locked (1430x) - 57743: 256, // modify (1430x) - 57749: 257, // next (1430x) - 58005: 258, // nodeID (1430x) - 58006: 259, // nodeState (1430x) - 57761: 260, // nulls (1430x) - 57770: 261, // pageSym (1430x) - 58009: 262, // pump (1430x) - 57792: 263, // purge (1430x) - 57798: 264, // rebuild (1430x) - 57800: 265, // redundant (1430x) - 57801: 266, // reload (1430x) - 57806: 267, // replica (1430x) - 57812: 268, // restore (1430x) - 57818: 269, // routine (1430x) - 57957: 270, // s3 (1430x) - 58010: 271, // samples (1430x) - 57825: 272, // secondaryLoad (1430x) - 57826: 273, // secondaryUnload (1430x) - 57836: 274, // share (1430x) - 57838: 275, // shutdown (1430x) - 57847: 276, // source (1430x) - 58025: 277, // split (1430x) - 58013: 278, // stats (1430x) - 57584: 279, // statsOptions (1430x) - 57964: 280, // stop (1430x) - 57870: 281, // swaps (1430x) - 58023: 282, // tiFlash (1430x) - 57974: 283, // tokudbDefault (1430x) - 57975: 284, // tokudbFast (1430x) - 57976: 285, // tokudbLzma (1430x) - 57977: 286, // tokudbQuickLZ (1430x) - 57979: 287, // tokudbSmall (1430x) - 57978: 288, // tokudbSnappy (1430x) - 57980: 289, // tokudbUncompressed (1430x) - 57981: 290, // tokudbZlib (1430x) - 58024: 291, // topn (1430x) - 57885: 292, // trace (1430x) - 57574: 293, // action (1429x) - 57575: 294, // advise (1429x) - 57577: 295, // against (1429x) - 57578: 296, // ago (1429x) - 57580: 297, // always (1429x) - 57596: 298, // backups (1429x) - 57598: 299, // bernoulli (1429x) - 57602: 300, // bitType (1429x) - 57605: 301, // boolType (1429x) - 57915: 302, // briefType (1429x) - 57993: 303, // builtins (1429x) - 57994: 304, // cancel (1429x) - 57609: 305, // capture (1429x) - 57610: 306, // cascaded (1429x) - 57611: 307, // causal (1429x) - 57617: 308, // cleanup (1429x) - 57618: 309, // client (1429x) - 57621: 310, // collation (1429x) - 57997: 311, // columnStatsUsage (1429x) - 57627: 312, // committed (1429x) - 57624: 313, // config (1429x) - 57633: 314, // consistency (1429x) - 57634: 315, // consistent (1429x) - 57999: 316, // ddl (1429x) - 58001: 317, // depth (1429x) - 57922: 318, // dotType (1429x) - 57923: 319, // dump (1429x) - 57666: 320, // engines (1429x) - 57667: 321, // enum (1429x) - 57671: 322, // events (1429x) - 57672: 323, // evolve (1429x) - 57677: 324, // expire (1429x) - 57925: 325, // exprPushdownBlacklist (1429x) - 57678: 326, // extended (1429x) - 57679: 327, // faultsSym (1429x) - 57686: 328, // format (1429x) - 57688: 329, // function (1429x) - 57691: 330, // grants (1429x) - 58019: 331, // histogramsInFlight (1429x) - 57695: 332, // history (1429x) - 57701: 333, // imports (1429x) - 57703: 334, // incremental (1429x) - 57704: 335, // indexes (1429x) - 57936: 336, // internal (1429x) - 57708: 337, // invoker (1429x) - 57709: 338, // io (1429x) - 57716: 339, // language (1429x) - 57717: 340, // last (1429x) - 57720: 341, // less (1429x) - 57721: 342, // level (1429x) - 57722: 343, // list (1429x) - 57727: 344, // master (1429x) - 57729: 345, // max_minutes (1429x) - 57737: 346, // merge (1429x) - 57746: 347, // national (1429x) - 57747: 348, // ncharType (1429x) - 57750: 349, // nextval (1429x) - 57758: 350, // none (1429x) - 57760: 351, // nvarcharType (1429x) - 57767: 352, // open (1429x) - 58007: 353, // optimistic (1429x) - 57947: 354, // optRuleBlacklist (1429x) - 57771: 355, // parser (1429x) - 57772: 356, // partial (1429x) - 57773: 357, // partitioning (1429x) - 57778: 358, // per_table (1429x) - 57776: 359, // percent (1429x) - 58008: 360, // pessimistic (1429x) - 57785: 361, // preserve (1429x) - 57789: 362, // profile (1429x) - 57790: 363, // profiles (1429x) - 57794: 364, // queries (1429x) - 57954: 365, // recent (1429x) - 58029: 366, // region (1429x) - 57955: 367, // replayer (1429x) - 58027: 368, // reset (1429x) - 57813: 369, // restores (1429x) - 57827: 370, // security (1429x) - 57832: 371, // serializable (1429x) - 57840: 372, // simple (1429x) - 57843: 373, // slave (1429x) - 58017: 374, // statsHealthy (1429x) - 58015: 375, // statsHistograms (1429x) - 58014: 376, // statsMeta (1429x) - 57965: 377, // strict (1429x) - 57871: 378, // switchesSym (1429x) - 57872: 379, // system (1429x) - 57873: 380, // systemTime (1429x) - 57970: 381, // target (1429x) - 58021: 382, // telemetryID (1429x) - 57878: 383, // temptable (1429x) - 57879: 384, // textType (1429x) - 57880: 385, // than (1429x) - 57973: 386, // tls (1429x) - 57982: 387, // top (1429x) - 57886: 388, // traditional (1429x) - 57887: 389, // transaction (1429x) - 57888: 390, // triggers (1429x) - 57891: 391, // uncommitted (1429x) - 57892: 392, // undefined (1429x) - 57987: 393, // verboseType (1429x) - 57901: 394, // warnings (1429x) - 58026: 395, // width (1429x) - 57905: 396, // x509 (1429x) - 57908: 397, // addDate (1428x) - 57581: 398, // any (1428x) - 57909: 399, // approxCountDistinct (1428x) - 57910: 400, // approxPercentile (1428x) - 57592: 401, // avg (1428x) - 57911: 402, // bitAnd (1428x) - 57912: 403, // bitOr (1428x) - 57913: 404, // bitXor (1428x) - 57914: 405, // bound (1428x) - 57916: 406, // cast (1428x) - 57919: 407, // curTime (1428x) - 57920: 408, // dateAdd (1428x) - 57921: 409, // dateSub (1428x) - 57669: 410, // escape (1428x) - 57670: 411, // event (1428x) - 57924: 412, // exact (1428x) - 57674: 413, // exclusive (1428x) - 57926: 414, // extract (1428x) - 57681: 415, // file (1428x) - 57928: 416, // follower (1428x) - 57931: 417, // getFormat (1428x) - 57932: 418, // groupConcat (1428x) - 57937: 419, // jsonArrayagg (1428x) - 57938: 420, // jsonObjectAgg (1428x) - 57719: 421, // lastval (1428x) - 57939: 422, // leader (1428x) - 57941: 423, // learner (1428x) - 57945: 424, // max (1428x) - 57944: 425, // min (1428x) - 57745: 426, // names (1428x) - 57946: 427, // now (1428x) - 57951: 428, // position (1428x) - 57787: 429, // process (1428x) - 57791: 430, // proxy (1428x) - 57796: 431, // quick (1428x) - 57807: 432, // replicas (1428x) - 57808: 433, // replication (1428x) - 57815: 434, // reverse (1428x) - 57819: 435, // rowCount (1428x) - 57834: 436, // setval (1428x) - 57837: 437, // shared (1428x) - 57846: 438, // some (1428x) - 57848: 439, // sqlBufferResult (1428x) - 57849: 440, // sqlCache (1428x) - 57850: 441, // sqlNoCache (1428x) - 57959: 442, // staleness (1428x) - 57960: 443, // std (1428x) - 57961: 444, // stddev (1428x) - 57962: 445, // stddevPop (1428x) - 57963: 446, // stddevSamp (1428x) - 57966: 447, // strong (1428x) - 57967: 448, // subDate (1428x) - 57969: 449, // substring (1428x) - 57968: 450, // sum (1428x) - 57869: 451, // super (1428x) - 58020: 452, // telemetry (1428x) - 57971: 453, // timestampAdd (1428x) - 57972: 454, // timestampDiff (1428x) - 57983: 455, // trim (1428x) - 57984: 456, // variance (1428x) - 57985: 457, // varPop (1428x) - 57986: 458, // varSamp (1428x) - 57988: 459, // voter (1428x) - 57903: 460, // weightString (1428x) - 57488: 461, // on (1362x) - 40: 462, // '(' (1278x) - 57568: 463, // with (1180x) - 57349: 464, // stringLit (1167x) - 58075: 465, // not2 (1161x) - 57481: 466, // not (1106x) - 57364: 467, // as (1075x) - 57398: 468, // defaultKwd (1070x) - 57547: 469, // union (1043x) - 57553: 470, // using (1037x) - 57461: 471, // left (1023x) - 57515: 472, // right (1023x) - 57379: 473, // collate (1022x) - 45: 474, // '-' (992x) - 43: 475, // '+' (991x) - 57480: 476, // mod (972x) - 57415: 477, // except (936x) - 57441: 478, // intersect (935x) - 57435: 479, // ignore (934x) - 57496: 480, // partition (928x) - 57485: 481, // null (915x) - 57420: 482, // forKwd (912x) - 57463: 483, // limit (909x) - 57443: 484, // into (906x) - 57469: 485, // lock (902x) - 58064: 486, // eq (893x) - 57423: 487, // from (893x) - 57417: 488, // fetch (892x) - 57565: 489, // where (891x) - 57493: 490, // order (888x) - 57557: 491, // values (888x) - 57421: 492, // force (884x) - 57522: 493, // set (876x) - 57363: 494, // and (873x) - 57377: 495, // charType (872x) - 57511: 496, // replace (861x) - 58059: 497, // intLit (857x) - 57492: 498, // or (850x) - 57354: 499, // andand (849x) - 57779: 500, // pipesAsOr (849x) - 57569: 501, // xor (849x) - 57427: 502, // group (822x) - 57533: 503, // straightJoin (818x) - 57567: 504, // window (810x) - 57429: 505, // having (808x) - 57453: 506, // join (806x) - 57572: 507, // natural (796x) - 57384: 508, // cross (795x) - 57439: 509, // inner (795x) - 57462: 510, // like (794x) - 125: 511, // '}' (792x) - 42: 512, // '*' (787x) - 57518: 513, // rows (780x) - 57552: 514, // use (776x) - 57535: 515, // tableSample (770x) - 57501: 516, // rangeKwd (769x) - 57428: 517, // groups (768x) - 57402: 518, // desc (767x) - 57365: 519, // asc (765x) - 57393: 520, // dayHour (763x) - 57394: 521, // dayMicrosecond (763x) - 57395: 522, // dayMinute (763x) - 57396: 523, // daySecond (763x) - 57431: 524, // hourMicrosecond (763x) - 57432: 525, // hourMinute (763x) - 57433: 526, // hourSecond (763x) - 57478: 527, // minuteMicrosecond (763x) - 57479: 528, // minuteSecond (763x) - 57520: 529, // secondMicrosecond (763x) - 57570: 530, // yearMonth (763x) - 57564: 531, // when (762x) - 57436: 532, // in (760x) - 57410: 533, // elseKwd (759x) - 57368: 534, // binaryType (758x) - 57538: 535, // then (756x) - 60: 536, // '<' (749x) - 62: 537, // '>' (749x) - 58065: 538, // ge (749x) - 57445: 539, // is (749x) - 58066: 540, // le (749x) - 58070: 541, // neq (749x) - 58071: 542, // neqSynonym (749x) - 58072: 543, // nulleq (749x) - 57366: 544, // between (747x) - 47: 545, // '/' (746x) - 37: 546, // '%' (745x) - 38: 547, // '&' (745x) - 94: 548, // '^' (745x) - 124: 549, // '|' (745x) - 57406: 550, // div (745x) - 58069: 551, // lsh (745x) - 58074: 552, // rsh (745x) - 57507: 553, // regexpKwd (739x) - 57516: 554, // rlike (739x) - 57434: 555, // ifKwd (733x) - 57446: 556, // insert (717x) - 57350: 557, // singleAtIdentifier (715x) - 57534: 558, // tableKwd (712x) - 57389: 559, // currentUser (711x) - 57416: 560, // falseKwd (709x) - 57545: 561, // trueKwd (709x) - 58058: 562, // decLit (703x) - 58057: 563, // floatLit (703x) - 57517: 564, // row (702x) - 58060: 565, // hexLit (701x) - 57454: 566, // key (701x) - 58073: 567, // paramMarker (701x) - 123: 568, // '{' (699x) - 58061: 569, // bitLit (699x) - 57442: 570, // interval (698x) - 57355: 571, // pipes (697x) - 57391: 572, // database (694x) - 57413: 573, // exists (694x) - 57378: 574, // check (691x) - 57382: 575, // convert (691x) - 57499: 576, // primary (691x) - 57351: 577, // doubleAtIdentifier (690x) - 58045: 578, // builtinNow (689x) - 57388: 579, // currentTs (689x) - 57467: 580, // localTime (689x) - 57468: 581, // localTs (689x) - 57348: 582, // underscoreCS (689x) - 33: 583, // '!' (687x) - 126: 584, // '~' (687x) - 58035: 585, // builtinApproxCountDistinct (687x) - 58036: 586, // builtinApproxPercentile (687x) - 58030: 587, // builtinBitAnd (687x) - 58031: 588, // builtinBitOr (687x) - 58032: 589, // builtinBitXor (687x) - 58033: 590, // builtinCast (687x) - 58034: 591, // builtinCount (687x) - 58037: 592, // builtinCurDate (687x) - 58038: 593, // builtinCurTime (687x) - 58039: 594, // builtinDateAdd (687x) - 58040: 595, // builtinDateSub (687x) - 58041: 596, // builtinExtract (687x) - 58042: 597, // builtinGroupConcat (687x) - 58043: 598, // builtinMax (687x) - 58044: 599, // builtinMin (687x) - 58046: 600, // builtinPosition (687x) - 58050: 601, // builtinStddevPop (687x) - 58051: 602, // builtinStddevSamp (687x) - 58047: 603, // builtinSubstring (687x) - 58048: 604, // builtinSum (687x) - 58049: 605, // builtinSysDate (687x) - 58052: 606, // builtinTranslate (687x) - 58053: 607, // builtinTrim (687x) - 58054: 608, // builtinUser (687x) - 58055: 609, // builtinVarPop (687x) - 58056: 610, // builtinVarSamp (687x) - 57374: 611, // caseKwd (687x) - 57385: 612, // cumeDist (687x) - 57386: 613, // currentDate (687x) - 57390: 614, // currentRole (687x) - 57387: 615, // currentTime (687x) - 57401: 616, // denseRank (687x) - 57418: 617, // firstValue (687x) - 57457: 618, // lag (687x) - 57458: 619, // lastValue (687x) - 57459: 620, // lead (687x) - 57483: 621, // nthValue (687x) - 57484: 622, // ntile (687x) - 57497: 623, // percentRank (687x) - 57502: 624, // rank (687x) - 57510: 625, // repeat (687x) - 57519: 626, // rowNumber (687x) - 57554: 627, // utcDate (687x) - 57556: 628, // utcTime (687x) - 57555: 629, // utcTimestamp (687x) - 57546: 630, // unique (684x) - 57381: 631, // constraint (682x) - 57506: 632, // references (679x) - 57425: 633, // generated (675x) - 57521: 634, // selectKwd (669x) - 57376: 635, // character (646x) - 57473: 636, // match (637x) - 57437: 637, // index (634x) - 57542: 638, // to (556x) - 57360: 639, // all (543x) - 46: 640, // '.' (537x) - 57362: 641, // analyze (518x) - 57550: 642, // update (509x) - 58067: 643, // jss (504x) - 58068: 644, // juss (504x) - 57474: 645, // maxValue (500x) - 57464: 646, // lines (493x) - 57371: 647, // by (490x) - 58063: 648, // assignmentEq (489x) - 57512: 649, // require (485x) - 57361: 650, // alter (484x) - 58321: 651, // Identifier (483x) - 58396: 652, // NotKeywordToken (483x) - 58618: 653, // TiDBKeyword (483x) - 58628: 654, // UnReservedKeyword (483x) - 64: 655, // '@' (480x) - 57526: 656, // sql (477x) - 57408: 657, // drop (474x) - 57373: 658, // cascade (473x) - 57503: 659, // read (473x) - 57513: 660, // restrict (473x) - 57347: 661, // asof (471x) - 57383: 662, // create (469x) - 57422: 663, // foreign (469x) - 57424: 664, // fulltext (469x) - 57560: 665, // varcharacter (467x) - 57559: 666, // varcharType (467x) - 57375: 667, // change (466x) - 57397: 668, // decimalType (466x) - 57407: 669, // doubleType (466x) - 57419: 670, // floatType (466x) - 57440: 671, // integerType (466x) - 57447: 672, // intType (466x) - 57504: 673, // realType (466x) - 57509: 674, // rename (466x) - 57566: 675, // write (466x) - 57561: 676, // varbinaryType (465x) - 57359: 677, // add (464x) - 57367: 678, // bigIntType (464x) - 57369: 679, // blobType (464x) - 57448: 680, // int1Type (464x) - 57449: 681, // int2Type (464x) - 57450: 682, // int3Type (464x) - 57451: 683, // int4Type (464x) - 57452: 684, // int8Type (464x) - 57558: 685, // long (464x) - 57470: 686, // longblobType (464x) - 57471: 687, // longtextType (464x) - 57475: 688, // mediumblobType (464x) - 57476: 689, // mediumIntType (464x) - 57477: 690, // mediumtextType (464x) - 57486: 691, // numericType (464x) - 57489: 692, // optimize (464x) - 57524: 693, // smallIntType (464x) - 57539: 694, // tinyblobType (464x) - 57540: 695, // tinyIntType (464x) - 57541: 696, // tinytextType (464x) - 58583: 697, // SubSelect (211x) - 58637: 698, // UserVariable (171x) - 58558: 699, // SimpleIdent (170x) - 58373: 700, // Literal (168x) - 58573: 701, // StringLiteral (168x) - 58394: 702, // NextValueForSequence (167x) - 58298: 703, // FunctionCallGeneric (166x) - 58299: 704, // FunctionCallKeyword (166x) - 58300: 705, // FunctionCallNonKeyword (166x) - 58301: 706, // FunctionNameConflict (166x) - 58302: 707, // FunctionNameDateArith (166x) - 58303: 708, // FunctionNameDateArithMultiForms (166x) - 58304: 709, // FunctionNameDatetimePrecision (166x) - 58305: 710, // FunctionNameOptionalBraces (166x) - 58306: 711, // FunctionNameSequence (166x) - 58557: 712, // SimpleExpr (166x) - 58584: 713, // SumExpr (166x) - 58586: 714, // SystemVariable (166x) - 58648: 715, // Variable (166x) - 58671: 716, // WindowFuncCall (166x) - 58150: 717, // BitExpr (153x) - 58466: 718, // PredicateExpr (130x) - 58153: 719, // BoolPri (127x) - 58265: 720, // Expression (127x) - 58392: 721, // NUM (97x) - 58686: 722, // logAnd (96x) - 58687: 723, // logOr (96x) - 58255: 724, // EqOpt (75x) - 58596: 725, // TableName (75x) - 58574: 726, // StringName (56x) - 57549: 727, // unsigned (47x) - 57495: 728, // over (45x) - 57571: 729, // zerofill (45x) - 57400: 730, // deleteKwd (43x) - 58364: 731, // LengthNum (41x) - 58175: 732, // ColumnName (40x) - 57404: 733, // distinct (36x) - 57405: 734, // distinctRow (36x) - 58676: 735, // WindowingClause (35x) - 57399: 736, // delayed (33x) - 57430: 737, // highPriority (33x) - 57472: 738, // lowPriority (33x) - 58512: 739, // SelectStmt (32x) - 58513: 740, // SelectStmtBasic (32x) - 58515: 741, // SelectStmtFromDualTable (32x) - 58516: 742, // SelectStmtFromTable (32x) - 58533: 743, // SetOprClause (32x) - 58534: 744, // SetOprClauseList (31x) - 58537: 745, // SetOprStmtWithLimitOrderBy (31x) - 58538: 746, // SetOprStmtWoutLimitOrderBy (31x) - 58525: 747, // SelectStmtWithClause (28x) - 58536: 748, // SetOprStmt (28x) - 58677: 749, // WithClause (28x) - 57353: 750, // hintComment (27x) - 58276: 751, // FieldLen (26x) - 58353: 752, // Int64Num (26x) - 58433: 753, // OptWindowingClause (24x) - 58438: 754, // OrderBy (23x) - 58519: 755, // SelectStmtLimit (23x) - 57527: 756, // sqlBigResult (23x) - 57528: 757, // sqlCalcFoundRows (23x) - 57529: 758, // sqlSmallResult (23x) - 58163: 759, // CharsetKw (20x) - 58631: 760, // UpdateStmtNoWith (20x) - 58639: 761, // Username (20x) - 58231: 762, // DeleteWithoutUsingStmt (19x) - 58350: 763, // InsertIntoStmt (18x) - 58487: 764, // ReplaceIntoStmt (18x) - 58630: 765, // UpdateStmt (18x) - 58266: 766, // ExpressionList (17x) - 58461: 767, // PlacementPolicyOption (17x) - 58322: 768, // IfExists (16x) - 57537: 769, // terminated (16x) - 58233: 770, // DistinctKwd (15x) - 58323: 771, // IfNotExists (15x) - 58418: 772, // OptFieldLen (15x) - 58234: 773, // DistinctOpt (14x) - 57411: 774, // enclosed (14x) - 58449: 775, // PartitionNameList (14x) - 58661: 776, // WhereClause (14x) - 58662: 777, // WhereClauseOptional (14x) - 58226: 778, // DefaultKwdOpt (13x) - 58230: 779, // DeleteWithUsingStmt (13x) - 57412: 780, // escaped (13x) - 57491: 781, // optionally (13x) - 58597: 782, // TableNameList (13x) - 58229: 783, // DeleteFromStmt (12x) - 58264: 784, // ExprOrDefault (12x) - 58358: 785, // JoinTable (12x) - 58412: 786, // OptBinary (12x) - 58503: 787, // RolenameComposed (12x) - 58593: 788, // TableFactor (12x) - 58606: 789, // TableRef (12x) - 58124: 790, // AnalyzeOptionListOpt (11x) - 58293: 791, // FromOrIn (11x) - 58620: 792, // TimestampUnit (11x) - 58164: 793, // CharsetName (10x) - 58176: 794, // ColumnNameList (10x) - 57466: 795, // load (10x) - 58397: 796, // NotSym (10x) - 58439: 797, // OrderByOptional (10x) - 58441: 798, // PartDefOption (10x) - 58556: 799, // SignedNum (10x) - 58156: 800, // BuggyDefaultFalseDistinctOpt (9x) - 58216: 801, // DBName (9x) - 58225: 802, // DefaultFalseDistinctOpt (9x) - 58359: 803, // JoinType (9x) - 57482: 804, // noWriteToBinLog (9x) - 58402: 805, // NumLiteral (9x) - 58502: 806, // Rolename (9x) - 58497: 807, // RoleNameString (9x) - 58120: 808, // AlterTableStmt (8x) - 58215: 809, // CrossOpt (8x) - 58256: 810, // EqOrAssignmentEq (8x) - 58267: 811, // ExpressionListOpt (8x) - 58344: 812, // IndexPartSpecification (8x) - 58360: 813, // KeyOrIndex (8x) - 58520: 814, // SelectStmtLimitOpt (8x) - 58619: 815, // TimeUnit (8x) - 58651: 816, // VariableName (8x) - 58106: 817, // AllOrPartitionNameList (7x) - 58199: 818, // ConstraintKeywordOpt (7x) - 58282: 819, // FieldsOrColumns (7x) - 58291: 820, // ForceOpt (7x) - 58345: 821, // IndexPartSpecificationList (7x) - 58395: 822, // NoWriteToBinLogAliasOpt (7x) - 58470: 823, // Priority (7x) - 58507: 824, // RowFormat (7x) - 58510: 825, // RowValue (7x) - 58531: 826, // SetExpr (7x) - 58542: 827, // ShowDatabaseNameOpt (7x) - 58603: 828, // TableOption (7x) - 57562: 829, // varying (7x) - 58145: 830, // BeginTransactionStmt (6x) - 58147: 831, // BindableStmt (6x) - 57380: 832, // column (6x) - 58170: 833, // ColumnDef (6x) - 58189: 834, // CommitStmt (6x) - 58218: 835, // DatabaseOption (6x) - 58221: 836, // DatabaseSym (6x) - 58258: 837, // EscapedTableRef (6x) - 58263: 838, // ExplainableStmt (6x) - 58280: 839, // FieldTerminator (6x) - 57426: 840, // grant (6x) - 58327: 841, // IgnoreOptional (6x) - 58336: 842, // IndexInvisible (6x) - 58341: 843, // IndexNameList (6x) - 58347: 844, // IndexType (6x) - 58377: 845, // LoadDataStmt (6x) - 58450: 846, // PartitionNameListOpt (6x) - 57508: 847, // release (6x) - 58504: 848, // RolenameList (6x) - 58506: 849, // RollbackStmt (6x) - 58541: 850, // SetStmt (6x) - 57523: 851, // show (6x) - 58601: 852, // TableOptimizerHints (6x) - 58640: 853, // UsernameList (6x) - 58678: 854, // WithClustered (6x) - 58104: 855, // AlgorithmClause (5x) - 58157: 856, // ByItem (5x) - 58169: 857, // CollationName (5x) - 58173: 858, // ColumnKeywordOpt (5x) - 58232: 859, // DirectPlacementOption (5x) - 58278: 860, // FieldOpt (5x) - 58279: 861, // FieldOpts (5x) - 58319: 862, // IdentList (5x) - 58339: 863, // IndexName (5x) - 58342: 864, // IndexOption (5x) - 58343: 865, // IndexOptionList (5x) - 57438: 866, // infile (5x) - 58369: 867, // LimitOption (5x) - 58381: 868, // LockClause (5x) - 58414: 869, // OptCharsetWithOptBinary (5x) - 58425: 870, // OptNullTreatment (5x) - 58464: 871, // PolicyName (5x) - 58471: 872, // PriorityOpt (5x) - 58511: 873, // SelectLockOpt (5x) - 58518: 874, // SelectStmtIntoOption (5x) - 58607: 875, // TableRefs (5x) - 58633: 876, // UserSpec (5x) - 58130: 877, // Assignment (4x) - 58136: 878, // AuthString (4x) - 58137: 879, // BRIEBooleanOptionName (4x) - 58138: 880, // BRIEIntegerOptionName (4x) - 58139: 881, // BRIEKeywordOptionName (4x) - 58140: 882, // BRIEOption (4x) - 58141: 883, // BRIEOptions (4x) - 58143: 884, // BRIEStringOptionName (4x) - 58158: 885, // ByList (4x) - 58162: 886, // Char (4x) - 58193: 887, // ConfigItemName (4x) - 58197: 888, // Constraint (4x) - 58287: 889, // FloatOpt (4x) - 58348: 890, // IndexTypeName (4x) - 57490: 891, // option (4x) - 58430: 892, // OptWild (4x) - 57494: 893, // outer (4x) - 58465: 894, // Precision (4x) - 58479: 895, // ReferDef (4x) - 58493: 896, // RestrictOrCascadeOpt (4x) - 58509: 897, // RowStmt (4x) - 58526: 898, // SequenceOption (4x) - 57532: 899, // statsExtended (4x) - 58588: 900, // TableAsName (4x) - 58589: 901, // TableAsNameOpt (4x) - 58600: 902, // TableNameOptWild (4x) - 58602: 903, // TableOptimizerHintsOpt (4x) - 58604: 904, // TableOptionList (4x) - 58622: 905, // TraceableStmt (4x) - 58623: 906, // TransactionChar (4x) - 58634: 907, // UserSpecList (4x) - 58672: 908, // WindowName (4x) - 58127: 909, // AsOfClause (3x) - 58131: 910, // AssignmentList (3x) - 58133: 911, // AttributesOpt (3x) - 58154: 912, // Boolean (3x) - 58182: 913, // ColumnOption (3x) - 58185: 914, // ColumnPosition (3x) - 58190: 915, // CommonTableExpr (3x) - 58211: 916, // CreateTableStmt (3x) - 58219: 917, // DatabaseOptionList (3x) - 58227: 918, // DefaultTrueDistinctOpt (3x) - 58252: 919, // EnforcedOrNot (3x) - 57414: 920, // explain (3x) - 58269: 921, // ExtendedPriv (3x) - 58307: 922, // GeneratedAlways (3x) - 58309: 923, // GlobalScope (3x) - 58313: 924, // GroupByClause (3x) - 58331: 925, // IndexHint (3x) - 58335: 926, // IndexHintType (3x) - 58340: 927, // IndexNameAndTypeOpt (3x) - 57455: 928, // keys (3x) - 58371: 929, // Lines (3x) - 58389: 930, // MaxValueOrExpression (3x) - 58426: 931, // OptOrder (3x) - 58429: 932, // OptTemporary (3x) - 58442: 933, // PartDefOptionList (3x) - 58444: 934, // PartitionDefinition (3x) - 58453: 935, // PasswordExpire (3x) - 58455: 936, // PasswordOrLockOption (3x) - 58463: 937, // PluginNameList (3x) - 58469: 938, // PrimaryOpt (3x) - 58472: 939, // PrivElem (3x) - 58474: 940, // PrivType (3x) - 57500: 941, // procedure (3x) - 58488: 942, // RequireClause (3x) - 58489: 943, // RequireClauseOpt (3x) - 58491: 944, // RequireListElement (3x) - 58505: 945, // RolenameWithoutIdent (3x) - 58498: 946, // RoleOrPrivElem (3x) - 58517: 947, // SelectStmtGroup (3x) - 58535: 948, // SetOprOpt (3x) - 58587: 949, // TableAliasRefList (3x) - 58590: 950, // TableElement (3x) - 58599: 951, // TableNameListOpt2 (3x) - 58615: 952, // TextString (3x) - 58624: 953, // TransactionChars (3x) - 57544: 954, // trigger (3x) - 57548: 955, // unlock (3x) - 57551: 956, // usage (3x) - 58644: 957, // ValuesList (3x) - 58646: 958, // ValuesStmtList (3x) - 58642: 959, // ValueSym (3x) - 58649: 960, // VariableAssignment (3x) - 58669: 961, // WindowFrameStart (3x) - 58103: 962, // AdminStmt (2x) - 58105: 963, // AllColumnsOrPredicateColumnsOpt (2x) - 58107: 964, // AlterDatabaseStmt (2x) - 58108: 965, // AlterImportStmt (2x) - 58109: 966, // AlterInstanceStmt (2x) - 58110: 967, // AlterOrderItem (2x) - 58112: 968, // AlterPolicyStmt (2x) - 58113: 969, // AlterSequenceOption (2x) - 58115: 970, // AlterSequenceStmt (2x) - 58117: 971, // AlterTableSpec (2x) - 58121: 972, // AlterUserStmt (2x) - 58122: 973, // AnalyzeOption (2x) - 58125: 974, // AnalyzeTableStmt (2x) - 58149: 975, // BinlogStmt (2x) - 58142: 976, // BRIEStmt (2x) - 58144: 977, // BRIETables (2x) - 57372: 978, // call (2x) - 58159: 979, // CallStmt (2x) - 58160: 980, // CastType (2x) - 58161: 981, // ChangeStmt (2x) - 58167: 982, // CheckConstraintKeyword (2x) - 58177: 983, // ColumnNameListOpt (2x) - 58180: 984, // ColumnNameOrUserVariable (2x) - 58183: 985, // ColumnOptionList (2x) - 58184: 986, // ColumnOptionListOpt (2x) - 58186: 987, // ColumnSetValue (2x) - 58192: 988, // CompletionTypeWithinTransaction (2x) - 58194: 989, // ConnectionOption (2x) - 58196: 990, // ConnectionOptions (2x) - 58200: 991, // CreateBindingStmt (2x) - 58201: 992, // CreateDatabaseStmt (2x) - 58202: 993, // CreateImportStmt (2x) - 58203: 994, // CreateIndexStmt (2x) - 58204: 995, // CreatePolicyStmt (2x) - 58205: 996, // CreateRoleStmt (2x) - 58207: 997, // CreateSequenceStmt (2x) - 58208: 998, // CreateStatisticsStmt (2x) - 58209: 999, // CreateTableOptionListOpt (2x) - 58212: 1000, // CreateUserStmt (2x) - 58214: 1001, // CreateViewStmt (2x) - 57392: 1002, // databases (2x) - 58223: 1003, // DeallocateStmt (2x) - 58224: 1004, // DeallocateSym (2x) - 57403: 1005, // describe (2x) - 58235: 1006, // DoStmt (2x) - 58236: 1007, // DropBindingStmt (2x) - 58237: 1008, // DropDatabaseStmt (2x) - 58238: 1009, // DropImportStmt (2x) - 58239: 1010, // DropIndexStmt (2x) - 58240: 1011, // DropPolicyStmt (2x) - 58241: 1012, // DropRoleStmt (2x) - 58242: 1013, // DropSequenceStmt (2x) - 58243: 1014, // DropStatisticsStmt (2x) - 58244: 1015, // DropStatsStmt (2x) - 58245: 1016, // DropTableStmt (2x) - 58246: 1017, // DropUserStmt (2x) - 58247: 1018, // DropViewStmt (2x) - 58248: 1019, // DuplicateOpt (2x) - 58250: 1020, // EmptyStmt (2x) - 58251: 1021, // EncryptionOpt (2x) - 58253: 1022, // EnforcedOrNotOpt (2x) - 58257: 1023, // ErrorHandling (2x) - 58259: 1024, // ExecuteStmt (2x) - 58261: 1025, // ExplainStmt (2x) - 58262: 1026, // ExplainSym (2x) - 58271: 1027, // Field (2x) - 58274: 1028, // FieldItem (2x) - 58281: 1029, // Fields (2x) - 58285: 1030, // FlashbackTableStmt (2x) - 58290: 1031, // FlushStmt (2x) - 58296: 1032, // FuncDatetimePrecList (2x) - 58297: 1033, // FuncDatetimePrecListOpt (2x) - 58310: 1034, // GrantProxyStmt (2x) - 58311: 1035, // GrantRoleStmt (2x) - 58312: 1036, // GrantStmt (2x) - 58314: 1037, // HandleRange (2x) - 58316: 1038, // HashString (2x) - 58318: 1039, // HelpStmt (2x) - 58330: 1040, // IndexAdviseStmt (2x) - 58332: 1041, // IndexHintList (2x) - 58333: 1042, // IndexHintListOpt (2x) - 58338: 1043, // IndexLockAndAlgorithmOpt (2x) - 58351: 1044, // InsertValues (2x) - 58355: 1045, // IntoOpt (2x) - 58361: 1046, // KeyOrIndexOpt (2x) - 57456: 1047, // kill (2x) - 58362: 1048, // KillOrKillTiDB (2x) - 58363: 1049, // KillStmt (2x) - 58368: 1050, // LimitClause (2x) - 57465: 1051, // linear (2x) - 58370: 1052, // LinearOpt (2x) - 58374: 1053, // LoadDataSetItem (2x) - 58378: 1054, // LoadStatsStmt (2x) - 58379: 1055, // LocalOpt (2x) - 58380: 1056, // LocationLabelList (2x) - 58382: 1057, // LockTablesStmt (2x) - 58390: 1058, // MaxValueOrExpressionList (2x) - 58398: 1059, // NowSym (2x) - 58399: 1060, // NowSymFunc (2x) - 58400: 1061, // NowSymOptionFraction (2x) - 58401: 1062, // NumList (2x) - 58404: 1063, // ObjectType (2x) - 57487: 1064, // of (2x) - 58405: 1065, // OfTablesOpt (2x) - 58406: 1066, // OnCommitOpt (2x) - 58407: 1067, // OnDelete (2x) - 58410: 1068, // OnUpdate (2x) - 58415: 1069, // OptCollate (2x) - 58420: 1070, // OptFull (2x) - 58422: 1071, // OptInteger (2x) - 58435: 1072, // OptionalBraces (2x) - 58434: 1073, // OptionLevel (2x) - 58424: 1074, // OptLeadLagInfo (2x) - 58423: 1075, // OptLLDefault (2x) - 58440: 1076, // OuterOpt (2x) - 58445: 1077, // PartitionDefinitionList (2x) - 58446: 1078, // PartitionDefinitionListOpt (2x) - 58452: 1079, // PartitionOpt (2x) - 58454: 1080, // PasswordOpt (2x) - 58456: 1081, // PasswordOrLockOptionList (2x) - 58457: 1082, // PasswordOrLockOptions (2x) - 58460: 1083, // PlacementOptionList (2x) - 58462: 1084, // PlanReplayerStmt (2x) - 58468: 1085, // PreparedStmt (2x) - 58473: 1086, // PrivLevel (2x) - 58476: 1087, // PurgeImportStmt (2x) - 58477: 1088, // QuickOptional (2x) - 58478: 1089, // RecoverTableStmt (2x) - 58480: 1090, // ReferOpt (2x) - 58482: 1091, // RegexpSym (2x) - 58483: 1092, // RenameTableStmt (2x) - 58484: 1093, // RenameUserStmt (2x) - 58486: 1094, // RepeatableOpt (2x) - 58492: 1095, // RestartStmt (2x) - 58494: 1096, // ResumeImportStmt (2x) - 57514: 1097, // revoke (2x) - 58495: 1098, // RevokeRoleStmt (2x) - 58496: 1099, // RevokeStmt (2x) - 58499: 1100, // RoleOrPrivElemList (2x) - 58500: 1101, // RoleSpec (2x) - 58521: 1102, // SelectStmtOpt (2x) - 58524: 1103, // SelectStmtSQLCache (2x) - 58528: 1104, // SetBindingStmt (2x) - 58529: 1105, // SetDefaultRoleOpt (2x) - 58530: 1106, // SetDefaultRoleStmt (2x) - 58540: 1107, // SetRoleStmt (2x) - 58543: 1108, // ShowImportStmt (2x) - 58548: 1109, // ShowProfileType (2x) - 58551: 1110, // ShowStmt (2x) - 58552: 1111, // ShowTableAliasOpt (2x) - 58554: 1112, // ShutdownStmt (2x) - 58555: 1113, // SignedLiteral (2x) - 58559: 1114, // SplitOption (2x) - 58560: 1115, // SplitRegionStmt (2x) - 58564: 1116, // Statement (2x) - 58567: 1117, // StatsOptionsOpt (2x) - 58568: 1118, // StatsPersistentVal (2x) - 58569: 1119, // StatsType (2x) - 58570: 1120, // StopImportStmt (2x) - 58577: 1121, // SubPartDefinition (2x) - 58580: 1122, // SubPartitionMethod (2x) - 58585: 1123, // Symbol (2x) - 58591: 1124, // TableElementList (2x) - 58594: 1125, // TableLock (2x) - 58598: 1126, // TableNameListOpt (2x) - 58605: 1127, // TableOrTables (2x) - 58614: 1128, // TablesTerminalSym (2x) - 58612: 1129, // TableToTable (2x) - 58616: 1130, // TextStringList (2x) - 58621: 1131, // TraceStmt (2x) - 58626: 1132, // TruncateTableStmt (2x) - 58629: 1133, // UnlockTablesStmt (2x) - 58635: 1134, // UserToUser (2x) - 58632: 1135, // UseStmt (2x) - 58647: 1136, // Varchar (2x) - 58650: 1137, // VariableAssignmentList (2x) - 58659: 1138, // WhenClause (2x) - 58664: 1139, // WindowDefinition (2x) - 58667: 1140, // WindowFrameBound (2x) - 58674: 1141, // WindowSpec (2x) - 58679: 1142, // WithGrantOptionOpt (2x) - 58680: 1143, // WithList (2x) - 58684: 1144, // Writeable (2x) - 58102: 1145, // AdminShowSlow (1x) - 58111: 1146, // AlterOrderList (1x) - 58114: 1147, // AlterSequenceOptionList (1x) - 58116: 1148, // AlterTablePartitionOpt (1x) - 58118: 1149, // AlterTableSpecList (1x) - 58119: 1150, // AlterTableSpecListOpt (1x) - 58123: 1151, // AnalyzeOptionList (1x) - 58126: 1152, // AnyOrAll (1x) - 58128: 1153, // AsOfClauseOpt (1x) - 58129: 1154, // AsOpt (1x) - 58134: 1155, // AuthOption (1x) - 58135: 1156, // AuthPlugin (1x) - 58146: 1157, // BetweenOrNotOp (1x) - 58148: 1158, // BindingStatusType (1x) - 58151: 1159, // BitValueType (1x) - 58152: 1160, // BlobType (1x) - 58155: 1161, // BooleanType (1x) - 57370: 1162, // both (1x) - 58165: 1163, // CharsetNameOrDefault (1x) - 58166: 1164, // CharsetOpt (1x) - 58168: 1165, // ClearPasswordExpireOptions (1x) - 58172: 1166, // ColumnFormat (1x) - 58174: 1167, // ColumnList (1x) - 58181: 1168, // ColumnNameOrUserVariableList (1x) - 58178: 1169, // ColumnNameOrUserVarListOpt (1x) - 58179: 1170, // ColumnNameOrUserVarListOptWithBrackets (1x) - 58187: 1171, // ColumnSetValueList (1x) - 58191: 1172, // CompareOp (1x) - 58195: 1173, // ConnectionOptionList (1x) - 58198: 1174, // ConstraintElem (1x) - 58206: 1175, // CreateSequenceOptionListOpt (1x) - 58210: 1176, // CreateTableSelectOpt (1x) - 58213: 1177, // CreateViewSelectOpt (1x) - 58220: 1178, // DatabaseOptionListOpt (1x) - 58222: 1179, // DateAndTimeType (1x) - 58217: 1180, // DBNameList (1x) - 58228: 1181, // DefaultValueExpr (1x) - 57409: 1182, // dual (1x) - 58249: 1183, // ElseOpt (1x) - 58254: 1184, // EnforcedOrNotOrNotNullOpt (1x) - 58260: 1185, // ExplainFormatType (1x) - 58268: 1186, // ExpressionOpt (1x) - 58270: 1187, // FetchFirstOpt (1x) - 58272: 1188, // FieldAsName (1x) - 58273: 1189, // FieldAsNameOpt (1x) - 58275: 1190, // FieldItemList (1x) - 58277: 1191, // FieldList (1x) - 58283: 1192, // FirstOrNext (1x) - 58284: 1193, // FixedPointType (1x) - 58286: 1194, // FlashbackToNewName (1x) - 58288: 1195, // FloatingPointType (1x) - 58289: 1196, // FlushOption (1x) - 58292: 1197, // FromDual (1x) - 58294: 1198, // FulltextSearchModifierOpt (1x) - 58295: 1199, // FuncDatetimePrec (1x) - 58308: 1200, // GetFormatSelector (1x) - 58315: 1201, // HandleRangeList (1x) - 58317: 1202, // HavingClause (1x) - 58320: 1203, // IdentListWithParenOpt (1x) - 58324: 1204, // IfNotRunning (1x) - 58325: 1205, // IfRunning (1x) - 58326: 1206, // IgnoreLines (1x) - 58328: 1207, // ImportTruncate (1x) - 58334: 1208, // IndexHintScope (1x) - 58337: 1209, // IndexKeyTypeOpt (1x) - 58346: 1210, // IndexPartSpecificationListOpt (1x) - 58349: 1211, // IndexTypeOpt (1x) - 58329: 1212, // InOrNotOp (1x) - 58352: 1213, // InstanceOption (1x) - 58354: 1214, // IntegerType (1x) - 58357: 1215, // IsolationLevel (1x) - 58356: 1216, // IsOrNotOp (1x) - 57460: 1217, // leading (1x) - 58365: 1218, // LikeEscapeOpt (1x) - 58366: 1219, // LikeOrNotOp (1x) - 58367: 1220, // LikeTableWithOrWithoutParen (1x) - 58372: 1221, // LinesTerminated (1x) - 58375: 1222, // LoadDataSetList (1x) - 58376: 1223, // LoadDataSetSpecOpt (1x) - 58383: 1224, // LockType (1x) - 58384: 1225, // LogTypeOpt (1x) - 58385: 1226, // Match (1x) - 58386: 1227, // MatchOpt (1x) - 58387: 1228, // MaxIndexNumOpt (1x) - 58388: 1229, // MaxMinutesOpt (1x) - 58391: 1230, // NChar (1x) - 58403: 1231, // NumericType (1x) - 58393: 1232, // NVarchar (1x) - 58408: 1233, // OnDeleteUpdateOpt (1x) - 58409: 1234, // OnDuplicateKeyUpdate (1x) - 58411: 1235, // OptBinMod (1x) - 58413: 1236, // OptCharset (1x) - 58416: 1237, // OptErrors (1x) - 58417: 1238, // OptExistingWindowName (1x) - 58419: 1239, // OptFromFirstLast (1x) - 58421: 1240, // OptGConcatSeparator (1x) - 58427: 1241, // OptPartitionClause (1x) - 58428: 1242, // OptTable (1x) - 58431: 1243, // OptWindowFrameClause (1x) - 58432: 1244, // OptWindowOrderByClause (1x) - 58437: 1245, // Order (1x) - 58436: 1246, // OrReplace (1x) - 57444: 1247, // outfile (1x) - 58443: 1248, // PartDefValuesOpt (1x) - 58447: 1249, // PartitionKeyAlgorithmOpt (1x) - 58448: 1250, // PartitionMethod (1x) - 58451: 1251, // PartitionNumOpt (1x) - 58458: 1252, // PerDB (1x) - 58459: 1253, // PerTable (1x) - 57498: 1254, // precisionType (1x) - 58467: 1255, // PrepareSQL (1x) - 58475: 1256, // ProcedureCall (1x) - 57505: 1257, // recursive (1x) - 58481: 1258, // RegexpOrNotOp (1x) - 58485: 1259, // ReorganizePartitionRuleOpt (1x) - 58490: 1260, // RequireList (1x) - 58501: 1261, // RoleSpecList (1x) - 58508: 1262, // RowOrRows (1x) - 58514: 1263, // SelectStmtFieldList (1x) - 58522: 1264, // SelectStmtOpts (1x) - 58523: 1265, // SelectStmtOptsList (1x) - 58527: 1266, // SequenceOptionList (1x) - 58532: 1267, // SetOpr (1x) - 58539: 1268, // SetRoleOpt (1x) - 58544: 1269, // ShowIndexKwd (1x) - 58545: 1270, // ShowLikeOrWhereOpt (1x) - 58546: 1271, // ShowPlacementTarget (1x) - 58547: 1272, // ShowProfileArgsOpt (1x) - 58549: 1273, // ShowProfileTypes (1x) - 58550: 1274, // ShowProfileTypesOpt (1x) - 58553: 1275, // ShowTargetFilterable (1x) - 57525: 1276, // spatial (1x) - 58561: 1277, // SplitSyntaxOption (1x) - 57530: 1278, // ssl (1x) - 58562: 1279, // Start (1x) - 58563: 1280, // Starting (1x) - 57531: 1281, // starting (1x) - 58565: 1282, // StatementList (1x) - 58566: 1283, // StatementScope (1x) - 58571: 1284, // StorageMedia (1x) - 57536: 1285, // stored (1x) - 58572: 1286, // StringList (1x) - 58575: 1287, // StringNameOrBRIEOptionKeyword (1x) - 58576: 1288, // StringType (1x) - 58578: 1289, // SubPartDefinitionList (1x) - 58579: 1290, // SubPartDefinitionListOpt (1x) - 58581: 1291, // SubPartitionNumOpt (1x) - 58582: 1292, // SubPartitionOpt (1x) - 58592: 1293, // TableElementListOpt (1x) - 58595: 1294, // TableLockList (1x) - 58608: 1295, // TableRefsClause (1x) - 58609: 1296, // TableSampleMethodOpt (1x) - 58610: 1297, // TableSampleOpt (1x) - 58611: 1298, // TableSampleUnitOpt (1x) - 58613: 1299, // TableToTableList (1x) - 58617: 1300, // TextType (1x) - 57543: 1301, // trailing (1x) - 58625: 1302, // TrimDirection (1x) - 58627: 1303, // Type (1x) - 58636: 1304, // UserToUserList (1x) - 58638: 1305, // UserVariableList (1x) - 58641: 1306, // UsingRoles (1x) - 58643: 1307, // Values (1x) - 58645: 1308, // ValuesOpt (1x) - 58652: 1309, // ViewAlgorithm (1x) - 58653: 1310, // ViewCheckOption (1x) - 58654: 1311, // ViewDefiner (1x) - 58655: 1312, // ViewFieldList (1x) - 58656: 1313, // ViewName (1x) - 58657: 1314, // ViewSQLSecurity (1x) - 57563: 1315, // virtual (1x) - 58658: 1316, // VirtualOrStored (1x) - 58660: 1317, // WhenClauseList (1x) - 58663: 1318, // WindowClauseOptional (1x) - 58665: 1319, // WindowDefinitionList (1x) - 58666: 1320, // WindowFrameBetween (1x) - 58668: 1321, // WindowFrameExtent (1x) - 58670: 1322, // WindowFrameUnits (1x) - 58673: 1323, // WindowNameOrSpec (1x) - 58675: 1324, // WindowSpecDetails (1x) - 58681: 1325, // WithReadLockOpt (1x) - 58682: 1326, // WithValidation (1x) - 58683: 1327, // WithValidationOpt (1x) - 58685: 1328, // Year (1x) - 58101: 1329, // $default (0x) - 58062: 1330, // andnot (0x) - 58132: 1331, // AssignmentListOpt (0x) - 58171: 1332, // ColumnDefList (0x) - 58188: 1333, // CommaOpt (0x) - 58085: 1334, // createTableSelect (0x) - 58076: 1335, // empty (0x) - 57345: 1336, // error (0x) - 58100: 1337, // higherThanComma (0x) - 58094: 1338, // higherThanParenthese (0x) - 58083: 1339, // insertValues (0x) - 57352: 1340, // invalid (0x) - 58086: 1341, // lowerThanCharsetKwd (0x) - 58099: 1342, // lowerThanComma (0x) - 58084: 1343, // lowerThanCreateTableSelect (0x) - 58096: 1344, // lowerThanEq (0x) - 58091: 1345, // lowerThanFunction (0x) - 58082: 1346, // lowerThanInsertValues (0x) - 58087: 1347, // lowerThanKey (0x) - 58088: 1348, // lowerThanLocal (0x) - 58098: 1349, // lowerThanNot (0x) - 58095: 1350, // lowerThanOn (0x) - 58093: 1351, // lowerThanParenthese (0x) - 58089: 1352, // lowerThanRemove (0x) - 58077: 1353, // lowerThanSelectOpt (0x) - 58081: 1354, // lowerThanSelectStmt (0x) - 58080: 1355, // lowerThanSetKeyword (0x) - 58079: 1356, // lowerThanStringLitToken (0x) - 58078: 1357, // lowerThanValueKeyword (0x) - 58090: 1358, // lowerThenOrder (0x) - 58097: 1359, // neg (0x) - 57356: 1360, // odbcDateType (0x) - 57358: 1361, // odbcTimestampType (0x) - 57357: 1362, // odbcTimeType (0x) - 58092: 1363, // tableRefPriority (0x) + 57344: 0, // $end (2177x) + 59: 1, // ';' (2176x) + 57805: 2, // remove (1831x) + 57806: 3, // reorganize (1831x) + 57626: 4, // comment (1767x) + 57867: 5, // storage (1743x) + 57589: 6, // autoIncrement (1732x) + 44: 7, // ',' (1651x) + 57685: 8, // first (1631x) + 57576: 9, // after (1629x) + 57834: 10, // serial (1625x) + 57590: 11, // autoRandom (1624x) + 57623: 12, // columnFormat (1624x) + 57778: 13, // password (1599x) + 57614: 14, // charsetKwd (1597x) + 57616: 15, // checksum (1585x) + 57951: 16, // placement (1583x) + 57717: 17, // keyBlockSize (1567x) + 57879: 18, // tablespace (1564x) + 57665: 19, // encryption (1562x) + 57668: 20, // engine (1559x) + 57648: 21, // data (1557x) + 57708: 22, // insertMethod (1555x) + 57735: 23, // maxRows (1555x) + 57742: 24, // minRows (1555x) + 57757: 25, // nodegroup (1555x) + 57633: 26, // connection (1547x) + 57591: 27, // autoRandomBase (1544x) + 58019: 28, // statsBuckets (1542x) + 58021: 29, // statsTopN (1542x) + 57588: 30, // autoIdCache (1541x) + 57593: 31, // avgRowLength (1541x) + 57631: 32, // compression (1541x) + 57654: 33, // delayKeyWrite (1541x) + 57772: 34, // packKeys (1541x) + 57785: 35, // preSplitRegions (1541x) + 57823: 36, // rowFormat (1541x) + 57827: 37, // secondaryEngine (1541x) + 57838: 38, // shardRowIDBits (1541x) + 57863: 39, // statsAutoRecalc (1541x) + 57586: 40, // statsColChoice (1541x) + 57587: 41, // statsColList (1541x) + 57864: 42, // statsPersistent (1541x) + 57865: 43, // statsSamplePages (1541x) + 57585: 44, // statsSampleRate (1541x) + 57877: 45, // tableChecksum (1541x) + 57573: 46, // account (1488x) + 57817: 47, // resume (1478x) + 57842: 48, // signed (1478x) + 57848: 49, // snapshot (1477x) + 41: 50, // ')' (1476x) + 57594: 51, // backend (1476x) + 57615: 52, // checkpoint (1476x) + 57632: 53, // concurrency (1476x) + 57638: 54, // csvBackslashEscape (1476x) + 57639: 55, // csvDelimiter (1476x) + 57640: 56, // csvHeader (1476x) + 57641: 57, // csvNotNull (1476x) + 57642: 58, // csvNull (1476x) + 57643: 59, // csvSeparator (1476x) + 57644: 60, // csvTrimLastSeparators (1476x) + 57721: 61, // lastBackup (1476x) + 57767: 62, // onDuplicate (1476x) + 57768: 63, // online (1476x) + 57800: 64, // rateLimit (1476x) + 57831: 65, // sendCredentialsToTiKV (1476x) + 57845: 66, // skipSchemaFiles (1476x) + 57868: 67, // strictFormat (1476x) + 57884: 68, // tikvImporter (1476x) + 57892: 69, // truncate (1473x) + 57754: 70, // no (1472x) + 57862: 71, // start (1470x) + 57609: 72, // cache (1467x) + 57755: 73, // nocache (1466x) + 57647: 74, // cycle (1465x) + 57744: 75, // minValue (1465x) + 57705: 76, // increment (1464x) + 57756: 77, // nocycle (1464x) + 57758: 78, // nomaxvalue (1464x) + 57759: 79, // nominvalue (1464x) + 57814: 80, // restart (1462x) + 57579: 81, // algorithm (1461x) + 57887: 82, // tp (1461x) + 57646: 83, // clustered (1460x) + 57710: 84, // invisible (1460x) + 57760: 85, // nonclustered (1460x) + 58031: 86, // regions (1460x) + 57903: 87, // visible (1460x) + 57921: 88, // constraints (1453x) + 57932: 89, // followerConstraints (1453x) + 57933: 90, // followers (1453x) + 57943: 91, // leaderConstraints (1453x) + 57945: 92, // learnerConstraints (1453x) + 57946: 93, // learners (1453x) + 57956: 94, // primaryRegion (1453x) + 57961: 95, // schedule (1453x) + 57992: 96, // voterConstraints (1453x) + 57993: 97, // voters (1453x) + 57624: 98, // columns (1452x) + 57902: 99, // view (1452x) + 57870: 100, // subpartition (1448x) + 57582: 101, // ascii (1447x) + 57608: 102, // byteType (1447x) + 57777: 103, // partitions (1447x) + 57896: 104, // unicodeSym (1447x) + 57909: 105, // yearType (1447x) + 57651: 106, // day (1446x) + 57683: 107, // fields (1446x) + 57826: 108, // second (1445x) + 57861: 109, // sqlTsiYear (1445x) + 57878: 110, // tables (1445x) + 57700: 111, // hour (1444x) + 57741: 112, // microsecond (1444x) + 57743: 113, // minute (1444x) + 57747: 114, // month (1444x) + 57796: 115, // quarter (1444x) + 57854: 116, // sqlTsiDay (1444x) + 57855: 117, // sqlTsiHour (1444x) + 57856: 118, // sqlTsiMinute (1444x) + 57857: 119, // sqlTsiMonth (1444x) + 57858: 120, // sqlTsiQuarter (1444x) + 57859: 121, // sqlTsiSecond (1444x) + 57860: 122, // sqlTsiWeek (1444x) + 57866: 123, // status (1444x) + 57905: 124, // week (1444x) + 57832: 125, // separator (1443x) + 57733: 126, // maxConnectionsPerHour (1442x) + 57734: 127, // maxQueriesPerHour (1442x) + 57736: 128, // maxUpdatesPerHour (1442x) + 57737: 129, // maxUserConnections (1442x) + 57786: 130, // preceding (1442x) + 57617: 131, // cipher (1441x) + 57703: 132, // importKwd (1441x) + 57715: 133, // issuer (1441x) + 57825: 134, // san (1441x) + 57869: 135, // subject (1441x) + 57726: 136, // local (1440x) + 57844: 137, // skip (1440x) + 57601: 138, // bindings (1439x) + 57653: 139, // definer (1439x) + 57695: 140, // hash (1439x) + 57701: 141, // identified (1439x) + 57729: 142, // logs (1439x) + 57798: 143, // query (1439x) + 57813: 144, // respect (1439x) + 57627: 145, // commit (1438x) + 57645: 146, // current (1438x) + 57667: 147, // enforced (1438x) + 57688: 148, // following (1438x) + 57762: 149, // nowait (1438x) + 57769: 150, // only (1438x) + 57820: 151, // rollback (1438x) + 57900: 152, // value (1438x) + 57597: 153, // begin (1437x) + 57599: 154, // binding (1437x) + 57666: 155, // end (1437x) + 57693: 156, // global (1437x) + 57936: 157, // next_row_id (1437x) + 57784: 158, // policy (1437x) + 57955: 159, // predicate (1437x) + 57880: 160, // temporary (1437x) + 57893: 161, // unbounded (1437x) + 57898: 162, // user (1437x) + 57346: 163, // identifier (1436x) + 57766: 164, // offset (1436x) + 57953: 165, // planCache (1436x) + 57787: 166, // prepare (1436x) + 57819: 167, // role (1436x) + 57897: 168, // unknown (1436x) + 57910: 169, // wait (1436x) + 57607: 170, // btree (1435x) + 57649: 171, // datetimeType (1435x) + 57650: 172, // dateType (1435x) + 57686: 173, // fixed (1435x) + 57714: 174, // isolation (1435x) + 57716: 175, // jsonType (1435x) + 57728: 176, // location (1435x) + 57731: 177, // max_idxnum (1435x) + 57739: 178, // memory (1435x) + 57765: 179, // off (1435x) + 57771: 180, // optional (1435x) + 57780: 181, // per_db (1435x) + 57789: 182, // privileges (1435x) + 57812: 183, // required (1435x) + 57824: 184, // rtree (1435x) + 57959: 185, // running (1435x) + 58014: 186, // sampleRate (1435x) + 57833: 187, // sequence (1435x) + 57836: 188, // session (1435x) + 57847: 189, // slow (1435x) + 57886: 190, // timeType (1435x) + 57899: 191, // validation (1435x) + 57901: 192, // variables (1435x) + 57583: 193, // attributes (1434x) + 57656: 194, // disable (1434x) + 57661: 195, // duplicate (1434x) + 57662: 196, // dynamic (1434x) + 57663: 197, // enable (1434x) + 57671: 198, // errorKwd (1434x) + 57687: 199, // flush (1434x) + 57690: 200, // full (1434x) + 57702: 201, // identSQLErrors (1434x) + 57738: 202, // mb (1434x) + 57745: 203, // mode (1434x) + 57751: 204, // never (1434x) + 57952: 205, // plan (1434x) + 57783: 206, // plugins (1434x) + 57791: 207, // processlist (1434x) + 57802: 208, // recover (1434x) + 57807: 209, // repair (1434x) + 57808: 210, // repeatable (1434x) + 58015: 211, // statistics (1434x) + 57871: 212, // subpartitions (1434x) + 58025: 213, // tidb (1434x) + 57885: 214, // timestampType (1434x) + 57907: 215, // without (1434x) + 57994: 216, // admin (1433x) + 57595: 217, // backup (1433x) + 57602: 218, // binlog (1433x) + 57604: 219, // block (1433x) + 57605: 220, // booleanType (1433x) + 57995: 221, // buckets (1433x) + 57998: 222, // cardinality (1433x) + 57613: 223, // chain (1433x) + 57620: 224, // clientErrorsSummary (1433x) + 57999: 225, // cmSketch (1433x) + 57621: 226, // coalesce (1433x) + 57629: 227, // compact (1433x) + 57630: 228, // compressed (1433x) + 57636: 229, // context (1433x) + 57920: 230, // copyKwd (1433x) + 58001: 231, // correlation (1433x) + 57637: 232, // cpu (1433x) + 57652: 233, // deallocate (1433x) + 58003: 234, // dependency (1433x) + 57655: 235, // directory (1433x) + 57658: 236, // discard (1433x) + 57659: 237, // disk (1433x) + 57660: 238, // do (1433x) + 58005: 239, // drainer (1433x) + 57676: 240, // exchange (1433x) + 57678: 241, // execute (1433x) + 57679: 242, // expansion (1433x) + 57930: 243, // flashback (1433x) + 57692: 244, // general (1433x) + 57696: 245, // help (1433x) + 57697: 246, // histogram (1433x) + 57699: 247, // hosts (1433x) + 57937: 248, // inplace (1433x) + 57709: 249, // instance (1433x) + 57938: 250, // instant (1433x) + 57713: 251, // ipc (1433x) + 58007: 252, // job (1433x) + 58006: 253, // jobs (1433x) + 57718: 254, // labels (1433x) + 57727: 255, // locked (1433x) + 57746: 256, // modify (1433x) + 57752: 257, // next (1433x) + 58008: 258, // nodeID (1433x) + 58009: 259, // nodeState (1433x) + 57764: 260, // nulls (1433x) + 57773: 261, // pageSym (1433x) + 58012: 262, // pump (1433x) + 57795: 263, // purge (1433x) + 57801: 264, // rebuild (1433x) + 57803: 265, // redundant (1433x) + 57804: 266, // reload (1433x) + 57809: 267, // replica (1433x) + 57815: 268, // restore (1433x) + 57821: 269, // routine (1433x) + 57960: 270, // s3 (1433x) + 58013: 271, // samples (1433x) + 57828: 272, // secondaryLoad (1433x) + 57829: 273, // secondaryUnload (1433x) + 57839: 274, // share (1433x) + 57841: 275, // shutdown (1433x) + 57850: 276, // source (1433x) + 58028: 277, // split (1433x) + 58016: 278, // stats (1433x) + 57584: 279, // statsOptions (1433x) + 57967: 280, // stop (1433x) + 57873: 281, // swaps (1433x) + 58026: 282, // tiFlash (1433x) + 57977: 283, // tokudbDefault (1433x) + 57978: 284, // tokudbFast (1433x) + 57979: 285, // tokudbLzma (1433x) + 57980: 286, // tokudbQuickLZ (1433x) + 57982: 287, // tokudbSmall (1433x) + 57981: 288, // tokudbSnappy (1433x) + 57983: 289, // tokudbUncompressed (1433x) + 57984: 290, // tokudbZlib (1433x) + 58027: 291, // topn (1433x) + 57888: 292, // trace (1433x) + 57574: 293, // action (1432x) + 57575: 294, // advise (1432x) + 57577: 295, // against (1432x) + 57578: 296, // ago (1432x) + 57580: 297, // always (1432x) + 57596: 298, // backups (1432x) + 57598: 299, // bernoulli (1432x) + 57600: 300, // bindingCache (1432x) + 57603: 301, // bitType (1432x) + 57606: 302, // boolType (1432x) + 57918: 303, // briefType (1432x) + 57996: 304, // builtins (1432x) + 57997: 305, // cancel (1432x) + 57610: 306, // capture (1432x) + 57611: 307, // cascaded (1432x) + 57612: 308, // causal (1432x) + 57618: 309, // cleanup (1432x) + 57619: 310, // client (1432x) + 57622: 311, // collation (1432x) + 58000: 312, // columnStatsUsage (1432x) + 57628: 313, // committed (1432x) + 57625: 314, // config (1432x) + 57634: 315, // consistency (1432x) + 57635: 316, // consistent (1432x) + 58002: 317, // ddl (1432x) + 58004: 318, // depth (1432x) + 57657: 319, // disabled (1432x) + 57925: 320, // dotType (1432x) + 57926: 321, // dump (1432x) + 57664: 322, // enabled (1432x) + 57669: 323, // engines (1432x) + 57670: 324, // enum (1432x) + 57674: 325, // events (1432x) + 57675: 326, // evolve (1432x) + 57680: 327, // expire (1432x) + 57928: 328, // exprPushdownBlacklist (1432x) + 57681: 329, // extended (1432x) + 57682: 330, // faultsSym (1432x) + 57689: 331, // format (1432x) + 57691: 332, // function (1432x) + 57694: 333, // grants (1432x) + 58022: 334, // histogramsInFlight (1432x) + 57698: 335, // history (1432x) + 57704: 336, // imports (1432x) + 57706: 337, // incremental (1432x) + 57707: 338, // indexes (1432x) + 57939: 339, // internal (1432x) + 57711: 340, // invoker (1432x) + 57712: 341, // io (1432x) + 57719: 342, // language (1432x) + 57720: 343, // last (1432x) + 57723: 344, // less (1432x) + 57724: 345, // level (1432x) + 57725: 346, // list (1432x) + 57730: 347, // master (1432x) + 57732: 348, // max_minutes (1432x) + 57740: 349, // merge (1432x) + 57749: 350, // national (1432x) + 57750: 351, // ncharType (1432x) + 57753: 352, // nextval (1432x) + 57761: 353, // none (1432x) + 57763: 354, // nvarcharType (1432x) + 57770: 355, // open (1432x) + 58010: 356, // optimistic (1432x) + 57950: 357, // optRuleBlacklist (1432x) + 57774: 358, // parser (1432x) + 57775: 359, // partial (1432x) + 57776: 360, // partitioning (1432x) + 57781: 361, // per_table (1432x) + 57779: 362, // percent (1432x) + 58011: 363, // pessimistic (1432x) + 57788: 364, // preserve (1432x) + 57792: 365, // profile (1432x) + 57793: 366, // profiles (1432x) + 57797: 367, // queries (1432x) + 57957: 368, // recent (1432x) + 58032: 369, // region (1432x) + 57958: 370, // replayer (1432x) + 58030: 371, // reset (1432x) + 57816: 372, // restores (1432x) + 57830: 373, // security (1432x) + 57835: 374, // serializable (1432x) + 57843: 375, // simple (1432x) + 57846: 376, // slave (1432x) + 58020: 377, // statsHealthy (1432x) + 58018: 378, // statsHistograms (1432x) + 58017: 379, // statsMeta (1432x) + 57968: 380, // strict (1432x) + 57874: 381, // switchesSym (1432x) + 57875: 382, // system (1432x) + 57876: 383, // systemTime (1432x) + 57973: 384, // target (1432x) + 58024: 385, // telemetryID (1432x) + 57881: 386, // temptable (1432x) + 57882: 387, // textType (1432x) + 57883: 388, // than (1432x) + 57976: 389, // tls (1432x) + 57985: 390, // top (1432x) + 57889: 391, // traditional (1432x) + 57890: 392, // transaction (1432x) + 57891: 393, // triggers (1432x) + 57894: 394, // uncommitted (1432x) + 57895: 395, // undefined (1432x) + 57990: 396, // verboseType (1432x) + 57904: 397, // warnings (1432x) + 58029: 398, // width (1432x) + 57908: 399, // x509 (1432x) + 57911: 400, // addDate (1431x) + 57581: 401, // any (1431x) + 57912: 402, // approxCountDistinct (1431x) + 57913: 403, // approxPercentile (1431x) + 57592: 404, // avg (1431x) + 57914: 405, // bitAnd (1431x) + 57915: 406, // bitOr (1431x) + 57916: 407, // bitXor (1431x) + 57917: 408, // bound (1431x) + 57919: 409, // cast (1431x) + 57922: 410, // curTime (1431x) + 57923: 411, // dateAdd (1431x) + 57924: 412, // dateSub (1431x) + 57672: 413, // escape (1431x) + 57673: 414, // event (1431x) + 57927: 415, // exact (1431x) + 57677: 416, // exclusive (1431x) + 57929: 417, // extract (1431x) + 57684: 418, // file (1431x) + 57931: 419, // follower (1431x) + 57934: 420, // getFormat (1431x) + 57935: 421, // groupConcat (1431x) + 57940: 422, // jsonArrayagg (1431x) + 57941: 423, // jsonObjectAgg (1431x) + 57722: 424, // lastval (1431x) + 57942: 425, // leader (1431x) + 57944: 426, // learner (1431x) + 57948: 427, // max (1431x) + 57947: 428, // min (1431x) + 57748: 429, // names (1431x) + 57949: 430, // now (1431x) + 57954: 431, // position (1431x) + 57790: 432, // process (1431x) + 57794: 433, // proxy (1431x) + 57799: 434, // quick (1431x) + 57810: 435, // replicas (1431x) + 57811: 436, // replication (1431x) + 57818: 437, // reverse (1431x) + 57822: 438, // rowCount (1431x) + 57837: 439, // setval (1431x) + 57840: 440, // shared (1431x) + 57849: 441, // some (1431x) + 57851: 442, // sqlBufferResult (1431x) + 57852: 443, // sqlCache (1431x) + 57853: 444, // sqlNoCache (1431x) + 57962: 445, // staleness (1431x) + 57963: 446, // std (1431x) + 57964: 447, // stddev (1431x) + 57965: 448, // stddevPop (1431x) + 57966: 449, // stddevSamp (1431x) + 57969: 450, // strong (1431x) + 57970: 451, // subDate (1431x) + 57972: 452, // substring (1431x) + 57971: 453, // sum (1431x) + 57872: 454, // super (1431x) + 58023: 455, // telemetry (1431x) + 57974: 456, // timestampAdd (1431x) + 57975: 457, // timestampDiff (1431x) + 57986: 458, // trim (1431x) + 57987: 459, // variance (1431x) + 57988: 460, // varPop (1431x) + 57989: 461, // varSamp (1431x) + 57991: 462, // voter (1431x) + 57906: 463, // weightString (1431x) + 57488: 464, // on (1365x) + 40: 465, // '(' (1281x) + 57568: 466, // with (1183x) + 57349: 467, // stringLit (1170x) + 58078: 468, // not2 (1164x) + 57481: 469, // not (1109x) + 57364: 470, // as (1078x) + 57398: 471, // defaultKwd (1073x) + 57547: 472, // union (1046x) + 57553: 473, // using (1040x) + 57461: 474, // left (1026x) + 57515: 475, // right (1026x) + 57379: 476, // collate (1025x) + 45: 477, // '-' (995x) + 43: 478, // '+' (994x) + 57480: 479, // mod (975x) + 57415: 480, // except (939x) + 57441: 481, // intersect (938x) + 57435: 482, // ignore (937x) + 57496: 483, // partition (931x) + 57485: 484, // null (918x) + 57420: 485, // forKwd (915x) + 57463: 486, // limit (912x) + 57443: 487, // into (909x) + 57469: 488, // lock (905x) + 58067: 489, // eq (896x) + 57423: 490, // from (896x) + 57417: 491, // fetch (895x) + 57565: 492, // where (895x) + 57493: 493, // order (891x) + 57557: 494, // values (891x) + 57421: 495, // force (887x) + 57522: 496, // set (879x) + 57363: 497, // and (876x) + 57377: 498, // charType (875x) + 57511: 499, // replace (864x) + 58062: 500, // intLit (860x) + 57492: 501, // or (853x) + 57354: 502, // andand (852x) + 57782: 503, // pipesAsOr (852x) + 57569: 504, // xor (852x) + 57427: 505, // group (825x) + 57533: 506, // straightJoin (821x) + 57567: 507, // window (813x) + 57429: 508, // having (811x) + 57453: 509, // join (809x) + 57572: 510, // natural (799x) + 57384: 511, // cross (798x) + 57439: 512, // inner (798x) + 57462: 513, // like (798x) + 125: 514, // '}' (795x) + 42: 515, // '*' (790x) + 57518: 516, // rows (783x) + 57552: 517, // use (779x) + 57535: 518, // tableSample (773x) + 57501: 519, // rangeKwd (772x) + 57428: 520, // groups (771x) + 57402: 521, // desc (770x) + 57365: 522, // asc (768x) + 57393: 523, // dayHour (766x) + 57394: 524, // dayMicrosecond (766x) + 57395: 525, // dayMinute (766x) + 57396: 526, // daySecond (766x) + 57431: 527, // hourMicrosecond (766x) + 57432: 528, // hourMinute (766x) + 57433: 529, // hourSecond (766x) + 57478: 530, // minuteMicrosecond (766x) + 57479: 531, // minuteSecond (766x) + 57520: 532, // secondMicrosecond (766x) + 57570: 533, // yearMonth (766x) + 57564: 534, // when (765x) + 57436: 535, // in (763x) + 57410: 536, // elseKwd (762x) + 57368: 537, // binaryType (761x) + 57538: 538, // then (759x) + 60: 539, // '<' (752x) + 62: 540, // '>' (752x) + 58068: 541, // ge (752x) + 57445: 542, // is (752x) + 58069: 543, // le (752x) + 58073: 544, // neq (752x) + 58074: 545, // neqSynonym (752x) + 58075: 546, // nulleq (752x) + 57366: 547, // between (750x) + 47: 548, // '/' (749x) + 37: 549, // '%' (748x) + 38: 550, // '&' (748x) + 94: 551, // '^' (748x) + 124: 552, // '|' (748x) + 57406: 553, // div (748x) + 58072: 554, // lsh (748x) + 58077: 555, // rsh (748x) + 57507: 556, // regexpKwd (742x) + 57516: 557, // rlike (742x) + 57434: 558, // ifKwd (736x) + 57446: 559, // insert (720x) + 57350: 560, // singleAtIdentifier (718x) + 57534: 561, // tableKwd (715x) + 57389: 562, // currentUser (714x) + 57416: 563, // falseKwd (712x) + 57545: 564, // trueKwd (712x) + 58061: 565, // decLit (706x) + 58060: 566, // floatLit (706x) + 57517: 567, // row (705x) + 58063: 568, // hexLit (704x) + 57454: 569, // key (704x) + 58076: 570, // paramMarker (704x) + 123: 571, // '{' (702x) + 58064: 572, // bitLit (702x) + 57442: 573, // interval (701x) + 57355: 574, // pipes (700x) + 57391: 575, // database (697x) + 57413: 576, // exists (697x) + 57378: 577, // check (694x) + 57382: 578, // convert (694x) + 57499: 579, // primary (694x) + 57351: 580, // doubleAtIdentifier (693x) + 58048: 581, // builtinNow (692x) + 57388: 582, // currentTs (692x) + 57467: 583, // localTime (692x) + 57468: 584, // localTs (692x) + 57348: 585, // underscoreCS (692x) + 33: 586, // '!' (690x) + 126: 587, // '~' (690x) + 58038: 588, // builtinApproxCountDistinct (690x) + 58039: 589, // builtinApproxPercentile (690x) + 58033: 590, // builtinBitAnd (690x) + 58034: 591, // builtinBitOr (690x) + 58035: 592, // builtinBitXor (690x) + 58036: 593, // builtinCast (690x) + 58037: 594, // builtinCount (690x) + 58040: 595, // builtinCurDate (690x) + 58041: 596, // builtinCurTime (690x) + 58042: 597, // builtinDateAdd (690x) + 58043: 598, // builtinDateSub (690x) + 58044: 599, // builtinExtract (690x) + 58045: 600, // builtinGroupConcat (690x) + 58046: 601, // builtinMax (690x) + 58047: 602, // builtinMin (690x) + 58049: 603, // builtinPosition (690x) + 58053: 604, // builtinStddevPop (690x) + 58054: 605, // builtinStddevSamp (690x) + 58050: 606, // builtinSubstring (690x) + 58051: 607, // builtinSum (690x) + 58052: 608, // builtinSysDate (690x) + 58055: 609, // builtinTranslate (690x) + 58056: 610, // builtinTrim (690x) + 58057: 611, // builtinUser (690x) + 58058: 612, // builtinVarPop (690x) + 58059: 613, // builtinVarSamp (690x) + 57374: 614, // caseKwd (690x) + 57385: 615, // cumeDist (690x) + 57386: 616, // currentDate (690x) + 57390: 617, // currentRole (690x) + 57387: 618, // currentTime (690x) + 57401: 619, // denseRank (690x) + 57418: 620, // firstValue (690x) + 57457: 621, // lag (690x) + 57458: 622, // lastValue (690x) + 57459: 623, // lead (690x) + 57483: 624, // nthValue (690x) + 57484: 625, // ntile (690x) + 57497: 626, // percentRank (690x) + 57502: 627, // rank (690x) + 57510: 628, // repeat (690x) + 57519: 629, // rowNumber (690x) + 57554: 630, // utcDate (690x) + 57556: 631, // utcTime (690x) + 57555: 632, // utcTimestamp (690x) + 57546: 633, // unique (687x) + 57381: 634, // constraint (685x) + 57506: 635, // references (682x) + 57425: 636, // generated (678x) + 57521: 637, // selectKwd (672x) + 57376: 638, // character (649x) + 57473: 639, // match (640x) + 57437: 640, // index (637x) + 57542: 641, // to (559x) + 57360: 642, // all (546x) + 46: 643, // '.' (540x) + 57362: 644, // analyze (521x) + 57550: 645, // update (512x) + 58070: 646, // jss (507x) + 58071: 647, // juss (507x) + 57474: 648, // maxValue (503x) + 57464: 649, // lines (496x) + 57371: 650, // by (493x) + 58066: 651, // assignmentEq (492x) + 57512: 652, // require (488x) + 57361: 653, // alter (487x) + 64: 654, // '@' (483x) + 58324: 655, // Identifier (483x) + 58399: 656, // NotKeywordToken (483x) + 58621: 657, // TiDBKeyword (483x) + 58631: 658, // UnReservedKeyword (483x) + 57526: 659, // sql (480x) + 57408: 660, // drop (477x) + 57373: 661, // cascade (476x) + 57503: 662, // read (476x) + 57513: 663, // restrict (476x) + 57347: 664, // asof (474x) + 57383: 665, // create (472x) + 57422: 666, // foreign (472x) + 57424: 667, // fulltext (472x) + 57560: 668, // varcharacter (470x) + 57559: 669, // varcharType (470x) + 57375: 670, // change (469x) + 57397: 671, // decimalType (469x) + 57407: 672, // doubleType (469x) + 57419: 673, // floatType (469x) + 57440: 674, // integerType (469x) + 57447: 675, // intType (469x) + 57504: 676, // realType (469x) + 57509: 677, // rename (469x) + 57566: 678, // write (469x) + 57561: 679, // varbinaryType (468x) + 57359: 680, // add (467x) + 57367: 681, // bigIntType (467x) + 57369: 682, // blobType (467x) + 57448: 683, // int1Type (467x) + 57449: 684, // int2Type (467x) + 57450: 685, // int3Type (467x) + 57451: 686, // int4Type (467x) + 57452: 687, // int8Type (467x) + 57558: 688, // long (467x) + 57470: 689, // longblobType (467x) + 57471: 690, // longtextType (467x) + 57475: 691, // mediumblobType (467x) + 57476: 692, // mediumIntType (467x) + 57477: 693, // mediumtextType (467x) + 57486: 694, // numericType (467x) + 57489: 695, // optimize (467x) + 57524: 696, // smallIntType (467x) + 57539: 697, // tinyblobType (467x) + 57540: 698, // tinyIntType (467x) + 57541: 699, // tinytextType (467x) + 58586: 700, // SubSelect (211x) + 58640: 701, // UserVariable (171x) + 58561: 702, // SimpleIdent (170x) + 58376: 703, // Literal (168x) + 58576: 704, // StringLiteral (168x) + 58397: 705, // NextValueForSequence (167x) + 58301: 706, // FunctionCallGeneric (166x) + 58302: 707, // FunctionCallKeyword (166x) + 58303: 708, // FunctionCallNonKeyword (166x) + 58304: 709, // FunctionNameConflict (166x) + 58305: 710, // FunctionNameDateArith (166x) + 58306: 711, // FunctionNameDateArithMultiForms (166x) + 58307: 712, // FunctionNameDatetimePrecision (166x) + 58308: 713, // FunctionNameOptionalBraces (166x) + 58309: 714, // FunctionNameSequence (166x) + 58560: 715, // SimpleExpr (166x) + 58587: 716, // SumExpr (166x) + 58589: 717, // SystemVariable (166x) + 58651: 718, // Variable (166x) + 58674: 719, // WindowFuncCall (166x) + 58153: 720, // BitExpr (153x) + 58469: 721, // PredicateExpr (130x) + 58156: 722, // BoolPri (127x) + 58268: 723, // Expression (127x) + 58395: 724, // NUM (97x) + 58689: 725, // logAnd (96x) + 58690: 726, // logOr (96x) + 58258: 727, // EqOpt (75x) + 58599: 728, // TableName (75x) + 58577: 729, // StringName (56x) + 57549: 730, // unsigned (47x) + 57495: 731, // over (45x) + 57571: 732, // zerofill (45x) + 57400: 733, // deleteKwd (43x) + 58367: 734, // LengthNum (41x) + 58178: 735, // ColumnName (40x) + 57404: 736, // distinct (36x) + 57405: 737, // distinctRow (36x) + 58679: 738, // WindowingClause (35x) + 57399: 739, // delayed (33x) + 57430: 740, // highPriority (33x) + 57472: 741, // lowPriority (33x) + 58515: 742, // SelectStmt (32x) + 58516: 743, // SelectStmtBasic (32x) + 58518: 744, // SelectStmtFromDualTable (32x) + 58519: 745, // SelectStmtFromTable (32x) + 58536: 746, // SetOprClause (32x) + 58537: 747, // SetOprClauseList (31x) + 58540: 748, // SetOprStmtWithLimitOrderBy (31x) + 58541: 749, // SetOprStmtWoutLimitOrderBy (31x) + 58528: 750, // SelectStmtWithClause (28x) + 58539: 751, // SetOprStmt (28x) + 58680: 752, // WithClause (28x) + 57353: 753, // hintComment (27x) + 58279: 754, // FieldLen (26x) + 58356: 755, // Int64Num (26x) + 58436: 756, // OptWindowingClause (24x) + 58441: 757, // OrderBy (23x) + 58522: 758, // SelectStmtLimit (23x) + 57527: 759, // sqlBigResult (23x) + 57528: 760, // sqlCalcFoundRows (23x) + 57529: 761, // sqlSmallResult (23x) + 58166: 762, // CharsetKw (20x) + 58634: 763, // UpdateStmtNoWith (20x) + 58642: 764, // Username (20x) + 58234: 765, // DeleteWithoutUsingStmt (19x) + 58353: 766, // InsertIntoStmt (18x) + 58490: 767, // ReplaceIntoStmt (18x) + 58633: 768, // UpdateStmt (18x) + 58269: 769, // ExpressionList (17x) + 58464: 770, // PlacementPolicyOption (17x) + 58325: 771, // IfExists (16x) + 57537: 772, // terminated (16x) + 58236: 773, // DistinctKwd (15x) + 58326: 774, // IfNotExists (15x) + 58421: 775, // OptFieldLen (15x) + 58237: 776, // DistinctOpt (14x) + 57411: 777, // enclosed (14x) + 58452: 778, // PartitionNameList (14x) + 58664: 779, // WhereClause (14x) + 58665: 780, // WhereClauseOptional (14x) + 58229: 781, // DefaultKwdOpt (13x) + 58233: 782, // DeleteWithUsingStmt (13x) + 57412: 783, // escaped (13x) + 57491: 784, // optionally (13x) + 58600: 785, // TableNameList (13x) + 58232: 786, // DeleteFromStmt (12x) + 58267: 787, // ExprOrDefault (12x) + 58361: 788, // JoinTable (12x) + 58415: 789, // OptBinary (12x) + 58506: 790, // RolenameComposed (12x) + 58596: 791, // TableFactor (12x) + 58609: 792, // TableRef (12x) + 58127: 793, // AnalyzeOptionListOpt (11x) + 58296: 794, // FromOrIn (11x) + 58623: 795, // TimestampUnit (11x) + 58167: 796, // CharsetName (10x) + 58179: 797, // ColumnNameList (10x) + 57466: 798, // load (10x) + 58400: 799, // NotSym (10x) + 58442: 800, // OrderByOptional (10x) + 58444: 801, // PartDefOption (10x) + 58559: 802, // SignedNum (10x) + 58159: 803, // BuggyDefaultFalseDistinctOpt (9x) + 58219: 804, // DBName (9x) + 58228: 805, // DefaultFalseDistinctOpt (9x) + 58362: 806, // JoinType (9x) + 57482: 807, // noWriteToBinLog (9x) + 58405: 808, // NumLiteral (9x) + 58505: 809, // Rolename (9x) + 58500: 810, // RoleNameString (9x) + 58123: 811, // AlterTableStmt (8x) + 58218: 812, // CrossOpt (8x) + 58259: 813, // EqOrAssignmentEq (8x) + 58270: 814, // ExpressionListOpt (8x) + 58347: 815, // IndexPartSpecification (8x) + 58363: 816, // KeyOrIndex (8x) + 58523: 817, // SelectStmtLimitOpt (8x) + 58622: 818, // TimeUnit (8x) + 58654: 819, // VariableName (8x) + 58109: 820, // AllOrPartitionNameList (7x) + 58202: 821, // ConstraintKeywordOpt (7x) + 58285: 822, // FieldsOrColumns (7x) + 58294: 823, // ForceOpt (7x) + 58348: 824, // IndexPartSpecificationList (7x) + 58398: 825, // NoWriteToBinLogAliasOpt (7x) + 58473: 826, // Priority (7x) + 58510: 827, // RowFormat (7x) + 58513: 828, // RowValue (7x) + 58534: 829, // SetExpr (7x) + 58545: 830, // ShowDatabaseNameOpt (7x) + 58606: 831, // TableOption (7x) + 57562: 832, // varying (7x) + 58148: 833, // BeginTransactionStmt (6x) + 58150: 834, // BindableStmt (6x) + 57380: 835, // column (6x) + 58173: 836, // ColumnDef (6x) + 58192: 837, // CommitStmt (6x) + 58221: 838, // DatabaseOption (6x) + 58224: 839, // DatabaseSym (6x) + 58261: 840, // EscapedTableRef (6x) + 58266: 841, // ExplainableStmt (6x) + 58283: 842, // FieldTerminator (6x) + 57426: 843, // grant (6x) + 58330: 844, // IgnoreOptional (6x) + 58339: 845, // IndexInvisible (6x) + 58344: 846, // IndexNameList (6x) + 58350: 847, // IndexType (6x) + 58380: 848, // LoadDataStmt (6x) + 58453: 849, // PartitionNameListOpt (6x) + 57508: 850, // release (6x) + 58507: 851, // RolenameList (6x) + 58509: 852, // RollbackStmt (6x) + 58544: 853, // SetStmt (6x) + 57523: 854, // show (6x) + 58604: 855, // TableOptimizerHints (6x) + 58643: 856, // UsernameList (6x) + 58681: 857, // WithClustered (6x) + 58107: 858, // AlgorithmClause (5x) + 58160: 859, // ByItem (5x) + 58172: 860, // CollationName (5x) + 58176: 861, // ColumnKeywordOpt (5x) + 58235: 862, // DirectPlacementOption (5x) + 58281: 863, // FieldOpt (5x) + 58282: 864, // FieldOpts (5x) + 58322: 865, // IdentList (5x) + 58342: 866, // IndexName (5x) + 58345: 867, // IndexOption (5x) + 58346: 868, // IndexOptionList (5x) + 57438: 869, // infile (5x) + 58372: 870, // LimitOption (5x) + 58384: 871, // LockClause (5x) + 58417: 872, // OptCharsetWithOptBinary (5x) + 58428: 873, // OptNullTreatment (5x) + 58467: 874, // PolicyName (5x) + 58474: 875, // PriorityOpt (5x) + 58514: 876, // SelectLockOpt (5x) + 58521: 877, // SelectStmtIntoOption (5x) + 58610: 878, // TableRefs (5x) + 58636: 879, // UserSpec (5x) + 58133: 880, // Assignment (4x) + 58139: 881, // AuthString (4x) + 58140: 882, // BRIEBooleanOptionName (4x) + 58141: 883, // BRIEIntegerOptionName (4x) + 58142: 884, // BRIEKeywordOptionName (4x) + 58143: 885, // BRIEOption (4x) + 58144: 886, // BRIEOptions (4x) + 58146: 887, // BRIEStringOptionName (4x) + 58161: 888, // ByList (4x) + 58165: 889, // Char (4x) + 58196: 890, // ConfigItemName (4x) + 58200: 891, // Constraint (4x) + 58290: 892, // FloatOpt (4x) + 58351: 893, // IndexTypeName (4x) + 57490: 894, // option (4x) + 58433: 895, // OptWild (4x) + 57494: 896, // outer (4x) + 58468: 897, // Precision (4x) + 58482: 898, // ReferDef (4x) + 58496: 899, // RestrictOrCascadeOpt (4x) + 58512: 900, // RowStmt (4x) + 58529: 901, // SequenceOption (4x) + 57532: 902, // statsExtended (4x) + 58591: 903, // TableAsName (4x) + 58592: 904, // TableAsNameOpt (4x) + 58603: 905, // TableNameOptWild (4x) + 58605: 906, // TableOptimizerHintsOpt (4x) + 58607: 907, // TableOptionList (4x) + 58625: 908, // TraceableStmt (4x) + 58626: 909, // TransactionChar (4x) + 58637: 910, // UserSpecList (4x) + 58675: 911, // WindowName (4x) + 58130: 912, // AsOfClause (3x) + 58134: 913, // AssignmentList (3x) + 58136: 914, // AttributesOpt (3x) + 58157: 915, // Boolean (3x) + 58185: 916, // ColumnOption (3x) + 58188: 917, // ColumnPosition (3x) + 58193: 918, // CommonTableExpr (3x) + 58214: 919, // CreateTableStmt (3x) + 58222: 920, // DatabaseOptionList (3x) + 58230: 921, // DefaultTrueDistinctOpt (3x) + 58255: 922, // EnforcedOrNot (3x) + 57414: 923, // explain (3x) + 58272: 924, // ExtendedPriv (3x) + 58310: 925, // GeneratedAlways (3x) + 58312: 926, // GlobalScope (3x) + 58316: 927, // GroupByClause (3x) + 58334: 928, // IndexHint (3x) + 58338: 929, // IndexHintType (3x) + 58343: 930, // IndexNameAndTypeOpt (3x) + 57455: 931, // keys (3x) + 58374: 932, // Lines (3x) + 58392: 933, // MaxValueOrExpression (3x) + 58429: 934, // OptOrder (3x) + 58432: 935, // OptTemporary (3x) + 58445: 936, // PartDefOptionList (3x) + 58447: 937, // PartitionDefinition (3x) + 58456: 938, // PasswordExpire (3x) + 58458: 939, // PasswordOrLockOption (3x) + 58466: 940, // PluginNameList (3x) + 58472: 941, // PrimaryOpt (3x) + 58475: 942, // PrivElem (3x) + 58477: 943, // PrivType (3x) + 57500: 944, // procedure (3x) + 58491: 945, // RequireClause (3x) + 58492: 946, // RequireClauseOpt (3x) + 58494: 947, // RequireListElement (3x) + 58508: 948, // RolenameWithoutIdent (3x) + 58501: 949, // RoleOrPrivElem (3x) + 58520: 950, // SelectStmtGroup (3x) + 58538: 951, // SetOprOpt (3x) + 58590: 952, // TableAliasRefList (3x) + 58593: 953, // TableElement (3x) + 58602: 954, // TableNameListOpt2 (3x) + 58618: 955, // TextString (3x) + 58627: 956, // TransactionChars (3x) + 57544: 957, // trigger (3x) + 57548: 958, // unlock (3x) + 57551: 959, // usage (3x) + 58647: 960, // ValuesList (3x) + 58649: 961, // ValuesStmtList (3x) + 58645: 962, // ValueSym (3x) + 58652: 963, // VariableAssignment (3x) + 58672: 964, // WindowFrameStart (3x) + 58106: 965, // AdminStmt (2x) + 58108: 966, // AllColumnsOrPredicateColumnsOpt (2x) + 58110: 967, // AlterDatabaseStmt (2x) + 58111: 968, // AlterImportStmt (2x) + 58112: 969, // AlterInstanceStmt (2x) + 58113: 970, // AlterOrderItem (2x) + 58115: 971, // AlterPolicyStmt (2x) + 58116: 972, // AlterSequenceOption (2x) + 58118: 973, // AlterSequenceStmt (2x) + 58120: 974, // AlterTableSpec (2x) + 58124: 975, // AlterUserStmt (2x) + 58125: 976, // AnalyzeOption (2x) + 58128: 977, // AnalyzeTableStmt (2x) + 58152: 978, // BinlogStmt (2x) + 58145: 979, // BRIEStmt (2x) + 58147: 980, // BRIETables (2x) + 57372: 981, // call (2x) + 58162: 982, // CallStmt (2x) + 58163: 983, // CastType (2x) + 58164: 984, // ChangeStmt (2x) + 58170: 985, // CheckConstraintKeyword (2x) + 58180: 986, // ColumnNameListOpt (2x) + 58183: 987, // ColumnNameOrUserVariable (2x) + 58186: 988, // ColumnOptionList (2x) + 58187: 989, // ColumnOptionListOpt (2x) + 58189: 990, // ColumnSetValue (2x) + 58195: 991, // CompletionTypeWithinTransaction (2x) + 58197: 992, // ConnectionOption (2x) + 58199: 993, // ConnectionOptions (2x) + 58203: 994, // CreateBindingStmt (2x) + 58204: 995, // CreateDatabaseStmt (2x) + 58205: 996, // CreateImportStmt (2x) + 58206: 997, // CreateIndexStmt (2x) + 58207: 998, // CreatePolicyStmt (2x) + 58208: 999, // CreateRoleStmt (2x) + 58210: 1000, // CreateSequenceStmt (2x) + 58211: 1001, // CreateStatisticsStmt (2x) + 58212: 1002, // CreateTableOptionListOpt (2x) + 58215: 1003, // CreateUserStmt (2x) + 58217: 1004, // CreateViewStmt (2x) + 57392: 1005, // databases (2x) + 58226: 1006, // DeallocateStmt (2x) + 58227: 1007, // DeallocateSym (2x) + 57403: 1008, // describe (2x) + 58238: 1009, // DoStmt (2x) + 58239: 1010, // DropBindingStmt (2x) + 58240: 1011, // DropDatabaseStmt (2x) + 58241: 1012, // DropImportStmt (2x) + 58242: 1013, // DropIndexStmt (2x) + 58243: 1014, // DropPolicyStmt (2x) + 58244: 1015, // DropRoleStmt (2x) + 58245: 1016, // DropSequenceStmt (2x) + 58246: 1017, // DropStatisticsStmt (2x) + 58247: 1018, // DropStatsStmt (2x) + 58248: 1019, // DropTableStmt (2x) + 58249: 1020, // DropUserStmt (2x) + 58250: 1021, // DropViewStmt (2x) + 58251: 1022, // DuplicateOpt (2x) + 58253: 1023, // EmptyStmt (2x) + 58254: 1024, // EncryptionOpt (2x) + 58256: 1025, // EnforcedOrNotOpt (2x) + 58260: 1026, // ErrorHandling (2x) + 58262: 1027, // ExecuteStmt (2x) + 58264: 1028, // ExplainStmt (2x) + 58265: 1029, // ExplainSym (2x) + 58274: 1030, // Field (2x) + 58277: 1031, // FieldItem (2x) + 58284: 1032, // Fields (2x) + 58288: 1033, // FlashbackTableStmt (2x) + 58293: 1034, // FlushStmt (2x) + 58299: 1035, // FuncDatetimePrecList (2x) + 58300: 1036, // FuncDatetimePrecListOpt (2x) + 58313: 1037, // GrantProxyStmt (2x) + 58314: 1038, // GrantRoleStmt (2x) + 58315: 1039, // GrantStmt (2x) + 58317: 1040, // HandleRange (2x) + 58319: 1041, // HashString (2x) + 58321: 1042, // HelpStmt (2x) + 58333: 1043, // IndexAdviseStmt (2x) + 58335: 1044, // IndexHintList (2x) + 58336: 1045, // IndexHintListOpt (2x) + 58341: 1046, // IndexLockAndAlgorithmOpt (2x) + 58354: 1047, // InsertValues (2x) + 58358: 1048, // IntoOpt (2x) + 58364: 1049, // KeyOrIndexOpt (2x) + 57456: 1050, // kill (2x) + 58365: 1051, // KillOrKillTiDB (2x) + 58366: 1052, // KillStmt (2x) + 58371: 1053, // LimitClause (2x) + 57465: 1054, // linear (2x) + 58373: 1055, // LinearOpt (2x) + 58377: 1056, // LoadDataSetItem (2x) + 58381: 1057, // LoadStatsStmt (2x) + 58382: 1058, // LocalOpt (2x) + 58383: 1059, // LocationLabelList (2x) + 58385: 1060, // LockTablesStmt (2x) + 58393: 1061, // MaxValueOrExpressionList (2x) + 58401: 1062, // NowSym (2x) + 58402: 1063, // NowSymFunc (2x) + 58403: 1064, // NowSymOptionFraction (2x) + 58404: 1065, // NumList (2x) + 58407: 1066, // ObjectType (2x) + 57487: 1067, // of (2x) + 58408: 1068, // OfTablesOpt (2x) + 58409: 1069, // OnCommitOpt (2x) + 58410: 1070, // OnDelete (2x) + 58413: 1071, // OnUpdate (2x) + 58418: 1072, // OptCollate (2x) + 58423: 1073, // OptFull (2x) + 58425: 1074, // OptInteger (2x) + 58438: 1075, // OptionalBraces (2x) + 58437: 1076, // OptionLevel (2x) + 58427: 1077, // OptLeadLagInfo (2x) + 58426: 1078, // OptLLDefault (2x) + 58443: 1079, // OuterOpt (2x) + 58448: 1080, // PartitionDefinitionList (2x) + 58449: 1081, // PartitionDefinitionListOpt (2x) + 58455: 1082, // PartitionOpt (2x) + 58457: 1083, // PasswordOpt (2x) + 58459: 1084, // PasswordOrLockOptionList (2x) + 58460: 1085, // PasswordOrLockOptions (2x) + 58463: 1086, // PlacementOptionList (2x) + 58465: 1087, // PlanReplayerStmt (2x) + 58471: 1088, // PreparedStmt (2x) + 58476: 1089, // PrivLevel (2x) + 58479: 1090, // PurgeImportStmt (2x) + 58480: 1091, // QuickOptional (2x) + 58481: 1092, // RecoverTableStmt (2x) + 58483: 1093, // ReferOpt (2x) + 58485: 1094, // RegexpSym (2x) + 58486: 1095, // RenameTableStmt (2x) + 58487: 1096, // RenameUserStmt (2x) + 58489: 1097, // RepeatableOpt (2x) + 58495: 1098, // RestartStmt (2x) + 58497: 1099, // ResumeImportStmt (2x) + 57514: 1100, // revoke (2x) + 58498: 1101, // RevokeRoleStmt (2x) + 58499: 1102, // RevokeStmt (2x) + 58502: 1103, // RoleOrPrivElemList (2x) + 58503: 1104, // RoleSpec (2x) + 58524: 1105, // SelectStmtOpt (2x) + 58527: 1106, // SelectStmtSQLCache (2x) + 58531: 1107, // SetBindingStmt (2x) + 58532: 1108, // SetDefaultRoleOpt (2x) + 58533: 1109, // SetDefaultRoleStmt (2x) + 58543: 1110, // SetRoleStmt (2x) + 58546: 1111, // ShowImportStmt (2x) + 58551: 1112, // ShowProfileType (2x) + 58554: 1113, // ShowStmt (2x) + 58555: 1114, // ShowTableAliasOpt (2x) + 58557: 1115, // ShutdownStmt (2x) + 58558: 1116, // SignedLiteral (2x) + 58562: 1117, // SplitOption (2x) + 58563: 1118, // SplitRegionStmt (2x) + 58567: 1119, // Statement (2x) + 58570: 1120, // StatsOptionsOpt (2x) + 58571: 1121, // StatsPersistentVal (2x) + 58572: 1122, // StatsType (2x) + 58573: 1123, // StopImportStmt (2x) + 58580: 1124, // SubPartDefinition (2x) + 58583: 1125, // SubPartitionMethod (2x) + 58588: 1126, // Symbol (2x) + 58594: 1127, // TableElementList (2x) + 58597: 1128, // TableLock (2x) + 58601: 1129, // TableNameListOpt (2x) + 58608: 1130, // TableOrTables (2x) + 58617: 1131, // TablesTerminalSym (2x) + 58615: 1132, // TableToTable (2x) + 58619: 1133, // TextStringList (2x) + 58624: 1134, // TraceStmt (2x) + 58629: 1135, // TruncateTableStmt (2x) + 58632: 1136, // UnlockTablesStmt (2x) + 58638: 1137, // UserToUser (2x) + 58635: 1138, // UseStmt (2x) + 58650: 1139, // Varchar (2x) + 58653: 1140, // VariableAssignmentList (2x) + 58662: 1141, // WhenClause (2x) + 58667: 1142, // WindowDefinition (2x) + 58670: 1143, // WindowFrameBound (2x) + 58677: 1144, // WindowSpec (2x) + 58682: 1145, // WithGrantOptionOpt (2x) + 58683: 1146, // WithList (2x) + 58687: 1147, // Writeable (2x) + 58105: 1148, // AdminShowSlow (1x) + 58114: 1149, // AlterOrderList (1x) + 58117: 1150, // AlterSequenceOptionList (1x) + 58119: 1151, // AlterTablePartitionOpt (1x) + 58121: 1152, // AlterTableSpecList (1x) + 58122: 1153, // AlterTableSpecListOpt (1x) + 58126: 1154, // AnalyzeOptionList (1x) + 58129: 1155, // AnyOrAll (1x) + 58131: 1156, // AsOfClauseOpt (1x) + 58132: 1157, // AsOpt (1x) + 58137: 1158, // AuthOption (1x) + 58138: 1159, // AuthPlugin (1x) + 58149: 1160, // BetweenOrNotOp (1x) + 58151: 1161, // BindingStatusType (1x) + 58154: 1162, // BitValueType (1x) + 58155: 1163, // BlobType (1x) + 58158: 1164, // BooleanType (1x) + 57370: 1165, // both (1x) + 58168: 1166, // CharsetNameOrDefault (1x) + 58169: 1167, // CharsetOpt (1x) + 58171: 1168, // ClearPasswordExpireOptions (1x) + 58175: 1169, // ColumnFormat (1x) + 58177: 1170, // ColumnList (1x) + 58184: 1171, // ColumnNameOrUserVariableList (1x) + 58181: 1172, // ColumnNameOrUserVarListOpt (1x) + 58182: 1173, // ColumnNameOrUserVarListOptWithBrackets (1x) + 58190: 1174, // ColumnSetValueList (1x) + 58194: 1175, // CompareOp (1x) + 58198: 1176, // ConnectionOptionList (1x) + 58201: 1177, // ConstraintElem (1x) + 58209: 1178, // CreateSequenceOptionListOpt (1x) + 58213: 1179, // CreateTableSelectOpt (1x) + 58216: 1180, // CreateViewSelectOpt (1x) + 58223: 1181, // DatabaseOptionListOpt (1x) + 58225: 1182, // DateAndTimeType (1x) + 58220: 1183, // DBNameList (1x) + 58231: 1184, // DefaultValueExpr (1x) + 57409: 1185, // dual (1x) + 58252: 1186, // ElseOpt (1x) + 58257: 1187, // EnforcedOrNotOrNotNullOpt (1x) + 58263: 1188, // ExplainFormatType (1x) + 58271: 1189, // ExpressionOpt (1x) + 58273: 1190, // FetchFirstOpt (1x) + 58275: 1191, // FieldAsName (1x) + 58276: 1192, // FieldAsNameOpt (1x) + 58278: 1193, // FieldItemList (1x) + 58280: 1194, // FieldList (1x) + 58286: 1195, // FirstOrNext (1x) + 58287: 1196, // FixedPointType (1x) + 58289: 1197, // FlashbackToNewName (1x) + 58291: 1198, // FloatingPointType (1x) + 58292: 1199, // FlushOption (1x) + 58295: 1200, // FromDual (1x) + 58297: 1201, // FulltextSearchModifierOpt (1x) + 58298: 1202, // FuncDatetimePrec (1x) + 58311: 1203, // GetFormatSelector (1x) + 58318: 1204, // HandleRangeList (1x) + 58320: 1205, // HavingClause (1x) + 58323: 1206, // IdentListWithParenOpt (1x) + 58327: 1207, // IfNotRunning (1x) + 58328: 1208, // IfRunning (1x) + 58329: 1209, // IgnoreLines (1x) + 58331: 1210, // ImportTruncate (1x) + 58337: 1211, // IndexHintScope (1x) + 58340: 1212, // IndexKeyTypeOpt (1x) + 58349: 1213, // IndexPartSpecificationListOpt (1x) + 58352: 1214, // IndexTypeOpt (1x) + 58332: 1215, // InOrNotOp (1x) + 58355: 1216, // InstanceOption (1x) + 58357: 1217, // IntegerType (1x) + 58360: 1218, // IsolationLevel (1x) + 58359: 1219, // IsOrNotOp (1x) + 57460: 1220, // leading (1x) + 58368: 1221, // LikeEscapeOpt (1x) + 58369: 1222, // LikeOrNotOp (1x) + 58370: 1223, // LikeTableWithOrWithoutParen (1x) + 58375: 1224, // LinesTerminated (1x) + 58378: 1225, // LoadDataSetList (1x) + 58379: 1226, // LoadDataSetSpecOpt (1x) + 58386: 1227, // LockType (1x) + 58387: 1228, // LogTypeOpt (1x) + 58388: 1229, // Match (1x) + 58389: 1230, // MatchOpt (1x) + 58390: 1231, // MaxIndexNumOpt (1x) + 58391: 1232, // MaxMinutesOpt (1x) + 58394: 1233, // NChar (1x) + 58406: 1234, // NumericType (1x) + 58396: 1235, // NVarchar (1x) + 58411: 1236, // OnDeleteUpdateOpt (1x) + 58412: 1237, // OnDuplicateKeyUpdate (1x) + 58414: 1238, // OptBinMod (1x) + 58416: 1239, // OptCharset (1x) + 58419: 1240, // OptErrors (1x) + 58420: 1241, // OptExistingWindowName (1x) + 58422: 1242, // OptFromFirstLast (1x) + 58424: 1243, // OptGConcatSeparator (1x) + 58430: 1244, // OptPartitionClause (1x) + 58431: 1245, // OptTable (1x) + 58434: 1246, // OptWindowFrameClause (1x) + 58435: 1247, // OptWindowOrderByClause (1x) + 58440: 1248, // Order (1x) + 58439: 1249, // OrReplace (1x) + 57444: 1250, // outfile (1x) + 58446: 1251, // PartDefValuesOpt (1x) + 58450: 1252, // PartitionKeyAlgorithmOpt (1x) + 58451: 1253, // PartitionMethod (1x) + 58454: 1254, // PartitionNumOpt (1x) + 58461: 1255, // PerDB (1x) + 58462: 1256, // PerTable (1x) + 57498: 1257, // precisionType (1x) + 58470: 1258, // PrepareSQL (1x) + 58478: 1259, // ProcedureCall (1x) + 57505: 1260, // recursive (1x) + 58484: 1261, // RegexpOrNotOp (1x) + 58488: 1262, // ReorganizePartitionRuleOpt (1x) + 58493: 1263, // RequireList (1x) + 58504: 1264, // RoleSpecList (1x) + 58511: 1265, // RowOrRows (1x) + 58517: 1266, // SelectStmtFieldList (1x) + 58525: 1267, // SelectStmtOpts (1x) + 58526: 1268, // SelectStmtOptsList (1x) + 58530: 1269, // SequenceOptionList (1x) + 58535: 1270, // SetOpr (1x) + 58542: 1271, // SetRoleOpt (1x) + 58547: 1272, // ShowIndexKwd (1x) + 58548: 1273, // ShowLikeOrWhereOpt (1x) + 58549: 1274, // ShowPlacementTarget (1x) + 58550: 1275, // ShowProfileArgsOpt (1x) + 58552: 1276, // ShowProfileTypes (1x) + 58553: 1277, // ShowProfileTypesOpt (1x) + 58556: 1278, // ShowTargetFilterable (1x) + 57525: 1279, // spatial (1x) + 58564: 1280, // SplitSyntaxOption (1x) + 57530: 1281, // ssl (1x) + 58565: 1282, // Start (1x) + 58566: 1283, // Starting (1x) + 57531: 1284, // starting (1x) + 58568: 1285, // StatementList (1x) + 58569: 1286, // StatementScope (1x) + 58574: 1287, // StorageMedia (1x) + 57536: 1288, // stored (1x) + 58575: 1289, // StringList (1x) + 58578: 1290, // StringNameOrBRIEOptionKeyword (1x) + 58579: 1291, // StringType (1x) + 58581: 1292, // SubPartDefinitionList (1x) + 58582: 1293, // SubPartDefinitionListOpt (1x) + 58584: 1294, // SubPartitionNumOpt (1x) + 58585: 1295, // SubPartitionOpt (1x) + 58595: 1296, // TableElementListOpt (1x) + 58598: 1297, // TableLockList (1x) + 58611: 1298, // TableRefsClause (1x) + 58612: 1299, // TableSampleMethodOpt (1x) + 58613: 1300, // TableSampleOpt (1x) + 58614: 1301, // TableSampleUnitOpt (1x) + 58616: 1302, // TableToTableList (1x) + 58620: 1303, // TextType (1x) + 57543: 1304, // trailing (1x) + 58628: 1305, // TrimDirection (1x) + 58630: 1306, // Type (1x) + 58639: 1307, // UserToUserList (1x) + 58641: 1308, // UserVariableList (1x) + 58644: 1309, // UsingRoles (1x) + 58646: 1310, // Values (1x) + 58648: 1311, // ValuesOpt (1x) + 58655: 1312, // ViewAlgorithm (1x) + 58656: 1313, // ViewCheckOption (1x) + 58657: 1314, // ViewDefiner (1x) + 58658: 1315, // ViewFieldList (1x) + 58659: 1316, // ViewName (1x) + 58660: 1317, // ViewSQLSecurity (1x) + 57563: 1318, // virtual (1x) + 58661: 1319, // VirtualOrStored (1x) + 58663: 1320, // WhenClauseList (1x) + 58666: 1321, // WindowClauseOptional (1x) + 58668: 1322, // WindowDefinitionList (1x) + 58669: 1323, // WindowFrameBetween (1x) + 58671: 1324, // WindowFrameExtent (1x) + 58673: 1325, // WindowFrameUnits (1x) + 58676: 1326, // WindowNameOrSpec (1x) + 58678: 1327, // WindowSpecDetails (1x) + 58684: 1328, // WithReadLockOpt (1x) + 58685: 1329, // WithValidation (1x) + 58686: 1330, // WithValidationOpt (1x) + 58688: 1331, // Year (1x) + 58104: 1332, // $default (0x) + 58065: 1333, // andnot (0x) + 58135: 1334, // AssignmentListOpt (0x) + 58174: 1335, // ColumnDefList (0x) + 58191: 1336, // CommaOpt (0x) + 58088: 1337, // createTableSelect (0x) + 58079: 1338, // empty (0x) + 57345: 1339, // error (0x) + 58103: 1340, // higherThanComma (0x) + 58097: 1341, // higherThanParenthese (0x) + 58086: 1342, // insertValues (0x) + 57352: 1343, // invalid (0x) + 58089: 1344, // lowerThanCharsetKwd (0x) + 58102: 1345, // lowerThanComma (0x) + 58087: 1346, // lowerThanCreateTableSelect (0x) + 58099: 1347, // lowerThanEq (0x) + 58094: 1348, // lowerThanFunction (0x) + 58085: 1349, // lowerThanInsertValues (0x) + 58090: 1350, // lowerThanKey (0x) + 58091: 1351, // lowerThanLocal (0x) + 58101: 1352, // lowerThanNot (0x) + 58098: 1353, // lowerThanOn (0x) + 58096: 1354, // lowerThanParenthese (0x) + 58092: 1355, // lowerThanRemove (0x) + 58080: 1356, // lowerThanSelectOpt (0x) + 58084: 1357, // lowerThanSelectStmt (0x) + 58083: 1358, // lowerThanSetKeyword (0x) + 58082: 1359, // lowerThanStringLitToken (0x) + 58081: 1360, // lowerThanValueKeyword (0x) + 58093: 1361, // lowerThenOrder (0x) + 58100: 1362, // neg (0x) + 57356: 1363, // odbcDateType (0x) + 57358: 1364, // odbcTimestampType (0x) + 57357: 1365, // odbcTimeType (0x) + 58095: 1366, // tableRefPriority (0x) } yySymNames = []string{ @@ -2309,9 +2315,9 @@ var ( "sqlTsiQuarter", "sqlTsiSecond", "sqlTsiWeek", + "status", "week", "separator", - "status", "maxConnectionsPerHour", "maxQueriesPerHour", "maxUpdatesPerHour", @@ -2359,8 +2365,6 @@ var ( "btree", "datetimeType", "dateType", - "disable", - "enable", "fixed", "isolation", "jsonType", @@ -2382,8 +2386,10 @@ var ( "validation", "variables", "attributes", + "disable", "duplicate", "dynamic", + "enable", "errorKwd", "flush", "full", @@ -2486,6 +2492,7 @@ var ( "always", "backups", "bernoulli", + "bindingCache", "bitType", "boolType", "briefType", @@ -2504,8 +2511,10 @@ var ( "consistent", "ddl", "depth", + "disabled", "dotType", "dump", + "enabled", "engines", "enum", "events", @@ -2837,11 +2846,11 @@ var ( "assignmentEq", "require", "alter", + "'@'", "Identifier", "NotKeywordToken", "TiDBKeyword", "UnReservedKeyword", - "'@'", "sql", "drop", "cascade", @@ -3554,2546 +3563,2550 @@ var ( yyReductions = []struct{ xsym, components int }{ {0, 1}, - {1279, 1}, - {808, 6}, - {808, 8}, - {808, 10}, - {1083, 1}, - {1083, 2}, - {1083, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {859, 3}, - {767, 4}, - {767, 4}, - {767, 4}, - {767, 4}, - {911, 3}, - {911, 3}, - {1117, 3}, - {1117, 3}, - {1148, 1}, - {1148, 2}, - {1148, 4}, - {1148, 3}, - {1148, 3}, - {1056, 0}, - {1056, 3}, - {971, 1}, - {971, 5}, - {971, 5}, - {971, 5}, - {971, 5}, - {971, 6}, - {971, 2}, - {971, 5}, - {971, 6}, - {971, 8}, - {971, 1}, - {971, 1}, - {971, 3}, - {971, 4}, - {971, 5}, - {971, 3}, - {971, 4}, - {971, 4}, - {971, 7}, - {971, 3}, - {971, 4}, - {971, 4}, - {971, 4}, - {971, 4}, - {971, 2}, - {971, 2}, - {971, 4}, - {971, 4}, - {971, 5}, - {971, 3}, - {971, 2}, - {971, 2}, - {971, 5}, - {971, 6}, - {971, 6}, - {971, 8}, - {971, 5}, - {971, 5}, - {971, 3}, - {971, 3}, - {971, 3}, - {971, 5}, - {971, 1}, - {971, 1}, - {971, 1}, - {971, 1}, - {971, 2}, - {971, 2}, - {971, 1}, - {971, 1}, - {971, 4}, - {971, 3}, - {971, 4}, - {971, 1}, - {971, 1}, - {1259, 0}, - {1259, 5}, - {817, 1}, - {817, 1}, - {1327, 0}, - {1327, 1}, - {1326, 2}, - {1326, 2}, - {854, 1}, - {854, 1}, - {855, 3}, - {855, 3}, - {855, 3}, - {855, 3}, - {855, 3}, - {868, 3}, - {868, 3}, - {1144, 2}, - {1144, 2}, - {813, 1}, - {813, 1}, - {1046, 0}, - {1046, 1}, - {858, 0}, - {858, 1}, - {914, 0}, - {914, 1}, - {914, 2}, - {1150, 0}, - {1150, 1}, - {1149, 1}, - {1149, 3}, - {775, 1}, - {775, 3}, - {818, 0}, - {818, 1}, - {818, 2}, - {1123, 1}, - {1092, 3}, - {1299, 1}, - {1299, 3}, - {1129, 3}, - {1093, 3}, - {1304, 1}, - {1304, 3}, - {1134, 3}, - {1089, 5}, - {1089, 3}, - {1089, 4}, - {1030, 4}, - {1194, 0}, - {1194, 2}, - {1115, 6}, - {1115, 8}, - {1114, 6}, - {1114, 2}, - {1277, 0}, - {1277, 2}, - {1277, 1}, - {1277, 3}, + {1282, 1}, + {811, 6}, + {811, 8}, + {811, 10}, + {1086, 1}, + {1086, 2}, + {1086, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {862, 3}, + {770, 4}, + {770, 4}, + {770, 4}, + {770, 4}, + {914, 3}, + {914, 3}, + {1120, 3}, + {1120, 3}, + {1151, 1}, + {1151, 2}, + {1151, 4}, + {1151, 3}, + {1151, 3}, + {1059, 0}, + {1059, 3}, + {974, 1}, + {974, 5}, + {974, 5}, + {974, 5}, + {974, 5}, + {974, 6}, + {974, 2}, {974, 5}, {974, 6}, - {974, 7}, - {974, 7}, - {974, 8}, - {974, 9}, {974, 8}, + {974, 1}, + {974, 1}, + {974, 3}, + {974, 4}, + {974, 5}, + {974, 3}, + {974, 4}, + {974, 4}, {974, 7}, + {974, 3}, + {974, 4}, + {974, 4}, + {974, 4}, + {974, 4}, + {974, 2}, + {974, 2}, + {974, 4}, + {974, 4}, + {974, 5}, + {974, 3}, + {974, 2}, + {974, 2}, + {974, 5}, + {974, 6}, {974, 6}, {974, 8}, - {963, 0}, - {963, 2}, - {963, 2}, - {790, 0}, - {790, 2}, - {1151, 1}, - {1151, 3}, - {973, 2}, - {973, 2}, - {973, 3}, - {973, 3}, - {973, 2}, - {973, 2}, - {877, 3}, - {910, 1}, - {910, 3}, - {1331, 0}, - {1331, 1}, - {830, 1}, - {830, 2}, - {830, 2}, - {830, 2}, - {830, 4}, - {830, 5}, - {830, 6}, - {830, 4}, - {830, 5}, - {975, 2}, - {1332, 1}, - {1332, 3}, - {833, 3}, - {833, 3}, - {732, 1}, - {732, 3}, - {732, 5}, - {794, 1}, - {794, 3}, - {983, 0}, - {983, 1}, - {1203, 0}, - {1203, 3}, - {862, 1}, - {862, 3}, - {1169, 0}, - {1169, 1}, - {1168, 1}, - {1168, 3}, - {984, 1}, - {984, 1}, - {1170, 0}, - {1170, 3}, - {834, 1}, - {834, 2}, - {938, 0}, - {938, 1}, - {796, 1}, - {796, 1}, - {919, 1}, - {919, 2}, - {1022, 0}, - {1022, 1}, - {1184, 2}, - {1184, 1}, - {913, 2}, - {913, 1}, - {913, 1}, - {913, 2}, - {913, 3}, + {974, 5}, + {974, 5}, + {974, 3}, + {974, 3}, + {974, 3}, + {974, 5}, + {974, 1}, + {974, 1}, + {974, 1}, + {974, 1}, + {974, 2}, + {974, 2}, + {974, 1}, + {974, 1}, + {974, 4}, + {974, 3}, + {974, 4}, + {974, 1}, + {974, 1}, + {1262, 0}, + {1262, 5}, + {820, 1}, + {820, 1}, + {1330, 0}, + {1330, 1}, + {1329, 2}, + {1329, 2}, + {857, 1}, + {857, 1}, + {858, 3}, + {858, 3}, + {858, 3}, + {858, 3}, + {858, 3}, + {871, 3}, + {871, 3}, + {1147, 2}, + {1147, 2}, + {816, 1}, + {816, 1}, + {1049, 0}, + {1049, 1}, + {861, 0}, + {861, 1}, + {917, 0}, + {917, 1}, + {917, 2}, + {1153, 0}, + {1153, 1}, + {1152, 1}, + {1152, 3}, + {778, 1}, + {778, 3}, + {821, 0}, + {821, 1}, + {821, 2}, + {1126, 1}, + {1095, 3}, + {1302, 1}, + {1302, 3}, + {1132, 3}, + {1096, 3}, + {1307, 1}, + {1307, 3}, + {1137, 3}, + {1092, 5}, + {1092, 3}, + {1092, 4}, + {1033, 4}, + {1197, 0}, + {1197, 2}, + {1118, 6}, + {1118, 8}, + {1117, 6}, + {1117, 2}, + {1280, 0}, + {1280, 2}, + {1280, 1}, + {1280, 3}, + {977, 5}, + {977, 6}, + {977, 7}, + {977, 7}, + {977, 8}, + {977, 9}, + {977, 8}, + {977, 7}, + {977, 6}, + {977, 8}, + {966, 0}, + {966, 2}, + {966, 2}, + {793, 0}, + {793, 2}, + {1154, 1}, + {1154, 3}, + {976, 2}, + {976, 2}, + {976, 3}, + {976, 3}, + {976, 2}, + {976, 2}, + {880, 3}, {913, 1}, - {913, 2}, - {913, 2}, - {913, 3}, {913, 3}, - {913, 2}, - {913, 6}, - {913, 6}, - {913, 1}, - {913, 2}, - {913, 2}, - {913, 2}, - {913, 2}, - {1284, 1}, - {1284, 1}, - {1284, 1}, - {1166, 1}, - {1166, 1}, - {1166, 1}, - {922, 0}, - {922, 2}, - {1316, 0}, - {1316, 1}, - {1316, 1}, - {985, 1}, - {985, 2}, + {1334, 0}, + {1334, 1}, + {833, 1}, + {833, 2}, + {833, 2}, + {833, 2}, + {833, 4}, + {833, 5}, + {833, 6}, + {833, 4}, + {833, 5}, + {978, 2}, + {1335, 1}, + {1335, 3}, + {836, 3}, + {836, 3}, + {735, 1}, + {735, 3}, + {735, 5}, + {797, 1}, + {797, 3}, {986, 0}, {986, 1}, - {1174, 7}, - {1174, 7}, - {1174, 7}, - {1174, 7}, - {1174, 8}, - {1174, 5}, - {1226, 2}, - {1226, 2}, - {1226, 2}, - {1227, 0}, - {1227, 1}, - {895, 5}, - {1067, 3}, - {1068, 3}, - {1233, 0}, - {1233, 1}, - {1233, 1}, - {1233, 2}, - {1233, 2}, - {1090, 1}, - {1090, 1}, - {1090, 2}, - {1090, 2}, - {1090, 2}, - {1181, 1}, - {1181, 1}, + {1206, 0}, + {1206, 3}, + {865, 1}, + {865, 3}, + {1172, 0}, + {1172, 1}, + {1171, 1}, + {1171, 3}, + {987, 1}, + {987, 1}, + {1173, 0}, + {1173, 3}, + {837, 1}, + {837, 2}, + {941, 0}, + {941, 1}, + {799, 1}, + {799, 1}, + {922, 1}, + {922, 2}, + {1025, 0}, + {1025, 1}, + {1187, 2}, + {1187, 1}, + {916, 2}, + {916, 1}, + {916, 1}, + {916, 2}, + {916, 3}, + {916, 1}, + {916, 2}, + {916, 2}, + {916, 3}, + {916, 3}, + {916, 2}, + {916, 6}, + {916, 6}, + {916, 1}, + {916, 2}, + {916, 2}, + {916, 2}, + {916, 2}, + {1287, 1}, + {1287, 1}, + {1287, 1}, + {1169, 1}, + {1169, 1}, + {1169, 1}, + {925, 0}, + {925, 2}, + {1319, 0}, + {1319, 1}, + {1319, 1}, + {988, 1}, + {988, 2}, + {989, 0}, + {989, 1}, + {1177, 7}, + {1177, 7}, + {1177, 7}, + {1177, 7}, + {1177, 8}, + {1177, 5}, + {1229, 2}, + {1229, 2}, + {1229, 2}, + {1230, 0}, + {1230, 1}, + {898, 5}, + {1070, 3}, + {1071, 3}, + {1236, 0}, + {1236, 1}, + {1236, 1}, + {1236, 2}, + {1236, 2}, + {1093, 1}, + {1093, 1}, + {1093, 2}, + {1093, 2}, + {1093, 2}, + {1184, 1}, + {1184, 1}, + {1184, 1}, + {1064, 1}, + {1064, 3}, + {1064, 4}, + {705, 4}, + {705, 4}, + {1063, 1}, + {1063, 1}, + {1063, 1}, + {1063, 1}, + {1062, 1}, + {1062, 1}, + {1062, 1}, + {1116, 1}, + {1116, 2}, + {1116, 2}, + {808, 1}, + {808, 1}, + {808, 1}, + {1122, 1}, + {1122, 1}, + {1122, 1}, + {1161, 1}, + {1161, 1}, + {1001, 12}, + {1017, 3}, + {997, 13}, + {1213, 0}, + {1213, 3}, + {824, 1}, + {824, 3}, + {815, 3}, + {815, 4}, + {1046, 0}, + {1046, 1}, + {1046, 1}, + {1046, 2}, + {1046, 2}, + {1212, 0}, + {1212, 1}, + {1212, 1}, + {1212, 1}, + {967, 4}, + {967, 3}, + {995, 5}, + {804, 1}, + {874, 1}, + {838, 4}, + {838, 4}, + {838, 4}, + {838, 2}, + {838, 1}, + {838, 5}, + {1181, 0}, {1181, 1}, - {1061, 1}, - {1061, 3}, - {1061, 4}, - {702, 4}, - {702, 4}, - {1060, 1}, - {1060, 1}, - {1060, 1}, - {1060, 1}, - {1059, 1}, - {1059, 1}, - {1059, 1}, - {1113, 1}, - {1113, 2}, - {1113, 2}, - {805, 1}, - {805, 1}, - {805, 1}, - {1119, 1}, - {1119, 1}, - {1119, 1}, - {1158, 1}, - {1158, 1}, - {998, 12}, - {1014, 3}, - {994, 13}, - {1210, 0}, - {1210, 3}, - {821, 1}, - {821, 3}, - {812, 3}, - {812, 4}, - {1043, 0}, - {1043, 1}, - {1043, 1}, - {1043, 2}, - {1043, 2}, - {1209, 0}, - {1209, 1}, - {1209, 1}, - {1209, 1}, - {964, 4}, - {964, 3}, - {992, 5}, + {920, 1}, + {920, 2}, + {919, 12}, + {919, 7}, + {1069, 0}, + {1069, 4}, + {1069, 4}, + {781, 0}, + {781, 1}, + {1082, 0}, + {1082, 6}, + {1125, 6}, + {1125, 5}, + {1252, 0}, + {1252, 3}, + {1253, 1}, + {1253, 4}, + {1253, 5}, + {1253, 4}, + {1253, 5}, + {1253, 4}, + {1253, 3}, + {1253, 1}, + {1055, 0}, + {1055, 1}, + {1295, 0}, + {1295, 4}, + {1294, 0}, + {1294, 2}, + {1254, 0}, + {1254, 2}, + {1081, 0}, + {1081, 3}, + {1080, 1}, + {1080, 3}, + {937, 5}, + {1293, 0}, + {1293, 3}, + {1292, 1}, + {1292, 3}, + {1124, 3}, + {936, 0}, + {936, 2}, + {801, 3}, + {801, 3}, + {801, 4}, + {801, 3}, + {801, 4}, + {801, 4}, + {801, 3}, + {801, 3}, + {801, 3}, + {801, 3}, {801, 1}, - {871, 1}, - {835, 4}, - {835, 4}, - {835, 4}, - {835, 2}, - {835, 1}, - {835, 5}, - {1178, 0}, - {1178, 1}, - {917, 1}, - {917, 2}, - {916, 12}, - {916, 7}, - {1066, 0}, - {1066, 4}, - {1066, 4}, - {778, 0}, - {778, 1}, - {1079, 0}, - {1079, 6}, - {1122, 6}, - {1122, 5}, - {1249, 0}, - {1249, 3}, - {1250, 1}, - {1250, 4}, - {1250, 5}, - {1250, 4}, - {1250, 5}, - {1250, 4}, - {1250, 3}, - {1250, 1}, - {1052, 0}, - {1052, 1}, - {1292, 0}, - {1292, 4}, - {1291, 0}, - {1291, 2}, {1251, 0}, - {1251, 2}, - {1078, 0}, - {1078, 3}, - {1077, 1}, - {1077, 3}, - {934, 5}, - {1290, 0}, - {1290, 3}, - {1289, 1}, - {1289, 3}, - {1121, 3}, - {933, 0}, - {933, 2}, - {798, 3}, - {798, 3}, - {798, 4}, - {798, 3}, - {798, 4}, - {798, 4}, - {798, 3}, - {798, 3}, - {798, 3}, - {798, 3}, - {798, 1}, - {1248, 0}, - {1248, 4}, - {1248, 6}, - {1248, 1}, - {1248, 5}, - {1248, 1}, - {1248, 1}, - {1019, 0}, - {1019, 1}, - {1019, 1}, - {1154, 0}, - {1154, 1}, - {1176, 0}, - {1176, 1}, - {1176, 1}, - {1176, 1}, - {1176, 1}, - {1177, 1}, - {1177, 1}, - {1177, 1}, - {1177, 1}, - {1220, 2}, - {1220, 4}, - {1001, 11}, - {1246, 0}, - {1246, 2}, - {1309, 0}, - {1309, 3}, - {1309, 3}, - {1309, 3}, - {1311, 0}, - {1311, 3}, - {1314, 0}, - {1314, 3}, - {1314, 3}, - {1313, 1}, - {1312, 0}, - {1312, 3}, - {1167, 1}, - {1167, 3}, - {1310, 0}, - {1310, 4}, - {1310, 4}, - {1006, 2}, - {762, 13}, - {762, 9}, - {779, 10}, - {783, 1}, - {783, 1}, - {783, 2}, - {783, 2}, - {836, 1}, - {1008, 4}, - {1010, 7}, - {1016, 6}, - {932, 0}, - {932, 1}, - {932, 2}, - {1018, 4}, - {1018, 6}, - {1017, 3}, - {1017, 5}, - {1012, 3}, - {1012, 5}, - {1015, 3}, - {1015, 5}, - {1015, 4}, - {896, 0}, - {896, 1}, - {896, 1}, - {1127, 1}, - {1127, 1}, - {724, 0}, - {724, 1}, - {1020, 0}, - {1131, 2}, - {1131, 5}, - {1131, 3}, - {1131, 6}, - {1026, 1}, - {1026, 1}, - {1026, 1}, - {1025, 2}, - {1025, 3}, - {1025, 2}, - {1025, 4}, - {1025, 7}, - {1025, 5}, - {1025, 7}, - {1025, 5}, - {1025, 3}, - {1185, 1}, - {1185, 1}, - {1185, 1}, - {1185, 1}, - {1185, 1}, - {1185, 1}, - {976, 5}, - {976, 5}, - {977, 2}, - {977, 2}, - {977, 2}, + {1251, 4}, + {1251, 6}, + {1251, 1}, + {1251, 5}, + {1251, 1}, + {1251, 1}, + {1022, 0}, + {1022, 1}, + {1022, 1}, + {1157, 0}, + {1157, 1}, + {1179, 0}, + {1179, 1}, + {1179, 1}, + {1179, 1}, + {1179, 1}, {1180, 1}, - {1180, 3}, - {883, 0}, - {883, 2}, - {880, 1}, - {880, 1}, - {879, 1}, - {879, 1}, - {879, 1}, - {879, 1}, - {879, 1}, - {879, 1}, - {879, 1}, - {879, 1}, - {884, 1}, - {884, 1}, + {1180, 1}, + {1180, 1}, + {1180, 1}, + {1223, 2}, + {1223, 4}, + {1004, 11}, + {1249, 0}, + {1249, 2}, + {1312, 0}, + {1312, 3}, + {1312, 3}, + {1312, 3}, + {1314, 0}, + {1314, 3}, + {1317, 0}, + {1317, 3}, + {1317, 3}, + {1316, 1}, + {1315, 0}, + {1315, 3}, + {1170, 1}, + {1170, 3}, + {1313, 0}, + {1313, 4}, + {1313, 4}, + {1009, 2}, + {765, 13}, + {765, 9}, + {782, 10}, + {786, 1}, + {786, 1}, + {786, 2}, + {786, 2}, + {839, 1}, + {1011, 4}, + {1013, 7}, + {1019, 6}, + {935, 0}, + {935, 1}, + {935, 2}, + {1021, 4}, + {1021, 6}, + {1020, 3}, + {1020, 5}, + {1015, 3}, + {1015, 5}, + {1018, 3}, + {1018, 5}, + {1018, 4}, + {899, 0}, + {899, 1}, + {899, 1}, + {1130, 1}, + {1130, 1}, + {727, 0}, + {727, 1}, + {1023, 0}, + {1134, 2}, + {1134, 5}, + {1134, 3}, + {1134, 6}, + {1029, 1}, + {1029, 1}, + {1029, 1}, + {1028, 2}, + {1028, 3}, + {1028, 2}, + {1028, 4}, + {1028, 7}, + {1028, 5}, + {1028, 7}, + {1028, 5}, + {1028, 3}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {979, 5}, + {979, 5}, + {980, 2}, + {980, 2}, + {980, 2}, + {1183, 1}, + {1183, 3}, + {886, 0}, + {886, 2}, + {883, 1}, + {883, 1}, + {882, 1}, + {882, 1}, + {882, 1}, + {882, 1}, + {882, 1}, + {882, 1}, + {882, 1}, + {882, 1}, + {887, 1}, + {887, 1}, + {887, 1}, + {887, 1}, {884, 1}, {884, 1}, - {881, 1}, - {881, 1}, - {881, 2}, - {882, 3}, - {882, 3}, - {882, 3}, - {882, 3}, - {882, 5}, - {882, 3}, - {882, 3}, - {882, 3}, - {882, 3}, - {882, 6}, - {882, 3}, - {882, 3}, - {882, 3}, - {882, 3}, - {882, 3}, - {882, 3}, - {731, 1}, - {752, 1}, + {884, 2}, + {885, 3}, + {885, 3}, + {885, 3}, + {885, 3}, + {885, 5}, + {885, 3}, + {885, 3}, + {885, 3}, + {885, 3}, + {885, 6}, + {885, 3}, + {885, 3}, + {885, 3}, + {885, 3}, + {885, 3}, + {885, 3}, + {734, 1}, + {755, 1}, + {724, 1}, + {915, 1}, + {915, 1}, + {915, 1}, + {1076, 1}, + {1076, 1}, + {1076, 1}, + {1090, 3}, + {996, 8}, + {1123, 4}, + {1099, 4}, + {968, 6}, + {1012, 4}, + {1111, 5}, + {1208, 0}, + {1208, 2}, + {1207, 0}, + {1207, 3}, + {1240, 0}, + {1240, 1}, + {1026, 0}, + {1026, 1}, + {1026, 2}, + {1026, 2}, + {1026, 2}, + {1026, 2}, + {1210, 0}, + {1210, 3}, + {1210, 3}, + {723, 3}, + {723, 3}, + {723, 3}, + {723, 3}, + {723, 2}, + {723, 9}, + {723, 3}, + {723, 3}, + {723, 3}, + {723, 1}, + {933, 1}, + {933, 1}, + {1201, 0}, + {1201, 4}, + {1201, 7}, + {1201, 3}, + {1201, 3}, + {726, 1}, + {726, 1}, + {725, 1}, + {725, 1}, + {769, 1}, + {769, 3}, + {1061, 1}, + {1061, 3}, + {814, 0}, + {814, 1}, + {1036, 0}, + {1036, 1}, + {1035, 1}, + {722, 3}, + {722, 3}, + {722, 4}, + {722, 5}, + {722, 1}, + {1175, 1}, + {1175, 1}, + {1175, 1}, + {1175, 1}, + {1175, 1}, + {1175, 1}, + {1175, 1}, + {1175, 1}, + {1160, 1}, + {1160, 2}, + {1219, 1}, + {1219, 2}, + {1215, 1}, + {1215, 2}, + {1222, 1}, + {1222, 2}, + {1261, 1}, + {1261, 2}, + {1155, 1}, + {1155, 1}, + {1155, 1}, + {721, 5}, + {721, 3}, + {721, 5}, + {721, 4}, + {721, 3}, {721, 1}, - {912, 1}, - {912, 1}, - {912, 1}, - {1073, 1}, - {1073, 1}, - {1073, 1}, - {1087, 3}, - {993, 8}, - {1120, 4}, - {1096, 4}, - {965, 6}, - {1009, 4}, - {1108, 5}, + {1094, 1}, + {1094, 1}, + {1221, 0}, + {1221, 2}, + {1030, 1}, + {1030, 3}, + {1030, 5}, + {1030, 2}, + {1192, 0}, + {1192, 1}, + {1191, 1}, + {1191, 2}, + {1191, 1}, + {1191, 2}, + {1194, 1}, + {1194, 3}, + {927, 3}, {1205, 0}, {1205, 2}, - {1204, 0}, - {1204, 3}, + {1156, 0}, + {1156, 1}, + {912, 3}, + {771, 0}, + {771, 2}, + {774, 0}, + {774, 3}, + {844, 0}, + {844, 1}, + {866, 0}, + {866, 1}, + {868, 0}, + {868, 2}, + {867, 3}, + {867, 1}, + {867, 3}, + {867, 2}, + {867, 1}, + {867, 1}, + {930, 1}, + {930, 3}, + {930, 3}, + {1214, 0}, + {1214, 1}, + {847, 2}, + {847, 2}, + {893, 1}, + {893, 1}, + {893, 1}, + {845, 1}, + {845, 1}, + {655, 1}, + {655, 1}, + {655, 1}, + {655, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {658, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {656, 1}, + {982, 2}, + {1259, 1}, + {1259, 3}, + {1259, 4}, + {1259, 6}, + {766, 9}, + {1048, 0}, + {1048, 1}, + {1047, 5}, + {1047, 4}, + {1047, 4}, + {1047, 4}, + {1047, 4}, + {1047, 2}, + {1047, 1}, + {1047, 1}, + {1047, 1}, + {1047, 1}, + {1047, 2}, + {962, 1}, + {962, 1}, + {960, 1}, + {960, 3}, + {828, 3}, + {1311, 0}, + {1311, 1}, + {1310, 3}, + {1310, 1}, + {787, 1}, + {787, 1}, + {990, 3}, + {1174, 0}, + {1174, 1}, + {1174, 3}, {1237, 0}, - {1237, 1}, - {1023, 0}, - {1023, 1}, - {1023, 2}, - {1023, 2}, - {1023, 2}, - {1023, 2}, - {1207, 0}, - {1207, 3}, - {1207, 3}, + {1237, 5}, + {767, 6}, + {703, 1}, + {703, 1}, + {703, 1}, + {703, 1}, + {703, 1}, + {703, 1}, + {703, 1}, + {703, 2}, + {703, 1}, + {703, 1}, + {703, 2}, + {703, 2}, + {704, 1}, + {704, 2}, + {1149, 1}, + {1149, 3}, + {970, 2}, + {757, 3}, + {888, 1}, + {888, 3}, + {859, 1}, + {859, 2}, + {1248, 1}, + {1248, 1}, + {934, 0}, + {934, 1}, + {934, 1}, + {800, 0}, + {800, 1}, + {720, 3}, + {720, 3}, + {720, 3}, + {720, 3}, {720, 3}, {720, 3}, + {720, 5}, + {720, 5}, + {720, 3}, {720, 3}, {720, 3}, - {720, 2}, - {720, 9}, {720, 3}, {720, 3}, {720, 3}, {720, 1}, - {930, 1}, - {930, 1}, - {1198, 0}, - {1198, 4}, - {1198, 7}, - {1198, 3}, - {1198, 3}, - {723, 1}, - {723, 1}, - {722, 1}, - {722, 1}, - {766, 1}, - {766, 3}, - {1058, 1}, - {1058, 3}, - {811, 0}, - {811, 1}, - {1033, 0}, - {1033, 1}, - {1032, 1}, - {719, 3}, - {719, 3}, - {719, 4}, - {719, 5}, - {719, 1}, - {1172, 1}, - {1172, 1}, - {1172, 1}, - {1172, 1}, - {1172, 1}, - {1172, 1}, - {1172, 1}, - {1172, 1}, - {1157, 1}, - {1157, 2}, - {1216, 1}, - {1216, 2}, - {1212, 1}, - {1212, 2}, - {1219, 1}, - {1219, 2}, - {1258, 1}, - {1258, 2}, - {1152, 1}, - {1152, 1}, - {1152, 1}, - {718, 5}, - {718, 3}, - {718, 5}, - {718, 4}, - {718, 3}, - {718, 1}, - {1091, 1}, - {1091, 1}, - {1218, 0}, - {1218, 2}, - {1027, 1}, - {1027, 3}, - {1027, 5}, - {1027, 2}, - {1189, 0}, - {1189, 1}, - {1188, 1}, - {1188, 2}, - {1188, 1}, - {1188, 2}, - {1191, 1}, - {1191, 3}, - {924, 3}, - {1202, 0}, - {1202, 2}, - {1153, 0}, - {1153, 1}, - {909, 3}, - {768, 0}, - {768, 2}, - {771, 0}, - {771, 3}, - {841, 0}, - {841, 1}, - {863, 0}, - {863, 1}, - {865, 0}, - {865, 2}, - {864, 3}, - {864, 1}, - {864, 3}, - {864, 2}, - {864, 1}, - {864, 1}, - {927, 1}, - {927, 3}, - {927, 3}, - {1211, 0}, - {1211, 1}, - {844, 2}, - {844, 2}, - {890, 1}, - {890, 1}, - {890, 1}, - {842, 1}, - {842, 1}, - {651, 1}, - {651, 1}, - {651, 1}, - {651, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {654, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {653, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {652, 1}, - {979, 2}, - {1256, 1}, - {1256, 3}, - {1256, 4}, - {1256, 6}, - {763, 9}, - {1045, 0}, - {1045, 1}, - {1044, 5}, - {1044, 4}, - {1044, 4}, - {1044, 4}, - {1044, 4}, - {1044, 2}, - {1044, 1}, - {1044, 1}, - {1044, 1}, - {1044, 1}, - {1044, 2}, - {959, 1}, - {959, 1}, - {957, 1}, - {957, 3}, - {825, 3}, - {1308, 0}, - {1308, 1}, - {1307, 3}, - {1307, 1}, - {784, 1}, - {784, 1}, - {987, 3}, - {1171, 0}, - {1171, 1}, - {1171, 3}, - {1234, 0}, - {1234, 5}, - {764, 6}, - {700, 1}, - {700, 1}, - {700, 1}, - {700, 1}, - {700, 1}, - {700, 1}, - {700, 1}, - {700, 2}, - {700, 1}, - {700, 1}, - {700, 2}, - {700, 2}, - {701, 1}, - {701, 2}, - {1146, 1}, - {1146, 3}, - {967, 2}, - {754, 3}, - {885, 1}, - {885, 3}, - {856, 1}, - {856, 2}, - {1245, 1}, - {1245, 1}, - {931, 0}, - {931, 1}, - {931, 1}, - {797, 0}, - {797, 1}, - {717, 3}, - {717, 3}, - {717, 3}, - {717, 3}, - {717, 3}, - {717, 3}, - {717, 5}, - {717, 5}, - {717, 3}, - {717, 3}, - {717, 3}, - {717, 3}, - {717, 3}, - {717, 3}, - {717, 1}, - {699, 1}, - {699, 3}, - {699, 5}, - {712, 1}, - {712, 1}, - {712, 1}, - {712, 1}, - {712, 3}, - {712, 1}, - {712, 1}, - {712, 1}, - {712, 1}, - {712, 1}, - {712, 2}, - {712, 2}, - {712, 2}, - {712, 2}, - {712, 3}, - {712, 2}, - {712, 1}, - {712, 3}, - {712, 5}, - {712, 6}, - {712, 2}, - {712, 4}, - {712, 2}, - {712, 6}, - {712, 5}, - {712, 6}, - {712, 6}, - {712, 4}, - {712, 4}, - {712, 3}, - {712, 3}, - {770, 1}, - {770, 1}, + {702, 1}, + {702, 3}, + {702, 5}, + {715, 1}, + {715, 1}, + {715, 1}, + {715, 1}, + {715, 3}, + {715, 1}, + {715, 1}, + {715, 1}, + {715, 1}, + {715, 1}, + {715, 2}, + {715, 2}, + {715, 2}, + {715, 2}, + {715, 3}, + {715, 2}, + {715, 1}, + {715, 3}, + {715, 5}, + {715, 6}, + {715, 2}, + {715, 4}, + {715, 2}, + {715, 6}, + {715, 5}, + {715, 6}, + {715, 6}, + {715, 4}, + {715, 4}, + {715, 3}, + {715, 3}, {773, 1}, {773, 1}, - {802, 0}, - {802, 1}, - {918, 0}, - {918, 1}, - {800, 1}, - {800, 2}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {706, 1}, - {1072, 0}, - {1072, 2}, - {710, 1}, - {710, 1}, - {710, 1}, - {710, 1}, + {776, 1}, + {776, 1}, + {805, 0}, + {805, 1}, + {921, 0}, + {921, 1}, + {803, 1}, + {803, 2}, {709, 1}, {709, 1}, {709, 1}, {709, 1}, {709, 1}, {709, 1}, - {704, 4}, - {704, 4}, - {704, 2}, - {704, 3}, - {704, 2}, - {704, 4}, - {704, 6}, - {704, 2}, - {704, 2}, - {704, 2}, - {704, 4}, - {704, 6}, - {704, 4}, - {705, 4}, - {705, 4}, - {705, 6}, - {705, 8}, - {705, 8}, - {705, 6}, - {705, 6}, - {705, 6}, - {705, 6}, - {705, 6}, - {705, 8}, - {705, 8}, - {705, 8}, - {705, 8}, - {705, 4}, - {705, 6}, - {705, 6}, - {705, 7}, - {705, 4}, - {705, 7}, - {705, 7}, - {705, 1}, - {705, 8}, - {1200, 1}, - {1200, 1}, - {1200, 1}, - {1200, 1}, - {707, 1}, - {707, 1}, - {708, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {709, 1}, + {1075, 0}, + {1075, 2}, + {713, 1}, + {713, 1}, + {713, 1}, + {713, 1}, + {712, 1}, + {712, 1}, + {712, 1}, + {712, 1}, + {712, 1}, + {712, 1}, + {707, 4}, + {707, 4}, + {707, 2}, + {707, 3}, + {707, 2}, + {707, 4}, + {707, 6}, + {707, 2}, + {707, 2}, + {707, 2}, + {707, 4}, + {707, 6}, + {707, 4}, + {708, 4}, + {708, 4}, + {708, 6}, + {708, 8}, + {708, 8}, + {708, 6}, + {708, 6}, + {708, 6}, + {708, 6}, + {708, 6}, + {708, 8}, + {708, 8}, + {708, 8}, + {708, 8}, + {708, 4}, + {708, 6}, + {708, 6}, + {708, 7}, + {708, 4}, + {708, 7}, + {708, 7}, {708, 1}, - {1302, 1}, - {1302, 1}, - {1302, 1}, - {711, 4}, - {711, 6}, + {708, 8}, + {1203, 1}, + {1203, 1}, + {1203, 1}, + {1203, 1}, + {710, 1}, + {710, 1}, + {711, 1}, {711, 1}, - {713, 6}, - {713, 4}, - {713, 4}, - {713, 5}, - {713, 6}, - {713, 5}, - {713, 6}, - {713, 5}, - {713, 6}, - {713, 5}, - {713, 6}, - {713, 5}, - {713, 5}, - {713, 8}, - {713, 6}, - {713, 6}, - {713, 6}, - {713, 6}, - {713, 6}, - {713, 6}, - {713, 6}, - {713, 5}, - {713, 6}, - {713, 7}, - {713, 8}, - {713, 8}, - {713, 9}, - {1240, 0}, - {1240, 2}, - {703, 4}, - {703, 6}, - {1199, 0}, - {1199, 2}, - {1199, 3}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {815, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {792, 1}, - {1186, 0}, - {1186, 1}, - {1317, 1}, - {1317, 2}, - {1138, 4}, - {1183, 0}, - {1183, 2}, - {980, 2}, - {980, 3}, - {980, 1}, - {980, 1}, - {980, 2}, - {980, 2}, - {980, 2}, - {980, 2}, - {980, 2}, - {980, 1}, - {980, 1}, - {980, 2}, - {980, 1}, - {823, 1}, - {823, 1}, - {823, 1}, - {872, 0}, - {872, 1}, - {725, 1}, - {725, 3}, - {782, 1}, - {782, 3}, - {902, 2}, - {902, 4}, - {949, 1}, - {949, 3}, - {892, 0}, - {892, 2}, - {1088, 0}, - {1088, 1}, - {1085, 4}, - {1255, 1}, - {1255, 1}, - {1024, 2}, - {1024, 4}, {1305, 1}, - {1305, 3}, - {1003, 3}, - {1004, 1}, - {1004, 1}, - {849, 1}, - {849, 2}, - {988, 4}, - {988, 4}, - {988, 5}, - {988, 2}, - {988, 3}, - {988, 1}, - {988, 2}, - {1112, 1}, - {1095, 1}, - {1039, 2}, - {740, 3}, - {741, 3}, - {742, 7}, - {1297, 0}, - {1297, 7}, - {1297, 5}, - {1296, 0}, - {1296, 1}, - {1296, 1}, - {1296, 1}, - {1298, 0}, - {1298, 1}, - {1298, 1}, - {1094, 0}, - {1094, 4}, - {739, 7}, - {739, 6}, - {739, 5}, - {739, 6}, - {739, 6}, - {747, 2}, - {747, 2}, - {749, 2}, - {749, 3}, - {1143, 3}, - {1143, 1}, - {915, 4}, - {1197, 2}, - {1318, 0}, - {1318, 2}, - {1319, 1}, - {1319, 3}, - {1139, 3}, - {908, 1}, - {1141, 3}, - {1324, 4}, - {1238, 0}, - {1238, 1}, - {1241, 0}, - {1241, 3}, - {1244, 0}, - {1244, 3}, - {1243, 0}, - {1243, 2}, - {1322, 1}, - {1322, 1}, - {1322, 1}, - {1321, 1}, - {1321, 1}, - {961, 2}, - {961, 2}, - {961, 2}, - {961, 4}, - {961, 2}, - {1320, 4}, - {1140, 1}, - {1140, 2}, - {1140, 2}, - {1140, 2}, - {1140, 4}, - {753, 0}, - {753, 1}, - {735, 2}, - {1323, 1}, - {1323, 1}, - {716, 4}, - {716, 4}, - {716, 4}, + {1305, 1}, + {1305, 1}, + {714, 4}, + {714, 6}, + {714, 1}, + {716, 6}, {716, 4}, {716, 4}, {716, 5}, - {716, 7}, - {716, 7}, {716, 6}, + {716, 5}, + {716, 6}, + {716, 5}, + {716, 6}, + {716, 5}, + {716, 6}, + {716, 5}, + {716, 5}, + {716, 8}, + {716, 6}, + {716, 6}, + {716, 6}, + {716, 6}, + {716, 6}, + {716, 6}, + {716, 6}, + {716, 5}, {716, 6}, + {716, 7}, + {716, 8}, + {716, 8}, {716, 9}, - {1074, 0}, - {1074, 3}, - {1074, 3}, - {1075, 0}, - {1075, 2}, - {870, 0}, - {870, 2}, - {870, 2}, - {1239, 0}, - {1239, 2}, - {1239, 2}, - {1295, 1}, + {1243, 0}, + {1243, 2}, + {706, 4}, + {706, 6}, + {1202, 0}, + {1202, 2}, + {1202, 3}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {818, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {795, 1}, + {1189, 0}, + {1189, 1}, + {1320, 1}, + {1320, 2}, + {1141, 4}, + {1186, 0}, + {1186, 2}, + {983, 2}, + {983, 3}, + {983, 1}, + {983, 1}, + {983, 2}, + {983, 2}, + {983, 2}, + {983, 2}, + {983, 2}, + {983, 1}, + {983, 1}, + {983, 2}, + {983, 1}, + {826, 1}, + {826, 1}, + {826, 1}, + {875, 0}, {875, 1}, - {875, 3}, - {837, 1}, - {837, 4}, - {789, 1}, - {789, 1}, - {788, 6}, - {788, 2}, - {788, 3}, - {846, 0}, - {846, 4}, - {901, 0}, - {901, 1}, - {900, 1}, - {900, 2}, - {926, 2}, - {926, 2}, - {926, 2}, - {1208, 0}, - {1208, 2}, - {1208, 3}, - {1208, 3}, - {925, 5}, - {843, 0}, - {843, 1}, - {843, 3}, - {843, 1}, - {843, 3}, - {1041, 1}, - {1041, 2}, - {1042, 0}, - {1042, 1}, + {728, 1}, + {728, 3}, + {785, 1}, {785, 3}, - {785, 5}, - {785, 7}, - {785, 7}, - {785, 9}, - {785, 4}, - {785, 6}, - {785, 3}, - {785, 5}, - {803, 1}, - {803, 1}, - {1076, 0}, - {1076, 1}, - {809, 1}, - {809, 2}, - {809, 2}, - {1050, 0}, - {1050, 2}, - {867, 1}, - {867, 1}, - {1262, 1}, - {1262, 1}, - {1192, 1}, - {1192, 1}, - {1187, 0}, - {1187, 1}, - {755, 2}, - {755, 4}, - {755, 4}, - {755, 5}, - {814, 0}, - {814, 1}, - {1102, 1}, - {1102, 1}, - {1102, 1}, - {1102, 1}, - {1102, 1}, - {1102, 1}, - {1102, 1}, - {1102, 1}, - {1102, 1}, - {1264, 0}, - {1264, 1}, - {1265, 2}, - {1265, 1}, + {905, 2}, + {905, 4}, + {952, 1}, + {952, 3}, + {895, 0}, + {895, 2}, + {1091, 0}, + {1091, 1}, + {1088, 4}, + {1258, 1}, + {1258, 1}, + {1027, 2}, + {1027, 4}, + {1308, 1}, + {1308, 3}, + {1006, 3}, + {1007, 1}, + {1007, 1}, {852, 1}, - {903, 0}, - {903, 1}, - {1103, 1}, - {1103, 1}, - {1263, 1}, - {947, 0}, - {947, 1}, - {874, 0}, - {874, 5}, - {697, 3}, - {697, 3}, - {697, 3}, - {697, 3}, - {873, 0}, - {873, 3}, - {873, 3}, - {873, 4}, - {873, 5}, - {873, 4}, - {873, 5}, - {873, 5}, - {873, 4}, - {1065, 0}, - {1065, 2}, - {748, 1}, - {748, 1}, - {748, 2}, - {748, 2}, - {746, 3}, - {746, 3}, - {745, 4}, - {745, 4}, - {745, 5}, - {745, 2}, - {745, 2}, - {745, 3}, - {744, 1}, + {852, 2}, + {991, 4}, + {991, 4}, + {991, 5}, + {991, 2}, + {991, 3}, + {991, 1}, + {991, 2}, + {1115, 1}, + {1098, 1}, + {1042, 2}, + {743, 3}, {744, 3}, - {743, 1}, - {743, 1}, - {1267, 2}, - {1267, 2}, - {1267, 2}, - {948, 1}, - {981, 9}, - {981, 9}, - {850, 2}, - {850, 4}, - {850, 6}, - {850, 4}, - {850, 4}, - {850, 3}, - {850, 6}, - {850, 6}, - {1107, 3}, - {1106, 6}, + {745, 7}, + {1300, 0}, + {1300, 7}, + {1300, 5}, + {1299, 0}, + {1299, 1}, + {1299, 1}, + {1299, 1}, + {1301, 0}, + {1301, 1}, + {1301, 1}, + {1097, 0}, + {1097, 4}, + {742, 7}, + {742, 6}, + {742, 5}, + {742, 6}, + {742, 6}, + {750, 2}, + {750, 2}, + {752, 2}, + {752, 3}, + {1146, 3}, + {1146, 1}, + {918, 4}, + {1200, 2}, + {1321, 0}, + {1321, 2}, + {1322, 1}, + {1322, 3}, + {1142, 3}, + {911, 1}, + {1144, 3}, + {1327, 4}, + {1241, 0}, + {1241, 1}, + {1244, 0}, + {1244, 3}, + {1247, 0}, + {1247, 3}, + {1246, 0}, + {1246, 2}, + {1325, 1}, + {1325, 1}, + {1325, 1}, + {1324, 1}, + {1324, 1}, + {964, 2}, + {964, 2}, + {964, 2}, + {964, 4}, + {964, 2}, + {1323, 4}, + {1143, 1}, + {1143, 2}, + {1143, 2}, + {1143, 2}, + {1143, 4}, + {756, 0}, + {756, 1}, + {738, 2}, + {1326, 1}, + {1326, 1}, + {719, 4}, + {719, 4}, + {719, 4}, + {719, 4}, + {719, 4}, + {719, 5}, + {719, 7}, + {719, 7}, + {719, 6}, + {719, 6}, + {719, 9}, + {1077, 0}, + {1077, 3}, + {1077, 3}, + {1078, 0}, + {1078, 2}, + {873, 0}, + {873, 2}, + {873, 2}, + {1242, 0}, + {1242, 2}, + {1242, 2}, + {1298, 1}, + {878, 1}, + {878, 3}, + {840, 1}, + {840, 4}, + {792, 1}, + {792, 1}, + {791, 6}, + {791, 2}, + {791, 3}, + {849, 0}, + {849, 4}, + {904, 0}, + {904, 1}, + {903, 1}, + {903, 2}, + {929, 2}, + {929, 2}, + {929, 2}, + {1211, 0}, + {1211, 2}, + {1211, 3}, + {1211, 3}, + {928, 5}, + {846, 0}, + {846, 1}, + {846, 3}, + {846, 1}, + {846, 3}, + {1044, 1}, + {1044, 2}, + {1045, 0}, + {1045, 1}, + {788, 3}, + {788, 5}, + {788, 7}, + {788, 7}, + {788, 9}, + {788, 4}, + {788, 6}, + {788, 3}, + {788, 5}, + {806, 1}, + {806, 1}, + {1079, 0}, + {1079, 1}, + {812, 1}, + {812, 2}, + {812, 2}, + {1053, 0}, + {1053, 2}, + {870, 1}, + {870, 1}, + {1265, 1}, + {1265, 1}, + {1195, 1}, + {1195, 1}, + {1190, 0}, + {1190, 1}, + {758, 2}, + {758, 4}, + {758, 4}, + {758, 5}, + {817, 0}, + {817, 1}, + {1105, 1}, + {1105, 1}, + {1105, 1}, + {1105, 1}, + {1105, 1}, + {1105, 1}, {1105, 1}, {1105, 1}, {1105, 1}, - {1268, 3}, + {1267, 0}, + {1267, 1}, + {1268, 2}, {1268, 1}, - {1268, 1}, - {953, 1}, - {953, 3}, - {906, 3}, - {906, 2}, - {906, 2}, - {906, 3}, - {1215, 2}, - {1215, 2}, - {1215, 2}, - {1215, 1}, - {826, 1}, - {826, 1}, - {826, 1}, - {810, 1}, - {810, 1}, - {816, 1}, - {816, 3}, - {887, 1}, - {887, 3}, - {887, 3}, - {960, 3}, - {960, 4}, - {960, 4}, - {960, 4}, - {960, 3}, - {960, 3}, - {960, 2}, - {960, 4}, - {960, 4}, - {960, 2}, - {960, 2}, - {1163, 1}, - {1163, 1}, - {793, 1}, - {793, 1}, - {857, 1}, - {857, 1}, - {1137, 1}, - {1137, 3}, - {715, 1}, - {715, 1}, - {714, 1}, - {698, 1}, - {761, 1}, - {761, 3}, - {761, 2}, - {761, 2}, - {853, 1}, - {853, 3}, - {1080, 1}, - {1080, 4}, - {878, 1}, - {807, 1}, - {807, 1}, - {787, 3}, - {787, 2}, - {945, 1}, - {945, 1}, - {806, 1}, - {806, 1}, - {848, 1}, - {848, 3}, - {962, 3}, - {962, 5}, - {962, 6}, - {962, 4}, - {962, 4}, - {962, 5}, - {962, 5}, - {962, 5}, - {962, 6}, - {962, 4}, - {962, 5}, - {962, 6}, - {962, 4}, - {962, 3}, - {962, 3}, - {962, 4}, - {962, 4}, - {962, 5}, - {962, 5}, - {962, 3}, - {962, 3}, - {962, 3}, - {962, 3}, - {962, 3}, - {962, 3}, - {962, 3}, - {962, 3}, - {962, 4}, - {1145, 2}, - {1145, 2}, - {1145, 3}, - {1145, 3}, - {1201, 1}, - {1201, 3}, - {1037, 5}, - {1062, 1}, - {1062, 3}, - {1110, 3}, - {1110, 4}, - {1110, 4}, - {1110, 5}, - {1110, 4}, - {1110, 5}, - {1110, 4}, - {1110, 4}, - {1110, 6}, - {1110, 4}, - {1110, 8}, - {1110, 2}, - {1110, 5}, - {1110, 3}, - {1110, 3}, - {1110, 2}, - {1110, 5}, - {1110, 2}, - {1110, 2}, - {1110, 4}, - {1271, 2}, - {1271, 2}, - {1271, 4}, - {1274, 0}, - {1274, 1}, - {1273, 1}, - {1273, 3}, - {1109, 1}, - {1109, 1}, - {1109, 2}, - {1109, 2}, - {1109, 2}, - {1109, 1}, - {1109, 1}, - {1109, 1}, - {1109, 1}, - {1272, 0}, - {1272, 3}, - {1306, 0}, - {1306, 2}, - {1269, 1}, - {1269, 1}, - {1269, 1}, - {791, 1}, - {791, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 3}, - {1275, 3}, - {1275, 3}, - {1275, 3}, - {1275, 5}, - {1275, 4}, - {1275, 5}, - {1275, 1}, - {1275, 1}, - {1275, 2}, - {1275, 2}, - {1275, 2}, - {1275, 1}, - {1275, 2}, - {1275, 2}, - {1275, 2}, - {1275, 2}, - {1275, 2}, - {1275, 2}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 2}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 1}, - {1275, 2}, - {1270, 0}, + {855, 1}, + {906, 0}, + {906, 1}, + {1106, 1}, + {1106, 1}, + {1266, 1}, + {950, 0}, + {950, 1}, + {877, 0}, + {877, 5}, + {700, 3}, + {700, 3}, + {700, 3}, + {700, 3}, + {876, 0}, + {876, 3}, + {876, 3}, + {876, 4}, + {876, 5}, + {876, 4}, + {876, 5}, + {876, 5}, + {876, 4}, + {1068, 0}, + {1068, 2}, + {751, 1}, + {751, 1}, + {751, 2}, + {751, 2}, + {749, 3}, + {749, 3}, + {748, 4}, + {748, 4}, + {748, 5}, + {748, 2}, + {748, 2}, + {748, 3}, + {747, 1}, + {747, 3}, + {746, 1}, + {746, 1}, {1270, 2}, {1270, 2}, - {923, 0}, - {923, 1}, - {923, 1}, - {1283, 0}, - {1283, 1}, - {1283, 1}, - {1283, 1}, - {1070, 0}, - {1070, 1}, - {827, 0}, - {827, 2}, - {1111, 2}, - {1031, 3}, - {937, 1}, - {937, 3}, - {1196, 1}, - {1196, 1}, - {1196, 3}, - {1196, 1}, - {1196, 2}, - {1196, 3}, - {1196, 1}, - {1225, 0}, - {1225, 1}, - {1225, 1}, - {1225, 1}, - {1225, 1}, - {1225, 1}, - {822, 0}, - {822, 1}, - {822, 1}, - {1126, 0}, - {1126, 1}, - {951, 0}, - {951, 2}, - {1325, 0}, - {1325, 3}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {1116, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {905, 1}, - {838, 1}, - {838, 1}, - {838, 1}, - {838, 1}, - {838, 1}, - {838, 1}, - {838, 1}, - {838, 1}, - {838, 1}, - {1282, 1}, - {1282, 3}, - {888, 2}, - {982, 1}, - {982, 1}, - {950, 1}, - {950, 1}, - {1124, 1}, - {1124, 3}, - {1293, 0}, - {1293, 3}, - {828, 1}, - {828, 4}, - {828, 4}, - {828, 4}, - {828, 3}, - {828, 4}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 1}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 3}, - {828, 2}, - {828, 2}, - {828, 3}, - {828, 3}, - {828, 5}, - {828, 3}, - {820, 0}, - {820, 1}, - {1118, 1}, - {1118, 1}, - {999, 0}, - {999, 1}, - {904, 1}, - {904, 2}, - {904, 3}, - {1242, 0}, - {1242, 1}, - {1132, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {824, 3}, - {1303, 1}, - {1303, 1}, - {1303, 1}, - {1231, 3}, - {1231, 2}, - {1231, 3}, - {1231, 3}, - {1231, 2}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1214, 1}, - {1161, 1}, - {1161, 1}, - {1071, 0}, - {1071, 1}, - {1071, 1}, - {1193, 1}, - {1193, 1}, - {1193, 1}, - {1195, 1}, - {1195, 1}, - {1195, 1}, - {1195, 2}, - {1159, 1}, - {1288, 3}, - {1288, 2}, - {1288, 3}, - {1288, 2}, - {1288, 3}, - {1288, 3}, - {1288, 2}, - {1288, 2}, - {1288, 1}, - {1288, 2}, - {1288, 5}, - {1288, 5}, - {1288, 1}, - {1288, 3}, - {1288, 2}, - {886, 1}, - {886, 1}, - {1230, 1}, - {1230, 2}, - {1230, 2}, - {1136, 2}, - {1136, 2}, - {1136, 1}, - {1136, 1}, - {1232, 2}, - {1232, 2}, - {1232, 1}, - {1232, 2}, - {1232, 2}, - {1232, 3}, - {1232, 3}, - {1232, 2}, - {1328, 1}, - {1328, 1}, - {1160, 1}, - {1160, 2}, - {1160, 1}, - {1160, 1}, - {1160, 2}, - {1300, 1}, - {1300, 2}, - {1300, 1}, - {1300, 1}, - {869, 1}, - {869, 1}, - {869, 1}, - {869, 1}, - {1179, 1}, - {1179, 2}, - {1179, 2}, - {1179, 2}, - {1179, 3}, - {751, 3}, - {772, 0}, - {772, 1}, - {860, 1}, + {1270, 2}, + {951, 1}, + {984, 9}, + {984, 9}, + {853, 2}, + {853, 4}, + {853, 6}, + {853, 4}, + {853, 4}, + {853, 3}, + {853, 6}, + {853, 6}, + {1110, 3}, + {1109, 6}, + {1108, 1}, + {1108, 1}, + {1108, 1}, + {1271, 3}, + {1271, 1}, + {1271, 1}, + {956, 1}, + {956, 3}, + {909, 3}, + {909, 2}, + {909, 2}, + {909, 3}, + {1218, 2}, + {1218, 2}, + {1218, 2}, + {1218, 1}, + {829, 1}, + {829, 1}, + {829, 1}, + {813, 1}, + {813, 1}, + {819, 1}, + {819, 3}, + {890, 1}, + {890, 3}, + {890, 3}, + {963, 3}, + {963, 4}, + {963, 4}, + {963, 4}, + {963, 3}, + {963, 3}, + {963, 2}, + {963, 4}, + {963, 4}, + {963, 2}, + {963, 2}, + {1166, 1}, + {1166, 1}, + {796, 1}, + {796, 1}, {860, 1}, {860, 1}, - {861, 0}, - {861, 2}, - {889, 0}, - {889, 1}, - {889, 1}, - {894, 5}, - {1235, 0}, - {1235, 1}, - {786, 0}, - {786, 2}, - {786, 3}, - {1236, 0}, - {1236, 2}, - {759, 2}, - {759, 1}, - {759, 2}, - {1069, 0}, - {1069, 2}, + {1140, 1}, + {1140, 3}, + {718, 1}, + {718, 1}, + {717, 1}, + {701, 1}, + {764, 1}, + {764, 3}, + {764, 2}, + {764, 2}, + {856, 1}, + {856, 3}, + {1083, 1}, + {1083, 4}, + {881, 1}, + {810, 1}, + {810, 1}, + {790, 3}, + {790, 2}, + {948, 1}, + {948, 1}, + {809, 1}, + {809, 1}, + {851, 1}, + {851, 3}, + {965, 3}, + {965, 5}, + {965, 6}, + {965, 4}, + {965, 4}, + {965, 5}, + {965, 5}, + {965, 5}, + {965, 6}, + {965, 4}, + {965, 5}, + {965, 6}, + {965, 4}, + {965, 3}, + {965, 3}, + {965, 4}, + {965, 4}, + {965, 5}, + {965, 5}, + {965, 3}, + {965, 3}, + {965, 3}, + {965, 3}, + {965, 3}, + {965, 3}, + {965, 3}, + {965, 3}, + {965, 4}, + {1148, 2}, + {1148, 2}, + {1148, 3}, + {1148, 3}, + {1204, 1}, + {1204, 3}, + {1040, 5}, + {1065, 1}, + {1065, 3}, + {1113, 3}, + {1113, 4}, + {1113, 4}, + {1113, 5}, + {1113, 4}, + {1113, 5}, + {1113, 4}, + {1113, 4}, + {1113, 6}, + {1113, 4}, + {1113, 8}, + {1113, 2}, + {1113, 5}, + {1113, 3}, + {1113, 3}, + {1113, 2}, + {1113, 5}, + {1113, 2}, + {1113, 2}, + {1113, 4}, + {1274, 2}, + {1274, 2}, + {1274, 4}, + {1277, 0}, + {1277, 1}, + {1276, 1}, + {1276, 3}, + {1112, 1}, + {1112, 1}, + {1112, 2}, + {1112, 2}, + {1112, 2}, + {1112, 1}, + {1112, 1}, + {1112, 1}, + {1112, 1}, + {1275, 0}, + {1275, 3}, + {1309, 0}, + {1309, 2}, + {1272, 1}, + {1272, 1}, + {1272, 1}, + {794, 1}, + {794, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 3}, + {1278, 3}, + {1278, 3}, + {1278, 3}, + {1278, 5}, + {1278, 4}, + {1278, 5}, + {1278, 1}, + {1278, 1}, + {1278, 2}, + {1278, 2}, + {1278, 2}, + {1278, 1}, + {1278, 2}, + {1278, 2}, + {1278, 2}, + {1278, 2}, + {1278, 2}, + {1278, 2}, + {1278, 2}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 2}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 1}, + {1278, 2}, + {1273, 0}, + {1273, 2}, + {1273, 2}, + {926, 0}, + {926, 1}, + {926, 1}, + {1286, 0}, {1286, 1}, - {1286, 3}, - {952, 1}, - {952, 1}, - {952, 1}, - {1130, 1}, - {1130, 3}, - {726, 1}, - {726, 1}, - {1287, 1}, - {1287, 1}, - {1287, 1}, - {765, 1}, - {765, 2}, - {760, 10}, - {760, 8}, - {1135, 2}, - {776, 2}, - {777, 0}, - {777, 1}, - {1333, 0}, - {1333, 1}, - {1000, 7}, - {996, 4}, - {972, 7}, - {972, 9}, - {966, 3}, - {1213, 2}, - {1213, 6}, - {876, 2}, - {907, 1}, - {907, 3}, - {990, 0}, - {990, 2}, - {1173, 1}, - {1173, 2}, - {989, 2}, - {989, 2}, - {989, 2}, - {989, 2}, - {943, 0}, - {943, 1}, - {942, 2}, - {942, 2}, - {942, 2}, - {942, 2}, - {1260, 1}, - {1260, 3}, - {1260, 2}, - {944, 2}, - {944, 2}, - {944, 2}, - {944, 2}, - {1082, 0}, - {1082, 1}, - {1081, 1}, - {1081, 2}, - {936, 2}, - {936, 2}, - {936, 1}, - {936, 4}, - {936, 2}, - {936, 2}, - {935, 3}, - {1165, 0}, - {1155, 0}, - {1155, 3}, - {1155, 3}, - {1155, 5}, - {1155, 5}, - {1155, 4}, - {1156, 1}, - {1038, 1}, - {1038, 1}, - {1101, 1}, - {1261, 1}, - {1261, 3}, - {831, 1}, - {831, 1}, - {831, 1}, - {831, 1}, - {831, 1}, - {831, 1}, + {1286, 1}, + {1286, 1}, + {1073, 0}, + {1073, 1}, + {830, 0}, + {830, 2}, + {1114, 2}, + {1034, 3}, + {940, 1}, + {940, 3}, + {1199, 1}, + {1199, 1}, + {1199, 3}, + {1199, 1}, + {1199, 2}, + {1199, 3}, + {1199, 1}, + {1228, 0}, + {1228, 1}, + {1228, 1}, + {1228, 1}, + {1228, 1}, + {1228, 1}, + {825, 0}, + {825, 1}, + {825, 1}, + {1129, 0}, + {1129, 1}, + {954, 0}, + {954, 2}, + {1328, 0}, + {1328, 3}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {1119, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {908, 1}, + {841, 1}, + {841, 1}, + {841, 1}, + {841, 1}, + {841, 1}, + {841, 1}, + {841, 1}, + {841, 1}, + {841, 1}, + {1285, 1}, + {1285, 3}, + {891, 2}, + {985, 1}, + {985, 1}, + {953, 1}, + {953, 1}, + {1127, 1}, + {1127, 3}, + {1296, 0}, + {1296, 3}, {831, 1}, + {831, 4}, + {831, 4}, + {831, 4}, + {831, 3}, + {831, 4}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, {831, 1}, - {991, 7}, - {1007, 5}, - {1007, 7}, - {1104, 5}, - {1104, 7}, - {1036, 9}, - {1034, 7}, - {1035, 4}, - {1142, 0}, - {1142, 3}, - {1142, 3}, - {1142, 3}, - {1142, 3}, - {1142, 3}, - {921, 1}, - {921, 2}, - {946, 1}, - {946, 1}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 3}, + {831, 2}, + {831, 2}, + {831, 3}, + {831, 3}, + {831, 5}, + {831, 3}, + {823, 0}, + {823, 1}, + {1121, 1}, + {1121, 1}, + {1002, 0}, + {1002, 1}, + {907, 1}, + {907, 2}, + {907, 3}, + {1245, 0}, + {1245, 1}, + {1135, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {827, 3}, + {1306, 1}, + {1306, 1}, + {1306, 1}, + {1234, 3}, + {1234, 2}, + {1234, 3}, + {1234, 3}, + {1234, 2}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1217, 1}, + {1164, 1}, + {1164, 1}, + {1074, 0}, + {1074, 1}, + {1074, 1}, + {1196, 1}, + {1196, 1}, + {1196, 1}, + {1198, 1}, + {1198, 1}, + {1198, 1}, + {1198, 2}, + {1162, 1}, + {1291, 3}, + {1291, 2}, + {1291, 3}, + {1291, 2}, + {1291, 3}, + {1291, 3}, + {1291, 2}, + {1291, 2}, + {1291, 1}, + {1291, 2}, + {1291, 5}, + {1291, 5}, + {1291, 1}, + {1291, 3}, + {1291, 2}, + {889, 1}, + {889, 1}, + {1233, 1}, + {1233, 2}, + {1233, 2}, + {1139, 2}, + {1139, 2}, + {1139, 1}, + {1139, 1}, + {1235, 2}, + {1235, 2}, + {1235, 1}, + {1235, 2}, + {1235, 2}, + {1235, 3}, + {1235, 3}, + {1235, 2}, + {1331, 1}, + {1331, 1}, + {1163, 1}, + {1163, 2}, + {1163, 1}, + {1163, 1}, + {1163, 2}, + {1303, 1}, + {1303, 2}, + {1303, 1}, + {1303, 1}, + {872, 1}, + {872, 1}, + {872, 1}, + {872, 1}, + {1182, 1}, + {1182, 2}, + {1182, 2}, + {1182, 2}, + {1182, 3}, + {754, 3}, + {775, 0}, + {775, 1}, + {863, 1}, + {863, 1}, + {863, 1}, + {864, 0}, + {864, 2}, + {892, 0}, + {892, 1}, + {892, 1}, + {897, 5}, + {1238, 0}, + {1238, 1}, + {789, 0}, + {789, 2}, + {789, 3}, + {1239, 0}, + {1239, 2}, + {762, 2}, + {762, 1}, + {762, 2}, + {1072, 0}, + {1072, 2}, + {1289, 1}, + {1289, 3}, + {955, 1}, + {955, 1}, + {955, 1}, + {1133, 1}, + {1133, 3}, + {729, 1}, + {729, 1}, + {1290, 1}, + {1290, 1}, + {1290, 1}, + {768, 1}, + {768, 2}, + {763, 10}, + {763, 8}, + {1138, 2}, + {779, 2}, + {780, 0}, + {780, 1}, + {1336, 0}, + {1336, 1}, + {1003, 7}, + {999, 4}, + {975, 7}, + {975, 9}, + {969, 3}, + {1216, 2}, + {1216, 6}, + {879, 2}, + {910, 1}, + {910, 3}, + {993, 0}, + {993, 2}, + {1176, 1}, + {1176, 2}, + {992, 2}, + {992, 2}, + {992, 2}, + {992, 2}, + {946, 0}, {946, 1}, - {946, 3}, - {946, 3}, - {1100, 1}, - {1100, 3}, + {945, 2}, + {945, 2}, + {945, 2}, + {945, 2}, + {1263, 1}, + {1263, 3}, + {1263, 2}, + {947, 2}, + {947, 2}, + {947, 2}, + {947, 2}, + {1085, 0}, + {1085, 1}, + {1084, 1}, + {1084, 2}, + {939, 2}, + {939, 2}, {939, 1}, {939, 4}, - {940, 1}, - {940, 2}, - {940, 1}, - {940, 1}, - {940, 2}, - {940, 2}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 2}, - {940, 1}, - {940, 2}, - {940, 1}, - {940, 2}, - {940, 2}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 1}, - {940, 3}, - {940, 2}, - {940, 2}, - {940, 2}, - {940, 2}, - {940, 2}, - {940, 2}, - {940, 2}, - {940, 1}, - {940, 1}, - {1063, 0}, - {1063, 1}, - {1063, 1}, - {1063, 1}, - {1086, 1}, - {1086, 3}, - {1086, 3}, - {1086, 3}, - {1086, 1}, - {1099, 7}, - {1098, 4}, - {845, 15}, - {1206, 0}, - {1206, 3}, - {1164, 0}, - {1164, 3}, - {1055, 0}, - {1055, 1}, - {1029, 0}, - {1029, 2}, - {819, 1}, - {819, 1}, - {1190, 2}, - {1190, 1}, - {1028, 3}, - {1028, 4}, - {1028, 3}, - {1028, 3}, - {839, 1}, - {839, 1}, - {839, 1}, - {929, 0}, - {929, 3}, - {1280, 0}, - {1280, 3}, - {1221, 0}, - {1221, 3}, - {1223, 0}, - {1223, 2}, - {1222, 3}, - {1222, 1}, - {1053, 3}, - {1133, 2}, + {939, 2}, + {939, 2}, + {938, 3}, + {1168, 0}, + {1158, 0}, + {1158, 3}, + {1158, 3}, + {1158, 5}, + {1158, 5}, + {1158, 4}, + {1159, 1}, + {1041, 1}, + {1041, 1}, + {1104, 1}, + {1264, 1}, + {1264, 3}, + {834, 1}, + {834, 1}, + {834, 1}, + {834, 1}, + {834, 1}, + {834, 1}, + {834, 1}, + {834, 1}, + {994, 7}, + {1010, 5}, + {1010, 7}, + {1107, 5}, + {1107, 7}, + {1039, 9}, + {1037, 7}, + {1038, 4}, + {1145, 0}, + {1145, 3}, + {1145, 3}, + {1145, 3}, + {1145, 3}, + {1145, 3}, + {924, 1}, + {924, 2}, + {949, 1}, + {949, 1}, + {949, 1}, + {949, 3}, + {949, 3}, + {1103, 1}, + {1103, 3}, + {942, 1}, + {942, 4}, + {943, 1}, + {943, 2}, + {943, 1}, + {943, 1}, + {943, 2}, + {943, 2}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 2}, + {943, 1}, + {943, 2}, + {943, 1}, + {943, 2}, + {943, 2}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 1}, + {943, 3}, + {943, 2}, + {943, 2}, + {943, 2}, + {943, 2}, + {943, 2}, + {943, 2}, + {943, 2}, + {943, 1}, + {943, 1}, + {1066, 0}, + {1066, 1}, + {1066, 1}, + {1066, 1}, + {1089, 1}, + {1089, 3}, + {1089, 3}, + {1089, 3}, + {1089, 1}, + {1102, 7}, + {1101, 4}, + {848, 15}, + {1209, 0}, + {1209, 3}, + {1167, 0}, + {1167, 3}, + {1058, 0}, + {1058, 1}, + {1032, 0}, + {1032, 2}, + {822, 1}, + {822, 1}, + {1193, 2}, + {1193, 1}, + {1031, 3}, + {1031, 4}, + {1031, 3}, + {1031, 3}, + {842, 1}, + {842, 1}, + {842, 1}, + {932, 0}, + {932, 3}, + {1283, 0}, + {1283, 3}, + {1224, 0}, + {1224, 3}, + {1226, 0}, + {1226, 2}, + {1225, 3}, + {1225, 1}, + {1056, 3}, + {1136, 2}, + {1060, 3}, + {1131, 1}, + {1131, 1}, + {1128, 2}, + {1227, 1}, + {1227, 2}, + {1227, 1}, + {1227, 2}, + {1297, 1}, + {1297, 3}, + {1052, 2}, + {1052, 3}, + {1052, 3}, + {1051, 1}, + {1051, 2}, {1057, 3}, - {1128, 1}, - {1128, 1}, - {1125, 2}, - {1224, 1}, - {1224, 2}, - {1224, 1}, - {1224, 2}, - {1294, 1}, - {1294, 3}, - {1049, 2}, - {1049, 3}, - {1049, 3}, - {1048, 1}, - {1048, 2}, - {1054, 3}, - {1011, 5}, - {995, 7}, - {968, 6}, - {997, 6}, - {1175, 0}, - {1175, 1}, - {1266, 1}, - {1266, 2}, - {898, 3}, - {898, 3}, - {898, 3}, - {898, 3}, - {898, 3}, - {898, 1}, - {898, 2}, - {898, 3}, - {898, 1}, - {898, 2}, - {898, 3}, - {898, 1}, - {898, 2}, - {898, 1}, - {898, 1}, - {898, 2}, - {799, 1}, - {799, 2}, - {799, 2}, - {1013, 4}, - {970, 5}, - {1147, 1}, - {1147, 2}, - {969, 1}, - {969, 1}, - {969, 3}, - {969, 3}, - {1040, 8}, - {1229, 0}, - {1229, 2}, - {1228, 0}, - {1228, 3}, - {1253, 0}, - {1253, 2}, - {1252, 0}, - {1252, 2}, - {1021, 1}, - {958, 1}, - {958, 3}, - {897, 2}, - {1084, 5}, - {1084, 6}, - {1084, 9}, - {1084, 10}, - {1084, 4}, + {1014, 5}, + {998, 7}, + {971, 6}, + {1000, 6}, + {1178, 0}, + {1178, 1}, + {1269, 1}, + {1269, 2}, + {901, 3}, + {901, 3}, + {901, 3}, + {901, 3}, + {901, 3}, + {901, 1}, + {901, 2}, + {901, 3}, + {901, 1}, + {901, 2}, + {901, 3}, + {901, 1}, + {901, 2}, + {901, 1}, + {901, 1}, + {901, 2}, + {802, 1}, + {802, 2}, + {802, 2}, + {1016, 4}, + {973, 5}, + {1150, 1}, + {1150, 2}, + {972, 1}, + {972, 1}, + {972, 3}, + {972, 3}, + {1043, 8}, + {1232, 0}, + {1232, 2}, + {1231, 0}, + {1231, 3}, + {1256, 0}, + {1256, 2}, + {1255, 0}, + {1255, 2}, + {1024, 1}, + {961, 1}, + {961, 3}, + {900, 2}, + {1087, 5}, + {1087, 6}, + {1087, 9}, + {1087, 10}, + {1087, 4}, } yyXErrors = map[yyXError]string{} - yyParseTab = [4172][]uint16{ + yyParseTab = [4177][]uint16{ // 0 - {2000, 2000, 47: 2493, 69: 2609, 71: 2474, 80: 2504, 145: 2476, 151: 2502, 153: 2473, 166: 2498, 199: 2523, 205: 2621, 208: 2469, 216: 2522, 2489, 2475, 233: 2501, 238: 2479, 241: 2499, 243: 2470, 245: 2505, 263: 2491, 268: 2490, 275: 2503, 277: 2471, 280: 2492, 292: 2484, 462: 2513, 2512, 485: 2617, 491: 2511, 493: 2521, 496: 2497, 514: 2612, 518: 2487, 556: 2496, 558: 2510, 634: 2506, 637: 2620, 641: 2472, 2611, 650: 2467, 657: 2478, 662: 2477, 667: 2520, 674: 2468, 697: 2517, 730: 2480, 739: 2519, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 2590, 2589, 2483, 760: 2610, 762: 2481, 2573, 2584, 2601, 779: 2482, 783: 2539, 795: 2615, 808: 2527, 830: 2534, 834: 2537, 840: 2613, 845: 2576, 849: 2581, 2591, 2494, 916: 2546, 920: 2485, 955: 2616, 962: 2525, 964: 2526, 2529, 2530, 968: 2532, 970: 2531, 972: 2528, 974: 2533, 2535, 2536, 978: 2495, 2572, 981: 2542, 991: 2550, 2543, 2544, 2545, 2551, 2549, 2552, 2553, 1000: 2548, 2547, 1003: 2538, 2500, 2486, 2554, 2566, 2555, 2556, 2557, 2559, 2563, 2560, 2564, 2565, 2558, 2562, 2561, 1020: 2524, 1024: 2540, 2541, 2488, 1030: 2568, 2567, 1034: 2570, 2571, 2569, 1039: 2607, 2574, 1047: 2619, 2618, 2575, 1054: 2577, 1057: 2604, 1084: 2578, 2579, 1087: 2580, 1089: 2585, 1092: 2582, 2583, 1095: 2606, 2586, 2614, 2588, 2587, 1104: 2592, 1106: 2594, 2593, 2597, 1110: 2598, 1112: 2605, 1115: 2595, 2608, 1120: 2596, 1131: 2599, 2600, 2603, 1135: 2602, 1279: 2465, 1282: 2466}, - {2464}, - {2463, 6634}, - {16: 6586, 132: 6583, 162: 6584, 189: 6587, 249: 6585, 479: 4092, 558: 1816, 572: 5941, 836: 6582, 841: 4091}, - {162: 6567, 558: 6566}, + {2004, 2004, 47: 2497, 69: 2613, 71: 2478, 80: 2508, 145: 2480, 151: 2506, 153: 2477, 166: 2502, 199: 2527, 205: 2625, 208: 2473, 216: 2526, 2493, 2479, 233: 2505, 238: 2483, 241: 2503, 243: 2474, 245: 2509, 263: 2495, 268: 2494, 275: 2507, 277: 2475, 280: 2496, 292: 2488, 465: 2517, 2516, 488: 2621, 494: 2515, 496: 2525, 499: 2501, 517: 2616, 521: 2491, 559: 2500, 561: 2514, 637: 2510, 640: 2624, 644: 2476, 2615, 653: 2471, 660: 2482, 665: 2481, 670: 2524, 677: 2472, 700: 2521, 733: 2484, 742: 2523, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 2594, 2593, 2487, 763: 2614, 765: 2485, 2577, 2588, 2605, 782: 2486, 786: 2543, 798: 2619, 811: 2531, 833: 2538, 837: 2541, 843: 2617, 848: 2580, 852: 2585, 2595, 2498, 919: 2550, 923: 2489, 958: 2620, 965: 2529, 967: 2530, 2533, 2534, 971: 2536, 973: 2535, 975: 2532, 977: 2537, 2539, 2540, 981: 2499, 2576, 984: 2546, 994: 2554, 2547, 2548, 2549, 2555, 2553, 2556, 2557, 1003: 2552, 2551, 1006: 2542, 2504, 2490, 2558, 2570, 2559, 2560, 2561, 2563, 2567, 2564, 2568, 2569, 2562, 2566, 2565, 1023: 2528, 1027: 2544, 2545, 2492, 1033: 2572, 2571, 1037: 2574, 2575, 2573, 1042: 2611, 2578, 1050: 2623, 2622, 2579, 1057: 2581, 1060: 2608, 1087: 2582, 2583, 1090: 2584, 1092: 2589, 1095: 2586, 2587, 1098: 2610, 2590, 2618, 2592, 2591, 1107: 2596, 1109: 2598, 2597, 2601, 1113: 2602, 1115: 2609, 1118: 2599, 2612, 1123: 2600, 1134: 2603, 2604, 2607, 1138: 2606, 1282: 2469, 1285: 2470}, + {2468}, + {2467, 6643}, + {16: 6595, 132: 6592, 162: 6593, 187: 6596, 249: 6594, 482: 4099, 561: 1820, 575: 5950, 839: 6591, 844: 4098}, + {162: 6576, 561: 6575}, // 5 - {558: 6560}, - {558: 6555}, - {366: 6536, 480: 6537, 558: 2319, 1277: 6535}, - {334: 6491, 558: 6490}, - {2287, 2287, 353: 6489, 360: 6488}, + {561: 6569}, + {561: 6564}, + {369: 6545, 483: 6546, 561: 2323, 1280: 6544}, + {337: 6500, 561: 6499}, + {2291, 2291, 356: 6498, 363: 6497}, // 10 - {389: 6477}, - {464: 6476}, - {2254, 2254, 70: 5783, 494: 5781, 847: 5782, 988: 6475}, - {16: 2050, 81: 2050, 99: 2050, 132: 6252, 139: 2050, 154: 581, 156: 6189, 160: 5392, 162: 6253, 167: 6254, 189: 6256, 5910, 211: 6244, 498: 6251, 558: 2019, 572: 5941, 630: 6246, 637: 2145, 656: 2050, 664: 6248, 836: 6249, 923: 6255, 932: 5391, 1209: 6245, 1246: 6250, 1276: 6247}, - {16: 6196, 99: 6190, 110: 2019, 132: 6194, 154: 581, 156: 6189, 160: 5392, 162: 6191, 166: 1007, 6192, 189: 6197, 5910, 211: 6185, 278: 6193, 558: 2019, 572: 5941, 637: 6187, 836: 6186, 923: 6195, 932: 6188}, + {392: 6486}, + {467: 6485}, + {2258, 2258, 70: 5790, 497: 5788, 850: 5789, 991: 6484}, + {16: 2054, 81: 2054, 99: 2054, 132: 6261, 139: 2054, 154: 581, 156: 6198, 160: 5399, 162: 6262, 167: 6263, 187: 6265, 5918, 211: 6253, 501: 6260, 561: 2023, 575: 5950, 633: 6255, 640: 2149, 659: 2054, 667: 6257, 839: 6258, 926: 6264, 935: 5398, 1212: 6254, 1249: 6259, 1279: 6256}, + {16: 6205, 99: 6199, 110: 2023, 132: 6203, 154: 581, 156: 6198, 160: 5399, 162: 6200, 166: 1008, 6201, 187: 6206, 5918, 211: 6194, 278: 6202, 561: 2023, 575: 5950, 640: 6196, 839: 6195, 926: 6204, 935: 6197}, // 15 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 6184}, - {2: 828, 828, 828, 828, 828, 8: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 51: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 479: 828, 487: 828, 736: 828, 828, 828, 750: 5199, 852: 5200, 903: 6172}, - {2027, 2027}, - {2026, 2026}, - {462: 2513, 491: 2511, 558: 2510, 634: 2506, 642: 2611, 697: 3792, 730: 2480, 739: 3791, 2507, 2508, 2509, 2518, 2516, 3793, 3794, 760: 5564, 762: 6170, 779: 6171}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 6193}, + {2: 829, 829, 829, 829, 829, 8: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 51: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 482: 829, 490: 829, 739: 829, 829, 829, 753: 5206, 855: 5207, 906: 6181}, + {2031, 2031}, + {2030, 2030}, + {465: 2517, 494: 2515, 561: 2514, 637: 2510, 645: 2615, 700: 3799, 733: 2484, 742: 3798, 2511, 2512, 2513, 2522, 2520, 3800, 3801, 763: 5571, 765: 6179, 782: 6180}, // 20 - {71: 2474, 145: 2476, 151: 2502, 153: 2473, 205: 6146, 328: 6145, 462: 2513, 2512, 491: 2511, 493: 6149, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 6147, 730: 2480, 739: 6148, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 6155, 6154, 2483, 760: 2610, 762: 2481, 6152, 6153, 6151, 779: 2482, 783: 6150, 795: 6161, 830: 6157, 834: 6158, 845: 6156, 849: 6159, 6160, 905: 6144}, - {2: 1995, 1995, 1995, 1995, 1995, 8: 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 51: 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 462: 1995, 1995, 482: 1995, 491: 1995, 496: 1995, 556: 1995, 558: 1995, 634: 1995, 641: 1995, 1995, 650: 1995, 730: 1995}, - {2: 1994, 1994, 1994, 1994, 1994, 8: 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 51: 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 462: 1994, 1994, 482: 1994, 491: 1994, 496: 1994, 556: 1994, 558: 1994, 634: 1994, 641: 1994, 1994, 650: 1994, 730: 1994}, - {2: 1993, 1993, 1993, 1993, 1993, 8: 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 51: 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 462: 1993, 1993, 482: 1993, 491: 1993, 496: 1993, 556: 1993, 558: 1993, 634: 1993, 641: 1993, 1993, 650: 1993, 730: 1993}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 6121, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 2513, 2512, 482: 6120, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 641: 6122, 2611, 650: 2627, 3825, 2681, 2682, 2680, 697: 2628, 725: 6118, 730: 2480, 739: 2629, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 2635, 2634, 2483, 760: 2610, 762: 2481, 2632, 2633, 2631, 779: 2482, 783: 2630, 808: 2636, 838: 6119}, + {71: 2478, 145: 2480, 151: 2506, 153: 2477, 205: 6155, 331: 6154, 465: 2517, 2516, 494: 2515, 496: 6158, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 6156, 733: 2484, 742: 6157, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 6164, 6163, 2487, 763: 2614, 765: 2485, 6161, 6162, 6160, 782: 2486, 786: 6159, 798: 6170, 833: 6166, 837: 6167, 848: 6165, 852: 6168, 6169, 908: 6153}, + {2: 1999, 1999, 1999, 1999, 1999, 8: 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 51: 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 465: 1999, 1999, 485: 1999, 494: 1999, 499: 1999, 559: 1999, 561: 1999, 637: 1999, 644: 1999, 1999, 653: 1999, 733: 1999}, + {2: 1998, 1998, 1998, 1998, 1998, 8: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 51: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 465: 1998, 1998, 485: 1998, 494: 1998, 499: 1998, 559: 1998, 561: 1998, 637: 1998, 644: 1998, 1998, 653: 1998, 733: 1998}, + {2: 1997, 1997, 1997, 1997, 1997, 8: 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 51: 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 465: 1997, 1997, 485: 1997, 494: 1997, 499: 1997, 559: 1997, 561: 1997, 637: 1997, 644: 1997, 1997, 653: 1997, 733: 1997}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 6130, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 2517, 2516, 485: 6129, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 644: 6131, 2615, 653: 2631, 655: 3832, 2685, 2686, 2684, 700: 2632, 728: 6127, 733: 2484, 742: 2633, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 2639, 2638, 2487, 763: 2614, 765: 2485, 2636, 2637, 2635, 782: 2486, 786: 2634, 811: 2640, 841: 6128}, // 25 - {558: 6036, 572: 5941, 836: 6035, 977: 6114}, - {558: 6036, 572: 5941, 836: 6035, 977: 6034}, - {132: 6032}, - {132: 6027}, - {132: 6021}, + {561: 6045, 575: 5950, 839: 6044, 980: 6123}, + {561: 6045, 575: 5950, 839: 6044, 980: 6043}, + {132: 6041}, + {132: 6036}, + {132: 6030}, // 30 - {14: 3740, 16: 5875, 28: 5901, 5900, 98: 574, 107: 574, 110: 574, 125: 581, 132: 5864, 138: 581, 156: 5909, 184: 5873, 190: 5910, 194: 581, 200: 5911, 5887, 206: 5896, 574, 239: 5893, 262: 5892, 298: 5906, 303: 5874, 310: 5889, 5904, 313: 5881, 320: 5879, 322: 5895, 326: 5885, 329: 5894, 5868, 5903, 333: 5908, 335: 5877, 344: 5869, 352: 5883, 362: 5872, 5871, 369: 5907, 374: 5902, 5899, 5898, 390: 5890, 394: 5886, 495: 3741, 558: 5867, 635: 3739, 637: 5876, 641: 5905, 662: 5866, 759: 5882, 899: 5897, 923: 5888, 928: 5878, 941: 5891, 1002: 5880, 1070: 5870, 1269: 5884, 1275: 5865}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5853, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5855, 2681, 2682, 2680, 1256: 5854}, - {2: 828, 828, 828, 828, 828, 8: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 51: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 479: 828, 484: 828, 736: 828, 828, 828, 750: 5199, 852: 5200, 903: 5840}, - {2: 1030, 1030, 1030, 1030, 1030, 8: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 51: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 484: 1030, 736: 5204, 5203, 5202, 823: 5205, 872: 5806}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5801, 2681, 2682, 2680}, + {14: 3747, 16: 5882, 28: 5909, 5908, 98: 574, 107: 574, 110: 574, 123: 581, 132: 5871, 138: 581, 156: 5917, 182: 5880, 188: 5918, 192: 581, 200: 5919, 5894, 206: 5904, 574, 239: 5901, 262: 5900, 298: 5914, 300: 5898, 304: 5881, 311: 5896, 5912, 314: 5888, 323: 5886, 325: 5903, 329: 5892, 332: 5902, 5875, 5911, 336: 5916, 338: 5884, 347: 5876, 355: 5890, 365: 5879, 5878, 372: 5915, 377: 5910, 5907, 5906, 393: 5897, 397: 5893, 498: 3748, 561: 5874, 638: 3746, 640: 5883, 644: 5913, 665: 5873, 762: 5889, 902: 5905, 926: 5895, 931: 5885, 944: 5899, 1005: 5887, 1073: 5877, 1272: 5891, 1278: 5872}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5860, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5862, 2685, 2686, 2684, 1259: 5861}, + {2: 829, 829, 829, 829, 829, 8: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 51: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 482: 829, 487: 829, 739: 829, 829, 829, 753: 5206, 855: 5207, 906: 5847}, + {2: 1031, 1031, 1031, 1031, 1031, 8: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 51: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 487: 1031, 739: 5211, 5210, 5209, 826: 5212, 875: 5813}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5808, 2685, 2686, 2684}, // 35 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5795, 2681, 2682, 2680}, - {166: 5793}, - {166: 1008}, - {1006, 1006, 70: 5783, 494: 5781, 847: 5782, 988: 5780}, - {997, 997}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5802, 2685, 2686, 2684}, + {166: 5800}, + {166: 1009}, + {1007, 1007, 70: 5790, 497: 5788, 850: 5789, 991: 5787}, + {998, 998}, // 40 - {996, 996}, - {464: 5779}, - {2: 833, 833, 833, 833, 833, 8: 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 51: 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 5750, 5756, 5757, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 462: 833, 464: 833, 833, 833, 468: 833, 471: 833, 833, 474: 833, 833, 833, 481: 833, 491: 833, 495: 833, 833, 833, 503: 5753, 512: 833, 534: 833, 555: 833, 833, 833, 559: 833, 833, 833, 833, 833, 833, 833, 567: 833, 833, 833, 833, 572: 833, 833, 575: 833, 577: 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 636: 833, 639: 3452, 733: 3450, 3451, 736: 5204, 5203, 5202, 750: 5199, 756: 5749, 5752, 5748, 770: 5671, 773: 5746, 823: 5747, 852: 5745, 1102: 5755, 5751, 1264: 5744, 5754}, - {239, 239, 50: 239, 461: 239, 463: 239, 469: 239, 239, 477: 239, 239, 482: 239, 239, 239, 239, 487: 5719, 239, 2641, 239, 502: 239, 776: 2642, 5720, 1197: 5718}, - {823, 823, 50: 823, 461: 823, 463: 823, 469: 823, 823, 477: 823, 823, 482: 823, 823, 823, 823, 488: 823, 490: 823, 502: 5709, 924: 5711, 947: 5710}, + {997, 997}, + {467: 5786}, + {2: 834, 834, 834, 834, 834, 8: 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 51: 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 5757, 5763, 5764, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 465: 834, 467: 834, 834, 834, 471: 834, 474: 834, 834, 477: 834, 834, 834, 484: 834, 494: 834, 498: 834, 834, 834, 506: 5760, 515: 834, 537: 834, 558: 834, 834, 834, 562: 834, 834, 834, 834, 834, 834, 834, 570: 834, 834, 834, 834, 575: 834, 834, 578: 834, 580: 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 639: 834, 642: 3459, 736: 3457, 3458, 739: 5211, 5210, 5209, 753: 5206, 759: 5756, 5759, 5755, 773: 5678, 776: 5753, 826: 5754, 855: 5752, 1105: 5762, 5758, 1267: 5751, 5761}, + {239, 239, 50: 239, 464: 239, 466: 239, 472: 239, 239, 480: 239, 239, 485: 239, 239, 239, 239, 490: 5726, 239, 2645, 239, 505: 239, 779: 2646, 5727, 1200: 5725}, + {824, 824, 50: 824, 464: 824, 466: 824, 472: 824, 824, 480: 824, 824, 485: 824, 824, 824, 824, 491: 824, 493: 824, 505: 5716, 927: 5718, 950: 5717}, // 45 - {1268, 1268, 50: 1268, 461: 1268, 463: 1268, 469: 1268, 1268, 477: 1268, 1268, 482: 1268, 1268, 1268, 1268, 488: 1268, 490: 2644, 754: 2645, 797: 5705}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5700}, - {564: 3800, 897: 3799, 958: 3798}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5687, 2681, 2682, 2680, 915: 5686, 1143: 5684, 1257: 5685}, - {462: 2513, 2512, 491: 2511, 558: 2510, 634: 2506, 697: 5683, 739: 3785, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 3787, 3786, 3784}, + {1269, 1269, 50: 1269, 464: 1269, 466: 1269, 472: 1269, 1269, 480: 1269, 1269, 485: 1269, 1269, 1269, 1269, 491: 1269, 493: 2648, 757: 2649, 800: 5712}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5707}, + {567: 3807, 900: 3806, 961: 3805}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5694, 2685, 2686, 2684, 918: 5693, 1146: 5691, 1260: 5692}, + {465: 2517, 2516, 494: 2515, 561: 2514, 637: 2510, 700: 5690, 742: 3792, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 3794, 3793, 3791}, // 50 - {804, 804, 50: 804, 461: 804, 463: 804, 470: 804}, - {803, 803, 50: 803, 461: 803, 463: 803, 470: 803}, - {469: 5668, 477: 5669, 5670, 1267: 5667}, - {476, 476, 469: 789, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, - {469: 792, 477: 792, 792}, + {805, 805, 50: 805, 464: 805, 466: 805, 473: 805}, + {804, 804, 50: 804, 464: 804, 466: 804, 473: 804}, + {472: 5675, 480: 5676, 5677, 1270: 5674}, + {476, 476, 472: 790, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {472: 793, 480: 793, 793}, // 55 - {478, 478, 469: 790, 477: 790, 790}, - {239: 5652, 262: 5651}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 5494, 5489, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 5492, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 5498, 2725, 5491, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 5495, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 5496, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 5490, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 5497, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 5493, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 468: 5500, 495: 3741, 557: 5504, 577: 5503, 635: 3739, 651: 5501, 2681, 2682, 2680, 759: 5505, 816: 5502, 960: 5506, 1137: 5499}, - {15: 5369, 199: 5374, 206: 5372, 208: 5367, 5373, 266: 5371, 304: 5370, 5375, 308: 5368, 323: 5376, 368: 5377, 574: 5366, 851: 5365}, - {20: 553, 110: 553, 125: 553, 136: 4629, 142: 553, 184: 553, 191: 553, 198: 553, 213: 553, 224: 553, 244: 553, 247: 553, 534: 553, 558: 553, 804: 4628, 822: 5338}, + {478, 478, 472: 791, 480: 791, 791}, + {239: 5659, 262: 5658}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 5501, 5496, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 5499, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 5505, 2730, 5498, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 5502, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 5503, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 5497, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 5504, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 5500, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 471: 5507, 498: 3748, 560: 5511, 580: 5510, 638: 3746, 655: 5508, 2685, 2686, 2684, 762: 5512, 819: 5509, 963: 5513, 1140: 5506}, + {15: 5376, 199: 5381, 206: 5379, 208: 5374, 5380, 266: 5378, 305: 5377, 5382, 309: 5375, 326: 5383, 371: 5384, 577: 5373, 854: 5372}, + {20: 553, 110: 553, 123: 553, 136: 4636, 142: 553, 182: 553, 189: 553, 198: 553, 213: 553, 224: 553, 244: 553, 247: 553, 537: 553, 561: 553, 807: 4635, 825: 5345}, // 60 {544, 544}, {543, 543}, @@ -6197,31 +6210,31 @@ var ( {459, 459}, {436, 436}, // 145 - {2: 382, 382, 382, 382, 382, 8: 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 51: 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 558: 5335, 1242: 5336}, - {245, 245, 470: 245}, - {2: 828, 828, 828, 828, 828, 8: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 51: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 462: 828, 479: 828, 568: 828, 736: 828, 828, 828, 750: 5199, 852: 5200, 903: 5201}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5197, 2681, 2682, 2680, 801: 5198}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5042, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 5044, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 5050, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 5046, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 5043, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 5051, 3115, 2848, 3068, 5045, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 5048, 5152, 2762, 2998, 5049, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 5047, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5053, 485: 5076, 556: 5070, 632: 5074, 634: 5059, 637: 5069, 639: 5063, 642: 5072, 650: 5064, 3397, 2681, 2682, 2680, 657: 5068, 662: 5065, 726: 5052, 730: 5067, 787: 5054, 795: 5058, 840: 5073, 851: 5071, 921: 5055, 939: 5056, 5062, 945: 5057, 5060, 954: 5066, 956: 5075, 1100: 5153}, + {2: 382, 382, 382, 382, 382, 8: 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 51: 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 561: 5342, 1245: 5343}, + {245, 245, 473: 245}, + {2: 829, 829, 829, 829, 829, 8: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 51: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 465: 829, 482: 829, 571: 829, 739: 829, 829, 829, 753: 5206, 855: 5207, 906: 5208}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5204, 2685, 2686, 2684, 804: 5205}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5049, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 5051, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 5057, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 5053, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 5050, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 5058, 3122, 2855, 3075, 5052, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 5055, 5159, 2767, 3005, 5056, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 5054, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5060, 488: 5083, 559: 5077, 635: 5081, 637: 5066, 640: 5076, 642: 5070, 645: 5079, 653: 5071, 655: 3404, 2685, 2686, 2684, 660: 5075, 665: 5072, 729: 5059, 733: 5074, 790: 5061, 798: 5065, 843: 5080, 854: 5078, 924: 5062, 942: 5063, 5069, 948: 5064, 5067, 957: 5073, 959: 5082, 1103: 5160}, // 150 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5042, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 5044, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 5050, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 5046, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 5043, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 5051, 3115, 2848, 3068, 5045, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 5048, 2761, 2762, 2998, 5049, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 5047, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5053, 485: 5076, 556: 5070, 632: 5074, 634: 5059, 637: 5069, 639: 5063, 642: 5072, 650: 5064, 3397, 2681, 2682, 2680, 657: 5068, 662: 5065, 726: 5052, 730: 5067, 787: 5054, 795: 5058, 840: 5073, 851: 5071, 921: 5055, 939: 5056, 5062, 945: 5057, 5060, 954: 5066, 956: 5075, 1100: 5061}, - {21: 5001, 278: 5002}, - {110: 4988, 558: 4989, 1128: 5000}, - {110: 4988, 558: 4989, 1128: 4987}, - {26: 4983, 143: 4984, 497: 2655, 721: 4982}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5049, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 5051, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 5057, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 5053, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 5050, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 5058, 3122, 2855, 3075, 5052, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 5055, 2766, 2767, 3005, 5056, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 5054, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5060, 488: 5083, 559: 5077, 635: 5081, 637: 5066, 640: 5076, 642: 5070, 645: 5079, 653: 5071, 655: 3404, 2685, 2686, 2684, 660: 5075, 665: 5072, 729: 5059, 733: 5074, 790: 5061, 798: 5065, 843: 5080, 854: 5078, 924: 5062, 942: 5063, 5069, 948: 5064, 5067, 957: 5073, 959: 5082, 1103: 5068}, + {21: 5008, 278: 5009}, + {110: 4995, 561: 4996, 1131: 5007}, + {110: 4995, 561: 4996, 1131: 4994}, + {26: 4990, 143: 4991, 500: 2659, 724: 4989}, // 155 - {26: 56, 143: 56, 213: 4981, 497: 56}, - {294: 4964}, - {367: 2622}, - {319: 2623, 795: 2624}, - {920: 2626}, + {26: 56, 143: 56, 213: 4988, 500: 56}, + {294: 4971}, + {370: 2626}, + {321: 2627, 798: 2628}, + {923: 2630}, // 160 - {464: 2625}, + {467: 2629}, {1, 1}, - {191: 2639, 462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 641: 2638, 2611, 650: 2627, 697: 2628, 730: 2480, 739: 2629, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 2635, 2634, 2483, 760: 2610, 762: 2481, 2632, 2633, 2631, 779: 2482, 783: 2630, 808: 2636, 838: 2637}, - {479: 4092, 558: 1816, 841: 4091}, - {438, 438, 469: 789, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, + {189: 2643, 465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 644: 2642, 2615, 653: 2631, 700: 2632, 733: 2484, 742: 2633, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 2639, 2638, 2487, 763: 2614, 765: 2485, 2636, 2637, 2635, 782: 2486, 786: 2634, 811: 2640, 841: 2641}, + {482: 4099, 561: 1820, 844: 4098}, + {438, 438, 472: 790, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, // 165 - {440, 440, 469: 790, 477: 790, 790}, + {440, 440, 472: 791, 480: 791, 791}, {445, 445}, {444, 444}, {443, 443}, @@ -6231,4803 +6244,4809 @@ var ( {439, 439}, {437, 437}, {5, 5}, - {191: 4086, 462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 650: 2627, 697: 2628, 730: 2480, 739: 2629, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 2635, 2634, 2483, 760: 2610, 762: 2481, 2632, 2633, 2631, 779: 2482, 783: 2630, 808: 2636, 838: 4085}, + {189: 4093, 465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 653: 2631, 700: 2632, 733: 2484, 742: 2633, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 2639, 2638, 2487, 763: 2614, 765: 2485, 2636, 2637, 2635, 782: 2486, 786: 2634, 811: 2640, 841: 4092}, // 175 - {143: 2640}, - {239, 239, 483: 239, 488: 239, 2641, 239, 776: 2642, 2643}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4084}, - {238, 238, 50: 238, 461: 238, 463: 238, 469: 238, 238, 477: 238, 238, 482: 238, 238, 238, 238, 488: 238, 490: 238, 502: 238, 504: 238, 238}, - {1268, 1268, 483: 1268, 488: 1268, 490: 2644, 754: 2645, 797: 2646}, + {143: 2644}, + {239, 239, 486: 239, 491: 239, 2645, 239, 779: 2646, 2647}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4091}, + {238, 238, 50: 238, 464: 238, 466: 238, 472: 238, 238, 480: 238, 238, 485: 238, 238, 238, 238, 491: 238, 493: 238, 505: 238, 507: 238, 238}, + {1269, 1269, 486: 1269, 491: 1269, 493: 2648, 757: 2649, 800: 2650}, // 180 - {647: 2669}, - {1267, 1267, 50: 1267, 124: 1267, 461: 1267, 463: 1267, 469: 1267, 1267, 477: 1267, 1267, 482: 1267, 1267, 1267, 1267, 488: 1267}, - {844, 844, 483: 2647, 488: 2648, 755: 2649, 814: 2650}, - {497: 2655, 567: 2657, 721: 2654, 731: 2656, 867: 2664}, - {8: 2651, 257: 2652, 1192: 2653}, + {650: 2673}, + {1268, 1268, 50: 1268, 125: 1268, 464: 1268, 466: 1268, 472: 1268, 1268, 480: 1268, 1268, 485: 1268, 1268, 1268, 1268, 491: 1268}, + {845, 845, 486: 2651, 491: 2652, 758: 2653, 817: 2654}, + {500: 2659, 570: 2661, 724: 2658, 734: 2660, 870: 2668}, + {8: 2655, 257: 2656, 1195: 2657}, // 185 - {843, 843, 50: 843, 461: 843, 463: 843, 469: 843, 843, 477: 843, 843, 482: 843, 484: 843, 843}, + {844, 844, 50: 844, 464: 844, 466: 844, 472: 844, 844, 480: 844, 844, 485: 844, 487: 844, 844}, {3, 3}, - {497: 852, 513: 852, 564: 852, 567: 852}, - {497: 851, 513: 851, 564: 851, 567: 851}, - {497: 2655, 513: 850, 564: 850, 567: 2657, 721: 2654, 731: 2656, 867: 2658, 1187: 2659}, + {500: 853, 516: 853, 567: 853, 570: 853}, + {500: 852, 516: 852, 567: 852, 570: 852}, + {500: 2659, 516: 851, 567: 851, 570: 2661, 724: 2658, 734: 2660, 870: 2662, 1190: 2663}, // 190 - {1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 13: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 47: 1935, 49: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 81: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 100: 1935, 103: 1935, 105: 1935, 1935, 108: 1935, 1935, 111: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 164: 1935, 178: 1935, 202: 1935, 461: 1935, 1935, 1935, 467: 1935, 1935, 1935, 1935, 473: 1935, 477: 1935, 1935, 1935, 1935, 482: 1935, 484: 1935, 1935, 491: 1935, 1935, 1935, 495: 1935, 1935, 513: 1935, 558: 1935, 564: 1935, 634: 1935, 1935, 637: 1935, 641: 1935}, - {1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 13: 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 49: 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 100: 1933, 103: 1933, 105: 1933, 1933, 108: 1933, 1933, 111: 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 126: 1933, 1933, 1933, 1933, 164: 1933, 178: 1933, 1933, 183: 1933, 202: 1933, 461: 1933, 1933, 1933, 467: 1933, 1933, 1933, 1933, 473: 1933, 477: 1933, 1933, 1933, 1933, 482: 1933, 1933, 1933, 1933, 488: 1933, 1933, 491: 1933, 1933, 1933, 495: 1933, 1933, 513: 1933, 558: 1933, 564: 1933, 634: 1933, 1933, 637: 1933, 641: 1933, 645: 1933, 1933}, - {856, 856, 7: 856, 50: 856, 164: 856, 461: 856, 463: 856, 469: 856, 856, 477: 856, 856, 482: 856, 484: 856, 856, 513: 856, 564: 856}, - {855, 855, 7: 855, 50: 855, 164: 855, 461: 855, 463: 855, 469: 855, 855, 477: 855, 855, 482: 855, 484: 855, 855, 513: 855, 564: 855}, - {513: 849, 564: 849}, + {1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 13: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 47: 1939, 49: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 81: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 100: 1939, 103: 1939, 105: 1939, 1939, 108: 1939, 1939, 111: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 124: 1939, 164: 1939, 176: 1939, 202: 1939, 464: 1939, 1939, 1939, 470: 1939, 1939, 1939, 1939, 476: 1939, 480: 1939, 1939, 1939, 1939, 485: 1939, 487: 1939, 1939, 494: 1939, 1939, 1939, 498: 1939, 1939, 516: 1939, 561: 1939, 567: 1939, 637: 1939, 1939, 640: 1939, 644: 1939}, + {1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 13: 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 49: 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 100: 1937, 103: 1937, 105: 1937, 1937, 108: 1937, 1937, 111: 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 124: 1937, 126: 1937, 1937, 1937, 1937, 164: 1937, 176: 1937, 1937, 181: 1937, 202: 1937, 464: 1937, 1937, 1937, 470: 1937, 1937, 1937, 1937, 476: 1937, 480: 1937, 1937, 1937, 1937, 485: 1937, 1937, 1937, 1937, 491: 1937, 1937, 494: 1937, 1937, 1937, 498: 1937, 1937, 516: 1937, 561: 1937, 567: 1937, 637: 1937, 1937, 640: 1937, 644: 1937, 648: 1937, 1937}, + {857, 857, 7: 857, 50: 857, 164: 857, 464: 857, 466: 857, 472: 857, 857, 480: 857, 857, 485: 857, 487: 857, 857, 516: 857, 567: 857}, + {856, 856, 7: 856, 50: 856, 164: 856, 464: 856, 466: 856, 472: 856, 856, 480: 856, 856, 485: 856, 487: 856, 856, 516: 856, 567: 856}, + {516: 850, 567: 850}, // 195 - {513: 2661, 564: 2660, 1262: 2662}, + {516: 2665, 567: 2664, 1265: 2666}, + {150: 855}, {150: 854}, - {150: 853}, - {150: 2663}, - {845, 845, 50: 845, 461: 845, 463: 845, 469: 845, 845, 477: 845, 845, 482: 845, 484: 845, 845}, + {150: 2667}, + {846, 846, 50: 846, 464: 846, 466: 846, 472: 846, 846, 480: 846, 846, 485: 846, 487: 846, 846}, // 200 - {848, 848, 7: 2665, 50: 848, 164: 2666, 461: 848, 463: 848, 469: 848, 848, 477: 848, 848, 482: 848, 484: 848, 848}, - {497: 2655, 567: 2657, 721: 2654, 731: 2656, 867: 2668}, - {497: 2655, 567: 2657, 721: 2654, 731: 2656, 867: 2667}, - {846, 846, 50: 846, 461: 846, 463: 846, 469: 846, 846, 477: 846, 846, 482: 846, 484: 846, 846}, - {847, 847, 50: 847, 461: 847, 463: 847, 469: 847, 847, 477: 847, 847, 482: 847, 484: 847, 847}, + {849, 849, 7: 2669, 50: 849, 164: 2670, 464: 849, 466: 849, 472: 849, 849, 480: 849, 849, 485: 849, 487: 849, 849}, + {500: 2659, 570: 2661, 724: 2658, 734: 2660, 870: 2672}, + {500: 2659, 570: 2661, 724: 2658, 734: 2660, 870: 2671}, + {847, 847, 50: 847, 464: 847, 466: 847, 472: 847, 847, 480: 847, 847, 485: 847, 487: 847, 847}, + {848, 848, 50: 848, 464: 848, 466: 848, 472: 848, 848, 480: 848, 848, 485: 848, 487: 848, 848}, // 205 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 2673, 856: 3149, 885: 3148}, - {1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 4081, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 463: 1499, 1499, 1499, 1499, 1499, 469: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 482: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 492: 1499, 1499, 1499, 498: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 535: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 571: 1499, 640: 1499, 643: 1499, 1499}, - {1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 4078, 1498, 1498, 1498, 1498, 1498, 469: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 482: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 492: 1498, 1498, 1498, 498: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 535: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 571: 1498, 640: 1498, 643: 1498, 1498}, - {724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 463: 724, 724, 724, 724, 724, 469: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 482: 724, 724, 724, 724, 724, 724, 724, 724, 724, 492: 724, 724, 724, 498: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 535: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 571: 724, 648: 4076}, - {1275, 1275, 7: 1275, 50: 1275, 124: 1275, 461: 1275, 463: 1275, 469: 1275, 1275, 477: 1275, 1275, 482: 1275, 1275, 1275, 1275, 488: 1275, 490: 1275, 494: 3252, 498: 3250, 3251, 3249, 3247, 504: 1275, 1275, 513: 1275, 516: 1275, 1275, 4075, 4074, 722: 3248, 3246, 1245: 4073}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 2677, 859: 3156, 888: 3155}, + {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 4088, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 466: 1500, 1500, 1500, 1500, 1500, 472: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 485: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 495: 1500, 1500, 1500, 501: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 538: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 574: 1500, 643: 1500, 646: 1500, 1500}, + {1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 4085, 1499, 1499, 1499, 1499, 1499, 472: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 485: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 495: 1499, 1499, 1499, 501: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 538: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 574: 1499, 643: 1499, 646: 1499, 1499}, + {725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 466: 725, 725, 725, 725, 725, 472: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 485: 725, 725, 725, 725, 725, 725, 725, 725, 725, 495: 725, 725, 725, 501: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 538: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 574: 725, 651: 4083}, + {1276, 1276, 7: 1276, 50: 1276, 125: 1276, 464: 1276, 466: 1276, 472: 1276, 1276, 480: 1276, 1276, 485: 1276, 1276, 1276, 1276, 491: 1276, 493: 1276, 497: 3259, 501: 3257, 3258, 3256, 3254, 507: 1276, 1276, 516: 1276, 519: 1276, 1276, 4082, 4081, 725: 3255, 3253, 1248: 4080}, // 210 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4072}, - {462: 4044}, - {1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 463: 1895, 1895, 467: 1895, 469: 1895, 1895, 1895, 1895, 477: 1895, 1895, 1895, 482: 1895, 1895, 1895, 1895, 4027, 1895, 1895, 1895, 1895, 492: 1895, 1895, 1895, 498: 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 511: 1895, 513: 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 533: 1895, 535: 1895, 4024, 4022, 4021, 4029, 4023, 4025, 4026, 4028, 1172: 4020, 1216: 4019}, - {1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 463: 1870, 1870, 467: 1870, 469: 1870, 1870, 1870, 1870, 477: 1870, 1870, 1870, 482: 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 492: 1870, 1870, 1870, 498: 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 511: 1870, 513: 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 533: 1870, 535: 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870}, - {1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 463: 1843, 1843, 3991, 3990, 1843, 469: 1843, 1843, 1843, 1843, 474: 3593, 3592, 3598, 1843, 1843, 1843, 482: 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 492: 1843, 1843, 1843, 498: 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 3995, 1843, 3594, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 3994, 1843, 535: 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 3992, 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591, 4001, 4002, 796: 3993, 1091: 3996, 1157: 3998, 1212: 3997, 1219: 3999, 1258: 4000}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4079}, + {465: 4051}, + {1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 466: 1899, 1899, 470: 1899, 472: 1899, 1899, 1899, 1899, 480: 1899, 1899, 1899, 485: 1899, 1899, 1899, 1899, 4034, 1899, 1899, 1899, 1899, 495: 1899, 1899, 1899, 501: 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 514: 1899, 516: 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 536: 1899, 538: 1899, 4031, 4029, 4028, 4036, 4030, 4032, 4033, 4035, 1175: 4027, 1219: 4026}, + {1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 466: 1874, 1874, 470: 1874, 472: 1874, 1874, 1874, 1874, 480: 1874, 1874, 1874, 485: 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 495: 1874, 1874, 1874, 501: 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 514: 1874, 516: 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 536: 1874, 538: 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874}, + {1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 466: 1847, 1847, 3998, 3997, 1847, 472: 1847, 1847, 1847, 1847, 477: 3600, 3599, 3605, 1847, 1847, 1847, 485: 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 495: 1847, 1847, 1847, 501: 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 4002, 1847, 3601, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 4001, 1847, 538: 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 3999, 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598, 4008, 4009, 799: 4000, 1094: 4003, 1160: 4005, 1215: 4004, 1222: 4006, 1261: 4007}, // 215 - {1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 3987, 1792, 1792, 1792, 1792, 1792, 469: 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 482: 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 492: 1792, 1792, 1792, 498: 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 535: 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 571: 1792, 640: 1792, 643: 1792, 1792}, - {1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 655: 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791}, - {1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 655: 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790}, - {1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 655: 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789}, - {1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 655: 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788}, + {1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 3994, 1796, 1796, 1796, 1796, 1796, 472: 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 485: 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 495: 1796, 1796, 1796, 501: 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 538: 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 574: 1796, 643: 1796, 646: 1796, 1796}, + {1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 659: 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795}, + {1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 659: 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794}, + {1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 659: 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793}, + {1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 659: 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792}, // 220 - {1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 655: 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787}, - {1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1207, 1786, 1786, 1786, 1786, 1786, 469: 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 482: 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 492: 1786, 1786, 1786, 498: 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 535: 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 571: 1786, 640: 1786, 643: 1786, 1786}, - {1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 655: 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785}, - {1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 655: 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784}, - {1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 655: 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783}, + {1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 659: 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791}, + {1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1208, 1790, 1790, 1790, 1790, 1790, 472: 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 485: 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 495: 1790, 1790, 1790, 501: 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 538: 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 574: 1790, 643: 1790, 646: 1790, 1790}, + {1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 659: 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789}, + {1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 659: 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788}, + {1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 659: 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787}, // 225 - {1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 655: 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782}, - {1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 655: 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781}, - {1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 655: 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780}, - {1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 655: 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779}, - {1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 655: 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778}, + {1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 659: 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786}, + {1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 659: 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785}, + {1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 659: 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784}, + {1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 659: 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783}, + {1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 659: 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782}, // 230 - {1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 655: 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777}, - {1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 3982, 1776, 1776, 1776, 1776, 1776, 469: 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 482: 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 492: 1776, 1776, 1776, 498: 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 535: 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 571: 1776, 640: 1776, 643: 1776, 1776}, - {1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 655: 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775}, - {1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 655: 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774}, - {1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 655: 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773}, + {1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 659: 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781}, + {1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 659: 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780}, + {1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 3989, 1779, 1779, 1779, 1779, 1779, 472: 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 485: 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 495: 1779, 1779, 1779, 501: 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 538: 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 574: 1779, 643: 1779, 646: 1779, 1779}, + {1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 659: 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778}, + {1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 659: 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777}, // 235 - {1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 655: 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772}, - {1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 655: 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771}, - {1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 655: 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770}, - {1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 655: 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769}, - {1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 655: 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768}, + {1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 659: 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776}, + {1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 659: 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775}, + {1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 659: 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774}, + {1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 659: 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773}, + {1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 659: 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772}, // 240 - {1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 655: 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767}, - {1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 655: 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766}, - {1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1206, 1765, 1765, 1765, 1765, 1765, 469: 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 482: 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 492: 1765, 1765, 1765, 498: 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 535: 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 571: 1765, 640: 1765, 643: 1765, 1765}, - {1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 655: 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764}, - {1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 655: 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763}, + {1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 659: 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771}, + {1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 659: 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770}, + {1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 659: 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769}, + {1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1207, 1768, 1768, 1768, 1768, 1768, 472: 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 485: 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 495: 1768, 1768, 1768, 501: 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 538: 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 574: 1768, 643: 1768, 646: 1768, 1768}, + {1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 659: 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767}, // 245 - {1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 655: 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762}, - {1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 655: 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761}, - {1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 655: 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760}, - {1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 655: 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759}, - {1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 655: 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758}, + {1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 659: 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766}, + {1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 659: 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765}, + {1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 659: 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764}, + {1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 659: 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763}, + {1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 659: 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762}, // 250 - {1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 655: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757}, - {1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 655: 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756}, - {1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 655: 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755}, - {1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1203, 1754, 3981, 1754, 1754, 1754, 469: 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 482: 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 492: 1754, 1754, 1754, 498: 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 535: 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 571: 1754, 640: 1754, 643: 1754, 1754}, - {1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 655: 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753}, + {1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 659: 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761}, + {1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 659: 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760}, + {1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 659: 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759}, + {1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 659: 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758}, + {1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1204, 1757, 3988, 1757, 1757, 1757, 472: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 485: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 495: 1757, 1757, 1757, 501: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 538: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 574: 1757, 643: 1757, 646: 1757, 1757}, // 255 - {1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1201, 1752, 1752, 1752, 1752, 1752, 469: 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 482: 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 492: 1752, 1752, 1752, 498: 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 535: 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 571: 1752, 640: 1752, 643: 1752, 1752}, - {1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 655: 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751}, - {1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 655: 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750}, - {1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 655: 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749}, - {1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 655: 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748}, + {1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 659: 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756}, + {1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1202, 1755, 1755, 1755, 1755, 1755, 472: 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 485: 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 495: 1755, 1755, 1755, 501: 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 538: 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 574: 1755, 643: 1755, 646: 1755, 1755}, + {1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 659: 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754}, + {1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 659: 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753}, + {1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 659: 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752}, // 260 - {1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 655: 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747}, - {1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 655: 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746}, - {1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 655: 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745}, - {1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 655: 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744}, - {1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 655: 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743}, + {1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 659: 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751}, + {1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 659: 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750}, + {1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 659: 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749}, + {1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 659: 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748}, + {1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 659: 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747}, // 265 - {1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 655: 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742}, - {1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 655: 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741}, - {1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 655: 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740}, - {1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 655: 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739}, - {1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 655: 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738}, + {1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 659: 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746}, + {1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 659: 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745}, + {1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 659: 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744}, + {1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 659: 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743}, + {1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 659: 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742}, // 270 - {1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 655: 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737}, - {1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 655: 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736}, - {1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 655: 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735}, - {1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 655: 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734}, - {1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 655: 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733}, + {1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 659: 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741}, + {1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 659: 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740}, + {1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 659: 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739}, + {1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 659: 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738}, + {1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 659: 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737}, // 275 - {1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 655: 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732}, - {1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 655: 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731}, - {1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 655: 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730}, - {1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1197, 1729, 1729, 1729, 1729, 1729, 469: 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 482: 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 492: 1729, 1729, 1729, 498: 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 535: 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 571: 1729, 640: 1729, 643: 1729, 1729}, - {1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 655: 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728}, + {1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 659: 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736}, + {1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 659: 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735}, + {1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 659: 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734}, + {1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 659: 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733}, + {1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1198, 1732, 1732, 1732, 1732, 1732, 472: 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 485: 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 495: 1732, 1732, 1732, 501: 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 538: 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 574: 1732, 643: 1732, 646: 1732, 1732}, // 280 - {1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 655: 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727}, - {1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 655: 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726}, - {1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 655: 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725}, - {1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 655: 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724}, - {1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1200, 1723, 1723, 1723, 1723, 1723, 469: 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 482: 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 492: 1723, 1723, 1723, 498: 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 535: 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 571: 1723, 640: 1723, 643: 1723, 1723}, + {1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 659: 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731}, + {1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 659: 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730}, + {1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 659: 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729}, + {1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 659: 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728}, + {1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 659: 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727}, // 285 - {1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 655: 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722}, - {1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 655: 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721}, - {1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 655: 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720}, - {1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 655: 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719}, - {1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 655: 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718}, + {1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1201, 1726, 1726, 1726, 1726, 1726, 472: 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 485: 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 495: 1726, 1726, 1726, 501: 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 538: 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 574: 1726, 643: 1726, 646: 1726, 1726}, + {1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 659: 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725}, + {1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 659: 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724}, + {1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 659: 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723}, + {1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 659: 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722}, // 290 - {1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 655: 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717}, - {1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 655: 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716}, - {1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 655: 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715}, - {1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 655: 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714}, - {1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 3978, 1713, 1713, 1713, 1713, 1713, 469: 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 482: 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 492: 1713, 1713, 1713, 498: 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 535: 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 571: 1713, 640: 1713, 643: 1713, 1713}, + {1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 659: 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721}, + {1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 659: 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720}, + {1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 659: 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719}, + {1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 659: 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718}, + {1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 659: 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717}, // 295 - {1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 655: 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712}, - {1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 655: 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711}, - {1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 655: 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710}, - {1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 655: 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709}, - {1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 655: 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708}, + {1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 3985, 1716, 1716, 1716, 1716, 1716, 472: 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 485: 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 495: 1716, 1716, 1716, 501: 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 538: 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 574: 1716, 643: 1716, 646: 1716, 1716}, + {1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 659: 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715}, + {1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 659: 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714}, + {1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 659: 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713}, + {1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 659: 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712}, // 300 - {1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 655: 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707}, - {1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 655: 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706}, - {1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 655: 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705}, - {1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 655: 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704}, - {1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 655: 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703}, + {1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 659: 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711}, + {1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 659: 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710}, + {1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 659: 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709}, + {1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 659: 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708}, + {1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 659: 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707}, // 305 - {1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 655: 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702}, - {1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 655: 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701}, - {1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 655: 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700}, - {1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 655: 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699}, - {1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 655: 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698}, + {1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 659: 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706}, + {1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 659: 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705}, + {1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 659: 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704}, + {1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 659: 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703}, + {1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 659: 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702}, // 310 - {1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 655: 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697}, - {1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 655: 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696}, - {1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 655: 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695}, - {1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 655: 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694}, - {1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 655: 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693}, + {1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 659: 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701}, + {1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 659: 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700}, + {1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 659: 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699}, + {1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 659: 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698}, + {1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 659: 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697}, // 315 - {1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 655: 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692}, - {1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 655: 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691}, - {1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 655: 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690}, - {1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 655: 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689}, - {1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1184, 1688, 3977, 1688, 1688, 1688, 469: 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 482: 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 492: 1688, 1688, 1688, 498: 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 535: 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 571: 1688, 640: 1688, 643: 1688, 1688}, + {1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 659: 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696}, + {1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 659: 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695}, + {1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 659: 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694}, + {1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 659: 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693}, + {1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 659: 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692}, // 320 - {1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1183, 1687, 3976, 1687, 1687, 1687, 469: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 482: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 492: 1687, 1687, 1687, 498: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 535: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 571: 1687, 640: 1687, 643: 1687, 1687}, - {1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 655: 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686}, - {1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 655: 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685}, - {1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1182, 1684, 1684, 1684, 1684, 1684, 469: 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 482: 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 492: 1684, 1684, 1684, 498: 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 535: 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 571: 1684, 640: 1684, 643: 1684, 1684}, - {1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 655: 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683}, + {1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1185, 1691, 3984, 1691, 1691, 1691, 472: 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 485: 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 495: 1691, 1691, 1691, 501: 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 538: 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 574: 1691, 643: 1691, 646: 1691, 1691}, + {1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1184, 1690, 3983, 1690, 1690, 1690, 472: 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 485: 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 495: 1690, 1690, 1690, 501: 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 538: 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 574: 1690, 643: 1690, 646: 1690, 1690}, + {1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 659: 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689}, + {1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 659: 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688}, + {1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1183, 1687, 1687, 1687, 1687, 1687, 472: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 485: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 495: 1687, 1687, 1687, 501: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 538: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 574: 1687, 643: 1687, 646: 1687, 1687}, // 325 - {1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 655: 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682}, - {1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 655: 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681}, - {1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 655: 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680}, - {1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1179, 1679, 1679, 1679, 1679, 1679, 469: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 482: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 492: 1679, 1679, 1679, 498: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 535: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 571: 1679, 640: 1679, 643: 1679, 1679}, - {1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 655: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678}, + {1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 659: 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686}, + {1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 659: 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685}, + {1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 659: 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684}, + {1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 659: 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683}, + {1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1180, 1682, 1682, 1682, 1682, 1682, 472: 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 485: 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 495: 1682, 1682, 1682, 501: 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 538: 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 574: 1682, 643: 1682, 646: 1682, 1682}, // 330 - {1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1180, 1677, 1677, 1677, 1677, 1677, 469: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 482: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 492: 1677, 1677, 1677, 498: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 535: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 571: 1677, 640: 1677, 643: 1677, 1677}, - {1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 3966, 1676, 1676, 1676, 1676, 1676, 469: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 482: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 492: 1676, 1676, 1676, 498: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 535: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 571: 1676, 640: 1676, 643: 1676, 1676}, - {1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 655: 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675}, - {1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 655: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674}, - {1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1181, 1673, 1673, 1673, 1673, 1673, 469: 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 482: 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 492: 1673, 1673, 1673, 498: 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 535: 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 571: 1673, 640: 1673, 643: 1673, 1673}, + {1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 659: 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681}, + {1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1181, 1680, 1680, 1680, 1680, 1680, 472: 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 485: 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 495: 1680, 1680, 1680, 501: 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 538: 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 574: 1680, 643: 1680, 646: 1680, 1680}, + {1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 3973, 1679, 1679, 1679, 1679, 1679, 472: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 485: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 495: 1679, 1679, 1679, 501: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 538: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 574: 1679, 643: 1679, 646: 1679, 1679}, + {1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 659: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678}, + {1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 659: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677}, // 335 - {1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 655: 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672}, - {1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1204, 1671, 1671, 1671, 1671, 1671, 469: 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 482: 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 492: 1671, 1671, 1671, 498: 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 535: 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 571: 1671, 640: 1671, 643: 1671, 1671}, - {1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 655: 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670}, - {1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 655: 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669}, - {1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 655: 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668}, + {1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1182, 1676, 1676, 1676, 1676, 1676, 472: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 485: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 495: 1676, 1676, 1676, 501: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 538: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 574: 1676, 643: 1676, 646: 1676, 1676}, + {1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 659: 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675}, + {1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1205, 1674, 1674, 1674, 1674, 1674, 472: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 485: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 495: 1674, 1674, 1674, 501: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 538: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 574: 1674, 643: 1674, 646: 1674, 1674}, + {1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 659: 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673}, + {1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 659: 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672}, // 340 - {1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 655: 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667}, - {1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 655: 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666}, - {1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 655: 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665}, - {1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 655: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664}, - {1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 655: 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663}, + {1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 659: 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671}, + {1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 659: 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670}, + {1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 659: 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669}, + {1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 659: 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668}, + {1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 659: 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667}, // 345 - {1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 655: 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662}, - {1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 655: 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661}, - {1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 655: 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660}, - {1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 655: 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659}, - {1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1191, 1658, 1658, 1658, 1658, 1658, 469: 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 482: 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 492: 1658, 1658, 1658, 498: 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 535: 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 571: 1658, 640: 1658, 643: 1658, 1658}, + {1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 659: 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666}, + {1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 659: 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665}, + {1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 659: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664}, + {1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 659: 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663}, + {1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 659: 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662}, // 350 - {1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 655: 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657}, - {1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 655: 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656}, - {1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 655: 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655}, - {1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 655: 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654}, - {1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 655: 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653}, + {1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1192, 1661, 1661, 1661, 1661, 1661, 472: 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 485: 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 495: 1661, 1661, 1661, 501: 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 538: 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 574: 1661, 643: 1661, 646: 1661, 1661}, + {1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 659: 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660}, + {1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 659: 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659}, + {1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 659: 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658}, + {1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 659: 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657}, // 355 - {1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 655: 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652}, - {1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 655: 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651}, - {1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 655: 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650}, - {1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 655: 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649}, - {1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 655: 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648}, + {1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 659: 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656}, + {1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 659: 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655}, + {1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 659: 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654}, + {1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 659: 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653}, + {1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 659: 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652}, // 360 - {1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 655: 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647}, - {1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 655: 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646}, - {1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 655: 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645}, - {1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 655: 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644}, - {1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 655: 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643}, + {1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 659: 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651}, + {1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 659: 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650}, + {1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 659: 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649}, + {1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 659: 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648}, + {1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 659: 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647}, // 365 - {1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 655: 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642}, - {1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 655: 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641}, - {1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 655: 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640}, - {1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 655: 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639}, - {1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 655: 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638}, + {1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 659: 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646}, + {1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 659: 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645}, + {1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 659: 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644}, + {1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 659: 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643}, + {1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 659: 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642}, // 370 - {1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1188, 1637, 1637, 1637, 1637, 1637, 469: 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 482: 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 492: 1637, 1637, 1637, 498: 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 535: 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 571: 1637, 640: 1637, 643: 1637, 1637}, - {1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 655: 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636}, - {1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 655: 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635}, - {1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 655: 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634}, - {1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 655: 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633}, + {1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 659: 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641}, + {1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 659: 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640}, + {1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 659: 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639}, + {1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1189, 1638, 1638, 1638, 1638, 1638, 472: 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 485: 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 495: 1638, 1638, 1638, 501: 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 538: 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 574: 1638, 643: 1638, 646: 1638, 1638}, + {1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 659: 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637}, // 375 - {1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 655: 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632}, - {1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 655: 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631}, - {1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 655: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630}, - {1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 655: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629}, - {1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 655: 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628}, + {1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 659: 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636}, + {1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 659: 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635}, + {1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 659: 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634}, + {1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 659: 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633}, + {1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 659: 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632}, // 380 - {1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 655: 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627}, - {1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 655: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626}, - {1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 655: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625}, - {1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 655: 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624}, - {1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 655: 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623}, + {1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 659: 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631}, + {1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 659: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630}, + {1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 659: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629}, + {1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 659: 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628}, + {1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 659: 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627}, // 385 - {1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 655: 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622}, - {1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 655: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621}, - {1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1186, 1620, 1620, 1620, 1620, 1620, 469: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 482: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 492: 1620, 1620, 1620, 498: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 535: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 571: 1620, 640: 1620, 643: 1620, 1620}, - {1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1205, 1619, 1619, 1619, 1619, 1619, 469: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 482: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 492: 1619, 1619, 1619, 498: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 535: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 571: 1619, 640: 1619, 643: 1619, 1619}, - {1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1193, 1618, 1618, 1618, 1618, 1618, 469: 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 482: 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 492: 1618, 1618, 1618, 498: 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 535: 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 571: 1618, 640: 1618, 643: 1618, 1618}, + {1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 659: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626}, + {1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 659: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625}, + {1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 659: 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624}, + {1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 659: 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623}, + {1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 659: 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622}, // 390 - {1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 655: 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617}, - {1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 655: 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616}, - {1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 655: 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615}, - {1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1195, 1614, 1614, 1614, 1614, 1614, 469: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 482: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 492: 1614, 1614, 1614, 498: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 535: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 571: 1614, 640: 1614, 643: 1614, 1614}, - {1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1194, 1613, 1613, 1613, 1613, 1613, 469: 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 482: 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 492: 1613, 1613, 1613, 498: 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 535: 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 571: 1613, 640: 1613, 643: 1613, 1613}, + {1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1187, 1621, 1621, 1621, 1621, 1621, 472: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 485: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 495: 1621, 1621, 1621, 501: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 538: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 574: 1621, 643: 1621, 646: 1621, 1621}, + {1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1206, 1620, 1620, 1620, 1620, 1620, 472: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 485: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 495: 1620, 1620, 1620, 501: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 538: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 574: 1620, 643: 1620, 646: 1620, 1620}, + {1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1194, 1619, 1619, 1619, 1619, 1619, 472: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 485: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 495: 1619, 1619, 1619, 501: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 538: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 574: 1619, 643: 1619, 646: 1619, 1619}, + {1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 659: 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618}, + {1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 659: 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617}, // 395 - {1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 655: 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612}, - {1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 655: 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611}, - {1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 655: 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610}, - {1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 655: 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609}, - {1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1185, 1608, 1608, 1608, 1608, 1608, 469: 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 482: 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 492: 1608, 1608, 1608, 498: 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 535: 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 571: 1608, 640: 1608, 643: 1608, 1608}, + {1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 659: 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616}, + {1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1196, 1615, 1615, 1615, 1615, 1615, 472: 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 485: 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 495: 1615, 1615, 1615, 501: 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 538: 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 574: 1615, 643: 1615, 646: 1615, 1615}, + {1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1195, 1614, 1614, 1614, 1614, 1614, 472: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 485: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 495: 1614, 1614, 1614, 501: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 538: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 574: 1614, 643: 1614, 646: 1614, 1614}, + {1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 659: 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613}, + {1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 659: 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612}, // 400 - {1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 655: 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607}, - {1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 655: 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606}, - {1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 655: 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605}, - {1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 655: 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604}, - {1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 655: 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603}, + {1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 659: 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611}, + {1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 659: 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610}, + {1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1186, 1609, 1609, 1609, 1609, 1609, 472: 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 485: 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 495: 1609, 1609, 1609, 501: 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 538: 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 574: 1609, 643: 1609, 646: 1609, 1609}, + {1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 659: 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608}, + {1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 659: 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607}, // 405 - {1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 655: 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602}, - {1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 655: 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601}, - {1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 655: 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600}, - {1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 655: 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599}, - {1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 655: 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598}, + {1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 659: 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606}, + {1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 659: 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605}, + {1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 659: 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604}, + {1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 659: 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603}, + {1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 659: 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602}, // 410 - {1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 655: 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597}, - {1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 655: 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596}, - {1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 655: 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595}, - {1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 655: 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594}, - {1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 655: 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593}, + {1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 659: 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601}, + {1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 659: 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600}, + {1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 659: 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599}, + {1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 659: 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598}, + {1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 659: 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597}, // 415 - {1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 655: 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592}, - {1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 655: 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591}, - {1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 655: 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590}, - {1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 655: 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589}, - {1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 655: 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588}, + {1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 659: 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596}, + {1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 659: 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595}, + {1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 659: 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594}, + {1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 659: 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593}, + {1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 659: 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592}, // 420 - {1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 655: 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587}, - {1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 655: 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586}, - {1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 655: 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585}, - {1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 655: 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584}, - {1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 655: 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583}, + {1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 659: 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591}, + {1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 659: 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590}, + {1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 659: 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589}, + {1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 659: 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588}, + {1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 659: 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587}, // 425 - {1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 655: 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582}, - {1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 655: 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581}, - {1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 655: 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580}, - {1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 655: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579}, - {1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 655: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578}, + {1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 659: 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586}, + {1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 659: 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585}, + {1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 659: 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584}, + {1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 659: 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583}, + {1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 659: 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582}, // 430 - {1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 655: 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577}, - {1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 655: 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576}, - {1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 655: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575}, - {1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 655: 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574}, - {1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 655: 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573}, + {1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 659: 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581}, + {1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 659: 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580}, + {1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 659: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579}, + {1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 659: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578}, + {1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 659: 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577}, // 435 - {1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 655: 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572}, - {1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 655: 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571}, - {1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 655: 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570}, - {1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 655: 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569}, - {1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 655: 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568}, + {1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 659: 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576}, + {1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 659: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575}, + {1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 659: 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574}, + {1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 659: 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573}, + {1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 659: 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572}, // 440 - {1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 655: 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567}, - {1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 655: 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566}, - {1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 655: 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565}, - {1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 655: 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564}, - {1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 655: 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563}, + {1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 659: 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571}, + {1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 659: 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570}, + {1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 659: 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569}, + {1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 659: 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568}, + {1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 659: 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567}, // 445 - {1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 655: 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562}, - {1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 655: 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561}, - {1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 655: 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560}, - {1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 655: 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559}, - {1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 655: 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558}, + {1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 659: 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566}, + {1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 659: 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565}, + {1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 659: 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564}, + {1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 659: 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563}, + {1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 659: 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562}, // 450 - {1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 655: 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557}, - {1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 655: 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556}, - {1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 655: 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555}, - {1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 655: 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554}, - {1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 655: 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553}, + {1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 659: 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561}, + {1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 659: 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560}, + {1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 659: 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559}, + {1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 659: 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558}, + {1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 659: 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557}, // 455 - {1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 655: 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552}, - {1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 655: 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551}, - {1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 655: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550}, - {1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 655: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549}, - {1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 655: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548}, + {1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 659: 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556}, + {1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 659: 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555}, + {1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 659: 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554}, + {1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 659: 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553}, + {1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 659: 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552}, // 460 - {1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 655: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547}, - {1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 655: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546}, - {1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 655: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545}, - {1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 655: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544}, - {1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 655: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543}, + {1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 659: 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551}, + {1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 659: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550}, + {1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 659: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549}, + {1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 659: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548}, + {1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 659: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547}, // 465 - {1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 655: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542}, - {1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 655: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541}, - {1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 655: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540}, - {1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 655: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539}, - {1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 655: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538}, + {1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 659: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546}, + {1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 659: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545}, + {1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 659: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544}, + {1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 659: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543}, + {1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 659: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542}, // 470 - {1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 655: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537}, - {1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 655: 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536}, - {1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 655: 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535}, - {1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 655: 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534}, - {1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 655: 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533}, + {1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 659: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541}, + {1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 659: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540}, + {1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 659: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539}, + {1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 659: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538}, + {1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 659: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537}, // 475 - {1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 655: 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532}, - {1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 655: 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531}, - {1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 655: 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530}, - {1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 655: 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529}, - {1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 655: 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528}, + {1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 659: 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536}, + {1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 659: 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535}, + {1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 659: 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534}, + {1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 659: 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533}, + {1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 659: 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532}, // 480 - {1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 655: 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527}, - {1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 655: 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526}, - {1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 655: 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525}, - {1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 655: 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524}, - {1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 655: 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523}, + {1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 659: 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531}, + {1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 659: 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530}, + {1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 659: 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529}, + {1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 659: 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528}, + {1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 659: 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 1527}, // 485 - {1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 655: 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522}, - {1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 655: 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521}, - {1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 655: 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520}, - {1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 655: 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519}, - {1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 655: 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518}, + {1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 659: 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526}, + {1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 659: 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525}, + {1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 659: 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524}, + {1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 659: 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523}, + {1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 659: 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522}, // 490 - {1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 655: 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517}, - {1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 655: 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516}, - {1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 655: 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515}, - {1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 655: 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514}, - {1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 655: 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513}, + {1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 659: 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521}, + {1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 659: 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520}, + {1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 659: 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519}, + {1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 659: 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518}, + {1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 659: 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517}, // 495 - {1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 655: 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512}, - {1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 655: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511}, - {1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 655: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510}, - {1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 655: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509}, - {1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 655: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508}, + {1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 659: 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516}, + {1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 659: 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515}, + {1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 659: 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514}, + {1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 659: 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513}, + {1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 659: 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512}, // 500 - {1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 655: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507}, - {1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 655: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506}, - {1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 655: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505}, - {1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 655: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504}, - {1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 655: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503}, + {1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 659: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511}, + {1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 659: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510}, + {1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 659: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509}, + {1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 659: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508}, + {1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 659: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507}, // 505 - {1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 655: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502}, - {1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 655: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501}, - {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 655: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500}, - {1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 3963, 1497, 1497, 1497, 1497, 1497, 469: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 482: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 492: 1497, 1497, 1497, 498: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 535: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 571: 1497, 640: 1497, 643: 1497, 1497}, - {1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 3952, 1496, 1496, 1496, 1496, 1496, 469: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 482: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 492: 1496, 1496, 1496, 498: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 535: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 571: 1496, 640: 1496, 643: 1496, 1496}, + {1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 659: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506}, + {1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 659: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505}, + {1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 659: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504}, + {1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 659: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503}, + {1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 659: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502}, // 510 - {1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 655: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495}, - {1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 655: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494}, - {1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 655: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493}, - {1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 655: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492}, - {1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 655: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491}, + {1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 659: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501}, + {1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 3970, 1498, 1498, 1498, 1498, 1498, 472: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 485: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 495: 1498, 1498, 1498, 501: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 538: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 574: 1498, 643: 1498, 646: 1498, 1498}, + {1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 3959, 1497, 1497, 1497, 1497, 1497, 472: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 485: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 495: 1497, 1497, 1497, 501: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 538: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 574: 1497, 643: 1497, 646: 1497, 1497}, + {1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 659: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496}, + {1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 659: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495}, // 515 - {1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 655: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490}, - {1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 655: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489}, - {1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 655: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488}, - {1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 655: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487}, - {1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 655: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486}, + {1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 659: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494}, + {1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 659: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493}, + {1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 659: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492}, + {1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 659: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491}, + {1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 659: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490}, // 520 - {1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 655: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485}, - {1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 655: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484}, - {1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 655: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483}, - {1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 655: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482}, - {1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 655: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481}, + {1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 659: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489}, + {1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 659: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488}, + {1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 659: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487}, + {1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 659: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486}, + {1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 659: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485}, // 525 - {1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 655: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480}, - {1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 655: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479}, - {1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 655: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478}, - {1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 655: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477}, - {1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 655: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476}, + {1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 659: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484}, + {1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 659: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483}, + {1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 659: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482}, + {1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 659: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481}, + {1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 659: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480}, // 530 - {1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 655: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475}, - {1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 655: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474}, - {1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 655: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473}, - {1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 655: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472}, - {1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 655: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471}, + {1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 659: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479}, + {1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 659: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478}, + {1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 659: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477}, + {1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 659: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476}, + {1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 659: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475}, // 535 - {1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 655: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470}, - {1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 655: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469}, - {1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 655: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468}, - {1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 655: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467}, - {1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 655: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466}, + {1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 659: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474}, + {1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 659: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473}, + {1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 659: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472}, + {1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 659: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471}, + {1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 659: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470}, // 540 - {1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 655: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465}, - {1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 655: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464}, - {1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 655: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463}, - {1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 655: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462}, - {1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 655: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461}, + {1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 659: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469}, + {1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 659: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468}, + {1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 659: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467}, + {1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 659: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466}, + {1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465}, // 545 - {1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 655: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460}, - {1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 655: 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459}, - {1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 655: 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458}, - {1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 655: 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457}, - {1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 655: 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456}, + {1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 659: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464}, + {1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 659: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463}, + {1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 659: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462}, + {1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 659: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461}, + {1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 659: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460}, // 550 - {1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 655: 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455}, - {1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 655: 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454}, - {1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 655: 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453}, - {1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 655: 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452}, - {1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 655: 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451}, + {1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 659: 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459}, + {1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 659: 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458}, + {1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 659: 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457}, + {1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 659: 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456}, + {1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 659: 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455}, // 555 - {1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 655: 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450}, - {1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 655: 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449}, - {1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 655: 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448}, - {1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 655: 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447}, - {1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 655: 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446}, + {1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 659: 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454}, + {1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 659: 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453}, + {1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 659: 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452}, + {1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 659: 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451}, + {1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 659: 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450}, // 560 - {1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 655: 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445}, - {1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 655: 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444}, - {1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 655: 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443}, - {1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 655: 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442}, - {1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 655: 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441}, + {1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 659: 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449}, + {1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 659: 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448}, + {1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 659: 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447}, + {1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 659: 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446}, + {1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 659: 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445}, // 565 - {1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 655: 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440}, - {1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 655: 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439}, - {1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 655: 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438}, - {1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 655: 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437}, - {1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 655: 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436}, + {1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 659: 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444}, + {1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 659: 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443}, + {1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 659: 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442}, + {1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 659: 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441}, + {1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 659: 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440}, // 570 - {1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 655: 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435}, - {1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 655: 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434}, - {1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 655: 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433}, - {1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 655: 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432}, - {1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 655: 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431}, + {1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 659: 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439}, + {1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 659: 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438}, + {1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 659: 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437}, + {1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 659: 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436}, + {1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 659: 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435}, // 575 - {1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 655: 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430}, - {1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 655: 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429}, - {1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 655: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428}, - {1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 655: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427}, - {1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 655: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426}, + {1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 659: 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434}, + {1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 659: 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433}, + {1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 659: 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432}, + {1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 659: 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431}, + {1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 659: 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430}, // 580 - {1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 655: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425}, - {1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 655: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424}, - {1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 655: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423}, - {1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 655: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422}, - {1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 655: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421}, + {1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 659: 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429}, + {1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 659: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428}, + {1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 659: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427}, + {1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 659: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426}, + {1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 659: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425}, // 585 - {1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 655: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420}, - {1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 655: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419}, - {1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 655: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418}, - {1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 655: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417}, - {1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 655: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416}, + {1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 659: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424}, + {1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 659: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423}, + {1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 659: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422}, + {1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 659: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421}, + {1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 659: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420}, // 590 - {1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1124, 1415, 1415, 1415, 1415, 1415, 469: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 482: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 492: 1415, 1415, 1415, 498: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 535: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 571: 1415, 640: 1415, 643: 1415, 1415}, - {1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 655: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414}, - {1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 655: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413}, - {1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 655: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412}, - {1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 655: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411}, + {1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 659: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419}, + {1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 659: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418}, + {1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 659: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417}, + {1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1125, 1416, 1416, 1416, 1416, 1416, 472: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 485: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 495: 1416, 1416, 1416, 501: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 538: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 574: 1416, 643: 1416, 646: 1416, 1416}, + {1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 659: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415}, // 595 - {1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 655: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410}, - {1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 655: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409}, - {1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 655: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408}, - {1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 655: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407}, - {1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 655: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406}, + {1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 659: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414}, + {1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 659: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413}, + {1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 659: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412}, + {1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 659: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411}, + {1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 659: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410}, // 600 - {1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 655: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405}, - {1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 655: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404}, - {1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 655: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403}, - {1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 655: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402}, - {1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 655: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401}, + {1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 659: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409}, + {1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 659: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408}, + {1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 659: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407}, + {1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 659: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406}, + {1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 659: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405}, // 605 - {1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 3943, 1400, 1400, 1400, 1400, 1400, 469: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 482: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 492: 1400, 1400, 1400, 498: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 535: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 571: 1400, 640: 1400, 643: 1400, 1400}, - {1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 655: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399}, - {1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 655: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398}, - {1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 655: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397}, - {1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 655: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396}, + {1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 659: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404}, + {1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 659: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403}, + {1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 659: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402}, + {1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 3950, 1401, 1401, 1401, 1401, 1401, 472: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 485: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 495: 1401, 1401, 1401, 501: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 538: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 574: 1401, 643: 1401, 646: 1401, 1401}, + {1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 659: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400}, // 610 - {1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 655: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395}, - {1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 655: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394}, - {1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 655: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393}, - {1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 655: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392}, - {1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 655: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391}, + {1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 659: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399}, + {1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 659: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398}, + {1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 659: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397}, + {1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 659: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396}, + {1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 659: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395}, // 615 - {1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 655: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390}, - {1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 655: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389}, - {1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 655: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388}, - {1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 655: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387}, - {1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 655: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386}, + {1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 659: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394}, + {1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 659: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393}, + {1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 659: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392}, + {1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 659: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391}, + {1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 659: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390}, // 620 - {1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 655: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385}, - {1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 655: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384}, - {1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 655: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383}, - {1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1123, 1382, 1382, 1382, 1382, 1382, 469: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 482: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 492: 1382, 1382, 1382, 498: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 535: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 571: 1382, 640: 1382, 643: 1382, 1382}, - {1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 655: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381}, + {1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 659: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389}, + {1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 659: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388}, + {1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 659: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387}, + {1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 659: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386}, + {1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 659: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385}, // 625 - {1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 655: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380}, - {1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 655: 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379}, - {1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 655: 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378}, - {1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 655: 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377}, - {1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 655: 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376}, + {1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 659: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384}, + {1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1124, 1383, 1383, 1383, 1383, 1383, 472: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 485: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 495: 1383, 1383, 1383, 501: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 538: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 574: 1383, 643: 1383, 646: 1383, 1383}, + {1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 659: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382}, + {1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 659: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381}, + {1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 659: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380}, // 630 - {1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 655: 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375}, - {1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 655: 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374}, - {1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 655: 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373}, - {1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 655: 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372}, - {1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 655: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371}, + {1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 659: 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379}, + {1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 659: 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378}, + {1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 659: 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377}, + {1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 659: 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376}, + {1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 659: 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375}, // 635 - {1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 3936, 1370, 1370, 1370, 1370, 1370, 469: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 482: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 492: 1370, 1370, 1370, 498: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 535: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 571: 1370, 640: 1370, 643: 1370, 1370}, - {1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 3929, 1369, 1369, 1369, 1369, 1369, 469: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 482: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 492: 1369, 1369, 1369, 498: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 535: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 571: 1369, 640: 1369, 643: 1369, 1369}, - {1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 655: 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368}, - {1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 655: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367}, - {1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 655: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366}, + {1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 659: 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374}, + {1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 659: 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373}, + {1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 659: 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372}, + {1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 3943, 1371, 1371, 1371, 1371, 1371, 472: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 485: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 495: 1371, 1371, 1371, 501: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 538: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 574: 1371, 643: 1371, 646: 1371, 1371}, + {1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 3936, 1370, 1370, 1370, 1370, 1370, 472: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 485: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 495: 1370, 1370, 1370, 501: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 538: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 574: 1370, 643: 1370, 646: 1370, 1370}, // 640 - {1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 655: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365}, - {1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 655: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364}, - {1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 655: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363}, - {1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 655: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362}, - {1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 655: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361}, + {1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 659: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369}, + {1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 659: 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368}, + {1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 659: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367}, + {1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 659: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366}, + {1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 659: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365}, // 645 - {1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 655: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360}, - {1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 655: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359}, - {1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 655: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358}, - {1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 655: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357}, - {1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 655: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356}, + {1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 659: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364}, + {1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 659: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363}, + {1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 659: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362}, + {1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 659: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361}, + {1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 659: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360}, // 650 - {1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 655: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355}, - {1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 655: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354}, - {1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 655: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353}, - {1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 655: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352}, - {1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 655: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351}, + {1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 659: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359}, + {1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 659: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358}, + {1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 659: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357}, + {1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 659: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356}, + {1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 659: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355}, // 655 - {1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 3909, 1350, 1350, 1350, 1350, 1350, 469: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 482: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 492: 1350, 1350, 1350, 498: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 535: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 571: 1350, 640: 1350, 643: 1350, 1350}, - {1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 3901, 1349, 1349, 1349, 1349, 1349, 469: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 482: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 492: 1349, 1349, 1349, 498: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 535: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 571: 1349, 640: 1349, 643: 1349, 1349}, - {1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 655: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348}, - {1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 655: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347}, - {1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 655: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346}, + {1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 659: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354}, + {1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 659: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353}, + {1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 659: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352}, + {1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 3916, 1351, 1351, 1351, 1351, 1351, 472: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 485: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 495: 1351, 1351, 1351, 501: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 538: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 574: 1351, 643: 1351, 646: 1351, 1351}, + {1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 3908, 1350, 1350, 1350, 1350, 1350, 472: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 485: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 495: 1350, 1350, 1350, 501: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 538: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 574: 1350, 643: 1350, 646: 1350, 1350}, // 660 - {1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 655: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345}, - {1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 655: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344}, - {1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 655: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343}, - {1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 655: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342}, - {1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 655: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341}, + {1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 659: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349}, + {1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 659: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348}, + {1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 659: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347}, + {1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 659: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346}, + {1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 659: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345}, // 665 - {1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 655: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340}, - {1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 655: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339}, - {1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 655: 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338}, - {1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 655: 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337}, - {1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 655: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336}, + {1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 659: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344}, + {1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 659: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343}, + {1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 659: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342}, + {1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 659: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341}, + {1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 659: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340}, // 670 - {1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 655: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335}, - {1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 655: 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334}, - {1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 655: 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333}, - {1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 463: 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 492: 1295, 1295, 1295, 498: 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 535: 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 566: 1295, 571: 1295, 574: 1295, 576: 1295, 630: 1295, 1295, 1295, 1295}, - {1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 463: 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 492: 1294, 1294, 1294, 498: 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 535: 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 566: 1294, 571: 1294, 574: 1294, 576: 1294, 630: 1294, 1294, 1294, 1294}, + {1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 659: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339}, + {1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 659: 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338}, + {1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 659: 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337}, + {1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 659: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336}, + {1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 659: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335}, // 675 - {1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 463: 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 492: 1293, 1293, 1293, 498: 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 535: 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 566: 1293, 571: 1293, 574: 1293, 576: 1293, 630: 1293, 1293, 1293, 1293}, - {1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 463: 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 492: 1292, 1292, 1292, 498: 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 535: 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 566: 1292, 571: 1292, 574: 1292, 576: 1292, 630: 1292, 1292, 1292, 1292}, - {1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 463: 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 492: 1291, 1291, 1291, 498: 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 535: 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 566: 1291, 571: 1291, 574: 1291, 576: 1291, 630: 1291, 1291, 1291, 1291}, - {1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 463: 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 492: 1290, 1290, 1290, 498: 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 535: 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 566: 1290, 571: 1290, 574: 1290, 576: 1290, 630: 1290, 1290, 1290, 1290}, - {1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 463: 1289, 3900, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 492: 1289, 1289, 1289, 498: 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 535: 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 566: 1289, 571: 1289, 574: 1289, 576: 1289, 630: 1289, 1289, 1289, 1289}, + {1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 659: 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334}, + {1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 466: 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 495: 1296, 1296, 1296, 501: 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 538: 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 569: 1296, 574: 1296, 577: 1296, 579: 1296, 633: 1296, 1296, 1296, 1296}, + {1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 466: 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 495: 1295, 1295, 1295, 501: 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 538: 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 569: 1295, 574: 1295, 577: 1295, 579: 1295, 633: 1295, 1295, 1295, 1295}, + {1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 466: 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 495: 1294, 1294, 1294, 501: 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 538: 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 569: 1294, 574: 1294, 577: 1294, 579: 1294, 633: 1294, 1294, 1294, 1294}, + {1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 466: 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 495: 1293, 1293, 1293, 501: 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 538: 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 569: 1293, 574: 1293, 577: 1293, 579: 1293, 633: 1293, 1293, 1293, 1293}, // 680 - {464: 3897, 565: 3898, 569: 3899}, - {1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 463: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 492: 1287, 1287, 1287, 498: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 535: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 566: 1287, 571: 1287, 574: 1287, 576: 1287, 630: 1287, 1287, 1287, 1287}, - {1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 463: 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 492: 1286, 1286, 1286, 498: 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 535: 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 566: 1286, 571: 1286, 574: 1286, 576: 1286, 630: 1286, 1286, 1286, 1286}, - {1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 463: 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 492: 1283, 1283, 1283, 498: 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 535: 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 566: 1283, 571: 1283, 574: 1283, 576: 1283, 630: 1283, 1283, 1283, 1283}, - {1278, 1278, 7: 3318, 50: 1278, 124: 1278, 461: 1278, 463: 1278, 469: 1278, 1278, 477: 1278, 1278, 482: 1278, 1278, 1278, 1278, 488: 1278}, + {1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 466: 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 495: 1292, 1292, 1292, 501: 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 538: 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 569: 1292, 574: 1292, 577: 1292, 579: 1292, 633: 1292, 1292, 1292, 1292}, + {1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 466: 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 495: 1291, 1291, 1291, 501: 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 538: 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 569: 1291, 574: 1291, 577: 1291, 579: 1291, 633: 1291, 1291, 1291, 1291}, + {1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 466: 1290, 3907, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 495: 1290, 1290, 1290, 501: 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 538: 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 569: 1290, 574: 1290, 577: 1290, 579: 1290, 633: 1290, 1290, 1290, 1290}, + {467: 3904, 568: 3905, 572: 3906}, + {1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 466: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 495: 1288, 1288, 1288, 501: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 538: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 569: 1288, 574: 1288, 577: 1288, 579: 1288, 633: 1288, 1288, 1288, 1288}, // 685 - {1277, 1277, 7: 1277, 50: 1277, 124: 1277, 461: 1277, 463: 1277, 469: 1277, 1277, 477: 1277, 1277, 482: 1277, 1277, 1277, 1277, 488: 1277, 490: 1277, 504: 1277, 1277, 513: 1277, 516: 1277, 1277}, - {1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 463: 1252, 1252, 1252, 1252, 1252, 469: 1252, 1252, 1252, 1252, 3256, 1252, 1252, 1252, 1252, 1252, 1252, 482: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 492: 1252, 1252, 1252, 498: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 535: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 571: 3257}, - {1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 463: 1251, 1251, 1251, 1251, 1251, 469: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 482: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 492: 1251, 1251, 1251, 498: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 535: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 571: 1251, 640: 3892, 643: 1251, 1251}, - {1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 463: 1248, 1248, 1248, 1248, 1248, 469: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 482: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 492: 1248, 1248, 1248, 498: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 535: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 571: 1248, 643: 3888, 3889}, - {1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 463: 1247, 1247, 1247, 1247, 1247, 469: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 482: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 492: 1247, 1247, 1247, 498: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 535: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 571: 1247}, + {1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 466: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 495: 1287, 1287, 1287, 501: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 538: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 569: 1287, 574: 1287, 577: 1287, 579: 1287, 633: 1287, 1287, 1287, 1287}, + {1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 466: 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 495: 1284, 1284, 1284, 501: 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 538: 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 569: 1284, 574: 1284, 577: 1284, 579: 1284, 633: 1284, 1284, 1284, 1284}, + {1279, 1279, 7: 3325, 50: 1279, 125: 1279, 464: 1279, 466: 1279, 472: 1279, 1279, 480: 1279, 1279, 485: 1279, 1279, 1279, 1279, 491: 1279}, + {1278, 1278, 7: 1278, 50: 1278, 125: 1278, 464: 1278, 466: 1278, 472: 1278, 1278, 480: 1278, 1278, 485: 1278, 1278, 1278, 1278, 491: 1278, 493: 1278, 507: 1278, 1278, 516: 1278, 519: 1278, 1278}, + {1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 466: 1253, 1253, 1253, 1253, 1253, 472: 1253, 1253, 1253, 1253, 3263, 1253, 1253, 1253, 1253, 1253, 1253, 485: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 495: 1253, 1253, 1253, 501: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 538: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 574: 3264}, // 690 - {1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 463: 1246, 1246, 1246, 1246, 1246, 469: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 482: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 492: 1246, 1246, 1246, 498: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 535: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 571: 1246}, - {1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 463: 1245, 1245, 1245, 1245, 1245, 469: 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 482: 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 492: 1245, 1245, 1245, 498: 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 535: 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 571: 1245}, - {1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 463: 1243, 1243, 1243, 1243, 1243, 469: 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 482: 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 492: 1243, 1243, 1243, 498: 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 535: 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 571: 1243}, - {1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 463: 1242, 1242, 1242, 1242, 1242, 469: 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 482: 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 492: 1242, 1242, 1242, 498: 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 535: 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 571: 1242}, - {1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 463: 1241, 1241, 1241, 1241, 1241, 469: 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 482: 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 492: 1241, 1241, 1241, 498: 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 535: 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 571: 1241}, + {1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 466: 1252, 1252, 1252, 1252, 1252, 472: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 485: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 495: 1252, 1252, 1252, 501: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 538: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 574: 1252, 643: 3899, 646: 1252, 1252}, + {1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 466: 1249, 1249, 1249, 1249, 1249, 472: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 485: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 495: 1249, 1249, 1249, 501: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 538: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 574: 1249, 646: 3895, 3896}, + {1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 466: 1248, 1248, 1248, 1248, 1248, 472: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 485: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 495: 1248, 1248, 1248, 501: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 538: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 574: 1248}, + {1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 466: 1247, 1247, 1247, 1247, 1247, 472: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 485: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 495: 1247, 1247, 1247, 501: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 538: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 574: 1247}, + {1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 466: 1246, 1246, 1246, 1246, 1246, 472: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 485: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 495: 1246, 1246, 1246, 501: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 538: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 574: 1246}, // 695 - {1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 463: 1240, 1240, 1240, 1240, 1240, 469: 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 482: 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 492: 1240, 1240, 1240, 498: 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 535: 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 571: 1240}, - {1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 463: 1239, 1239, 1239, 1239, 1239, 469: 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 482: 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 492: 1239, 1239, 1239, 498: 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 535: 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 571: 1239}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3887, 3160, 3241, 3159, 3156}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3886, 3160, 3241, 3159, 3156}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3885, 3160, 3241, 3159, 3156}, + {1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 466: 1244, 1244, 1244, 1244, 1244, 472: 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 485: 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 495: 1244, 1244, 1244, 501: 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 538: 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 574: 1244}, + {1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 466: 1243, 1243, 1243, 1243, 1243, 472: 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 485: 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 495: 1243, 1243, 1243, 501: 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 538: 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 574: 1243}, + {1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 466: 1242, 1242, 1242, 1242, 1242, 472: 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 485: 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 495: 1242, 1242, 1242, 501: 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 538: 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 574: 1242}, + {1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 466: 1241, 1241, 1241, 1241, 1241, 472: 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 485: 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 495: 1241, 1241, 1241, 501: 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 538: 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 574: 1241}, + {1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 466: 1240, 1240, 1240, 1240, 1240, 472: 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 485: 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 495: 1240, 1240, 1240, 501: 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 538: 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 574: 1240}, // 700 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3884, 3160, 3241, 3159, 3156}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3883, 3160, 3241, 3159, 3156}, - {1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 463: 1232, 1232, 1232, 1232, 1232, 469: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 482: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 492: 1232, 1232, 1232, 498: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 535: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 571: 1232}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 2512, 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3783, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 2510, 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 634: 2506, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3782, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3780, 739: 3785, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 3787, 3786, 3784, 766: 3781}, - {462: 3775}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3894, 3167, 3248, 3166, 3163}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3893, 3167, 3248, 3166, 3163}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3892, 3167, 3248, 3166, 3163}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3891, 3167, 3248, 3166, 3163}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3890, 3167, 3248, 3166, 3163}, // 705 - {462: 2513, 697: 3774}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3771, 2681, 2682, 2680}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3770, 3160, 3241, 3159, 3156}, - {462: 3765}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 531: 1053, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3752, 1186: 3753}, + {1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 466: 1233, 1233, 1233, 1233, 1233, 472: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 485: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 495: 1233, 1233, 1233, 501: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 538: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 574: 1233}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 2516, 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3790, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 2514, 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 637: 2510, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3789, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3787, 742: 3792, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 3794, 3793, 3791, 769: 3788}, + {465: 3782}, + {465: 2517, 700: 3781}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3778, 2685, 2686, 2684}, // 710 - {462: 3694}, - {462: 3691}, - {462: 3683}, - {462: 1202}, - {462: 1199}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3777, 3167, 3248, 3166, 3163}, + {465: 3772}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 534: 1054, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3759, 1189: 3760}, + {465: 3701}, + {465: 3698}, // 715 - {462: 1198}, - {462: 1196}, - {462: 1192}, - {462: 1190}, - {462: 1189}, + {465: 3690}, + {465: 1203}, + {465: 1200}, + {465: 1199}, + {465: 1197}, // 720 - {462: 1187}, - {1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 469: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 482: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 492: 1176, 1176, 1176, 498: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 535: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 571: 1176}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 469: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 482: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 492: 1175, 1175, 1175, 498: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 535: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 571: 1175}, - {1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 469: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 482: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 492: 1174, 1174, 1174, 498: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 535: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 571: 1174}, - {1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 469: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 482: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 492: 1173, 1173, 1173, 498: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 535: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 571: 1173}, + {465: 1193}, + {465: 1191}, + {465: 1190}, + {465: 1188}, + {1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 472: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 485: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 495: 1177, 1177, 1177, 501: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 538: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 574: 1177}, // 725 - {1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 469: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 482: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 492: 1172, 1172, 1172, 498: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 535: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 571: 1172}, - {1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 469: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 482: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 492: 1171, 1171, 1171, 498: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 535: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 571: 1171}, - {1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 469: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 482: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 492: 1170, 1170, 1170, 498: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 535: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 571: 1170}, - {1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 469: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 482: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 492: 1169, 1169, 1169, 498: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 535: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 571: 1169}, - {1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 469: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 482: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 492: 1168, 1168, 1168, 498: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 535: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 571: 1168}, + {1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 472: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 485: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 495: 1176, 1176, 1176, 501: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 538: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 574: 1176}, + {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 472: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 485: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 495: 1175, 1175, 1175, 501: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 538: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 574: 1175}, + {1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 472: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 485: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 495: 1174, 1174, 1174, 501: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 538: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 574: 1174}, + {1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 472: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 485: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 495: 1173, 1173, 1173, 501: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 538: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 574: 1173}, + {1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 472: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 485: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 495: 1172, 1172, 1172, 501: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 538: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 574: 1172}, // 730 - {1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 469: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 482: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 492: 1167, 1167, 1167, 498: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 535: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 571: 1167}, - {462: 3680}, - {462: 3677}, - {1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 3674, 1178, 1178, 1178, 1178, 1178, 469: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 482: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 492: 1178, 1178, 1178, 498: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 535: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 571: 1178, 1072: 3675}, - {462: 3672}, + {1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 472: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 485: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 495: 1171, 1171, 1171, 501: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 538: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 574: 1171}, + {1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 472: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 485: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 495: 1170, 1170, 1170, 501: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 538: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 574: 1170}, + {1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 472: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 485: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 495: 1169, 1169, 1169, 501: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 538: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 574: 1169}, + {1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 472: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 485: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 495: 1168, 1168, 1168, 501: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 538: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 574: 1168}, + {465: 3687}, // 735 - {1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 3668, 1085, 1085, 1085, 1085, 1085, 469: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 482: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 492: 1085, 1085, 1085, 498: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 535: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 571: 1085, 1199: 3667}, - {462: 3659}, - {462: 3655}, - {462: 3650}, - {462: 3647}, + {465: 3684}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 3681, 1179, 1179, 1179, 1179, 1179, 472: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 485: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 495: 1179, 1179, 1179, 501: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 538: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 574: 1179, 1075: 3682}, + {465: 3679}, + {1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 3675, 1086, 1086, 1086, 1086, 1086, 472: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 485: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 495: 1086, 1086, 1086, 501: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 538: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 574: 1086, 1202: 3674}, + {465: 3666}, // 740 - {462: 3642}, - {462: 3633}, - {462: 3626}, - {462: 3621}, - {462: 3586}, + {465: 3662}, + {465: 3657}, + {465: 3654}, + {465: 3649}, + {465: 3640}, // 745 - {462: 3572}, - {462: 3555}, - {1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 463: 1132, 1132, 1132, 1132, 1132, 469: 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 482: 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 492: 1132, 1132, 1132, 498: 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 535: 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 571: 1132}, - {462: 3548}, - {462: 1126}, + {465: 3633}, + {465: 3628}, + {465: 3593}, + {465: 3579}, + {465: 3562}, // 750 - {462: 1125}, - {1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 463: 1117, 1117, 1117, 1117, 1117, 469: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 482: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 492: 1117, 1117, 1117, 498: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 535: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 571: 1117}, - {462: 3545}, - {462: 3542}, - {462: 3534}, + {1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 466: 1133, 1133, 1133, 1133, 1133, 472: 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 485: 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 495: 1133, 1133, 1133, 501: 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 538: 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 574: 1133}, + {465: 3555}, + {465: 1127}, + {465: 1126}, + {1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 466: 1118, 1118, 1118, 1118, 1118, 472: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 485: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 495: 1118, 1118, 1118, 501: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 538: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 574: 1118}, // 755 - {462: 3526}, - {462: 3518}, - {462: 3504}, - {462: 3492}, - {462: 3487}, + {465: 3552}, + {465: 3549}, + {465: 3541}, + {465: 3533}, + {465: 3525}, // 760 - {462: 3482}, - {462: 3477}, - {462: 3472}, - {462: 3467}, - {462: 3462}, + {465: 3511}, + {465: 3499}, + {465: 3494}, + {465: 3489}, + {465: 3484}, // 765 - {462: 3449}, - {462: 3446}, - {462: 3443}, - {462: 3440}, - {462: 3437}, + {465: 3479}, + {465: 3474}, + {465: 3469}, + {465: 3456}, + {465: 3453}, // 770 - {462: 3434}, - {462: 3430}, - {462: 3424}, - {462: 3411}, - {462: 3406}, + {465: 3450}, + {465: 3447}, + {465: 3444}, + {465: 3441}, + {465: 3437}, // 775 - {462: 3401}, - {462: 3244}, - {727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 463: 727, 727, 727, 727, 727, 469: 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 482: 727, 727, 727, 727, 727, 727, 727, 727, 727, 492: 727, 727, 727, 498: 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 535: 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 571: 727}, - {726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 463: 726, 726, 726, 726, 726, 469: 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 482: 726, 726, 726, 726, 726, 726, 726, 726, 726, 492: 726, 726, 726, 498: 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 535: 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 571: 726}, - {725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 463: 725, 725, 725, 725, 725, 469: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 482: 725, 725, 725, 725, 725, 725, 725, 725, 725, 492: 725, 725, 725, 498: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 535: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 571: 725}, + {465: 3431}, + {465: 3418}, + {465: 3413}, + {465: 3408}, + {465: 3251}, // 780 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3245}, - {7: 3253, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3400}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3399}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3398}, + {728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 466: 728, 728, 728, 728, 728, 472: 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 485: 728, 728, 728, 728, 728, 728, 728, 728, 728, 495: 728, 728, 728, 501: 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 538: 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 574: 728}, + {727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 466: 727, 727, 727, 727, 727, 472: 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 485: 727, 727, 727, 727, 727, 727, 727, 727, 727, 495: 727, 727, 727, 501: 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 538: 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 574: 727}, + {726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 466: 726, 726, 726, 726, 726, 472: 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 485: 726, 726, 726, 726, 726, 726, 726, 726, 726, 495: 726, 726, 726, 501: 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 538: 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 574: 726}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3252}, + {7: 3260, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 785 - {2: 1887, 1887, 1887, 1887, 1887, 8: 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 51: 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 462: 1887, 464: 1887, 1887, 1887, 468: 1887, 471: 1887, 1887, 474: 1887, 1887, 1887, 481: 1887, 491: 1887, 495: 1887, 1887, 1887, 534: 1887, 555: 1887, 1887, 1887, 559: 1887, 1887, 1887, 1887, 1887, 1887, 1887, 567: 1887, 1887, 1887, 1887, 572: 1887, 1887, 575: 1887, 577: 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 636: 1887}, - {2: 1886, 1886, 1886, 1886, 1886, 8: 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 51: 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 462: 1886, 464: 1886, 1886, 1886, 468: 1886, 471: 1886, 1886, 474: 1886, 1886, 1886, 481: 1886, 491: 1886, 495: 1886, 1886, 1886, 534: 1886, 555: 1886, 1886, 1886, 559: 1886, 1886, 1886, 1886, 1886, 1886, 1886, 567: 1886, 1886, 1886, 1886, 572: 1886, 1886, 575: 1886, 577: 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 636: 1886}, - {2: 1885, 1885, 1885, 1885, 1885, 8: 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 51: 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 462: 1885, 464: 1885, 1885, 1885, 468: 1885, 471: 1885, 1885, 474: 1885, 1885, 1885, 481: 1885, 491: 1885, 495: 1885, 1885, 1885, 534: 1885, 555: 1885, 1885, 1885, 559: 1885, 1885, 1885, 1885, 1885, 1885, 1885, 567: 1885, 1885, 1885, 1885, 572: 1885, 1885, 575: 1885, 577: 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 636: 1885}, - {2: 1884, 1884, 1884, 1884, 1884, 8: 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 51: 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 462: 1884, 464: 1884, 1884, 1884, 468: 1884, 471: 1884, 1884, 474: 1884, 1884, 1884, 481: 1884, 491: 1884, 495: 1884, 1884, 1884, 534: 1884, 555: 1884, 1884, 1884, 559: 1884, 1884, 1884, 1884, 1884, 1884, 1884, 567: 1884, 1884, 1884, 1884, 572: 1884, 1884, 575: 1884, 577: 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 636: 1884}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3254, 3160, 3241, 3159, 3156}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3407}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3406}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3405}, + {2: 1891, 1891, 1891, 1891, 1891, 8: 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 51: 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 465: 1891, 467: 1891, 1891, 1891, 471: 1891, 474: 1891, 1891, 477: 1891, 1891, 1891, 484: 1891, 494: 1891, 498: 1891, 1891, 1891, 537: 1891, 558: 1891, 1891, 1891, 562: 1891, 1891, 1891, 1891, 1891, 1891, 1891, 570: 1891, 1891, 1891, 1891, 575: 1891, 1891, 578: 1891, 580: 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 639: 1891}, + {2: 1890, 1890, 1890, 1890, 1890, 8: 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 51: 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 465: 1890, 467: 1890, 1890, 1890, 471: 1890, 474: 1890, 1890, 477: 1890, 1890, 1890, 484: 1890, 494: 1890, 498: 1890, 1890, 1890, 537: 1890, 558: 1890, 1890, 1890, 562: 1890, 1890, 1890, 1890, 1890, 1890, 1890, 570: 1890, 1890, 1890, 1890, 575: 1890, 1890, 578: 1890, 580: 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 639: 1890}, // 790 - {50: 3258, 473: 3256, 571: 3257}, - {724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 463: 724, 724, 724, 724, 724, 469: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 482: 724, 724, 724, 724, 724, 724, 724, 724, 724, 492: 724, 724, 724, 498: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 535: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 571: 724}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3395, 651: 3397, 2681, 2682, 2680, 726: 3394, 857: 3393}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3392, 3160, 3241, 3159, 3156}, - {144: 910, 479: 910, 487: 3260, 728: 910, 1239: 3259}, + {2: 1889, 1889, 1889, 1889, 1889, 8: 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 51: 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 465: 1889, 467: 1889, 1889, 1889, 471: 1889, 474: 1889, 1889, 477: 1889, 1889, 1889, 484: 1889, 494: 1889, 498: 1889, 1889, 1889, 537: 1889, 558: 1889, 1889, 1889, 562: 1889, 1889, 1889, 1889, 1889, 1889, 1889, 570: 1889, 1889, 1889, 1889, 575: 1889, 1889, 578: 1889, 580: 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 639: 1889}, + {2: 1888, 1888, 1888, 1888, 1888, 8: 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 51: 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 465: 1888, 467: 1888, 1888, 1888, 471: 1888, 474: 1888, 1888, 477: 1888, 1888, 1888, 484: 1888, 494: 1888, 498: 1888, 1888, 1888, 537: 1888, 558: 1888, 1888, 1888, 562: 1888, 1888, 1888, 1888, 1888, 1888, 1888, 570: 1888, 1888, 1888, 1888, 575: 1888, 1888, 578: 1888, 580: 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 639: 1888}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3261, 3167, 3248, 3166, 3163}, + {50: 3265, 476: 3263, 574: 3264}, + {725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 466: 725, 725, 725, 725, 725, 472: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 485: 725, 725, 725, 725, 725, 725, 725, 725, 725, 495: 725, 725, 725, 501: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 538: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 574: 725}, // 795 - {144: 3264, 479: 3265, 728: 913, 870: 3263}, - {8: 3261, 340: 3262}, - {144: 909, 479: 909, 728: 909}, - {144: 908, 479: 908, 728: 908}, - {728: 3268, 735: 3269}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3402, 655: 3404, 2685, 2686, 2684, 729: 3401, 860: 3400}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3399, 3167, 3248, 3166, 3163}, + {144: 911, 482: 911, 490: 3267, 731: 911, 1242: 3266}, + {144: 3271, 482: 3272, 731: 914, 873: 3270}, + {8: 3268, 343: 3269}, // 800 - {260: 3267}, - {260: 3266}, - {728: 911}, - {728: 912}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 3307, 651: 3306, 2681, 2682, 2680, 908: 3309, 1141: 3310, 1323: 3308}, + {144: 910, 482: 910, 731: 910}, + {144: 909, 482: 909, 731: 909}, + {731: 3275, 738: 3276}, + {260: 3274}, + {260: 3273}, // 805 - {919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 463: 919, 919, 919, 919, 919, 469: 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 482: 919, 919, 919, 919, 919, 919, 919, 919, 919, 492: 919, 919, 919, 498: 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 535: 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 571: 919}, - {1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 655: 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792}, - {1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 655: 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786}, - {1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 655: 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776}, - {1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 655: 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765}, + {731: 912}, + {731: 913}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 3314, 655: 3313, 2685, 2686, 2684, 911: 3316, 1144: 3317, 1326: 3315}, + {920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 466: 920, 920, 920, 920, 920, 472: 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 485: 920, 920, 920, 920, 920, 920, 920, 920, 920, 495: 920, 920, 920, 501: 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 538: 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 574: 920}, + {1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 659: 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796}, // 810 - {1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 655: 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754}, - {1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 655: 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752}, - {1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 655: 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729}, - {1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 655: 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723}, - {1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 655: 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713}, + {1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 659: 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790}, + {1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 659: 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779}, + {1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 659: 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768}, + {1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 659: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757}, + {1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 659: 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755}, // 815 - {1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 655: 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688}, - {1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 655: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687}, - {1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 655: 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684}, - {1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 655: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679}, - {1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 655: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677}, + {1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 659: 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732}, + {1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 659: 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726}, + {1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 659: 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716}, + {1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 659: 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691}, + {1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 659: 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690}, // 820 - {1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 655: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676}, - {1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 655: 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673}, - {1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 655: 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671}, - {1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 655: 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658}, - {1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 655: 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637}, + {1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 659: 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687}, + {1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 659: 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682}, + {1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 659: 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680}, + {1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 659: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679}, + {1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 659: 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676}, // 825 - {1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 655: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620}, - {1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 655: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619}, - {1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 655: 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618}, - {1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 655: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614}, - {1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 655: 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613}, + {1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 659: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674}, + {1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 659: 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661}, + {1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 659: 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638}, + {1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 659: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621}, + {1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 659: 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620}, // 830 - {1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 655: 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608}, - {1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 655: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499}, - {1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 655: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498}, - {1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 655: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497}, - {1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 655: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496}, + {1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 659: 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619}, + {1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 659: 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615}, + {1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 659: 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614}, + {1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 659: 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609}, + {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 659: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500}, // 835 - {1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 655: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415}, - {1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 655: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400}, - {1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 655: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382}, - {1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 655: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370}, - {1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 655: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369}, + {1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 659: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499}, + {1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 659: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498}, + {1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 659: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497}, + {1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 659: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416}, + {1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 659: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401}, // 840 - {1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 655: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350}, - {1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 655: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349}, - {961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 463: 961, 961, 961, 961, 961, 469: 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 482: 961, 961, 961, 961, 961, 961, 961, 961, 961, 492: 961, 961, 961, 498: 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 535: 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 571: 961}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 958, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 480: 958, 490: 958, 513: 958, 516: 958, 958, 651: 3306, 2681, 2682, 2680, 908: 3313, 1238: 3312, 1324: 3311}, - {932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 463: 932, 932, 932, 932, 932, 469: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 482: 932, 932, 932, 932, 932, 932, 932, 932, 932, 492: 932, 932, 932, 498: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 535: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 571: 932}, + {1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 659: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383}, + {1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 659: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371}, + {1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 659: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370}, + {1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 659: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351}, + {1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 659: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350}, // 845 - {931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 463: 931, 931, 931, 931, 931, 469: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 482: 931, 931, 931, 931, 931, 931, 931, 931, 931, 492: 931, 931, 931, 498: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 535: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 571: 931}, - {930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 463: 930, 930, 930, 930, 930, 469: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 482: 930, 930, 930, 930, 930, 930, 930, 930, 930, 492: 930, 930, 930, 498: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 535: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 571: 930}, - {50: 3391}, - {50: 956, 480: 3315, 490: 956, 513: 956, 516: 956, 956, 1241: 3314}, - {50: 957, 480: 957, 490: 957, 513: 957, 516: 957, 957}, + {962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 466: 962, 962, 962, 962, 962, 472: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 485: 962, 962, 962, 962, 962, 962, 962, 962, 962, 495: 962, 962, 962, 501: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 538: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 574: 962}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 959, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 483: 959, 493: 959, 516: 959, 519: 959, 959, 655: 3313, 2685, 2686, 2684, 911: 3320, 1241: 3319, 1327: 3318}, + {933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 466: 933, 933, 933, 933, 933, 472: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 485: 933, 933, 933, 933, 933, 933, 933, 933, 933, 495: 933, 933, 933, 501: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 538: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 574: 933}, + {932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 466: 932, 932, 932, 932, 932, 472: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 485: 932, 932, 932, 932, 932, 932, 932, 932, 932, 495: 932, 932, 932, 501: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 538: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 574: 932}, + {931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 466: 931, 931, 931, 931, 931, 472: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 485: 931, 931, 931, 931, 931, 931, 931, 931, 931, 495: 931, 931, 931, 501: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 538: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 574: 931}, // 850 - {50: 954, 490: 3321, 513: 954, 516: 954, 954, 1244: 3320}, - {647: 3316}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 2673, 856: 3149, 885: 3317}, - {7: 3318, 50: 955, 490: 955, 513: 955, 516: 955, 955}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 2673, 856: 3319}, + {50: 3398}, + {50: 957, 483: 3322, 493: 957, 516: 957, 519: 957, 957, 1244: 3321}, + {50: 958, 483: 958, 493: 958, 516: 958, 519: 958, 958}, + {50: 955, 493: 3328, 516: 955, 519: 955, 955, 1247: 3327}, + {650: 3323}, // 855 - {1276, 1276, 7: 1276, 50: 1276, 124: 1276, 461: 1276, 463: 1276, 469: 1276, 1276, 477: 1276, 1276, 482: 1276, 1276, 1276, 1276, 488: 1276, 490: 1276, 504: 1276, 1276, 513: 1276, 516: 1276, 1276}, - {50: 952, 513: 3326, 516: 3327, 3328, 1243: 3324, 1322: 3325}, - {647: 3322}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 2673, 856: 3149, 885: 3323}, - {7: 3318, 50: 953, 513: 953, 516: 953, 953}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 2677, 859: 3156, 888: 3324}, + {7: 3325, 50: 956, 493: 956, 516: 956, 519: 956, 956}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 2677, 859: 3326}, + {1277, 1277, 7: 1277, 50: 1277, 125: 1277, 464: 1277, 466: 1277, 472: 1277, 1277, 480: 1277, 1277, 485: 1277, 1277, 1277, 1277, 491: 1277, 493: 1277, 507: 1277, 1277, 516: 1277, 519: 1277, 1277}, + {50: 953, 516: 3333, 519: 3334, 3335, 1246: 3331, 1325: 3332}, // 860 - {50: 959}, - {146: 3339, 161: 3335, 497: 3329, 544: 3340, 562: 3331, 3330, 567: 3337, 570: 3338, 805: 3336, 961: 3333, 1320: 3334, 3332}, - {146: 950, 161: 950, 497: 950, 544: 950, 562: 950, 950, 567: 950, 570: 950}, - {146: 949, 161: 949, 497: 949, 544: 949, 562: 949, 949, 567: 949, 570: 949}, - {146: 948, 161: 948, 497: 948, 544: 948, 562: 948, 948, 567: 948, 570: 948}, + {650: 3329}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 2677, 859: 3156, 888: 3330}, + {7: 3325, 50: 954, 516: 954, 519: 954, 954}, + {50: 960}, + {146: 3346, 161: 3342, 500: 3336, 547: 3347, 565: 3338, 3337, 570: 3344, 573: 3345, 808: 3343, 964: 3340, 1323: 3341, 3339}, // 865 - {2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 50: 2167, 130: 2167, 148: 2167, 461: 2167, 2167, 2167, 465: 2167, 2167, 2167, 2167, 2167, 473: 2167, 479: 2167, 2167, 2167, 491: 2167, 2167, 495: 2167, 2167, 558: 2167, 566: 2167, 574: 2167, 576: 2167, 630: 2167, 2167, 2167, 2167, 2167, 2167, 637: 2167}, - {2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 50: 2166, 130: 2166, 148: 2166, 188: 2166, 461: 2166, 2166, 2166, 465: 2166, 2166, 2166, 2166, 2166, 473: 2166, 479: 2166, 2166, 2166, 491: 2166, 2166, 495: 2166, 2166, 558: 2166, 566: 2166, 574: 2166, 576: 2166, 630: 2166, 2166, 2166, 2166, 2166, 2166, 637: 2166}, - {2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 50: 2165, 130: 2165, 148: 2165, 188: 2165, 461: 2165, 2165, 2165, 465: 2165, 2165, 2165, 2165, 2165, 473: 2165, 479: 2165, 2165, 2165, 491: 2165, 2165, 495: 2165, 2165, 558: 2165, 566: 2165, 574: 2165, 576: 2165, 630: 2165, 2165, 2165, 2165, 2165, 2165, 637: 2165}, - {50: 951}, - {50: 947}, + {146: 951, 161: 951, 500: 951, 547: 951, 565: 951, 951, 570: 951, 573: 951}, + {146: 950, 161: 950, 500: 950, 547: 950, 565: 950, 950, 570: 950, 573: 950}, + {146: 949, 161: 949, 500: 949, 547: 949, 565: 949, 949, 570: 949, 573: 949}, + {2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 50: 2171, 130: 2171, 148: 2171, 464: 2171, 2171, 2171, 468: 2171, 2171, 2171, 2171, 2171, 476: 2171, 482: 2171, 2171, 2171, 494: 2171, 2171, 498: 2171, 2171, 561: 2171, 569: 2171, 577: 2171, 579: 2171, 633: 2171, 2171, 2171, 2171, 2171, 2171, 640: 2171}, + {2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 50: 2170, 130: 2170, 148: 2170, 186: 2170, 464: 2170, 2170, 2170, 468: 2170, 2170, 2170, 2170, 2170, 476: 2170, 482: 2170, 2170, 2170, 494: 2170, 2170, 498: 2170, 2170, 561: 2170, 569: 2170, 577: 2170, 579: 2170, 633: 2170, 2170, 2170, 2170, 2170, 2170, 640: 2170}, // 870 - {50: 946}, - {130: 3386}, - {130: 3384}, - {130: 3382}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3389}, + {2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 50: 2169, 130: 2169, 148: 2169, 186: 2169, 464: 2169, 2169, 2169, 468: 2169, 2169, 2169, 2169, 2169, 476: 2169, 482: 2169, 2169, 2169, 494: 2169, 2169, 498: 2169, 2169, 561: 2169, 569: 2169, 577: 2169, 579: 2169, 633: 2169, 2169, 2169, 2169, 2169, 2169, 640: 2169}, + {50: 952}, + {50: 948}, + {50: 947}, + {130: 3393}, // 875 - {564: 3388}, - {146: 3339, 161: 3341, 497: 3329, 562: 3331, 3330, 567: 3343, 570: 3344, 805: 3342, 961: 3346, 1140: 3345}, - {130: 3386, 148: 3387}, - {130: 3384, 148: 3385}, - {130: 3382, 148: 3383}, + {130: 3391}, + {130: 3389}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3396}, + {567: 3395}, + {146: 3346, 161: 3348, 500: 3336, 565: 3338, 3337, 570: 3350, 573: 3351, 808: 3349, 964: 3353, 1143: 3352}, // 880 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3349}, - {494: 3347}, - {50: 939, 494: 939}, - {146: 3339, 161: 3341, 497: 3329, 562: 3331, 3330, 567: 3343, 570: 3344, 805: 3342, 961: 3346, 1140: 3348}, - {50: 940}, + {130: 3393, 148: 3394}, + {130: 3391, 148: 3392}, + {130: 3389, 148: 3390}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3356}, + {497: 3354}, // 885 - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 494: 3252, 498: 3250, 3251, 3249, 3247, 520: 3360, 3357, 3359, 3358, 3354, 3356, 3355, 3352, 3353, 3351, 3361, 722: 3248, 3246, 792: 3350, 815: 3379}, - {1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 469: 1082, 1082, 1082, 1082, 474: 1082, 1082, 1082, 1082, 1082, 1082, 482: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 496: 1082, 498: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 535: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 558: 1082, 634: 1082}, - {1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 469: 1081, 1081, 1081, 1081, 474: 1081, 1081, 1081, 1081, 1081, 1081, 482: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 496: 1081, 498: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 535: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 558: 1081, 634: 1081}, - {1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 469: 1080, 1080, 1080, 1080, 474: 1080, 1080, 1080, 1080, 1080, 1080, 482: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 496: 1080, 498: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 535: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 558: 1080, 634: 1080}, - {1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 469: 1079, 1079, 1079, 1079, 474: 1079, 1079, 1079, 1079, 1079, 1079, 482: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 496: 1079, 498: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 535: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 558: 1079, 634: 1079}, + {50: 940, 497: 940}, + {146: 3346, 161: 3348, 500: 3336, 565: 3338, 3337, 570: 3350, 573: 3351, 808: 3349, 964: 3353, 1143: 3355}, + {50: 941}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 497: 3259, 501: 3257, 3258, 3256, 3254, 523: 3367, 3364, 3366, 3365, 3361, 3363, 3362, 3359, 3360, 3358, 3368, 725: 3255, 3253, 795: 3357, 818: 3386}, + {1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 472: 1083, 1083, 1083, 1083, 477: 1083, 1083, 1083, 1083, 1083, 1083, 485: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 499: 1083, 501: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 538: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 561: 1083, 637: 1083}, // 890 - {1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 469: 1078, 1078, 1078, 1078, 474: 1078, 1078, 1078, 1078, 1078, 1078, 482: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 496: 1078, 498: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 535: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 558: 1078, 634: 1078}, - {1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 469: 1077, 1077, 1077, 1077, 474: 1077, 1077, 1077, 1077, 1077, 1077, 482: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 496: 1077, 498: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 535: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 558: 1077, 634: 1077}, - {1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 469: 1076, 1076, 1076, 1076, 474: 1076, 1076, 1076, 1076, 1076, 1076, 482: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 496: 1076, 498: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 535: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 558: 1076, 634: 1076}, - {1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 469: 1075, 1075, 1075, 1075, 474: 1075, 1075, 1075, 1075, 1075, 1075, 482: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 496: 1075, 498: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 535: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 558: 1075, 634: 1075}, - {1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 469: 1074, 1074, 1074, 1074, 474: 1074, 1074, 1074, 1074, 1074, 1074, 482: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 496: 1074, 498: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 535: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 558: 1074, 634: 1074}, + {1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 472: 1082, 1082, 1082, 1082, 477: 1082, 1082, 1082, 1082, 1082, 1082, 485: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 499: 1082, 501: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 538: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 561: 1082, 637: 1082}, + {1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 472: 1081, 1081, 1081, 1081, 477: 1081, 1081, 1081, 1081, 1081, 1081, 485: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 499: 1081, 501: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 538: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 561: 1081, 637: 1081}, + {1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 472: 1080, 1080, 1080, 1080, 477: 1080, 1080, 1080, 1080, 1080, 1080, 485: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 499: 1080, 501: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 538: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 561: 1080, 637: 1080}, + {1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 472: 1079, 1079, 1079, 1079, 477: 1079, 1079, 1079, 1079, 1079, 1079, 485: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 499: 1079, 501: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 538: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 561: 1079, 637: 1079}, + {1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 472: 1078, 1078, 1078, 1078, 477: 1078, 1078, 1078, 1078, 1078, 1078, 485: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 499: 1078, 501: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 538: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 561: 1078, 637: 1078}, // 895 - {1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 469: 1073, 1073, 1073, 1073, 474: 1073, 1073, 1073, 1073, 1073, 1073, 482: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 496: 1073, 498: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 535: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 558: 1073, 634: 1073}, - {1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 469: 1072, 1072, 1072, 1072, 474: 1072, 1072, 1072, 1072, 1072, 1072, 482: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 496: 1072, 498: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 535: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 558: 1072, 634: 1072}, - {1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 469: 1071, 1071, 1071, 1071, 474: 1071, 1071, 1071, 1071, 1071, 1071, 482: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 496: 1071, 498: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 535: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 558: 1071, 634: 1071}, - {1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 469: 1070, 1070, 1070, 1070, 474: 1070, 1070, 1070, 1070, 1070, 1070, 482: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 496: 1070, 498: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 535: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 558: 1070, 634: 1070}, - {1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 469: 1069, 1069, 1069, 1069, 474: 1069, 1069, 1069, 1069, 1069, 1069, 482: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 496: 1069, 498: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 535: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 558: 1069, 634: 1069}, + {1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 472: 1077, 1077, 1077, 1077, 477: 1077, 1077, 1077, 1077, 1077, 1077, 485: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 499: 1077, 501: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 538: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 561: 1077, 637: 1077}, + {1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 472: 1076, 1076, 1076, 1076, 477: 1076, 1076, 1076, 1076, 1076, 1076, 485: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 499: 1076, 501: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 538: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 561: 1076, 637: 1076}, + {1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 472: 1075, 1075, 1075, 1075, 477: 1075, 1075, 1075, 1075, 1075, 1075, 485: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 499: 1075, 501: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 538: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 561: 1075, 637: 1075}, + {1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 472: 1074, 1074, 1074, 1074, 477: 1074, 1074, 1074, 1074, 1074, 1074, 485: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 499: 1074, 501: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 538: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 561: 1074, 637: 1074}, + {1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 472: 1073, 1073, 1073, 1073, 477: 1073, 1073, 1073, 1073, 1073, 1073, 485: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 499: 1073, 501: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 538: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 561: 1073, 637: 1073}, // 900 - {1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 469: 1068, 1068, 1068, 1068, 474: 1068, 1068, 1068, 1068, 1068, 1068, 482: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 496: 1068, 498: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 535: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 558: 1068, 634: 1068}, - {1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 469: 1067, 1067, 1067, 1067, 474: 1067, 1067, 1067, 1067, 1067, 1067, 482: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 496: 1067, 498: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 535: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 558: 1067, 634: 1067}, - {1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 469: 1066, 1066, 1066, 1066, 474: 1066, 1066, 1066, 1066, 1066, 1066, 482: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 496: 1066, 498: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 535: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 558: 1066, 634: 1066}, - {1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 469: 1065, 1065, 1065, 1065, 474: 1065, 1065, 1065, 1065, 1065, 1065, 482: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 496: 1065, 498: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 535: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 558: 1065, 634: 1065}, - {1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 469: 1064, 1064, 1064, 1064, 474: 1064, 1064, 1064, 1064, 1064, 1064, 482: 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 496: 1064, 498: 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 535: 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 558: 1064, 634: 1064}, + {1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 472: 1072, 1072, 1072, 1072, 477: 1072, 1072, 1072, 1072, 1072, 1072, 485: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 499: 1072, 501: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 538: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 561: 1072, 637: 1072}, + {1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 472: 1071, 1071, 1071, 1071, 477: 1071, 1071, 1071, 1071, 1071, 1071, 485: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 499: 1071, 501: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 538: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 561: 1071, 637: 1071}, + {1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 472: 1070, 1070, 1070, 1070, 477: 1070, 1070, 1070, 1070, 1070, 1070, 485: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 499: 1070, 501: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 538: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 561: 1070, 637: 1070}, + {1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 472: 1069, 1069, 1069, 1069, 477: 1069, 1069, 1069, 1069, 1069, 1069, 485: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 499: 1069, 501: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 538: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 561: 1069, 637: 1069}, + {1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 472: 1068, 1068, 1068, 1068, 477: 1068, 1068, 1068, 1068, 1068, 1068, 485: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 499: 1068, 501: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 538: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 561: 1068, 637: 1068}, // 905 - {1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 469: 1063, 1063, 1063, 1063, 474: 1063, 1063, 1063, 1063, 1063, 1063, 482: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 496: 1063, 498: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 535: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 558: 1063, 634: 1063}, - {1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 469: 1062, 1062, 1062, 1062, 474: 1062, 1062, 1062, 1062, 1062, 1062, 482: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 496: 1062, 498: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 535: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 558: 1062, 634: 1062}, - {1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 469: 1061, 1061, 1061, 1061, 474: 1061, 1061, 1061, 1061, 1061, 1061, 482: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 496: 1061, 498: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 535: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 558: 1061, 634: 1061}, - {1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 469: 1060, 1060, 1060, 1060, 474: 1060, 1060, 1060, 1060, 1060, 1060, 482: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 496: 1060, 498: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 535: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 558: 1060, 634: 1060}, - {1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 469: 1059, 1059, 1059, 1059, 474: 1059, 1059, 1059, 1059, 1059, 1059, 482: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 496: 1059, 498: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 535: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 558: 1059, 634: 1059}, + {1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 472: 1067, 1067, 1067, 1067, 477: 1067, 1067, 1067, 1067, 1067, 1067, 485: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 499: 1067, 501: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 538: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 561: 1067, 637: 1067}, + {1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 472: 1066, 1066, 1066, 1066, 477: 1066, 1066, 1066, 1066, 1066, 1066, 485: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 499: 1066, 501: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 538: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 561: 1066, 637: 1066}, + {1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 472: 1065, 1065, 1065, 1065, 477: 1065, 1065, 1065, 1065, 1065, 1065, 485: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 499: 1065, 501: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 538: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 561: 1065, 637: 1065}, + {1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 472: 1064, 1064, 1064, 1064, 477: 1064, 1064, 1064, 1064, 1064, 1064, 485: 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 499: 1064, 501: 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 538: 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 561: 1064, 637: 1064}, + {1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 472: 1063, 1063, 1063, 1063, 477: 1063, 1063, 1063, 1063, 1063, 1063, 485: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 499: 1063, 501: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 538: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 561: 1063, 637: 1063}, // 910 - {1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 469: 1058, 1058, 1058, 1058, 474: 1058, 1058, 1058, 1058, 1058, 1058, 482: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 496: 1058, 498: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 535: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 558: 1058, 634: 1058}, - {1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 469: 1057, 1057, 1057, 1057, 474: 1057, 1057, 1057, 1057, 1057, 1057, 482: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 496: 1057, 498: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 535: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 558: 1057, 634: 1057}, - {1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 469: 1056, 1056, 1056, 1056, 474: 1056, 1056, 1056, 1056, 1056, 1056, 482: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 496: 1056, 498: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 535: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 558: 1056, 634: 1056}, - {1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 469: 1055, 1055, 1055, 1055, 474: 1055, 1055, 1055, 1055, 1055, 1055, 482: 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 496: 1055, 498: 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 535: 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 558: 1055, 634: 1055}, - {1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 469: 1054, 1054, 1054, 1054, 474: 1054, 1054, 1054, 1054, 1054, 1054, 482: 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 496: 1054, 498: 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 535: 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 558: 1054, 634: 1054}, + {1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 472: 1062, 1062, 1062, 1062, 477: 1062, 1062, 1062, 1062, 1062, 1062, 485: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 499: 1062, 501: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 538: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 561: 1062, 637: 1062}, + {1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 472: 1061, 1061, 1061, 1061, 477: 1061, 1061, 1061, 1061, 1061, 1061, 485: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 499: 1061, 501: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 538: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 561: 1061, 637: 1061}, + {1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 472: 1060, 1060, 1060, 1060, 477: 1060, 1060, 1060, 1060, 1060, 1060, 485: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 499: 1060, 501: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 538: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 561: 1060, 637: 1060}, + {1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 472: 1059, 1059, 1059, 1059, 477: 1059, 1059, 1059, 1059, 1059, 1059, 485: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 499: 1059, 501: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 538: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 561: 1059, 637: 1059}, + {1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 472: 1058, 1058, 1058, 1058, 477: 1058, 1058, 1058, 1058, 1058, 1058, 485: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 499: 1058, 501: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 538: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 561: 1058, 637: 1058}, // 915 - {130: 3380, 148: 3381}, - {50: 942, 494: 942}, - {50: 935, 494: 935}, - {50: 943, 494: 943}, - {50: 936, 494: 936}, + {1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 472: 1057, 1057, 1057, 1057, 477: 1057, 1057, 1057, 1057, 1057, 1057, 485: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 499: 1057, 501: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 538: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 561: 1057, 637: 1057}, + {1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 472: 1056, 1056, 1056, 1056, 477: 1056, 1056, 1056, 1056, 1056, 1056, 485: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 499: 1056, 501: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 538: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 561: 1056, 637: 1056}, + {1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 472: 1055, 1055, 1055, 1055, 477: 1055, 1055, 1055, 1055, 1055, 1055, 485: 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 499: 1055, 501: 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 538: 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 561: 1055, 637: 1055}, + {130: 3387, 148: 3388}, + {50: 943, 497: 943}, // 920 - {50: 944, 494: 944}, - {50: 937, 494: 937}, - {50: 945, 494: 945}, - {50: 938, 494: 938}, - {50: 941, 494: 941}, + {50: 936, 497: 936}, + {50: 944, 497: 944}, + {50: 937, 497: 937}, + {50: 945, 497: 945}, + {50: 938, 497: 938}, // 925 - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 494: 3252, 498: 3250, 3251, 3249, 3247, 520: 3360, 3357, 3359, 3358, 3354, 3356, 3355, 3352, 3353, 3351, 3361, 722: 3248, 3246, 792: 3350, 815: 3390}, - {130: 3380}, - {960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 463: 960, 960, 960, 960, 960, 469: 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 482: 960, 960, 960, 960, 960, 960, 960, 960, 960, 492: 960, 960, 960, 498: 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 535: 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 571: 960}, - {1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 463: 1234, 1234, 1234, 1234, 1234, 469: 1234, 1234, 1234, 1234, 3256, 1234, 1234, 1234, 1234, 1234, 1234, 482: 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 492: 1234, 1234, 1234, 498: 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 535: 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 571: 1234}, - {1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 463: 1244, 1244, 1244, 1244, 1244, 469: 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 482: 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 492: 1244, 1244, 1244, 498: 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 535: 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 571: 1244}, + {50: 946, 497: 946}, + {50: 939, 497: 939}, + {50: 942, 497: 942}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 497: 3259, 501: 3257, 3258, 3256, 3254, 523: 3367, 3364, 3366, 3365, 3361, 3363, 3362, 3359, 3360, 3358, 3368, 725: 3255, 3253, 795: 3357, 818: 3397}, + {130: 3387}, // 930 - {731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 498: 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 535: 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 558: 731, 566: 731, 571: 731, 574: 731, 576: 731, 630: 731, 731, 731, 731, 731, 731, 637: 731}, - {730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 498: 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 535: 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 558: 730, 566: 730, 571: 730, 574: 730, 576: 730, 630: 730, 730, 730, 730, 730, 730, 637: 730}, - {250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 498: 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 557: 250, 250, 566: 250, 571: 250, 574: 250, 576: 250, 630: 250, 250, 250, 250, 250, 250, 637: 250, 250, 641: 250, 646: 250, 250, 649: 250, 655: 250, 250}, - {249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 498: 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 557: 249, 249, 566: 249, 571: 249, 574: 249, 576: 249, 630: 249, 249, 249, 249, 249, 249, 637: 249, 249, 641: 249, 646: 249, 249, 649: 249, 655: 249, 249}, - {1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 463: 1901, 1901, 467: 1901, 469: 1901, 1901, 1901, 1901, 477: 1901, 1901, 1901, 482: 1901, 1901, 1901, 1901, 487: 1901, 1901, 1901, 1901, 492: 1901, 1901, 1901, 498: 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 511: 1901, 513: 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 533: 1901, 535: 1901, 722: 3248, 3246}, + {961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 466: 961, 961, 961, 961, 961, 472: 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 485: 961, 961, 961, 961, 961, 961, 961, 961, 961, 495: 961, 961, 961, 501: 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 538: 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 574: 961}, + {1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 466: 1235, 1235, 1235, 1235, 1235, 472: 1235, 1235, 1235, 1235, 3263, 1235, 1235, 1235, 1235, 1235, 1235, 485: 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 495: 1235, 1235, 1235, 501: 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 538: 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 574: 1235}, + {1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 466: 1245, 1245, 1245, 1245, 1245, 472: 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 485: 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 495: 1245, 1245, 1245, 501: 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 538: 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 574: 1245}, + {732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 501: 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 538: 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 561: 732, 569: 732, 574: 732, 577: 732, 579: 732, 633: 732, 732, 732, 732, 732, 732, 640: 732}, + {731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 501: 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 538: 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 561: 731, 569: 731, 574: 731, 577: 731, 579: 731, 633: 731, 731, 731, 731, 731, 731, 640: 731}, // 935 - {1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 463: 1902, 1902, 467: 1902, 469: 1902, 1902, 1902, 1902, 477: 1902, 1902, 1902, 482: 1902, 1902, 1902, 1902, 487: 1902, 1902, 1902, 1902, 492: 1902, 1902, 3252, 498: 1902, 3251, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 511: 1902, 513: 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 533: 1902, 535: 1902, 722: 3248, 3246}, - {1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 463: 1903, 1903, 467: 1903, 469: 1903, 1903, 1903, 1903, 477: 1903, 1903, 1903, 482: 1903, 1903, 1903, 1903, 487: 1903, 1903, 1903, 1903, 492: 1903, 1903, 3252, 498: 1903, 3251, 1903, 3247, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 511: 1903, 513: 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 533: 1903, 535: 1903, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3402}, - {50: 3403, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {144: 3264, 479: 3265, 728: 913, 870: 3404}, + {250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 501: 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 560: 250, 250, 569: 250, 574: 250, 577: 250, 579: 250, 633: 250, 250, 250, 250, 250, 250, 640: 250, 250, 644: 250, 649: 250, 250, 652: 250, 654: 250, 659: 250}, + {249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 501: 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 560: 249, 249, 569: 249, 574: 249, 577: 249, 579: 249, 633: 249, 249, 249, 249, 249, 249, 640: 249, 249, 644: 249, 649: 249, 249, 652: 249, 654: 249, 659: 249}, + {1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 466: 1905, 1905, 470: 1905, 472: 1905, 1905, 1905, 1905, 480: 1905, 1905, 1905, 485: 1905, 1905, 1905, 1905, 490: 1905, 1905, 1905, 1905, 495: 1905, 1905, 1905, 501: 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 514: 1905, 516: 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 536: 1905, 538: 1905, 725: 3255, 3253}, + {1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 466: 1906, 1906, 470: 1906, 472: 1906, 1906, 1906, 1906, 480: 1906, 1906, 1906, 485: 1906, 1906, 1906, 1906, 490: 1906, 1906, 1906, 1906, 495: 1906, 1906, 3259, 501: 1906, 3258, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 514: 1906, 516: 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 536: 1906, 538: 1906, 725: 3255, 3253}, + {1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 466: 1907, 1907, 470: 1907, 472: 1907, 1907, 1907, 1907, 480: 1907, 1907, 1907, 485: 1907, 1907, 1907, 1907, 490: 1907, 1907, 1907, 1907, 495: 1907, 1907, 3259, 501: 1907, 3258, 1907, 3254, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 514: 1907, 516: 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 536: 1907, 538: 1907, 725: 3255, 3253}, // 940 - {728: 3268, 735: 3405}, - {920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 463: 920, 920, 920, 920, 920, 469: 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 482: 920, 920, 920, 920, 920, 920, 920, 920, 920, 492: 920, 920, 920, 498: 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 535: 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 571: 920}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3407}, - {50: 3408, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {144: 3264, 479: 3265, 728: 913, 870: 3409}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3409}, + {50: 3410, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {144: 3271, 482: 3272, 731: 914, 873: 3411}, + {731: 3275, 738: 3412}, + {921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 466: 921, 921, 921, 921, 921, 472: 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 485: 921, 921, 921, 921, 921, 921, 921, 921, 921, 495: 921, 921, 921, 501: 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 538: 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 574: 921}, // 945 - {728: 3268, 735: 3410}, - {921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 463: 921, 921, 921, 921, 921, 469: 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 482: 921, 921, 921, 921, 921, 921, 921, 921, 921, 492: 921, 921, 921, 498: 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 535: 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 571: 921}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3412}, - {7: 3414, 50: 918, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246, 1074: 3413}, - {50: 3421}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3414}, + {50: 3415, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {144: 3271, 482: 3272, 731: 914, 873: 3416}, + {731: 3275, 738: 3417}, + {922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 466: 922, 922, 922, 922, 922, 472: 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 485: 922, 922, 922, 922, 922, 922, 922, 922, 922, 495: 922, 922, 922, 501: 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 538: 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 574: 922}, // 950 - {497: 3329, 562: 3331, 3330, 567: 3416, 805: 3415}, - {7: 3418, 50: 915, 1075: 3420}, - {7: 3418, 50: 915, 1075: 3417}, - {50: 916}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3419}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3419}, + {7: 3421, 50: 919, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253, 1077: 3420}, + {50: 3428}, + {500: 3336, 565: 3338, 3337, 570: 3423, 808: 3422}, + {7: 3425, 50: 916, 1078: 3427}, // 955 - {50: 914, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {7: 3425, 50: 916, 1078: 3424}, {50: 917}, - {144: 3264, 479: 3265, 728: 913, 870: 3422}, - {728: 3268, 735: 3423}, - {922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 463: 922, 922, 922, 922, 922, 469: 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 482: 922, 922, 922, 922, 922, 922, 922, 922, 922, 492: 922, 922, 922, 498: 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 535: 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 571: 922}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3426}, + {50: 915, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {50: 918}, // 960 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3425}, - {7: 3414, 50: 918, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246, 1074: 3426}, - {50: 3427}, - {144: 3264, 479: 3265, 728: 913, 870: 3428}, - {728: 3268, 735: 3429}, + {144: 3271, 482: 3272, 731: 914, 873: 3429}, + {731: 3275, 738: 3430}, + {923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 466: 923, 923, 923, 923, 923, 472: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 485: 923, 923, 923, 923, 923, 923, 923, 923, 923, 495: 923, 923, 923, 501: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 538: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 574: 923}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3432}, + {7: 3421, 50: 919, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253, 1077: 3433}, // 965 - {923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 463: 923, 923, 923, 923, 923, 469: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 482: 923, 923, 923, 923, 923, 923, 923, 923, 923, 492: 923, 923, 923, 498: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 535: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 571: 923}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3431, 3160, 3241, 3159, 3156}, - {50: 3432, 473: 3256, 571: 3257}, - {728: 3268, 735: 3433}, - {924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 463: 924, 924, 924, 924, 924, 469: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 482: 924, 924, 924, 924, 924, 924, 924, 924, 924, 492: 924, 924, 924, 498: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 535: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 571: 924}, + {50: 3434}, + {144: 3271, 482: 3272, 731: 914, 873: 3435}, + {731: 3275, 738: 3436}, + {924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 466: 924, 924, 924, 924, 924, 472: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 485: 924, 924, 924, 924, 924, 924, 924, 924, 924, 495: 924, 924, 924, 501: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 538: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 574: 924}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3438, 3167, 3248, 3166, 3163}, // 970 - {50: 3435}, - {728: 3268, 735: 3436}, - {925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 463: 925, 925, 925, 925, 925, 469: 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 482: 925, 925, 925, 925, 925, 925, 925, 925, 925, 492: 925, 925, 925, 498: 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 535: 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 571: 925}, - {50: 3438}, - {728: 3268, 735: 3439}, + {50: 3439, 476: 3263, 574: 3264}, + {731: 3275, 738: 3440}, + {925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 466: 925, 925, 925, 925, 925, 472: 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 485: 925, 925, 925, 925, 925, 925, 925, 925, 925, 495: 925, 925, 925, 501: 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 538: 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 574: 925}, + {50: 3442}, + {731: 3275, 738: 3443}, // 975 - {926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 463: 926, 926, 926, 926, 926, 469: 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 482: 926, 926, 926, 926, 926, 926, 926, 926, 926, 492: 926, 926, 926, 498: 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 535: 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 571: 926}, - {50: 3441}, - {728: 3268, 735: 3442}, - {927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 463: 927, 927, 927, 927, 927, 469: 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 482: 927, 927, 927, 927, 927, 927, 927, 927, 927, 492: 927, 927, 927, 498: 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 535: 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 571: 927}, - {50: 3444}, + {926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 466: 926, 926, 926, 926, 926, 472: 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 485: 926, 926, 926, 926, 926, 926, 926, 926, 926, 495: 926, 926, 926, 501: 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 538: 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 574: 926}, + {50: 3445}, + {731: 3275, 738: 3446}, + {927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 466: 927, 927, 927, 927, 927, 472: 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 485: 927, 927, 927, 927, 927, 927, 927, 927, 927, 495: 927, 927, 927, 501: 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 538: 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 574: 927}, + {50: 3448}, // 980 - {728: 3268, 735: 3445}, - {928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 463: 928, 928, 928, 928, 928, 469: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 482: 928, 928, 928, 928, 928, 928, 928, 928, 928, 492: 928, 928, 928, 498: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 535: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 571: 928}, - {50: 3447}, - {728: 3268, 735: 3448}, - {929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 463: 929, 929, 929, 929, 929, 469: 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 482: 929, 929, 929, 929, 929, 929, 929, 929, 929, 492: 929, 929, 929, 498: 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 535: 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 571: 929}, + {731: 3275, 738: 3449}, + {928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 466: 928, 928, 928, 928, 928, 472: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 485: 928, 928, 928, 928, 928, 928, 928, 928, 928, 495: 928, 928, 928, 501: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 538: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 574: 928}, + {50: 3451}, + {731: 3275, 738: 3452}, + {929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 466: 929, 929, 929, 929, 929, 472: 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 485: 929, 929, 929, 929, 929, 929, 929, 929, 929, 495: 929, 929, 929, 501: 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 538: 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 574: 929}, // 985 - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3456, 802: 3455}, - {2: 1217, 1217, 1217, 1217, 1217, 8: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 51: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 462: 1217, 464: 1217, 1217, 1217, 468: 1217, 471: 1217, 1217, 474: 1217, 1217, 1217, 481: 1217, 491: 1217, 495: 1217, 1217, 1217, 503: 1217, 512: 1217, 534: 1217, 555: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 567: 1217, 1217, 1217, 1217, 572: 1217, 1217, 575: 1217, 577: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 634: 1217, 636: 1217, 639: 1217, 733: 1217, 1217, 736: 1217, 1217, 1217, 750: 1217, 756: 1217, 1217, 1217}, - {2: 1216, 1216, 1216, 1216, 1216, 8: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 51: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 462: 1216, 464: 1216, 1216, 1216, 468: 1216, 471: 1216, 1216, 474: 1216, 1216, 1216, 481: 1216, 491: 1216, 495: 1216, 1216, 1216, 503: 1216, 512: 1216, 534: 1216, 555: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 567: 1216, 1216, 1216, 1216, 572: 1216, 1216, 575: 1216, 577: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 634: 1216, 636: 1216, 639: 1216, 733: 1216, 1216, 736: 1216, 1216, 1216, 750: 1216, 756: 1216, 1216, 1216}, - {2: 1215, 1215, 1215, 1215, 1215, 8: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 51: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 462: 1215, 464: 1215, 1215, 1215, 468: 1215, 471: 1215, 1215, 474: 1215, 1215, 1215, 481: 1215, 491: 1215, 495: 1215, 1215, 1215, 503: 1215, 512: 1215, 534: 1215, 555: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 567: 1215, 1215, 1215, 1215, 572: 1215, 1215, 575: 1215, 577: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 634: 1215, 636: 1215, 639: 1215, 733: 1215, 1215, 736: 1215, 1215, 1215, 750: 1215, 756: 1215, 1215, 1215}, - {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 462: 1214, 464: 1214, 1214, 1214, 468: 1214, 471: 1214, 1214, 474: 1214, 1214, 1214, 481: 1214, 491: 1214, 495: 1214, 1214, 1214, 534: 1214, 555: 1214, 1214, 1214, 559: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 567: 1214, 1214, 1214, 1214, 572: 1214, 1214, 575: 1214, 577: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 636: 1214, 639: 3461}, + {50: 3454}, + {731: 3275, 738: 3455}, + {930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 466: 930, 930, 930, 930, 930, 472: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 485: 930, 930, 930, 930, 930, 930, 930, 930, 930, 495: 930, 930, 930, 501: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 538: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 574: 930}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3463, 805: 3462}, + {2: 1218, 1218, 1218, 1218, 1218, 8: 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 51: 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 465: 1218, 467: 1218, 1218, 1218, 471: 1218, 474: 1218, 1218, 477: 1218, 1218, 1218, 484: 1218, 494: 1218, 498: 1218, 1218, 1218, 506: 1218, 515: 1218, 537: 1218, 558: 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 570: 1218, 1218, 1218, 1218, 575: 1218, 1218, 578: 1218, 580: 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 637: 1218, 639: 1218, 642: 1218, 736: 1218, 1218, 739: 1218, 1218, 1218, 753: 1218, 759: 1218, 1218, 1218}, // 990 - {2: 1212, 1212, 1212, 1212, 1212, 8: 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 51: 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 462: 1212, 464: 1212, 1212, 1212, 468: 1212, 471: 1212, 1212, 474: 1212, 1212, 1212, 481: 1212, 491: 1212, 495: 1212, 1212, 1212, 534: 1212, 555: 1212, 1212, 1212, 559: 1212, 1212, 1212, 1212, 1212, 1212, 1212, 567: 1212, 1212, 1212, 1212, 572: 1212, 1212, 575: 1212, 577: 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 636: 1212}, - {2: 1209, 1209, 1209, 1209, 1209, 8: 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 51: 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 462: 1209, 464: 1209, 1209, 1209, 468: 1209, 471: 1209, 1209, 474: 1209, 1209, 1209, 481: 1209, 491: 1209, 495: 1209, 1209, 1209, 534: 1209, 555: 1209, 1209, 1209, 559: 1209, 1209, 1209, 1209, 1209, 1209, 1209, 567: 1209, 1209, 1209, 1209, 572: 1209, 1209, 575: 1209, 577: 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 636: 1209}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3457}, - {50: 3458, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3459}, + {2: 1217, 1217, 1217, 1217, 1217, 8: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 51: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 465: 1217, 467: 1217, 1217, 1217, 471: 1217, 474: 1217, 1217, 477: 1217, 1217, 1217, 484: 1217, 494: 1217, 498: 1217, 1217, 1217, 506: 1217, 515: 1217, 537: 1217, 558: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 570: 1217, 1217, 1217, 1217, 575: 1217, 1217, 578: 1217, 580: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 637: 1217, 639: 1217, 642: 1217, 736: 1217, 1217, 739: 1217, 1217, 1217, 753: 1217, 759: 1217, 1217, 1217}, + {2: 1216, 1216, 1216, 1216, 1216, 8: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 51: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 465: 1216, 467: 1216, 1216, 1216, 471: 1216, 474: 1216, 1216, 477: 1216, 1216, 1216, 484: 1216, 494: 1216, 498: 1216, 1216, 1216, 506: 1216, 515: 1216, 537: 1216, 558: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 570: 1216, 1216, 1216, 1216, 575: 1216, 1216, 578: 1216, 580: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 637: 1216, 639: 1216, 642: 1216, 736: 1216, 1216, 739: 1216, 1216, 1216, 753: 1216, 759: 1216, 1216, 1216}, + {2: 1215, 1215, 1215, 1215, 1215, 8: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 51: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 465: 1215, 467: 1215, 1215, 1215, 471: 1215, 474: 1215, 1215, 477: 1215, 1215, 1215, 484: 1215, 494: 1215, 498: 1215, 1215, 1215, 537: 1215, 558: 1215, 1215, 1215, 562: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 570: 1215, 1215, 1215, 1215, 575: 1215, 1215, 578: 1215, 580: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 639: 1215, 642: 3468}, + {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 465: 1213, 467: 1213, 1213, 1213, 471: 1213, 474: 1213, 1213, 477: 1213, 1213, 1213, 484: 1213, 494: 1213, 498: 1213, 1213, 1213, 537: 1213, 558: 1213, 1213, 1213, 562: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 570: 1213, 1213, 1213, 1213, 575: 1213, 1213, 578: 1213, 580: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 639: 1213}, + {2: 1210, 1210, 1210, 1210, 1210, 8: 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 51: 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 465: 1210, 467: 1210, 1210, 1210, 471: 1210, 474: 1210, 1210, 477: 1210, 1210, 1210, 484: 1210, 494: 1210, 498: 1210, 1210, 1210, 537: 1210, 558: 1210, 1210, 1210, 562: 1210, 1210, 1210, 1210, 1210, 1210, 1210, 570: 1210, 1210, 1210, 1210, 575: 1210, 1210, 578: 1210, 580: 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 639: 1210}, // 995 - {1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 463: 1096, 1096, 1096, 1096, 1096, 469: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 482: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 492: 1096, 1096, 1096, 498: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 535: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 571: 1096}, - {933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 463: 933, 933, 933, 933, 933, 469: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 482: 933, 933, 933, 933, 933, 933, 933, 933, 933, 492: 933, 933, 933, 498: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 535: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 571: 933}, - {2: 1208, 1208, 1208, 1208, 1208, 8: 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 51: 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 462: 1208, 464: 1208, 1208, 1208, 468: 1208, 471: 1208, 1208, 474: 1208, 1208, 1208, 481: 1208, 491: 1208, 495: 1208, 1208, 1208, 534: 1208, 555: 1208, 1208, 1208, 559: 1208, 1208, 1208, 1208, 1208, 1208, 1208, 567: 1208, 1208, 1208, 1208, 572: 1208, 1208, 575: 1208, 577: 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 636: 1208}, - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3463, 802: 3455}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3464}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3464}, + {50: 3465, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3466}, + {1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 466: 1097, 1097, 1097, 1097, 1097, 472: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 485: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 495: 1097, 1097, 1097, 501: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 538: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 574: 1097}, + {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 466: 934, 934, 934, 934, 934, 472: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 485: 934, 934, 934, 934, 934, 934, 934, 934, 934, 495: 934, 934, 934, 501: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 538: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 574: 934}, // 1000 - {50: 3465, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3466}, - {1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 463: 1097, 1097, 1097, 1097, 1097, 469: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 482: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 492: 1097, 1097, 1097, 498: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 535: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 571: 1097}, - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3468, 802: 3455}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3469}, + {2: 1209, 1209, 1209, 1209, 1209, 8: 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 51: 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 465: 1209, 467: 1209, 1209, 1209, 471: 1209, 474: 1209, 1209, 477: 1209, 1209, 1209, 484: 1209, 494: 1209, 498: 1209, 1209, 1209, 537: 1209, 558: 1209, 1209, 1209, 562: 1209, 1209, 1209, 1209, 1209, 1209, 1209, 570: 1209, 1209, 1209, 1209, 575: 1209, 1209, 578: 1209, 580: 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 639: 1209}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3470, 805: 3462}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3471}, + {50: 3472, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3473}, // 1005 - {50: 3470, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3471}, - {1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 463: 1098, 1098, 1098, 1098, 1098, 469: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 482: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 492: 1098, 1098, 1098, 498: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 535: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 571: 1098}, - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3473, 802: 3455}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3474}, + {1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 466: 1098, 1098, 1098, 1098, 1098, 472: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 485: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 495: 1098, 1098, 1098, 501: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 538: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 574: 1098}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3475, 805: 3462}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3476}, + {50: 3477, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3478}, // 1010 - {50: 3475, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3476}, - {1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 463: 1099, 1099, 1099, 1099, 1099, 469: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 482: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 492: 1099, 1099, 1099, 498: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 535: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 571: 1099}, - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3478, 802: 3455}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3479}, + {1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 466: 1099, 1099, 1099, 1099, 1099, 472: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 485: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 495: 1099, 1099, 1099, 501: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 538: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 574: 1099}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3480, 805: 3462}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3481}, + {50: 3482, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3483}, // 1015 - {50: 3480, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3481}, - {1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 463: 1100, 1100, 1100, 1100, 1100, 469: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 482: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 492: 1100, 1100, 1100, 498: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 535: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 571: 1100}, - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3483, 802: 3455}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3484}, + {1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 466: 1100, 1100, 1100, 1100, 1100, 472: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 485: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 495: 1100, 1100, 1100, 501: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 538: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 574: 1100}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3485, 805: 3462}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3486}, + {50: 3487, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3488}, // 1020 - {50: 3485, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3486}, - {1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 463: 1101, 1101, 1101, 1101, 1101, 469: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 482: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 492: 1101, 1101, 1101, 498: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 535: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 571: 1101}, - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3488, 802: 3455}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3489}, + {1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 466: 1101, 1101, 1101, 1101, 1101, 472: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 485: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 495: 1101, 1101, 1101, 501: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 538: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 574: 1101}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3490, 805: 3462}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3491}, + {50: 3492, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3493}, // 1025 - {50: 3490, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3491}, - {1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 463: 1102, 1102, 1102, 1102, 1102, 469: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 482: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 492: 1102, 1102, 1102, 498: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 535: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 571: 1102}, - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3493, 802: 3455}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3495}, + {1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 466: 1102, 1102, 1102, 1102, 1102, 472: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 485: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 495: 1102, 1102, 1102, 501: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 538: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 574: 1102}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3495, 805: 3462}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3496}, + {50: 3497, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3498}, // 1030 - {1883, 1883, 7: 1883, 50: 1883, 124: 1883, 470: 1883, 490: 1883, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {7: 3496, 50: 1268, 124: 1268, 490: 2644, 754: 2645, 797: 3497}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3503}, - {50: 1089, 124: 3499, 1240: 3498}, - {50: 3501}, + {1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 466: 1103, 1103, 1103, 1103, 1103, 472: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 485: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 495: 1103, 1103, 1103, 501: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 538: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 574: 1103}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3500, 805: 3462}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3502}, + {1887, 1887, 7: 1887, 50: 1887, 125: 1887, 473: 1887, 493: 1887, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {7: 3503, 50: 1269, 125: 1269, 493: 2648, 757: 2649, 800: 3504}, // 1035 - {464: 3500}, - {50: 1088}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3502}, - {1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 463: 1103, 1103, 1103, 1103, 1103, 469: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 482: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 492: 1103, 1103, 1103, 498: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 535: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 571: 1103}, - {1882, 1882, 7: 1882, 50: 1882, 124: 1882, 470: 1882, 490: 1882, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3510}, + {50: 1090, 125: 3506, 1243: 3505}, + {50: 3508}, + {467: 3507}, + {50: 1089}, // 1040 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 512: 3508, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 639: 3507, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3505, 733: 3450, 3451, 770: 3506}, - {50: 3516, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3514}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3511}, - {50: 3509}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3509}, + {1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 466: 1104, 1104, 1104, 1104, 1104, 472: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 485: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 495: 1104, 1104, 1104, 501: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 538: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 574: 1104}, + {1886, 1886, 7: 1886, 50: 1886, 125: 1886, 473: 1886, 493: 1886, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 515: 3515, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 642: 3514, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3512, 736: 3457, 3458, 773: 3513}, + {50: 3523, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1045 - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3510}, - {1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 463: 1104, 1104, 1104, 1104, 1104, 469: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 482: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 492: 1104, 1104, 1104, 498: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 535: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 571: 1104}, - {50: 3512, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3513}, - {1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 463: 1106, 1106, 1106, 1106, 1106, 469: 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 482: 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 492: 1106, 1106, 1106, 498: 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 535: 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 571: 1106}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3521}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3518}, + {50: 3516}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3517}, + {1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 466: 1105, 1105, 1105, 1105, 1105, 472: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 485: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 495: 1105, 1105, 1105, 501: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 538: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 574: 1105}, // 1050 - {7: 3496, 50: 3515}, - {1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 463: 1107, 1107, 1107, 1107, 1107, 469: 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 482: 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 492: 1107, 1107, 1107, 498: 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 535: 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 571: 1107}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3517}, - {1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 463: 1105, 1105, 1105, 1105, 1105, 469: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 482: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 492: 1105, 1105, 1105, 498: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 535: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 571: 1105}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 639: 3520, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3519}, + {50: 3519, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3520}, + {1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 466: 1107, 1107, 1107, 1107, 1107, 472: 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 485: 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 495: 1107, 1107, 1107, 501: 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 538: 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 574: 1107}, + {7: 3503, 50: 3522}, + {1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 466: 1108, 1108, 1108, 1108, 1108, 472: 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 485: 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 495: 1108, 1108, 1108, 501: 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 538: 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 574: 1108}, // 1055 - {50: 3524, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3521}, - {50: 3522, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3523}, - {1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 463: 1108, 1108, 1108, 1108, 1108, 469: 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 482: 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 492: 1108, 1108, 1108, 498: 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 535: 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 571: 1108}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3524}, + {1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 466: 1106, 1106, 1106, 1106, 1106, 472: 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 485: 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 495: 1106, 1106, 1106, 501: 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 538: 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 574: 1106}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 642: 3527, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3526}, + {50: 3531, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3528}, // 1060 - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3525}, - {1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 463: 1109, 1109, 1109, 1109, 1109, 469: 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 482: 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 492: 1109, 1109, 1109, 498: 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 535: 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 571: 1109}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 639: 3528, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3527}, - {50: 3532, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3529}, + {50: 3529, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3530}, + {1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 466: 1109, 1109, 1109, 1109, 1109, 472: 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 485: 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 495: 1109, 1109, 1109, 501: 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 538: 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 574: 1109}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3532}, + {1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 466: 1110, 1110, 1110, 1110, 1110, 472: 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 485: 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 495: 1110, 1110, 1110, 501: 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 538: 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 574: 1110}, // 1065 - {50: 3530, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3531}, - {1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 463: 1110, 1110, 1110, 1110, 1110, 469: 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 482: 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 492: 1110, 1110, 1110, 498: 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 535: 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 571: 1110}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3533}, - {1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 463: 1111, 1111, 1111, 1111, 1111, 469: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 482: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 492: 1111, 1111, 1111, 498: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 535: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 571: 1111}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 642: 3535, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3534}, + {50: 3539, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3536}, + {50: 3537, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3538}, // 1070 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 639: 3536, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3535}, - {50: 3540, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3537}, - {50: 3538, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3539}, + {1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 466: 1111, 1111, 1111, 1111, 1111, 472: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 485: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 495: 1111, 1111, 1111, 501: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 538: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 574: 1111}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3540}, + {1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 466: 1112, 1112, 1112, 1112, 1112, 472: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 485: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 495: 1112, 1112, 1112, 501: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 538: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 574: 1112}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 642: 3543, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3542}, + {50: 3547, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1075 - {1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 463: 1112, 1112, 1112, 1112, 1112, 469: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 482: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 492: 1112, 1112, 1112, 498: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 535: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 571: 1112}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3541}, - {1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 463: 1113, 1113, 1113, 1113, 1113, 469: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 482: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 492: 1113, 1113, 1113, 498: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 535: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 571: 1113}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3543}, - {7: 3496, 50: 3544}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3544}, + {50: 3545, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3546}, + {1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 466: 1113, 1113, 1113, 1113, 1113, 472: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 485: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 495: 1113, 1113, 1113, 501: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 538: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 574: 1113}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3548}, // 1080 - {1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 463: 1114, 1114, 1114, 1114, 1114, 469: 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 482: 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 492: 1114, 1114, 1114, 498: 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 535: 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 571: 1114}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3546}, - {7: 3496, 50: 3547}, - {1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 463: 1115, 1115, 1115, 1115, 1115, 469: 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 482: 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 492: 1115, 1115, 1115, 498: 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 535: 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 571: 1115}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3549}, + {1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 466: 1114, 1114, 1114, 1114, 1114, 472: 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 485: 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 495: 1114, 1114, 1114, 501: 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 538: 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 574: 1114}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3550}, + {7: 3503, 50: 3551}, + {1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 466: 1115, 1115, 1115, 1115, 1115, 472: 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 485: 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 495: 1115, 1115, 1115, 501: 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 538: 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 574: 1115}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3553}, // 1085 - {7: 3550, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3551}, - {7: 3552, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3553}, - {50: 3554, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {7: 3503, 50: 3554}, + {1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 466: 1116, 1116, 1116, 1116, 1116, 472: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 485: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 495: 1116, 1116, 1116, 501: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 538: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 574: 1116}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3556}, + {7: 3557, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3558}, // 1090 - {1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 463: 1131, 1131, 1131, 1131, 1131, 469: 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 482: 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 492: 1131, 1131, 1131, 498: 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 535: 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 571: 1131}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3556, 1162: 3558, 1217: 3559, 1301: 3560, 3557}, - {50: 3568, 487: 3569, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 487: 3562, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3561}, - {2: 1122, 1122, 1122, 1122, 1122, 8: 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 51: 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 462: 1122, 464: 1122, 1122, 1122, 468: 1122, 471: 1122, 1122, 474: 1122, 1122, 1122, 481: 1122, 487: 1122, 491: 1122, 495: 1122, 1122, 1122, 534: 1122, 555: 1122, 1122, 1122, 559: 1122, 1122, 1122, 1122, 1122, 1122, 1122, 567: 1122, 1122, 1122, 1122, 572: 1122, 1122, 575: 1122, 577: 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 636: 1122}, + {7: 3559, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3560}, + {50: 3561, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 466: 1132, 1132, 1132, 1132, 1132, 472: 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 485: 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 495: 1132, 1132, 1132, 501: 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 538: 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 574: 1132}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3563, 1165: 3565, 1220: 3566, 1304: 3567, 3564}, // 1095 - {2: 1121, 1121, 1121, 1121, 1121, 8: 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 51: 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 462: 1121, 464: 1121, 1121, 1121, 468: 1121, 471: 1121, 1121, 474: 1121, 1121, 1121, 481: 1121, 487: 1121, 491: 1121, 495: 1121, 1121, 1121, 534: 1121, 555: 1121, 1121, 1121, 559: 1121, 1121, 1121, 1121, 1121, 1121, 1121, 567: 1121, 1121, 1121, 1121, 572: 1121, 1121, 575: 1121, 577: 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 636: 1121}, - {2: 1120, 1120, 1120, 1120, 1120, 8: 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 51: 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 462: 1120, 464: 1120, 1120, 1120, 468: 1120, 471: 1120, 1120, 474: 1120, 1120, 1120, 481: 1120, 487: 1120, 491: 1120, 495: 1120, 1120, 1120, 534: 1120, 555: 1120, 1120, 1120, 559: 1120, 1120, 1120, 1120, 1120, 1120, 1120, 567: 1120, 1120, 1120, 1120, 572: 1120, 1120, 575: 1120, 577: 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 636: 1120}, - {487: 3565, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3563}, - {50: 3564, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {50: 3575, 490: 3576, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 490: 3569, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3568}, + {2: 1123, 1123, 1123, 1123, 1123, 8: 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 51: 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 465: 1123, 467: 1123, 1123, 1123, 471: 1123, 474: 1123, 1123, 477: 1123, 1123, 1123, 484: 1123, 490: 1123, 494: 1123, 498: 1123, 1123, 1123, 537: 1123, 558: 1123, 1123, 1123, 562: 1123, 1123, 1123, 1123, 1123, 1123, 1123, 570: 1123, 1123, 1123, 1123, 575: 1123, 1123, 578: 1123, 580: 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 639: 1123}, + {2: 1122, 1122, 1122, 1122, 1122, 8: 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 51: 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 465: 1122, 467: 1122, 1122, 1122, 471: 1122, 474: 1122, 1122, 477: 1122, 1122, 1122, 484: 1122, 490: 1122, 494: 1122, 498: 1122, 1122, 1122, 537: 1122, 558: 1122, 1122, 1122, 562: 1122, 1122, 1122, 1122, 1122, 1122, 1122, 570: 1122, 1122, 1122, 1122, 575: 1122, 1122, 578: 1122, 580: 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 639: 1122}, + {2: 1121, 1121, 1121, 1121, 1121, 8: 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 51: 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 465: 1121, 467: 1121, 1121, 1121, 471: 1121, 474: 1121, 1121, 477: 1121, 1121, 1121, 484: 1121, 490: 1121, 494: 1121, 498: 1121, 1121, 1121, 537: 1121, 558: 1121, 1121, 1121, 562: 1121, 1121, 1121, 1121, 1121, 1121, 1121, 570: 1121, 1121, 1121, 1121, 575: 1121, 1121, 578: 1121, 580: 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 639: 1121}, // 1100 - {1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 463: 1137, 1137, 1137, 1137, 1137, 469: 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 482: 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 492: 1137, 1137, 1137, 498: 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 535: 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 571: 1137}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3566}, - {50: 3567, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 463: 1136, 1136, 1136, 1136, 1136, 469: 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 482: 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 492: 1136, 1136, 1136, 498: 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 535: 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 571: 1136}, - {1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 463: 1139, 1139, 1139, 1139, 1139, 469: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 482: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 492: 1139, 1139, 1139, 498: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 535: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 571: 1139}, + {490: 3572, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3570}, + {50: 3571, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 466: 1138, 1138, 1138, 1138, 1138, 472: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 485: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 495: 1138, 1138, 1138, 501: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 538: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 574: 1138}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3573}, // 1105 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3570}, - {50: 3571, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 463: 1138, 1138, 1138, 1138, 1138, 469: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 482: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 492: 1138, 1138, 1138, 498: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 535: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 571: 1138}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3573}, - {7: 3574, 487: 3575, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {50: 3574, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 466: 1137, 1137, 1137, 1137, 1137, 472: 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 485: 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 495: 1137, 1137, 1137, 501: 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 538: 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 574: 1137}, + {1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 466: 1140, 1140, 1140, 1140, 1140, 472: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 485: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 495: 1140, 1140, 1140, 501: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 538: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 574: 1140}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3577}, + {50: 3578, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1110 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3581}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3576}, - {50: 3577, 482: 3578, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 463: 1144, 1144, 1144, 1144, 1144, 469: 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 482: 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 492: 1144, 1144, 1144, 498: 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 535: 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 571: 1144}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3579}, + {1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 466: 1139, 1139, 1139, 1139, 1139, 472: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 485: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 495: 1139, 1139, 1139, 501: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 538: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 574: 1139}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3580}, + {7: 3581, 490: 3582, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3588}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3583}, // 1115 - {50: 3580, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 463: 1142, 1142, 1142, 1142, 1142, 469: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 482: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 492: 1142, 1142, 1142, 498: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 535: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 571: 1142}, - {7: 3583, 50: 3582, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 463: 1145, 1145, 1145, 1145, 1145, 469: 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 482: 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 492: 1145, 1145, 1145, 498: 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 535: 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 571: 1145}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3584}, + {50: 3584, 485: 3585, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 466: 1145, 1145, 1145, 1145, 1145, 472: 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 485: 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 495: 1145, 1145, 1145, 501: 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 538: 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 574: 1145}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3586}, + {50: 3587, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 466: 1143, 1143, 1143, 1143, 1143, 472: 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 485: 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 495: 1143, 1143, 1143, 501: 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 538: 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 574: 1143}, // 1120 - {50: 3585, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 463: 1143, 1143, 1143, 1143, 1143, 469: 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 482: 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 492: 1143, 1143, 1143, 498: 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 535: 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 571: 1143}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3587}, - {474: 3593, 3592, 3598, 512: 3594, 532: 3600, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3620}, + {7: 3590, 50: 3589, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 466: 1146, 1146, 1146, 1146, 1146, 472: 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 485: 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 495: 1146, 1146, 1146, 501: 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 538: 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 574: 1146}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3591}, + {50: 3592, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 466: 1144, 1144, 1144, 1144, 1144, 472: 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 485: 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 495: 1144, 1144, 1144, 501: 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 538: 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 574: 1144}, // 1125 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3619}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3618}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3617}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3614, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3613}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3610, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3609}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3594}, + {477: 3600, 3599, 3605, 515: 3601, 535: 3607, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3627}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3626}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3625}, // 1130 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3608}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3607}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3606}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3605}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3604}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3624}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3621, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3620}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3617, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3616}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3615}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3614}, // 1135 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3603}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3601}, - {50: 3602, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 463: 1146, 1146, 1146, 1146, 1146, 469: 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 482: 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 492: 1146, 1146, 1146, 498: 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 535: 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 571: 1146}, - {1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 463: 1253, 1253, 1253, 1253, 1253, 469: 1253, 1253, 1253, 1253, 474: 1253, 1253, 1253, 1253, 1253, 1253, 482: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 492: 1253, 1253, 1253, 498: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 535: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3613}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3612}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3611}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3610}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3608}, // 1140 - {1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 463: 1254, 1254, 1254, 1254, 1254, 469: 1254, 1254, 1254, 1254, 474: 1254, 1254, 1254, 1254, 1254, 1254, 482: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 492: 1254, 1254, 1254, 498: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 535: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 3599, 1254, 1254, 1254, 1254, 1254, 1254}, - {1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 463: 1255, 1255, 1255, 1255, 1255, 469: 1255, 1255, 1255, 1255, 474: 1255, 1255, 1255, 1255, 1255, 1255, 482: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 492: 1255, 1255, 1255, 498: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 535: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 3599, 1255, 1255, 1255, 1255, 1255, 1255}, - {1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 463: 1256, 1256, 1256, 1256, 1256, 469: 1256, 1256, 1256, 1256, 474: 1256, 1256, 1256, 1256, 1256, 1256, 482: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 492: 1256, 1256, 1256, 498: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 535: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 3599, 1256, 1256, 1256, 1256, 1256, 1256}, - {1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 463: 1257, 1257, 1257, 1257, 1257, 469: 1257, 1257, 1257, 1257, 474: 1257, 1257, 1257, 1257, 1257, 1257, 482: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 492: 1257, 1257, 1257, 498: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 535: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 3599, 1257, 1257, 1257, 1257, 1257, 1257}, - {1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 463: 1258, 1258, 1258, 1258, 1258, 469: 1258, 1258, 1258, 1258, 474: 1258, 1258, 1258, 1258, 1258, 1258, 482: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 492: 1258, 1258, 1258, 498: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 535: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 3599, 1258, 1258, 1258, 1258, 1258, 1258}, + {50: 3609, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 466: 1147, 1147, 1147, 1147, 1147, 472: 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 485: 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 495: 1147, 1147, 1147, 501: 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 538: 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 574: 1147}, + {1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 466: 1254, 1254, 1254, 1254, 1254, 472: 1254, 1254, 1254, 1254, 477: 1254, 1254, 1254, 1254, 1254, 1254, 485: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 495: 1254, 1254, 1254, 501: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 538: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254}, + {1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 466: 1255, 1255, 1255, 1255, 1255, 472: 1255, 1255, 1255, 1255, 477: 1255, 1255, 1255, 1255, 1255, 1255, 485: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 495: 1255, 1255, 1255, 501: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 538: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 3606, 1255, 1255, 1255, 1255, 1255, 1255}, + {1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 466: 1256, 1256, 1256, 1256, 1256, 472: 1256, 1256, 1256, 1256, 477: 1256, 1256, 1256, 1256, 1256, 1256, 485: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 495: 1256, 1256, 1256, 501: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 538: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 3606, 1256, 1256, 1256, 1256, 1256, 1256}, // 1145 - {1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 463: 1261, 1261, 1261, 1261, 1261, 469: 1261, 1261, 1261, 1261, 474: 1261, 1261, 3598, 1261, 1261, 1261, 482: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 492: 1261, 1261, 1261, 498: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 3594, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 535: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 3595, 3596, 1261, 3599, 1261, 3597, 1261, 1261, 1261, 1261}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 1198, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3611}, - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 494: 3252, 498: 3250, 3251, 3249, 3247, 520: 3360, 3357, 3359, 3358, 3354, 3356, 3355, 3352, 3353, 3351, 3361, 722: 3248, 3246, 792: 3350, 815: 3612}, - {1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 463: 1259, 1259, 1259, 1259, 1259, 469: 1259, 1259, 1259, 1259, 474: 1259, 1259, 1259, 1259, 1259, 1259, 482: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 492: 1259, 1259, 1259, 498: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 535: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259}, - {1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 463: 1262, 1262, 1262, 1262, 1262, 469: 1262, 1262, 1262, 1262, 474: 1262, 1262, 3598, 1262, 1262, 1262, 482: 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 492: 1262, 1262, 1262, 498: 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 3594, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 535: 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 3595, 3596, 1262, 3599, 1262, 3597, 1262, 1262, 1262, 1262}, + {1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 466: 1257, 1257, 1257, 1257, 1257, 472: 1257, 1257, 1257, 1257, 477: 1257, 1257, 1257, 1257, 1257, 1257, 485: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 495: 1257, 1257, 1257, 501: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 538: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 3606, 1257, 1257, 1257, 1257, 1257, 1257}, + {1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 466: 1258, 1258, 1258, 1258, 1258, 472: 1258, 1258, 1258, 1258, 477: 1258, 1258, 1258, 1258, 1258, 1258, 485: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 495: 1258, 1258, 1258, 501: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 538: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 3606, 1258, 1258, 1258, 1258, 1258, 1258}, + {1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 466: 1259, 1259, 1259, 1259, 1259, 472: 1259, 1259, 1259, 1259, 477: 1259, 1259, 1259, 1259, 1259, 1259, 485: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 495: 1259, 1259, 1259, 501: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 538: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 3606, 1259, 1259, 1259, 1259, 1259, 1259}, + {1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 466: 1262, 1262, 1262, 1262, 1262, 472: 1262, 1262, 1262, 1262, 477: 1262, 1262, 3605, 1262, 1262, 1262, 485: 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 495: 1262, 1262, 1262, 501: 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 3601, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 538: 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 3602, 3603, 1262, 3606, 1262, 3604, 1262, 1262, 1262, 1262}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 1199, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3618}, // 1150 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 1198, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3615}, - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 494: 3252, 498: 3250, 3251, 3249, 3247, 520: 3360, 3357, 3359, 3358, 3354, 3356, 3355, 3352, 3353, 3351, 3361, 722: 3248, 3246, 792: 3350, 815: 3616}, - {1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 463: 1260, 1260, 1260, 1260, 1260, 469: 1260, 1260, 1260, 1260, 474: 1260, 1260, 1260, 1260, 1260, 1260, 482: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 492: 1260, 1260, 1260, 498: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 535: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260}, - {1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 463: 1263, 1263, 1263, 1263, 1263, 469: 1263, 1263, 1263, 1263, 474: 3593, 3592, 3598, 1263, 1263, 1263, 482: 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 492: 1263, 1263, 1263, 498: 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 3594, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 535: 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 3595, 3596, 1263, 3599, 1263, 3597, 1263, 1263, 1263, 1263}, - {1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 463: 1264, 1264, 1264, 1264, 1264, 469: 1264, 1264, 1264, 1264, 474: 3593, 3592, 3598, 1264, 1264, 1264, 482: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 492: 1264, 1264, 1264, 498: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 3594, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 535: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 3595, 3596, 1264, 3599, 1264, 3597, 1264, 1264, 1264, 1264}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 497: 3259, 501: 3257, 3258, 3256, 3254, 523: 3367, 3364, 3366, 3365, 3361, 3363, 3362, 3359, 3360, 3358, 3368, 725: 3255, 3253, 795: 3357, 818: 3619}, + {1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 466: 1260, 1260, 1260, 1260, 1260, 472: 1260, 1260, 1260, 1260, 477: 1260, 1260, 1260, 1260, 1260, 1260, 485: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 495: 1260, 1260, 1260, 501: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 538: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260}, + {1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 466: 1263, 1263, 1263, 1263, 1263, 472: 1263, 1263, 1263, 1263, 477: 1263, 1263, 3605, 1263, 1263, 1263, 485: 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 495: 1263, 1263, 1263, 501: 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 3601, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 538: 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 3602, 3603, 1263, 3606, 1263, 3604, 1263, 1263, 1263, 1263}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 1199, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3622}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 497: 3259, 501: 3257, 3258, 3256, 3254, 523: 3367, 3364, 3366, 3365, 3361, 3363, 3362, 3359, 3360, 3358, 3368, 725: 3255, 3253, 795: 3357, 818: 3623}, // 1155 - {1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 463: 1265, 1265, 1265, 1265, 1265, 469: 1265, 1265, 1265, 1265, 474: 3593, 3592, 3598, 1265, 1265, 1265, 482: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 492: 1265, 1265, 1265, 498: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 3594, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 535: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 3595, 3596, 1265, 3599, 1265, 3597, 3590, 3591, 1265, 1265}, - {1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 463: 1266, 1266, 1266, 1266, 1266, 469: 1266, 1266, 1266, 1266, 474: 3593, 3592, 3598, 1266, 1266, 1266, 482: 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 492: 1266, 1266, 1266, 498: 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 3594, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 535: 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 3595, 3596, 3589, 3599, 1266, 3597, 3590, 3591, 1266, 1266}, - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 520: 3360, 3357, 3359, 3358, 3354, 3356, 3355, 3352, 3353, 3351, 3361, 792: 3350, 815: 3622}, - {487: 3623}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3624}, + {1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 466: 1261, 1261, 1261, 1261, 1261, 472: 1261, 1261, 1261, 1261, 477: 1261, 1261, 1261, 1261, 1261, 1261, 485: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 495: 1261, 1261, 1261, 501: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 538: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261}, + {1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 466: 1264, 1264, 1264, 1264, 1264, 472: 1264, 1264, 1264, 1264, 477: 3600, 3599, 3605, 1264, 1264, 1264, 485: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 495: 1264, 1264, 1264, 501: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 3601, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 538: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 3602, 3603, 1264, 3606, 1264, 3604, 1264, 1264, 1264, 1264}, + {1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 466: 1265, 1265, 1265, 1265, 1265, 472: 1265, 1265, 1265, 1265, 477: 3600, 3599, 3605, 1265, 1265, 1265, 485: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 495: 1265, 1265, 1265, 501: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 3601, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 538: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 3602, 3603, 1265, 3606, 1265, 3604, 1265, 1265, 1265, 1265}, + {1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 466: 1266, 1266, 1266, 1266, 1266, 472: 1266, 1266, 1266, 1266, 477: 3600, 3599, 3605, 1266, 1266, 1266, 485: 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 495: 1266, 1266, 1266, 501: 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 3601, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 538: 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 3602, 3603, 1266, 3606, 1266, 3604, 3597, 3598, 1266, 1266}, + {1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 466: 1267, 1267, 1267, 1267, 1267, 472: 1267, 1267, 1267, 1267, 477: 3600, 3599, 3605, 1267, 1267, 1267, 485: 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 495: 1267, 1267, 1267, 501: 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 3601, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 538: 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 3602, 3603, 3596, 3606, 1267, 3604, 3597, 3598, 1267, 1267}, // 1160 - {50: 3625, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 463: 1148, 1148, 1148, 1148, 1148, 469: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 482: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 492: 1148, 1148, 1148, 498: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 535: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 571: 1148}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3627}, - {7: 3628, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {570: 3629}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 523: 3367, 3364, 3366, 3365, 3361, 3363, 3362, 3359, 3360, 3358, 3368, 795: 3357, 818: 3629}, + {490: 3630}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3631}, + {50: 3632, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 466: 1149, 1149, 1149, 1149, 1149, 472: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 485: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 495: 1149, 1149, 1149, 501: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 538: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 574: 1149}, // 1165 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3630}, - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 494: 3252, 498: 3250, 3251, 3249, 3247, 520: 3360, 3357, 3359, 3358, 3354, 3356, 3355, 3352, 3353, 3351, 3361, 722: 3248, 3246, 792: 3350, 815: 3631}, - {50: 3632}, - {1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 463: 1149, 1149, 1149, 1149, 1149, 469: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 482: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 492: 1149, 1149, 1149, 498: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 535: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 571: 1149}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3634}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3634}, + {7: 3635, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {573: 3636}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3637}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 497: 3259, 501: 3257, 3258, 3256, 3254, 523: 3367, 3364, 3366, 3365, 3361, 3363, 3362, 3359, 3360, 3358, 3368, 725: 3255, 3253, 795: 3357, 818: 3638}, // 1170 - {7: 3635, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3637, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3636}, - {50: 3641, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 1198, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3638}, - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 494: 3252, 498: 3250, 3251, 3249, 3247, 520: 3360, 3357, 3359, 3358, 3354, 3356, 3355, 3352, 3353, 3351, 3361, 722: 3248, 3246, 792: 3350, 815: 3639}, + {50: 3639}, + {1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 466: 1150, 1150, 1150, 1150, 1150, 472: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 485: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 495: 1150, 1150, 1150, 501: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 538: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 574: 1150}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3641}, + {7: 3642, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3644, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3643}, // 1175 - {50: 3640}, - {1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 463: 1150, 1150, 1150, 1150, 1150, 469: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 482: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 492: 1150, 1150, 1150, 498: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 535: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 571: 1150}, - {1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 463: 1151, 1151, 1151, 1151, 1151, 469: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 482: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 492: 1151, 1151, 1151, 498: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 535: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 571: 1151}, - {50: 1877, 497: 3644, 1032: 3643, 3645}, - {50: 1876}, + {50: 3648, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 1199, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3645}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 497: 3259, 501: 3257, 3258, 3256, 3254, 523: 3367, 3364, 3366, 3365, 3361, 3363, 3362, 3359, 3360, 3358, 3368, 725: 3255, 3253, 795: 3357, 818: 3646}, + {50: 3647}, + {1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 466: 1151, 1151, 1151, 1151, 1151, 472: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 485: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 495: 1151, 1151, 1151, 501: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 538: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 574: 1151}, // 1180 - {50: 1875}, - {50: 3646}, - {1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 463: 1152, 1152, 1152, 1152, 1152, 469: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 482: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 492: 1152, 1152, 1152, 498: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 535: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 571: 1152}, - {50: 1877, 497: 3644, 1032: 3643, 3648}, - {50: 3649}, + {1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 466: 1152, 1152, 1152, 1152, 1152, 472: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 485: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 495: 1152, 1152, 1152, 501: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 538: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 574: 1152}, + {50: 1881, 500: 3651, 1035: 3650, 3652}, + {50: 1880}, + {50: 1879}, + {50: 3653}, // 1185 - {1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 463: 1153, 1153, 1153, 1153, 1153, 469: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 482: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 492: 1153, 1153, 1153, 498: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 535: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 571: 1153}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3651}, - {7: 3652, 474: 3593, 3592, 3598, 512: 3594, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 3653}, - {50: 3654, 474: 3593, 3592, 3598, 512: 3594, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591}, + {1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 466: 1153, 1153, 1153, 1153, 1153, 472: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 485: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 495: 1153, 1153, 1153, 501: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 538: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 574: 1153}, + {50: 1881, 500: 3651, 1035: 3650, 3655}, + {50: 3656}, + {1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 466: 1154, 1154, 1154, 1154, 1154, 472: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 485: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 495: 1154, 1154, 1154, 501: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 538: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 574: 1154}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3658}, // 1190 - {1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 463: 1155, 1155, 1155, 1155, 1155, 469: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 482: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 492: 1155, 1155, 1155, 498: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 535: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 571: 1155}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1879, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3656, 811: 3657}, - {7: 3496, 50: 1878}, - {50: 3658}, - {1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 463: 1156, 1156, 1156, 1156, 1156, 469: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 482: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 492: 1156, 1156, 1156, 498: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 535: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 571: 1156}, + {7: 3659, 477: 3600, 3599, 3605, 515: 3601, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 3660}, + {50: 3661, 477: 3600, 3599, 3605, 515: 3601, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598}, + {1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 466: 1156, 1156, 1156, 1156, 1156, 472: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 485: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 495: 1156, 1156, 1156, 501: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 538: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 574: 1156}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1883, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3663, 814: 3664}, // 1195 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3660}, - {7: 3496, 50: 3661, 470: 3662}, - {1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 463: 1161, 1161, 1161, 1161, 1161, 469: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 482: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 492: 1161, 1161, 1161, 498: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 535: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 571: 1161}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 3663}, - {50: 3666}, + {7: 3503, 50: 1882}, + {50: 3665}, + {1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 466: 1157, 1157, 1157, 1157, 1157, 472: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 485: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 495: 1157, 1157, 1157, 501: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 538: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 574: 1157}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3667}, + {7: 3503, 50: 3668, 473: 3669}, // 1200 - {733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 50: 733, 98: 733, 107: 733, 461: 733, 733, 733, 465: 733, 733, 733, 733, 733, 473: 733, 479: 733, 733, 733, 491: 733, 733, 733, 495: 733, 733, 534: 733, 558: 733, 566: 733, 574: 733, 576: 733, 630: 733, 733, 733, 733, 733, 733, 637: 733, 646: 733}, - {732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 50: 732, 98: 732, 107: 732, 461: 732, 732, 732, 465: 732, 732, 732, 732, 732, 473: 732, 479: 732, 732, 732, 491: 732, 732, 732, 495: 732, 732, 534: 732, 558: 732, 566: 732, 574: 732, 576: 732, 630: 732, 732, 732, 732, 732, 732, 637: 732, 646: 732}, - {1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 463: 1160, 1160, 1160, 1160, 1160, 469: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 482: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 492: 1160, 1160, 1160, 498: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 535: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 571: 1160}, - {1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 463: 1162, 1162, 1162, 1162, 1162, 469: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 482: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 492: 1162, 1162, 1162, 498: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 535: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 571: 1162}, - {50: 3669, 497: 3670}, - // 1205 - {1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 463: 1084, 1084, 1084, 1084, 1084, 469: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 482: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 492: 1084, 1084, 1084, 498: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 535: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 571: 1084}, - {50: 3671}, - {1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 463: 1083, 1083, 1083, 1083, 1083, 469: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 482: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 492: 1083, 1083, 1083, 498: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 535: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 571: 1083}, + {1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 466: 1162, 1162, 1162, 1162, 1162, 472: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 485: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 495: 1162, 1162, 1162, 501: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 538: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 574: 1162}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 3670}, {50: 3673}, - {1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 463: 1163, 1163, 1163, 1163, 1163, 469: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 482: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 492: 1163, 1163, 1163, 498: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 535: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 571: 1163}, + {734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 50: 734, 98: 734, 107: 734, 464: 734, 734, 734, 468: 734, 734, 734, 734, 734, 476: 734, 482: 734, 734, 734, 494: 734, 734, 734, 498: 734, 734, 537: 734, 561: 734, 569: 734, 577: 734, 579: 734, 633: 734, 734, 734, 734, 734, 734, 640: 734, 649: 734}, + {733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 50: 733, 98: 733, 107: 733, 464: 733, 733, 733, 468: 733, 733, 733, 733, 733, 476: 733, 482: 733, 733, 733, 494: 733, 733, 733, 498: 733, 733, 537: 733, 561: 733, 569: 733, 577: 733, 579: 733, 633: 733, 733, 733, 733, 733, 733, 640: 733, 649: 733}, + // 1205 + {1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 466: 1161, 1161, 1161, 1161, 1161, 472: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 485: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 495: 1161, 1161, 1161, 501: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 538: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 574: 1161}, + {1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 466: 1163, 1163, 1163, 1163, 1163, 472: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 485: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 495: 1163, 1163, 1163, 501: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 538: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 574: 1163}, + {50: 3676, 500: 3677}, + {1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 466: 1085, 1085, 1085, 1085, 1085, 472: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 485: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 495: 1085, 1085, 1085, 501: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 538: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 574: 1085}, + {50: 3678}, // 1210 - {50: 3676}, - {1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 463: 1164, 1164, 1164, 1164, 1164, 469: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 482: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 492: 1164, 1164, 1164, 498: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 535: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 571: 1164}, - {1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 463: 1177, 1177, 1177, 1177, 1177, 469: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 482: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 492: 1177, 1177, 1177, 498: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 535: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 571: 1177, 638: 1177, 649: 1177, 656: 1177}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1879, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3656, 811: 3678}, - {50: 3679}, + {1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 466: 1084, 1084, 1084, 1084, 1084, 472: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 485: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 495: 1084, 1084, 1084, 501: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 538: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 574: 1084}, + {50: 3680}, + {1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 466: 1164, 1164, 1164, 1164, 1164, 472: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 485: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 495: 1164, 1164, 1164, 501: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 538: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 574: 1164}, + {50: 3683}, + {1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 466: 1165, 1165, 1165, 1165, 1165, 472: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 485: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 495: 1165, 1165, 1165, 501: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 538: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 574: 1165}, // 1215 - {1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 463: 1165, 1165, 1165, 1165, 1165, 469: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 482: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 492: 1165, 1165, 1165, 498: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 535: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 571: 1165}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1879, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3656, 811: 3681}, - {50: 3682}, - {1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 463: 1166, 1166, 1166, 1166, 1166, 469: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 482: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 492: 1166, 1166, 1166, 498: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 535: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 571: 1166}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3684, 2681, 2682, 2680, 699: 3685}, - // 1220 - {50: 1251, 486: 1251, 640: 3687}, + {1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 466: 1178, 1178, 1178, 1178, 1178, 472: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 485: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 495: 1178, 1178, 1178, 501: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 538: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 574: 1178, 641: 1178, 652: 1178, 659: 1178}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1883, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3663, 814: 3685}, {50: 3686}, - {1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 463: 1220, 1220, 1220, 1220, 1220, 469: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 482: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 492: 1220, 1220, 1220, 498: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 535: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 571: 1220}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3688, 2681, 2682, 2680}, - {50: 1250, 486: 1250, 640: 3689}, - // 1225 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3690, 2681, 2682, 2680}, - {1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 463: 1249, 1249, 1249, 1249, 1249, 469: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 482: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 492: 1249, 1249, 1249, 498: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 535: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 571: 1249, 643: 1249, 1249}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3684, 2681, 2682, 2680, 699: 3692}, + {1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 466: 1166, 1166, 1166, 1166, 1166, 472: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 485: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 495: 1166, 1166, 1166, 501: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 538: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 574: 1166}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1883, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3663, 814: 3688}, + // 1220 + {50: 3689}, + {1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 466: 1167, 1167, 1167, 1167, 1167, 472: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 485: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 495: 1167, 1167, 1167, 501: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 538: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 574: 1167}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3691, 2685, 2686, 2684, 702: 3692}, + {50: 1252, 489: 1252, 643: 3694}, {50: 3693}, - {1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 463: 1221, 1221, 1221, 1221, 1221, 469: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 482: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 492: 1221, 1221, 1221, 498: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 535: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 571: 1221}, + // 1225 + {1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 466: 1221, 1221, 1221, 1221, 1221, 472: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 485: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 495: 1221, 1221, 1221, 501: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 538: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 574: 1221}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3695, 2685, 2686, 2684}, + {50: 1251, 489: 1251, 643: 3696}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3697, 2685, 2686, 2684}, + {1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 466: 1250, 1250, 1250, 1250, 1250, 472: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 485: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 495: 1250, 1250, 1250, 501: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 538: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 574: 1250, 646: 1250, 1250}, // 1230 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3695}, - {7: 3696, 470: 3697, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {48: 3708, 105: 3704, 171: 3705, 3703, 177: 3710, 192: 3707, 495: 3715, 534: 3701, 635: 3714, 668: 3706, 3711, 3712, 673: 3713, 727: 3709, 886: 3702, 980: 3700}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 3698}, - {50: 3699}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3691, 2685, 2686, 2684, 702: 3699}, + {50: 3700}, + {1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 466: 1222, 1222, 1222, 1222, 1222, 472: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 485: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 495: 1222, 1222, 1222, 501: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 538: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 574: 1222}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3702}, + {7: 3703, 473: 3704, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1235 - {1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 463: 1222, 1222, 1222, 1222, 1222, 469: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 482: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 492: 1222, 1222, 1222, 498: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 535: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 571: 1222}, - {50: 3751}, - {50: 280, 462: 3730, 751: 3731, 772: 3750}, - {14: 280, 50: 280, 462: 3730, 495: 280, 534: 280, 635: 280, 751: 3731, 772: 3735}, - {50: 1044}, + {48: 3715, 105: 3711, 171: 3712, 3710, 175: 3717, 190: 3714, 498: 3722, 537: 3708, 638: 3721, 671: 3713, 3718, 3719, 676: 3720, 730: 3716, 889: 3709, 983: 3707}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 3705}, + {50: 3706}, + {1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 466: 1223, 1223, 1223, 1223, 1223, 472: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 485: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 495: 1223, 1223, 1223, 501: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 538: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 574: 1223}, + {50: 3758}, // 1240 - {50: 1043}, - {50: 280, 462: 3730, 751: 3731, 772: 3734}, - {50: 273, 462: 3717, 751: 3718, 889: 3733, 894: 3719}, - {50: 280, 462: 3730, 751: 3731, 772: 3729}, - {50: 344, 671: 3726, 3727, 1071: 3728}, + {50: 280, 465: 3737, 754: 3738, 775: 3757}, + {14: 280, 50: 280, 465: 3737, 498: 280, 537: 280, 638: 280, 754: 3738, 775: 3742}, + {50: 1045}, + {50: 1044}, + {50: 280, 465: 3737, 754: 3738, 775: 3741}, // 1245 - {50: 344, 671: 3726, 3727, 1071: 3725}, - {50: 1037}, - {50: 1036}, - {50: 273, 462: 3717, 751: 3718, 889: 3716, 894: 3719}, - {50: 1034}, + {50: 273, 465: 3724, 754: 3725, 892: 3740, 897: 3726}, + {50: 280, 465: 3737, 754: 3738, 775: 3736}, + {50: 344, 674: 3733, 3734, 1074: 3735}, + {50: 344, 674: 3733, 3734, 1074: 3732}, + {50: 1038}, // 1250 - {14: 318, 50: 318, 462: 318, 495: 318, 534: 318, 635: 318}, - {14: 317, 50: 317, 462: 317, 495: 317, 534: 317, 635: 317}, + {50: 1037}, + {50: 273, 465: 3724, 754: 3725, 892: 3723, 897: 3726}, {50: 1035}, - {497: 2655, 721: 2654, 731: 3720}, - {272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 48: 272, 50: 272, 461: 272, 465: 272, 272, 272, 272, 473: 272, 480: 272, 272, 566: 272, 574: 272, 576: 272, 630: 272, 272, 272, 272, 727: 272, 729: 272}, + {14: 318, 50: 318, 465: 318, 498: 318, 537: 318, 638: 318}, + {14: 317, 50: 317, 465: 317, 498: 317, 537: 317, 638: 317}, // 1255 - {271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 48: 271, 50: 271, 461: 271, 465: 271, 271, 271, 271, 473: 271, 480: 271, 271, 566: 271, 574: 271, 576: 271, 630: 271, 271, 271, 271, 727: 271, 729: 271}, - {7: 3722, 50: 3721}, - {281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 14: 281, 48: 281, 50: 281, 101: 281, 281, 104: 281, 461: 281, 465: 281, 281, 281, 281, 473: 281, 480: 281, 281, 495: 281, 518: 281, 281, 534: 281, 566: 281, 574: 281, 576: 281, 630: 281, 281, 281, 281, 635: 281, 727: 281, 729: 281}, - {497: 2655, 721: 2654, 731: 3723}, - {50: 3724}, + {50: 1036}, + {500: 2659, 724: 2658, 734: 3727}, + {272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 48: 272, 50: 272, 464: 272, 468: 272, 272, 272, 272, 476: 272, 483: 272, 272, 569: 272, 577: 272, 579: 272, 633: 272, 272, 272, 272, 730: 272, 732: 272}, + {271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 48: 271, 50: 271, 464: 271, 468: 271, 271, 271, 271, 476: 271, 483: 271, 271, 569: 271, 577: 271, 579: 271, 633: 271, 271, 271, 271, 730: 271, 732: 271}, + {7: 3729, 50: 3728}, // 1260 - {270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 48: 270, 50: 270, 461: 270, 465: 270, 270, 270, 270, 473: 270, 480: 270, 270, 566: 270, 574: 270, 576: 270, 630: 270, 270, 270, 270, 727: 270, 729: 270}, - {50: 1038}, - {50: 343}, - {50: 342}, + {281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 14: 281, 48: 281, 50: 281, 101: 281, 281, 104: 281, 464: 281, 468: 281, 281, 281, 281, 476: 281, 483: 281, 281, 498: 281, 521: 281, 281, 537: 281, 569: 281, 577: 281, 579: 281, 633: 281, 281, 281, 281, 638: 281, 730: 281, 732: 281}, + {500: 2659, 724: 2658, 734: 3730}, + {50: 3731}, + {270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 48: 270, 50: 270, 464: 270, 468: 270, 270, 270, 270, 476: 270, 483: 270, 270, 569: 270, 577: 270, 579: 270, 633: 270, 270, 270, 270, 730: 270, 732: 270}, {50: 1039}, // 1265 + {50: 343}, + {50: 342}, {50: 1040}, - {497: 2655, 721: 2654, 731: 3732}, - {279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 14: 279, 48: 279, 50: 279, 101: 279, 279, 104: 279, 461: 279, 465: 279, 279, 279, 279, 473: 279, 480: 279, 279, 495: 279, 518: 279, 279, 534: 279, 566: 279, 574: 279, 576: 279, 630: 279, 279, 279, 279, 635: 279, 727: 279, 729: 279}, - {50: 3721}, {50: 1041}, + {500: 2659, 724: 2658, 734: 3739}, // 1270 + {279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 14: 279, 48: 279, 50: 279, 101: 279, 279, 104: 279, 464: 279, 468: 279, 279, 279, 279, 476: 279, 483: 279, 279, 498: 279, 521: 279, 279, 537: 279, 569: 279, 577: 279, 579: 279, 633: 279, 279, 279, 279, 638: 279, 730: 279, 732: 279}, + {50: 3728}, {50: 1042}, - {14: 3740, 50: 267, 495: 3741, 534: 3737, 635: 3739, 759: 3738, 786: 3736}, - {50: 1045}, - {264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 14: 3740, 50: 264, 461: 264, 465: 264, 264, 264, 264, 473: 264, 480: 264, 264, 495: 3741, 566: 264, 574: 264, 576: 264, 630: 264, 264, 264, 264, 635: 3739, 759: 3748, 1236: 3747}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 3744}, + {50: 1043}, + {14: 3747, 50: 267, 498: 3748, 537: 3744, 638: 3746, 762: 3745, 789: 3743}, // 1275 - {493: 3743}, - {261, 261, 261, 261, 261, 261, 261, 8: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 51: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 464: 261, 468: 261, 486: 261, 489: 261, 510: 261, 534: 261}, - {493: 3742}, - {260, 260, 260, 260, 260, 260, 260, 8: 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 51: 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 464: 260, 468: 260, 486: 260, 489: 260, 510: 260, 534: 260}, - {262, 262, 262, 262, 262, 262, 262, 8: 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 51: 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 464: 262, 468: 262, 486: 262, 489: 262, 510: 262, 534: 262}, + {50: 1046}, + {264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 14: 3747, 50: 264, 464: 264, 468: 264, 264, 264, 264, 476: 264, 483: 264, 264, 498: 3748, 569: 264, 577: 264, 579: 264, 633: 264, 264, 264, 264, 638: 3746, 762: 3755, 1239: 3754}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 3751}, + {496: 3750}, + {261, 261, 261, 261, 261, 261, 261, 8: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 51: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 467: 261, 471: 261, 489: 261, 492: 261, 513: 261, 537: 261}, // 1280 - {269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 50: 269, 461: 269, 465: 269, 269, 269, 269, 473: 269, 480: 269, 269, 534: 3745, 566: 269, 574: 269, 576: 269, 630: 269, 269, 269, 269, 1235: 3746}, - {268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 50: 268, 461: 268, 465: 268, 268, 268, 268, 473: 268, 480: 268, 268, 566: 268, 574: 268, 576: 268, 630: 268, 268, 268, 268}, - {265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 50: 265, 461: 265, 465: 265, 265, 265, 265, 473: 265, 480: 265, 265, 566: 265, 574: 265, 576: 265, 630: 265, 265, 265, 265}, - {266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 50: 266, 461: 266, 465: 266, 266, 266, 266, 473: 266, 480: 266, 266, 566: 266, 574: 266, 576: 266, 630: 266, 266, 266, 266}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 3749}, + {496: 3749}, + {260, 260, 260, 260, 260, 260, 260, 8: 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 51: 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 467: 260, 471: 260, 489: 260, 492: 260, 513: 260, 537: 260}, + {262, 262, 262, 262, 262, 262, 262, 8: 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 51: 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 467: 262, 471: 262, 489: 262, 492: 262, 513: 262, 537: 262}, + {269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 50: 269, 464: 269, 468: 269, 269, 269, 269, 476: 269, 483: 269, 269, 537: 3752, 569: 269, 577: 269, 579: 269, 633: 269, 269, 269, 269, 1238: 3753}, + {268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 50: 268, 464: 268, 468: 268, 268, 268, 268, 476: 268, 483: 268, 268, 569: 268, 577: 268, 579: 268, 633: 268, 268, 268, 268}, // 1285 - {263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 50: 263, 461: 263, 465: 263, 263, 263, 263, 473: 263, 480: 263, 263, 566: 263, 574: 263, 576: 263, 630: 263, 263, 263, 263}, - {50: 1046}, - {1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 463: 1223, 1223, 1223, 1223, 1223, 469: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 482: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 492: 1223, 1223, 1223, 498: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 535: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 571: 1223}, - {494: 3252, 498: 3250, 3251, 3249, 3247, 531: 1052, 722: 3248, 3246}, - {531: 3756, 1138: 3755, 1317: 3754}, + {265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 50: 265, 464: 265, 468: 265, 265, 265, 265, 476: 265, 483: 265, 265, 569: 265, 577: 265, 579: 265, 633: 265, 265, 265, 265}, + {266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 50: 266, 464: 266, 468: 266, 266, 266, 266, 476: 266, 483: 266, 266, 569: 266, 577: 266, 579: 266, 633: 266, 266, 266, 266}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 3756}, + {263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 50: 263, 464: 263, 468: 263, 263, 263, 263, 476: 263, 483: 263, 263, 569: 263, 577: 263, 579: 263, 633: 263, 263, 263, 263}, + {50: 1047}, // 1290 - {155: 1048, 531: 3756, 533: 3762, 1138: 3761, 1183: 3760}, - {155: 1051, 531: 1051, 533: 1051}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3757}, - {494: 3252, 498: 3250, 3251, 3249, 3247, 535: 3758, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3759}, + {1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 466: 1224, 1224, 1224, 1224, 1224, 472: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 485: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 495: 1224, 1224, 1224, 501: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 538: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 574: 1224}, + {497: 3259, 501: 3257, 3258, 3256, 3254, 534: 1053, 725: 3255, 3253}, + {534: 3763, 1141: 3762, 1320: 3761}, + {155: 1049, 534: 3763, 536: 3769, 1141: 3768, 1186: 3767}, + {155: 1052, 534: 1052, 536: 1052}, // 1295 - {155: 1049, 494: 3252, 498: 3250, 3251, 3249, 3247, 531: 1049, 533: 1049, 722: 3248, 3246}, - {155: 3764}, - {155: 1050, 531: 1050, 533: 1050}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3763}, - {155: 1047, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3764}, + {497: 3259, 501: 3257, 3258, 3256, 3254, 538: 3765, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3766}, + {155: 1050, 497: 3259, 501: 3257, 3258, 3256, 3254, 534: 1050, 536: 1050, 725: 3255, 3253}, + {155: 3771}, // 1300 - {1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 463: 1224, 1224, 1224, 1224, 1224, 469: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 482: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 492: 1224, 1224, 1224, 498: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 535: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 571: 1224}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3766}, - {467: 3767, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {48: 3708, 105: 3704, 171: 3705, 3703, 177: 3710, 192: 3707, 495: 3715, 534: 3701, 635: 3714, 668: 3706, 3711, 3712, 673: 3713, 727: 3709, 886: 3702, 980: 3768}, - {50: 3769}, + {155: 1051, 534: 1051, 536: 1051}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3770}, + {155: 1048, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 466: 1225, 1225, 1225, 1225, 1225, 472: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 485: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 495: 1225, 1225, 1225, 501: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 538: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 574: 1225}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3773}, // 1305 - {1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 463: 1225, 1225, 1225, 1225, 1225, 469: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 482: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 492: 1225, 1225, 1225, 498: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 535: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 571: 1225}, - {1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 463: 1226, 1226, 1226, 1226, 1226, 469: 1226, 1226, 1226, 1226, 3256, 1226, 1226, 1226, 1226, 1226, 1226, 482: 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 492: 1226, 1226, 1226, 498: 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 535: 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 571: 1226}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3772}, - {494: 3252, 498: 3250, 3251, 3249, 3247, 511: 3773, 722: 3248, 3246}, - {1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 463: 1227, 1227, 1227, 1227, 1227, 469: 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 482: 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 492: 1227, 1227, 1227, 498: 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 535: 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 571: 1227}, + {470: 3774, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {48: 3715, 105: 3711, 171: 3712, 3710, 175: 3717, 190: 3714, 498: 3722, 537: 3708, 638: 3721, 671: 3713, 3718, 3719, 676: 3720, 730: 3716, 889: 3709, 983: 3775}, + {50: 3776}, + {1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 466: 1226, 1226, 1226, 1226, 1226, 472: 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 485: 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 495: 1226, 1226, 1226, 501: 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 538: 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 574: 1226}, + {1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 466: 1227, 1227, 1227, 1227, 1227, 472: 1227, 1227, 1227, 1227, 3263, 1227, 1227, 1227, 1227, 1227, 1227, 485: 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 495: 1227, 1227, 1227, 501: 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 538: 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 574: 1227}, // 1310 - {1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 463: 1228, 1228, 1228, 1228, 1228, 469: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 482: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 492: 1228, 1228, 1228, 498: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 535: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 571: 1228}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3776}, - {7: 3777}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3778}, - {7: 1882, 50: 3779, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3779}, + {497: 3259, 501: 3257, 3258, 3256, 3254, 514: 3780, 725: 3255, 3253}, + {1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 466: 1228, 1228, 1228, 1228, 1228, 472: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 485: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 495: 1228, 1228, 1228, 501: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 538: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 574: 1228}, + {1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 466: 1229, 1229, 1229, 1229, 1229, 472: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 485: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 495: 1229, 1229, 1229, 501: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 538: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 574: 1229}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3783}, // 1315 - {1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 463: 1229, 1229, 1229, 1229, 1229, 469: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 482: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 492: 1229, 1229, 1229, 498: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 535: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 571: 1229}, - {7: 1883, 50: 3882, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {7: 3879}, - {7: 1232, 50: 1232, 465: 1232, 1232, 469: 789, 473: 1232, 1232, 1232, 1232, 789, 789, 483: 2647, 486: 1232, 488: 2648, 490: 2644, 494: 1232, 498: 1232, 1232, 1232, 1232, 510: 1232, 512: 1232, 532: 1232, 536: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 571: 1232, 754: 3795, 3796}, - {462: 3683, 564: 3800, 897: 3799, 958: 3798}, + {7: 3784}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3785}, + {7: 1886, 50: 3786, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 466: 1230, 1230, 1230, 1230, 1230, 472: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 485: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 495: 1230, 1230, 1230, 501: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 538: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 574: 1230}, + {7: 1887, 50: 3889, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1320 - {462: 2513, 491: 2511, 558: 2510, 634: 2506, 697: 3792, 739: 3791, 2507, 2508, 2509, 2518, 2516, 3793, 3794}, - {50: 3790, 469: 790, 477: 790, 790}, - {50: 3789}, - {50: 3788}, - {817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 469: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 482: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 498: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 535: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 558: 817, 571: 817, 634: 817, 642: 817, 730: 817}, + {7: 3886}, + {7: 1233, 50: 1233, 468: 1233, 1233, 472: 790, 476: 1233, 1233, 1233, 1233, 790, 790, 486: 2651, 489: 1233, 491: 2652, 493: 2648, 497: 1233, 501: 1233, 1233, 1233, 1233, 513: 1233, 515: 1233, 535: 1233, 539: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 574: 1233, 757: 3802, 3803}, + {465: 3690, 567: 3807, 900: 3806, 961: 3805}, + {465: 2517, 494: 2515, 561: 2514, 637: 2510, 700: 3799, 742: 3798, 2511, 2512, 2513, 2522, 2520, 3800, 3801}, + {50: 3797, 472: 791, 480: 791, 791}, // 1325 - {818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 469: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 482: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 498: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 535: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 558: 818, 571: 818, 634: 818, 642: 818, 730: 818}, - {819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 469: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 482: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 498: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 535: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 558: 819, 571: 819, 634: 819, 642: 819, 730: 819}, - {974, 974, 50: 974, 461: 974, 463: 974, 469: 790, 974, 477: 790, 790}, - {973, 973, 50: 973, 461: 973, 463: 973, 469: 789, 973, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, - {802, 802, 50: 802, 461: 802, 463: 802, 470: 802}, + {50: 3796}, + {50: 3795}, + {818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 472: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 485: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 501: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 538: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 561: 818, 574: 818, 637: 818, 645: 818, 733: 818}, + {819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 472: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 485: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 501: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 538: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 561: 819, 574: 819, 637: 819, 645: 819, 733: 819}, + {820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 472: 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 485: 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 501: 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 538: 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 561: 820, 574: 820, 637: 820, 645: 820, 733: 820}, // 1330 - {801, 801, 50: 801, 461: 801, 463: 801, 470: 801}, - {795, 795, 50: 795, 461: 795, 463: 795, 470: 795, 483: 2647, 488: 2648, 755: 3797}, - {794, 794, 50: 794, 461: 794, 463: 794, 470: 794}, - {793, 793, 50: 793, 461: 793, 463: 793, 470: 793}, - {1268, 1268, 7: 3812, 50: 1268, 461: 1268, 463: 1268, 469: 1268, 1268, 477: 1268, 1268, 482: 1268, 1268, 1268, 1268, 488: 1268, 490: 2644, 754: 2645, 797: 3811}, + {975, 975, 50: 975, 464: 975, 466: 975, 472: 791, 975, 480: 791, 791}, + {974, 974, 50: 974, 464: 974, 466: 974, 472: 790, 974, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {803, 803, 50: 803, 464: 803, 466: 803, 473: 803}, + {802, 802, 50: 802, 464: 802, 466: 802, 473: 802}, + {796, 796, 50: 796, 464: 796, 466: 796, 473: 796, 486: 2651, 491: 2652, 758: 3804}, // 1335 - {8, 8, 7: 8, 50: 8, 461: 8, 463: 8, 469: 8, 8, 477: 8, 8, 482: 8, 8, 8, 8, 488: 8, 490: 8}, - {462: 3801, 825: 3802}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1308, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 3806, 1307: 3805, 3804}, - {6, 6, 7: 6, 50: 6, 461: 6, 463: 6, 469: 6, 6, 477: 6, 6, 482: 6, 6, 6, 6, 488: 6, 490: 6}, - {1304, 1304, 7: 1304, 50: 1304, 461: 1304, 470: 1304, 483: 1304, 489: 1304, 1304, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {795, 795, 50: 795, 464: 795, 466: 795, 473: 795}, + {794, 794, 50: 794, 464: 794, 466: 794, 473: 794}, + {1269, 1269, 7: 3819, 50: 1269, 464: 1269, 466: 1269, 472: 1269, 1269, 480: 1269, 1269, 485: 1269, 1269, 1269, 1269, 491: 1269, 493: 2648, 757: 2649, 800: 3818}, + {8, 8, 7: 8, 50: 8, 464: 8, 466: 8, 472: 8, 8, 480: 8, 8, 485: 8, 8, 8, 8, 491: 8, 493: 8}, + {465: 3808, 828: 3809}, // 1340 - {50: 3810}, - {7: 3808, 50: 1307}, - {7: 1305, 50: 1305}, - {1303, 1303, 7: 1303, 50: 1303, 461: 1303, 3691, 470: 1303, 483: 1303, 489: 1303, 1303}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 3809}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1309, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 3813, 1310: 3812, 3811}, + {6, 6, 7: 6, 50: 6, 464: 6, 466: 6, 472: 6, 6, 480: 6, 6, 485: 6, 6, 6, 6, 491: 6, 493: 6}, + {1305, 1305, 7: 1305, 50: 1305, 464: 1305, 473: 1305, 486: 1305, 492: 1305, 1305, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {50: 3817}, + {7: 3815, 50: 1308}, // 1345 {7: 1306, 50: 1306}, - {1309, 1309, 7: 1309, 50: 1309, 86: 1309, 461: 1309, 463: 1309, 469: 1309, 1309, 477: 1309, 1309, 482: 1309, 1309, 1309, 1309, 488: 1309, 490: 1309, 494: 1309}, - {844, 844, 50: 844, 461: 844, 463: 844, 469: 844, 844, 477: 844, 844, 482: 844, 2647, 844, 844, 488: 2648, 755: 2649, 814: 3814}, - {564: 3800, 897: 3813}, - {7, 7, 7: 7, 50: 7, 461: 7, 463: 7, 469: 7, 7, 477: 7, 7, 482: 7, 7, 7, 7, 488: 7, 490: 7}, + {1304, 1304, 7: 1304, 50: 1304, 464: 1304, 3698, 473: 1304, 486: 1304, 492: 1304, 1304}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 3816}, + {7: 1307, 50: 1307}, + {1310, 1310, 7: 1310, 50: 1310, 86: 1310, 464: 1310, 466: 1310, 472: 1310, 1310, 480: 1310, 1310, 485: 1310, 1310, 1310, 1310, 491: 1310, 493: 1310, 497: 1310}, // 1350 - {815, 815, 50: 815, 461: 815, 463: 815, 469: 815, 815, 477: 815, 815, 482: 3816, 484: 815, 3817, 873: 3815}, - {821, 821, 50: 821, 461: 821, 463: 821, 469: 821, 821, 477: 821, 821, 484: 3842, 874: 3841}, - {274: 3822, 642: 3821}, - {532: 3818}, - {274: 3819}, + {845, 845, 50: 845, 464: 845, 466: 845, 472: 845, 845, 480: 845, 845, 485: 845, 2651, 845, 845, 491: 2652, 758: 2653, 817: 3821}, + {567: 3807, 900: 3820}, + {7, 7, 7: 7, 50: 7, 464: 7, 466: 7, 472: 7, 7, 480: 7, 7, 485: 7, 7, 7, 7, 491: 7, 493: 7}, + {816, 816, 50: 816, 464: 816, 466: 816, 472: 816, 816, 480: 816, 816, 485: 3823, 487: 816, 3824, 876: 3822}, + {822, 822, 50: 822, 464: 822, 466: 822, 472: 822, 822, 480: 822, 822, 487: 3849, 877: 3848}, // 1355 - {203: 3820}, - {807, 807, 50: 807, 461: 807, 463: 807, 469: 807, 807, 477: 807, 807, 484: 807}, - {806, 806, 50: 806, 137: 806, 149: 806, 169: 806, 461: 806, 463: 806, 469: 806, 806, 477: 806, 806, 484: 806, 1064: 3824, 3835}, - {806, 806, 50: 806, 137: 806, 149: 806, 461: 806, 463: 806, 469: 806, 806, 477: 806, 806, 484: 806, 1064: 3824, 3823}, - {813, 813, 50: 813, 137: 3833, 149: 3832, 461: 813, 463: 813, 469: 813, 813, 477: 813, 813, 484: 813}, + {274: 3829, 645: 3828}, + {535: 3825}, + {274: 3826}, + {203: 3827}, + {808, 808, 50: 808, 464: 808, 466: 808, 472: 808, 808, 480: 808, 808, 487: 808}, // 1360 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 3827}, - {1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 535: 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 558: 1028, 566: 1028, 571: 1028, 574: 1028, 1028, 1028, 630: 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 3830, 1028, 1028, 645: 1028, 1028, 1028, 650: 1028, 657: 1028, 1028, 1028, 1028, 1028, 1028, 667: 1028, 674: 1028, 1028, 677: 1028, 692: 1028}, - {1026, 1026, 7: 1026, 50: 1026, 137: 1026, 149: 1026, 169: 1026, 461: 1026, 463: 1026, 469: 1026, 1026, 477: 1026, 1026, 484: 1026, 487: 1026, 638: 1026, 658: 1026, 660: 1026}, - {805, 805, 7: 3828, 50: 805, 137: 805, 149: 805, 169: 805, 461: 805, 463: 805, 469: 805, 805, 477: 805, 805, 484: 805}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3829}, + {807, 807, 50: 807, 137: 807, 149: 807, 169: 807, 464: 807, 466: 807, 472: 807, 807, 480: 807, 807, 487: 807, 1067: 3831, 3842}, + {807, 807, 50: 807, 137: 807, 149: 807, 464: 807, 466: 807, 472: 807, 807, 480: 807, 807, 487: 807, 1067: 3831, 3830}, + {814, 814, 50: 814, 137: 3840, 149: 3839, 464: 814, 466: 814, 472: 814, 814, 480: 814, 814, 487: 814}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 3834}, + {1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 538: 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 561: 1029, 569: 1029, 574: 1029, 577: 1029, 1029, 1029, 633: 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 3837, 1029, 1029, 648: 1029, 1029, 1029, 653: 1029, 660: 1029, 1029, 1029, 1029, 1029, 1029, 670: 1029, 677: 1029, 1029, 680: 1029, 695: 1029}, // 1365 - {1025, 1025, 7: 1025, 50: 1025, 137: 1025, 149: 1025, 159: 1025, 169: 1025, 461: 1025, 463: 1025, 469: 1025, 1025, 477: 1025, 1025, 484: 1025, 487: 1025, 638: 1025, 1025, 658: 1025, 660: 1025}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3831, 2681, 2682, 2680}, - {1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 535: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 558: 1027, 566: 1027, 571: 1027, 574: 1027, 1027, 1027, 630: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 641: 1027, 1027, 645: 1027, 1027, 1027, 650: 1027, 657: 1027, 1027, 1027, 1027, 1027, 1027, 667: 1027, 674: 1027, 1027, 677: 1027, 692: 1027}, - {810, 810, 50: 810, 461: 810, 463: 810, 469: 810, 810, 477: 810, 810, 484: 810}, - {255: 3834}, + {1027, 1027, 7: 1027, 50: 1027, 137: 1027, 149: 1027, 169: 1027, 464: 1027, 466: 1027, 472: 1027, 1027, 480: 1027, 1027, 487: 1027, 490: 1027, 641: 1027, 661: 1027, 663: 1027}, + {806, 806, 7: 3835, 50: 806, 137: 806, 149: 806, 169: 806, 464: 806, 466: 806, 472: 806, 806, 480: 806, 806, 487: 806}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3836}, + {1026, 1026, 7: 1026, 50: 1026, 137: 1026, 149: 1026, 159: 1026, 169: 1026, 464: 1026, 466: 1026, 472: 1026, 1026, 480: 1026, 1026, 487: 1026, 490: 1026, 641: 1026, 1026, 661: 1026, 663: 1026}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3838, 2685, 2686, 2684}, // 1370 - {808, 808, 50: 808, 461: 808, 463: 808, 469: 808, 808, 477: 808, 808, 484: 808}, - {814, 814, 50: 814, 137: 3838, 149: 3836, 169: 3837, 461: 814, 463: 814, 469: 814, 814, 477: 814, 814, 484: 814}, - {812, 812, 50: 812, 461: 812, 463: 812, 469: 812, 812, 477: 812, 812, 484: 812}, - {497: 2655, 721: 3840}, - {255: 3839}, + {1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 538: 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 561: 1028, 569: 1028, 574: 1028, 577: 1028, 1028, 1028, 633: 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 644: 1028, 1028, 648: 1028, 1028, 1028, 653: 1028, 660: 1028, 1028, 1028, 1028, 1028, 1028, 670: 1028, 677: 1028, 1028, 680: 1028, 695: 1028}, + {811, 811, 50: 811, 464: 811, 466: 811, 472: 811, 811, 480: 811, 811, 487: 811}, + {255: 3841}, + {809, 809, 50: 809, 464: 809, 466: 809, 472: 809, 809, 480: 809, 809, 487: 809}, + {815, 815, 50: 815, 137: 3845, 149: 3843, 169: 3844, 464: 815, 466: 815, 472: 815, 815, 480: 815, 815, 487: 815}, // 1375 - {809, 809, 50: 809, 461: 809, 463: 809, 469: 809, 809, 477: 809, 809, 484: 809}, - {811, 811, 50: 811, 461: 811, 463: 811, 469: 811, 811, 477: 811, 811, 484: 811}, - {975, 975, 50: 975, 461: 975, 463: 975, 469: 975, 975, 477: 975, 975}, - {1247: 3843}, - {464: 3844}, + {813, 813, 50: 813, 464: 813, 466: 813, 472: 813, 813, 480: 813, 813, 487: 813}, + {500: 2659, 724: 3847}, + {255: 3846}, + {810, 810, 50: 810, 464: 810, 466: 810, 472: 810, 810, 480: 810, 810, 487: 810}, + {812, 812, 50: 812, 464: 812, 466: 812, 472: 812, 812, 480: 812, 812, 487: 812}, // 1380 - {94, 94, 50: 94, 98: 3848, 107: 3847, 461: 94, 463: 94, 469: 94, 94, 477: 94, 94, 646: 94, 819: 3846, 1029: 3845}, - {81, 81, 50: 81, 461: 81, 463: 81, 469: 81, 81, 477: 81, 81, 646: 3869, 929: 3868}, - {769: 3851, 774: 3853, 780: 3854, 3852, 1028: 3850, 1190: 3849}, - {92, 92, 15: 92, 47: 92, 49: 92, 51: 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 461: 92, 92, 487: 92, 532: 92, 641: 92, 769: 92, 774: 92, 780: 92, 92}, - {91, 91, 15: 91, 47: 91, 49: 91, 51: 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 461: 91, 91, 487: 91, 532: 91, 641: 91, 769: 91, 774: 91, 780: 91, 91}, + {976, 976, 50: 976, 464: 976, 466: 976, 472: 976, 976, 480: 976, 976}, + {1250: 3850}, + {467: 3851}, + {94, 94, 50: 94, 98: 3855, 107: 3854, 464: 94, 466: 94, 472: 94, 94, 480: 94, 94, 649: 94, 822: 3853, 1032: 3852}, + {81, 81, 50: 81, 464: 81, 466: 81, 472: 81, 81, 480: 81, 81, 649: 3876, 932: 3875}, // 1385 - {93, 93, 50: 93, 461: 93, 93, 93, 469: 93, 93, 477: 93, 93, 93, 493: 93, 646: 93, 769: 3851, 774: 3853, 780: 3854, 3852, 1028: 3867}, - {89, 89, 50: 89, 461: 89, 89, 89, 469: 89, 89, 477: 89, 89, 89, 493: 89, 646: 89, 769: 89, 774: 89, 780: 89, 89}, - {647: 3865}, - {774: 3862}, - {647: 3860}, + {772: 3858, 777: 3860, 783: 3861, 3859, 1031: 3857, 1193: 3856}, + {92, 92, 15: 92, 47: 92, 49: 92, 51: 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 464: 92, 92, 490: 92, 535: 92, 644: 92, 772: 92, 777: 92, 783: 92, 92}, + {91, 91, 15: 91, 47: 91, 49: 91, 51: 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 464: 91, 91, 490: 91, 535: 91, 644: 91, 772: 91, 777: 91, 783: 91, 91}, + {93, 93, 50: 93, 464: 93, 93, 93, 472: 93, 93, 480: 93, 93, 93, 496: 93, 649: 93, 772: 3858, 777: 3860, 783: 3861, 3859, 1031: 3874}, + {89, 89, 50: 89, 464: 89, 89, 89, 472: 89, 89, 480: 89, 89, 89, 496: 89, 649: 89, 772: 89, 777: 89, 783: 89, 89}, // 1390 - {647: 3855}, - {464: 3857, 565: 3858, 569: 3859, 839: 3856}, - {85, 85, 50: 85, 461: 85, 85, 85, 469: 85, 85, 477: 85, 85, 85, 493: 85, 646: 85, 769: 85, 774: 85, 780: 85, 85}, - {84, 84, 50: 84, 461: 84, 84, 84, 469: 84, 84, 477: 84, 84, 84, 493: 84, 646: 84, 769: 84, 774: 84, 780: 84, 84}, - {83, 83, 50: 83, 461: 83, 83, 83, 469: 83, 83, 477: 83, 83, 83, 493: 83, 646: 83, 769: 83, 774: 83, 780: 83, 83}, + {650: 3872}, + {777: 3869}, + {650: 3867}, + {650: 3862}, + {467: 3864, 568: 3865, 572: 3866, 842: 3863}, // 1395 - {82, 82, 50: 82, 461: 82, 82, 82, 469: 82, 82, 477: 82, 82, 82, 493: 82, 646: 82, 769: 82, 774: 82, 780: 82, 82}, - {464: 3857, 565: 3858, 569: 3859, 839: 3861}, - {86, 86, 50: 86, 461: 86, 86, 86, 469: 86, 86, 477: 86, 86, 86, 493: 86, 646: 86, 769: 86, 774: 86, 780: 86, 86}, - {647: 3863}, - {464: 3857, 565: 3858, 569: 3859, 839: 3864}, + {85, 85, 50: 85, 464: 85, 85, 85, 472: 85, 85, 480: 85, 85, 85, 496: 85, 649: 85, 772: 85, 777: 85, 783: 85, 85}, + {84, 84, 50: 84, 464: 84, 84, 84, 472: 84, 84, 480: 84, 84, 84, 496: 84, 649: 84, 772: 84, 777: 84, 783: 84, 84}, + {83, 83, 50: 83, 464: 83, 83, 83, 472: 83, 83, 480: 83, 83, 83, 496: 83, 649: 83, 772: 83, 777: 83, 783: 83, 83}, + {82, 82, 50: 82, 464: 82, 82, 82, 472: 82, 82, 480: 82, 82, 82, 496: 82, 649: 82, 772: 82, 777: 82, 783: 82, 82}, + {467: 3864, 568: 3865, 572: 3866, 842: 3868}, // 1400 - {87, 87, 50: 87, 461: 87, 87, 87, 469: 87, 87, 477: 87, 87, 87, 493: 87, 646: 87, 769: 87, 774: 87, 780: 87, 87}, - {464: 3857, 565: 3858, 569: 3859, 839: 3866}, - {88, 88, 50: 88, 461: 88, 88, 88, 469: 88, 88, 477: 88, 88, 88, 493: 88, 646: 88, 769: 88, 774: 88, 780: 88, 88}, - {90, 90, 50: 90, 461: 90, 90, 90, 469: 90, 90, 477: 90, 90, 90, 493: 90, 646: 90, 769: 90, 774: 90, 780: 90, 90}, - {820, 820, 50: 820, 461: 820, 463: 820, 469: 820, 820, 477: 820, 820}, + {86, 86, 50: 86, 464: 86, 86, 86, 472: 86, 86, 480: 86, 86, 86, 496: 86, 649: 86, 772: 86, 777: 86, 783: 86, 86}, + {650: 3870}, + {467: 3864, 568: 3865, 572: 3866, 842: 3871}, + {87, 87, 50: 87, 464: 87, 87, 87, 472: 87, 87, 480: 87, 87, 87, 496: 87, 649: 87, 772: 87, 777: 87, 783: 87, 87}, + {467: 3864, 568: 3865, 572: 3866, 842: 3873}, // 1405 - {79, 79, 50: 79, 461: 79, 79, 79, 469: 79, 79, 477: 79, 79, 79, 493: 79, 769: 79, 1280: 3870, 3871}, - {77, 77, 50: 77, 461: 77, 77, 77, 469: 77, 77, 477: 77, 77, 77, 493: 77, 769: 3875, 1221: 3874}, - {647: 3872}, - {464: 3857, 565: 3858, 569: 3859, 839: 3873}, - {78, 78, 50: 78, 461: 78, 78, 78, 469: 78, 78, 477: 78, 78, 78, 493: 78, 769: 78}, + {88, 88, 50: 88, 464: 88, 88, 88, 472: 88, 88, 480: 88, 88, 88, 496: 88, 649: 88, 772: 88, 777: 88, 783: 88, 88}, + {90, 90, 50: 90, 464: 90, 90, 90, 472: 90, 90, 480: 90, 90, 90, 496: 90, 649: 90, 772: 90, 777: 90, 783: 90, 90}, + {821, 821, 50: 821, 464: 821, 466: 821, 472: 821, 821, 480: 821, 821}, + {79, 79, 50: 79, 464: 79, 79, 79, 472: 79, 79, 480: 79, 79, 79, 496: 79, 772: 79, 1283: 3877, 3878}, + {77, 77, 50: 77, 464: 77, 77, 77, 472: 77, 77, 480: 77, 77, 77, 496: 77, 772: 3882, 1224: 3881}, // 1410 - {80, 80, 50: 80, 461: 80, 80, 80, 469: 80, 80, 477: 80, 80, 80, 493: 80}, - {647: 3876}, - {464: 3857, 565: 3858, 569: 3859, 839: 3877}, - {76, 76, 50: 76, 461: 76, 76, 76, 469: 76, 76, 477: 76, 76, 76, 493: 76}, - {816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 469: 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 482: 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 498: 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 535: 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 558: 816, 571: 816, 634: 816, 642: 816, 730: 816}, + {650: 3879}, + {467: 3864, 568: 3865, 572: 3866, 842: 3880}, + {78, 78, 50: 78, 464: 78, 78, 78, 472: 78, 78, 480: 78, 78, 78, 496: 78, 772: 78}, + {80, 80, 50: 80, 464: 80, 80, 80, 472: 80, 80, 480: 80, 80, 80, 496: 80}, + {650: 3883}, // 1415 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3880}, - {7: 1882, 50: 3881, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 463: 1230, 1230, 1230, 1230, 1230, 469: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 482: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 492: 1230, 1230, 1230, 498: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 535: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 571: 1230}, - {1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 463: 1231, 1231, 1231, 1231, 1231, 469: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 482: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 492: 1231, 1231, 1231, 498: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 535: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 571: 1231}, - {1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 463: 1233, 1233, 1233, 1233, 1233, 469: 1233, 1233, 1233, 1233, 3256, 1233, 1233, 1233, 1233, 1233, 1233, 482: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 492: 1233, 1233, 1233, 498: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 535: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 571: 1233}, + {467: 3864, 568: 3865, 572: 3866, 842: 3884}, + {76, 76, 50: 76, 464: 76, 76, 76, 472: 76, 76, 480: 76, 76, 76, 496: 76}, + {817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 472: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 485: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 501: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 538: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 561: 817, 574: 817, 637: 817, 645: 817, 733: 817}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3887}, + {7: 1886, 50: 3888, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1420 - {1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 463: 1235, 1235, 1235, 1235, 1235, 469: 1235, 1235, 1235, 1235, 3256, 1235, 1235, 1235, 1235, 1235, 1235, 482: 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 492: 1235, 1235, 1235, 498: 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 535: 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 571: 1235}, - {1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 463: 1236, 1236, 1236, 1236, 1236, 469: 1236, 1236, 1236, 1236, 3256, 1236, 1236, 1236, 1236, 1236, 1236, 482: 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 492: 1236, 1236, 1236, 498: 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 535: 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 571: 1236}, - {1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 463: 1237, 1237, 1237, 1237, 1237, 469: 1237, 1237, 1237, 1237, 3256, 1237, 1237, 1237, 1237, 1237, 1237, 482: 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 492: 1237, 1237, 1237, 498: 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 535: 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 571: 1237}, - {1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 463: 1238, 1238, 1238, 1238, 1238, 469: 1238, 1238, 1238, 1238, 3256, 1238, 1238, 1238, 1238, 1238, 1238, 482: 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 492: 1238, 1238, 1238, 498: 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 535: 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 571: 1238}, - {464: 3891}, + {1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 466: 1231, 1231, 1231, 1231, 1231, 472: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 485: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 495: 1231, 1231, 1231, 501: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 538: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 574: 1231}, + {1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 466: 1232, 1232, 1232, 1232, 1232, 472: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 485: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 495: 1232, 1232, 1232, 501: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 538: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 574: 1232}, + {1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 466: 1234, 1234, 1234, 1234, 1234, 472: 1234, 1234, 1234, 1234, 3263, 1234, 1234, 1234, 1234, 1234, 1234, 485: 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 495: 1234, 1234, 1234, 501: 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 538: 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 574: 1234}, + {1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 466: 1236, 1236, 1236, 1236, 1236, 472: 1236, 1236, 1236, 1236, 3263, 1236, 1236, 1236, 1236, 1236, 1236, 485: 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 495: 1236, 1236, 1236, 501: 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 538: 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 574: 1236}, + {1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 466: 1237, 1237, 1237, 1237, 1237, 472: 1237, 1237, 1237, 1237, 3263, 1237, 1237, 1237, 1237, 1237, 1237, 485: 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 495: 1237, 1237, 1237, 501: 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 538: 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 574: 1237}, // 1425 - {464: 3890}, - {1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 463: 1218, 1218, 1218, 1218, 1218, 469: 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 482: 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 492: 1218, 1218, 1218, 498: 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 535: 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 571: 1218}, - {1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 463: 1219, 1219, 1219, 1219, 1219, 469: 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 482: 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 492: 1219, 1219, 1219, 498: 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 535: 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 571: 1219}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3893, 2681, 2682, 2680}, - {1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 3894, 1250, 1250, 1250, 1250, 1250, 469: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 482: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 492: 1250, 1250, 1250, 498: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 535: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 571: 1250, 640: 3689, 643: 1250, 1250}, + {1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 466: 1238, 1238, 1238, 1238, 1238, 472: 1238, 1238, 1238, 1238, 3263, 1238, 1238, 1238, 1238, 1238, 1238, 485: 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 495: 1238, 1238, 1238, 501: 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 538: 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 574: 1238}, + {1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 466: 1239, 1239, 1239, 1239, 1239, 472: 1239, 1239, 1239, 1239, 3263, 1239, 1239, 1239, 1239, 1239, 1239, 485: 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 495: 1239, 1239, 1239, 501: 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 538: 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 574: 1239}, + {467: 3898}, + {467: 3897}, + {1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 466: 1219, 1219, 1219, 1219, 1219, 472: 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 485: 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 495: 1219, 1219, 1219, 501: 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 538: 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 574: 1219}, // 1430 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1879, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3656, 811: 3895}, - {50: 3896}, - {1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 463: 1086, 1086, 1086, 1086, 1086, 469: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 482: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 492: 1086, 1086, 1086, 498: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 535: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 571: 1086}, - {1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 463: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 492: 1288, 1288, 1288, 498: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 535: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 566: 1288, 571: 1288, 574: 1288, 576: 1288, 630: 1288, 1288, 1288, 1288}, - {1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 463: 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 492: 1285, 1285, 1285, 498: 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 535: 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 566: 1285, 571: 1285, 574: 1285, 576: 1285, 630: 1285, 1285, 1285, 1285}, + {1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 466: 1220, 1220, 1220, 1220, 1220, 472: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 485: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 495: 1220, 1220, 1220, 501: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 538: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 574: 1220}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3900, 2685, 2686, 2684}, + {1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 3901, 1251, 1251, 1251, 1251, 1251, 472: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 485: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 495: 1251, 1251, 1251, 501: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 538: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 574: 1251, 643: 3696, 646: 1251, 1251}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1883, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3663, 814: 3902}, + {50: 3903}, // 1435 - {1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 463: 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 492: 1284, 1284, 1284, 498: 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 535: 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 566: 1284, 571: 1284, 574: 1284, 576: 1284, 630: 1284, 1284, 1284, 1284}, - {1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 463: 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 492: 1282, 1282, 1282, 498: 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 535: 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 566: 1282, 571: 1282, 574: 1282, 576: 1282, 630: 1282, 1282, 1282, 1282}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 639: 3903, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3902}, - {50: 3907, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3904}, + {1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 466: 1087, 1087, 1087, 1087, 1087, 472: 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 485: 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 495: 1087, 1087, 1087, 501: 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 538: 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 574: 1087}, + {1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 466: 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 495: 1289, 1289, 1289, 501: 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 538: 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 569: 1289, 574: 1289, 577: 1289, 579: 1289, 633: 1289, 1289, 1289, 1289}, + {1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 466: 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 495: 1286, 1286, 1286, 501: 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 538: 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 569: 1286, 574: 1286, 577: 1286, 579: 1286, 633: 1286, 1286, 1286, 1286}, + {1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 466: 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 495: 1285, 1285, 1285, 501: 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 538: 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 569: 1285, 574: 1285, 577: 1285, 579: 1285, 633: 1285, 1285, 1285, 1285}, + {1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 466: 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 495: 1283, 1283, 1283, 501: 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 538: 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 569: 1283, 574: 1283, 577: 1283, 579: 1283, 633: 1283, 1283, 1283, 1283}, // 1440 - {50: 3905, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3906}, - {1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 463: 1094, 1094, 1094, 1094, 1094, 469: 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 482: 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 492: 1094, 1094, 1094, 498: 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 535: 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 571: 1094}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3908}, - {1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 463: 1095, 1095, 1095, 1095, 1095, 469: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 482: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 492: 1095, 1095, 1095, 498: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 535: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 571: 1095}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 642: 3910, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3909}, + {50: 3914, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3911}, + {50: 3912, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3913}, // 1445 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 639: 3911, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3910}, - {7: 3921, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3912}, - {7: 3913, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 639: 3915, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3914}, + {1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 466: 1095, 1095, 1095, 1095, 1095, 472: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 485: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 495: 1095, 1095, 1095, 501: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 538: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 574: 1095}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3915}, + {1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 466: 1096, 1096, 1096, 1096, 1096, 472: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 485: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 495: 1096, 1096, 1096, 501: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 538: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 574: 1096}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 642: 3918, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3917}, + {7: 3928, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1450 - {50: 3919, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3916}, - {50: 3917, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3918}, - {1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 463: 1090, 1090, 1090, 1090, 1090, 469: 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 482: 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 492: 1090, 1090, 1090, 498: 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 535: 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 571: 1090}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3919}, + {7: 3920, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 642: 3922, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3921}, + {50: 3926, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3923}, // 1455 - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3920}, - {1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 463: 1092, 1092, 1092, 1092, 1092, 469: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 482: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 492: 1092, 1092, 1092, 498: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 535: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 571: 1092}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 639: 3923, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3922}, - {50: 3927, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3924}, + {50: 3924, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3925}, + {1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 466: 1091, 1091, 1091, 1091, 1091, 472: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 485: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 495: 1091, 1091, 1091, 501: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 538: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 574: 1091}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3927}, + {1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 466: 1093, 1093, 1093, 1093, 1093, 472: 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 485: 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 495: 1093, 1093, 1093, 501: 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 538: 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 574: 1093}, // 1460 - {50: 3925, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3926}, - {1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 463: 1091, 1091, 1091, 1091, 1091, 469: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 482: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 492: 1091, 1091, 1091, 498: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 535: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 571: 1091}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3928}, - {1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 463: 1093, 1093, 1093, 1093, 1093, 469: 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 482: 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 492: 1093, 1093, 1093, 498: 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 535: 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 571: 1093}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 642: 3930, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3929}, + {50: 3934, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3931}, + {50: 3932, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3933}, // 1465 - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 792: 3930}, - {7: 3931}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3932}, - {7: 3933, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3934}, - // 1470 - {50: 3935, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 463: 1140, 1140, 1140, 1140, 1140, 469: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 482: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 492: 1140, 1140, 1140, 498: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 535: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 571: 1140}, - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 792: 3937}, + {1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 466: 1092, 1092, 1092, 1092, 1092, 472: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 485: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 495: 1092, 1092, 1092, 501: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 538: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 574: 1092}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3935}, + {1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 466: 1094, 1094, 1094, 1094, 1094, 472: 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 485: 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 495: 1094, 1094, 1094, 501: 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 538: 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 574: 1094}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 795: 3937}, {7: 3938}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3939}, + // 1470 + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3939}, + {7: 3940, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3941}, + {50: 3942, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 466: 1141, 1141, 1141, 1141, 1141, 472: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 485: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 495: 1141, 1141, 1141, 501: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 538: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 574: 1141}, // 1475 - {7: 3940, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3941}, - {50: 3942, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 463: 1141, 1141, 1141, 1141, 1141, 469: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 482: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 492: 1141, 1141, 1141, 498: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 535: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 571: 1141}, - {171: 3946, 3945, 192: 3947, 214: 3948, 1200: 3944}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 795: 3944}, + {7: 3945}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3946}, + {7: 3947, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3948}, // 1480 - {7: 3949}, + {50: 3949, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 466: 1142, 1142, 1142, 1142, 1142, 472: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 485: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 495: 1142, 1142, 1142, 501: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 538: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 574: 1142}, + {171: 3953, 3952, 190: 3954, 214: 3955, 1203: 3951}, + {7: 3956}, + {7: 1131}, + // 1485 {7: 1130}, {7: 1129}, {7: 1128}, - {7: 1127}, - // 1485 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3950}, - {50: 3951, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 463: 1147, 1147, 1147, 1147, 1147, 469: 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 482: 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 492: 1147, 1147, 1147, 498: 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 535: 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 571: 1147}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3953}, - {7: 3954}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3957}, + {50: 3958, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1490 - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 3956}, - {1934, 1934, 4: 1934, 1934, 1934, 1934, 13: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 50: 1934, 70: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 106: 1934, 126: 1934, 1934, 1934, 1934, 468: 1934, 1934, 473: 1934, 483: 1934, 488: 1934, 1934, 492: 1934, 495: 1934, 635: 1934, 637: 1934, 645: 1934}, - {50: 3962}, - {29, 29, 4: 29, 29, 29, 13: 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 50: 29, 70: 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 468: 29, 29, 473: 29, 492: 29, 495: 29, 635: 29, 637: 29, 645: 29}, - {497: 2655, 721: 3955, 752: 3961}, + {1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 466: 1148, 1148, 1148, 1148, 1148, 472: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 485: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 495: 1148, 1148, 1148, 501: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 538: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 574: 1148}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3960}, + {7: 3961}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 3963}, + {1938, 1938, 4: 1938, 1938, 1938, 1938, 13: 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 50: 1938, 70: 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 106: 1938, 126: 1938, 1938, 1938, 1938, 471: 1938, 1938, 476: 1938, 486: 1938, 491: 1938, 1938, 495: 1938, 498: 1938, 638: 1938, 640: 1938, 648: 1938}, // 1495 - {497: 2655, 721: 3960}, - {27, 27, 4: 27, 27, 27, 13: 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 50: 27, 70: 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 468: 27, 27, 473: 27, 492: 27, 495: 27, 635: 27, 637: 27, 645: 27}, - {28, 28, 4: 28, 28, 28, 13: 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 50: 28, 70: 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 468: 28, 28, 473: 28, 492: 28, 495: 28, 635: 28, 637: 28, 645: 28}, - {1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 463: 1118, 1118, 1118, 1118, 1118, 469: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 482: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 492: 1118, 1118, 1118, 498: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 535: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 571: 1118}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3964}, + {50: 3969}, + {29, 29, 4: 29, 29, 29, 13: 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 50: 29, 70: 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 471: 29, 29, 476: 29, 495: 29, 498: 29, 638: 29, 640: 29, 648: 29}, + {500: 2659, 724: 3962, 755: 3968}, + {500: 2659, 724: 3967}, + {27, 27, 4: 27, 27, 27, 13: 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 50: 27, 70: 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 471: 27, 27, 476: 27, 495: 27, 498: 27, 638: 27, 640: 27, 648: 27}, // 1500 - {50: 3965}, - {1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 463: 1119, 1119, 1119, 1119, 1119, 469: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 482: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 492: 1119, 1119, 1119, 498: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 535: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 571: 1119}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3967}, - {50: 3968, 467: 3969, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 463: 1135, 1135, 1135, 1135, 1135, 469: 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 482: 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 492: 1135, 1135, 1135, 498: 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 535: 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 571: 1135}, + {28, 28, 4: 28, 28, 28, 13: 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 50: 28, 70: 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 471: 28, 28, 476: 28, 495: 28, 498: 28, 638: 28, 640: 28, 648: 28}, + {1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 466: 1119, 1119, 1119, 1119, 1119, 472: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 485: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 495: 1119, 1119, 1119, 501: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 538: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 574: 1119}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3971}, + {50: 3972}, + {1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 466: 1120, 1120, 1120, 1120, 1120, 472: 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 485: 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 495: 1120, 1120, 1120, 501: 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 538: 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 574: 1120}, // 1505 - {495: 3715, 534: 3971, 635: 3714, 886: 3970}, - {462: 3730, 751: 3974}, - {462: 3730, 751: 3972}, - {50: 3973}, - {1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 463: 1133, 1133, 1133, 1133, 1133, 469: 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 482: 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 492: 1133, 1133, 1133, 498: 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 535: 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 571: 1133}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3974}, + {50: 3975, 470: 3976, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 466: 1136, 1136, 1136, 1136, 1136, 472: 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 485: 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 495: 1136, 1136, 1136, 501: 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 538: 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 574: 1136}, + {498: 3722, 537: 3978, 638: 3721, 889: 3977}, + {465: 3737, 754: 3981}, // 1510 - {50: 3975}, - {1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 463: 1134, 1134, 1134, 1134, 1134, 469: 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 482: 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 492: 1134, 1134, 1134, 498: 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 535: 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 571: 1134}, - {1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 463: 1157, 1157, 1157, 1157, 1157, 469: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 482: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 492: 1157, 1157, 1157, 498: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 535: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 571: 1157}, - {1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 463: 1158, 1158, 1158, 1158, 1158, 469: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 482: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 492: 1158, 1158, 1158, 498: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 535: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 571: 1158}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1879, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3656, 811: 3979}, - // 1515 + {465: 3737, 754: 3979}, {50: 3980}, - {1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 463: 1154, 1154, 1154, 1154, 1154, 469: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 482: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 492: 1154, 1154, 1154, 498: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 535: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 571: 1154}, - {1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 463: 1159, 1159, 1159, 1159, 1159, 469: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 482: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 492: 1159, 1159, 1159, 498: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 535: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 571: 1159}, - {2: 1213, 1213, 1213, 1213, 1213, 8: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 51: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 462: 1213, 464: 1213, 1213, 1213, 468: 1213, 471: 1213, 1213, 474: 1213, 1213, 1213, 481: 1213, 491: 1213, 495: 1213, 1213, 1213, 534: 1213, 555: 1213, 1213, 1213, 559: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 567: 1213, 1213, 1213, 1213, 572: 1213, 1213, 575: 1213, 577: 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 636: 1213, 639: 3452, 733: 3450, 3451, 770: 3453, 773: 3454, 800: 3983, 802: 3455}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3984}, + {1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 466: 1134, 1134, 1134, 1134, 1134, 472: 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 485: 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 495: 1134, 1134, 1134, 501: 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 538: 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 574: 1134}, + {50: 3982}, + {1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 466: 1135, 1135, 1135, 1135, 1135, 472: 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 485: 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 495: 1135, 1135, 1135, 501: 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 538: 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 574: 1135}, + // 1515 + {1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 466: 1158, 1158, 1158, 1158, 1158, 472: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 485: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 495: 1158, 1158, 1158, 501: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 538: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 574: 1158}, + {1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 466: 1159, 1159, 1159, 1159, 1159, 472: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 485: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 495: 1159, 1159, 1159, 501: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 538: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 574: 1159}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1883, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3663, 814: 3986}, + {50: 3987}, + {1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 466: 1155, 1155, 1155, 1155, 1155, 472: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 485: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 495: 1155, 1155, 1155, 501: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 538: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 574: 1155}, // 1520 - {50: 3985, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 463: 934, 934, 934, 934, 934, 469: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 482: 934, 934, 934, 934, 934, 934, 934, 934, 934, 492: 934, 934, 934, 498: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 535: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 571: 934, 728: 3268, 735: 3460, 753: 3986}, - {1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 463: 1116, 1116, 1116, 1116, 1116, 469: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 482: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 492: 1116, 1116, 1116, 498: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 535: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 571: 1116}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1879, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3656, 811: 3988}, - {50: 3989}, + {1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 466: 1160, 1160, 1160, 1160, 1160, 472: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 485: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 495: 1160, 1160, 1160, 501: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 538: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 574: 1160}, + {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 465: 1214, 467: 1214, 1214, 1214, 471: 1214, 474: 1214, 1214, 477: 1214, 1214, 1214, 484: 1214, 494: 1214, 498: 1214, 1214, 1214, 537: 1214, 558: 1214, 1214, 1214, 562: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 570: 1214, 1214, 1214, 1214, 575: 1214, 1214, 578: 1214, 580: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 639: 1214, 642: 3459, 736: 3457, 3458, 773: 3460, 776: 3461, 803: 3990, 805: 3462}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3991}, + {50: 3992, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 466: 935, 935, 935, 935, 935, 472: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 485: 935, 935, 935, 935, 935, 935, 935, 935, 935, 495: 935, 935, 935, 501: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 538: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 574: 935, 731: 3275, 738: 3467, 756: 3993}, // 1525 - {1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 463: 1087, 1087, 1087, 1087, 1087, 469: 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 482: 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 492: 1087, 1087, 1087, 498: 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 535: 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 571: 1087}, - {147: 2250, 168: 2250, 187: 2250, 481: 2250, 510: 2250, 532: 2250, 544: 2250, 553: 2250, 2250, 560: 2250, 2250, 573: 2250}, - {147: 2249, 168: 2249, 187: 2249, 481: 2249, 510: 2249, 532: 2249, 544: 2249, 553: 2249, 2249, 560: 2249, 2249, 573: 2249}, - {2: 1861, 1861, 1861, 1861, 1861, 8: 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 51: 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 462: 1861, 464: 1861, 1861, 468: 1861, 471: 1861, 1861, 474: 1861, 1861, 1861, 481: 1861, 491: 1861, 495: 1861, 1861, 1861, 534: 1861, 555: 1861, 1861, 1861, 559: 1861, 1861, 1861, 1861, 1861, 1861, 1861, 567: 1861, 1861, 1861, 1861, 572: 1861, 1861, 575: 1861, 577: 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861}, - {510: 4017, 532: 4016, 544: 4015, 553: 4001, 4002, 1091: 4018}, + {1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 466: 1117, 1117, 1117, 1117, 1117, 472: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 485: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 495: 1117, 1117, 1117, 501: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 538: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 574: 1117}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1883, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3663, 814: 3995}, + {50: 3996}, + {1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 466: 1088, 1088, 1088, 1088, 1088, 472: 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 485: 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 495: 1088, 1088, 1088, 501: 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 538: 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 574: 1088}, + {147: 2254, 168: 2254, 185: 2254, 484: 2254, 513: 2254, 535: 2254, 547: 2254, 556: 2254, 2254, 563: 2254, 2254, 576: 2254}, // 1530 - {462: 1857}, - {2: 1855, 1855, 1855, 1855, 1855, 8: 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 51: 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 462: 1855, 464: 1855, 1855, 468: 1855, 471: 1855, 1855, 474: 1855, 1855, 1855, 481: 1855, 491: 1855, 495: 1855, 1855, 1855, 534: 1855, 555: 1855, 1855, 1855, 559: 1855, 1855, 1855, 1855, 1855, 1855, 1855, 567: 1855, 1855, 1855, 1855, 572: 1855, 1855, 575: 1855, 577: 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855}, - {2: 1853, 1853, 1853, 1853, 1853, 8: 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 51: 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 462: 1853, 464: 1853, 1853, 468: 1853, 471: 1853, 1853, 474: 1853, 1853, 1853, 481: 1853, 491: 1853, 495: 1853, 1853, 1853, 534: 1853, 555: 1853, 1853, 1853, 559: 1853, 1853, 1853, 1853, 1853, 1853, 1853, 567: 1853, 1853, 1853, 1853, 572: 1853, 1853, 575: 1853, 577: 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853}, - {462: 4011, 697: 4012}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 4008}, + {147: 2253, 168: 2253, 185: 2253, 484: 2253, 513: 2253, 535: 2253, 547: 2253, 556: 2253, 2253, 563: 2253, 2253, 576: 2253}, + {2: 1865, 1865, 1865, 1865, 1865, 8: 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 51: 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 465: 1865, 467: 1865, 1865, 471: 1865, 474: 1865, 1865, 477: 1865, 1865, 1865, 484: 1865, 494: 1865, 498: 1865, 1865, 1865, 537: 1865, 558: 1865, 1865, 1865, 562: 1865, 1865, 1865, 1865, 1865, 1865, 1865, 570: 1865, 1865, 1865, 1865, 575: 1865, 1865, 578: 1865, 580: 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865}, + {513: 4024, 535: 4023, 547: 4022, 556: 4008, 4009, 1094: 4025}, + {465: 1861}, + {2: 1859, 1859, 1859, 1859, 1859, 8: 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 51: 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 465: 1859, 467: 1859, 1859, 471: 1859, 474: 1859, 1859, 477: 1859, 1859, 1859, 484: 1859, 494: 1859, 498: 1859, 1859, 1859, 537: 1859, 558: 1859, 1859, 1859, 562: 1859, 1859, 1859, 1859, 1859, 1859, 1859, 570: 1859, 1859, 1859, 1859, 575: 1859, 1859, 578: 1859, 580: 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859}, // 1535 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 4004, 3160, 3241, 3159, 3156}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 4003, 3160, 3241, 3159, 3156}, - {2: 1842, 1842, 1842, 1842, 1842, 8: 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 51: 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 462: 1842, 464: 1842, 1842, 468: 1842, 471: 1842, 1842, 474: 1842, 1842, 1842, 481: 1842, 491: 1842, 495: 1842, 1842, 1842, 534: 1842, 555: 1842, 1842, 1842, 559: 1842, 1842, 1842, 1842, 1842, 1842, 1842, 567: 1842, 1842, 1842, 1842, 572: 1842, 1842, 575: 1842, 577: 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842}, - {2: 1841, 1841, 1841, 1841, 1841, 8: 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 51: 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 462: 1841, 464: 1841, 1841, 468: 1841, 471: 1841, 1841, 474: 1841, 1841, 1841, 481: 1841, 491: 1841, 495: 1841, 1841, 1841, 534: 1841, 555: 1841, 1841, 1841, 559: 1841, 1841, 1841, 1841, 1841, 1841, 1841, 567: 1841, 1841, 1841, 1841, 572: 1841, 1841, 575: 1841, 577: 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841}, - {1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 463: 1844, 1844, 467: 1844, 469: 1844, 1844, 1844, 1844, 3256, 477: 1844, 1844, 1844, 482: 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 492: 1844, 1844, 1844, 498: 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 511: 1844, 513: 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 533: 1844, 535: 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 571: 3257}, + {2: 1857, 1857, 1857, 1857, 1857, 8: 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 51: 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 465: 1857, 467: 1857, 1857, 471: 1857, 474: 1857, 1857, 477: 1857, 1857, 1857, 484: 1857, 494: 1857, 498: 1857, 1857, 1857, 537: 1857, 558: 1857, 1857, 1857, 562: 1857, 1857, 1857, 1857, 1857, 1857, 1857, 570: 1857, 1857, 1857, 1857, 575: 1857, 1857, 578: 1857, 580: 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857}, + {465: 4018, 700: 4019}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 4015}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 4011, 3167, 3248, 3166, 3163}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 4010, 3167, 3248, 3166, 3163}, // 1540 - {1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 4006, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 463: 1840, 1840, 467: 1840, 469: 1840, 1840, 1840, 1840, 3256, 477: 1840, 1840, 1840, 482: 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 492: 1840, 1840, 1840, 498: 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 511: 1840, 513: 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 533: 1840, 535: 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 571: 3257, 1218: 4005}, - {1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 463: 1845, 1845, 467: 1845, 469: 1845, 1845, 1845, 1845, 477: 1845, 1845, 1845, 482: 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 492: 1845, 1845, 1845, 498: 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 511: 1845, 513: 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 533: 1845, 535: 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845}, - {464: 4007}, - {1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 463: 1839, 1839, 467: 1839, 469: 1839, 1839, 1839, 1839, 477: 1839, 1839, 1839, 482: 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 492: 1839, 1839, 1839, 498: 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 511: 1839, 513: 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 533: 1839, 535: 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839}, - {474: 3593, 3592, 3598, 494: 4009, 512: 3594, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591}, + {2: 1846, 1846, 1846, 1846, 1846, 8: 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 51: 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 465: 1846, 467: 1846, 1846, 471: 1846, 474: 1846, 1846, 477: 1846, 1846, 1846, 484: 1846, 494: 1846, 498: 1846, 1846, 1846, 537: 1846, 558: 1846, 1846, 1846, 562: 1846, 1846, 1846, 1846, 1846, 1846, 1846, 570: 1846, 1846, 1846, 1846, 575: 1846, 1846, 578: 1846, 580: 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846}, + {2: 1845, 1845, 1845, 1845, 1845, 8: 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 51: 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 465: 1845, 467: 1845, 1845, 471: 1845, 474: 1845, 1845, 477: 1845, 1845, 1845, 484: 1845, 494: 1845, 498: 1845, 1845, 1845, 537: 1845, 558: 1845, 1845, 1845, 562: 1845, 1845, 1845, 1845, 1845, 1845, 1845, 570: 1845, 1845, 1845, 1845, 575: 1845, 1845, 578: 1845, 580: 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845}, + {1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 466: 1848, 1848, 470: 1848, 472: 1848, 1848, 1848, 1848, 3263, 480: 1848, 1848, 1848, 485: 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 495: 1848, 1848, 1848, 501: 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 514: 1848, 516: 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 536: 1848, 538: 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 574: 3264}, + {1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 4013, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 466: 1844, 1844, 470: 1844, 472: 1844, 1844, 1844, 1844, 3263, 480: 1844, 1844, 1844, 485: 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 495: 1844, 1844, 1844, 501: 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 514: 1844, 516: 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 536: 1844, 538: 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 574: 3264, 1221: 4012}, + {1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 466: 1849, 1849, 470: 1849, 472: 1849, 1849, 1849, 1849, 480: 1849, 1849, 1849, 485: 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 495: 1849, 1849, 1849, 501: 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 514: 1849, 516: 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 536: 1849, 538: 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849}, // 1545 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 4010}, - {1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 463: 1846, 1846, 467: 1846, 469: 1846, 1846, 1846, 1846, 477: 1846, 1846, 1846, 482: 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 492: 1846, 1846, 1846, 498: 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 511: 1846, 513: 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 533: 1846, 535: 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 2512, 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3783, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 2510, 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 634: 2506, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3782, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 739: 3785, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 3787, 3786, 3784, 766: 4013}, - {1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 463: 1847, 1847, 467: 1847, 469: 1847, 1847, 1847, 1847, 477: 1847, 1847, 1847, 482: 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 492: 1847, 1847, 1847, 498: 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 511: 1847, 513: 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 533: 1847, 535: 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847}, - {7: 3496, 50: 4014}, + {467: 4014}, + {1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 466: 1843, 1843, 470: 1843, 472: 1843, 1843, 1843, 1843, 480: 1843, 1843, 1843, 485: 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 495: 1843, 1843, 1843, 501: 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 514: 1843, 516: 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 536: 1843, 538: 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843}, + {477: 3600, 3599, 3605, 497: 4016, 515: 3601, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 4017}, + {1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 466: 1850, 1850, 470: 1850, 472: 1850, 1850, 1850, 1850, 480: 1850, 1850, 1850, 485: 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 495: 1850, 1850, 1850, 501: 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 514: 1850, 516: 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 536: 1850, 538: 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850}, // 1550 - {1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 463: 1848, 1848, 467: 1848, 469: 1848, 1848, 1848, 1848, 477: 1848, 1848, 1848, 482: 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 492: 1848, 1848, 1848, 498: 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 511: 1848, 513: 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 533: 1848, 535: 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848}, - {2: 1860, 1860, 1860, 1860, 1860, 8: 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 51: 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 462: 1860, 464: 1860, 1860, 468: 1860, 471: 1860, 1860, 474: 1860, 1860, 1860, 481: 1860, 491: 1860, 495: 1860, 1860, 1860, 534: 1860, 555: 1860, 1860, 1860, 559: 1860, 1860, 1860, 1860, 1860, 1860, 1860, 567: 1860, 1860, 1860, 1860, 572: 1860, 1860, 575: 1860, 577: 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860}, - {462: 1856}, - {2: 1854, 1854, 1854, 1854, 1854, 8: 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 51: 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 462: 1854, 464: 1854, 1854, 468: 1854, 471: 1854, 1854, 474: 1854, 1854, 1854, 481: 1854, 491: 1854, 495: 1854, 1854, 1854, 534: 1854, 555: 1854, 1854, 1854, 559: 1854, 1854, 1854, 1854, 1854, 1854, 1854, 567: 1854, 1854, 1854, 1854, 572: 1854, 1854, 575: 1854, 577: 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854}, - {2: 1852, 1852, 1852, 1852, 1852, 8: 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 51: 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 462: 1852, 464: 1852, 1852, 468: 1852, 471: 1852, 1852, 474: 1852, 1852, 1852, 481: 1852, 491: 1852, 495: 1852, 1852, 1852, 534: 1852, 555: 1852, 1852, 1852, 559: 1852, 1852, 1852, 1852, 1852, 1852, 1852, 567: 1852, 1852, 1852, 1852, 572: 1852, 1852, 575: 1852, 577: 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 2516, 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3790, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 2514, 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 637: 2510, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3789, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 742: 3792, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 3794, 3793, 3791, 769: 4020}, + {1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 466: 1851, 1851, 470: 1851, 472: 1851, 1851, 1851, 1851, 480: 1851, 1851, 1851, 485: 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 495: 1851, 1851, 1851, 501: 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 514: 1851, 516: 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 536: 1851, 538: 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851}, + {7: 3503, 50: 4021}, + {1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 466: 1852, 1852, 470: 1852, 472: 1852, 1852, 1852, 1852, 480: 1852, 1852, 1852, 485: 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 495: 1852, 1852, 1852, 501: 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 514: 1852, 516: 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 536: 1852, 538: 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852}, + {2: 1864, 1864, 1864, 1864, 1864, 8: 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 51: 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 465: 1864, 467: 1864, 1864, 471: 1864, 474: 1864, 1864, 477: 1864, 1864, 1864, 484: 1864, 494: 1864, 498: 1864, 1864, 1864, 537: 1864, 558: 1864, 1864, 1864, 562: 1864, 1864, 1864, 1864, 1864, 1864, 1864, 570: 1864, 1864, 1864, 1864, 575: 1864, 1864, 578: 1864, 580: 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864}, // 1555 - {168: 4042, 481: 4043, 560: 4041, 4040}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 4034, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 4035, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 4033, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 639: 4036, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 4031, 1152: 4032}, - {2: 1869, 1869, 1869, 1869, 1869, 8: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 51: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 462: 1869, 464: 1869, 1869, 468: 1869, 471: 1869, 1869, 474: 1869, 1869, 1869, 481: 1869, 491: 1869, 495: 1869, 1869, 1869, 534: 1869, 555: 1869, 1869, 1869, 559: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 567: 1869, 1869, 1869, 1869, 572: 1869, 1869, 575: 1869, 577: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 639: 1869}, - {2: 1868, 1868, 1868, 1868, 1868, 8: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 51: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 462: 1868, 464: 1868, 1868, 468: 1868, 471: 1868, 1868, 474: 1868, 1868, 1868, 481: 1868, 491: 1868, 495: 1868, 1868, 1868, 534: 1868, 555: 1868, 1868, 1868, 559: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 567: 1868, 1868, 1868, 1868, 572: 1868, 1868, 575: 1868, 577: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 639: 1868}, - {2: 1867, 1867, 1867, 1867, 1867, 8: 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 51: 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 462: 1867, 464: 1867, 1867, 468: 1867, 471: 1867, 1867, 474: 1867, 1867, 1867, 481: 1867, 491: 1867, 495: 1867, 1867, 1867, 534: 1867, 555: 1867, 1867, 1867, 559: 1867, 1867, 1867, 1867, 1867, 1867, 1867, 567: 1867, 1867, 1867, 1867, 572: 1867, 1867, 575: 1867, 577: 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 639: 1867}, + {465: 1860}, + {2: 1858, 1858, 1858, 1858, 1858, 8: 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 51: 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 465: 1858, 467: 1858, 1858, 471: 1858, 474: 1858, 1858, 477: 1858, 1858, 1858, 484: 1858, 494: 1858, 498: 1858, 1858, 1858, 537: 1858, 558: 1858, 1858, 1858, 562: 1858, 1858, 1858, 1858, 1858, 1858, 1858, 570: 1858, 1858, 1858, 1858, 575: 1858, 1858, 578: 1858, 580: 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858}, + {2: 1856, 1856, 1856, 1856, 1856, 8: 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 51: 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 465: 1856, 467: 1856, 1856, 471: 1856, 474: 1856, 1856, 477: 1856, 1856, 1856, 484: 1856, 494: 1856, 498: 1856, 1856, 1856, 537: 1856, 558: 1856, 1856, 1856, 562: 1856, 1856, 1856, 1856, 1856, 1856, 1856, 570: 1856, 1856, 1856, 1856, 575: 1856, 1856, 578: 1856, 580: 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856}, + {168: 4049, 484: 4050, 563: 4048, 4047}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 4041, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 4042, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 4040, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 642: 4043, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 4038, 1155: 4039}, // 1560 - {2: 1866, 1866, 1866, 1866, 1866, 8: 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 51: 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 462: 1866, 464: 1866, 1866, 468: 1866, 471: 1866, 1866, 474: 1866, 1866, 1866, 481: 1866, 491: 1866, 495: 1866, 1866, 1866, 534: 1866, 555: 1866, 1866, 1866, 559: 1866, 1866, 1866, 1866, 1866, 1866, 1866, 567: 1866, 1866, 1866, 1866, 572: 1866, 1866, 575: 1866, 577: 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 639: 1866}, - {2: 1865, 1865, 1865, 1865, 1865, 8: 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 51: 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 462: 1865, 464: 1865, 1865, 468: 1865, 471: 1865, 1865, 474: 1865, 1865, 1865, 481: 1865, 491: 1865, 495: 1865, 1865, 1865, 534: 1865, 555: 1865, 1865, 1865, 559: 1865, 1865, 1865, 1865, 1865, 1865, 1865, 567: 1865, 1865, 1865, 1865, 572: 1865, 1865, 575: 1865, 577: 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 639: 1865}, - {2: 1864, 1864, 1864, 1864, 1864, 8: 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 51: 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 462: 1864, 464: 1864, 1864, 468: 1864, 471: 1864, 1864, 474: 1864, 1864, 1864, 481: 1864, 491: 1864, 495: 1864, 1864, 1864, 534: 1864, 555: 1864, 1864, 1864, 559: 1864, 1864, 1864, 1864, 1864, 1864, 1864, 567: 1864, 1864, 1864, 1864, 572: 1864, 1864, 575: 1864, 577: 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 639: 1864}, - {2: 1863, 1863, 1863, 1863, 1863, 8: 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 51: 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 462: 1863, 464: 1863, 1863, 468: 1863, 471: 1863, 1863, 474: 1863, 1863, 1863, 481: 1863, 491: 1863, 495: 1863, 1863, 1863, 534: 1863, 555: 1863, 1863, 1863, 559: 1863, 1863, 1863, 1863, 1863, 1863, 1863, 567: 1863, 1863, 1863, 1863, 572: 1863, 1863, 575: 1863, 577: 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 639: 1863}, - {2: 1862, 1862, 1862, 1862, 1862, 8: 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 51: 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 462: 1862, 464: 1862, 1862, 468: 1862, 471: 1862, 1862, 474: 1862, 1862, 1862, 481: 1862, 491: 1862, 495: 1862, 1862, 1862, 534: 1862, 555: 1862, 1862, 1862, 559: 1862, 1862, 1862, 1862, 1862, 1862, 1862, 567: 1862, 1862, 1862, 1862, 572: 1862, 1862, 575: 1862, 577: 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 639: 1862}, + {2: 1873, 1873, 1873, 1873, 1873, 8: 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 51: 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 465: 1873, 467: 1873, 1873, 471: 1873, 474: 1873, 1873, 477: 1873, 1873, 1873, 484: 1873, 494: 1873, 498: 1873, 1873, 1873, 537: 1873, 558: 1873, 1873, 1873, 562: 1873, 1873, 1873, 1873, 1873, 1873, 1873, 570: 1873, 1873, 1873, 1873, 575: 1873, 1873, 578: 1873, 580: 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 642: 1873}, + {2: 1872, 1872, 1872, 1872, 1872, 8: 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 51: 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 465: 1872, 467: 1872, 1872, 471: 1872, 474: 1872, 1872, 477: 1872, 1872, 1872, 484: 1872, 494: 1872, 498: 1872, 1872, 1872, 537: 1872, 558: 1872, 1872, 1872, 562: 1872, 1872, 1872, 1872, 1872, 1872, 1872, 570: 1872, 1872, 1872, 1872, 575: 1872, 1872, 578: 1872, 580: 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 642: 1872}, + {2: 1871, 1871, 1871, 1871, 1871, 8: 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 51: 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 465: 1871, 467: 1871, 1871, 471: 1871, 474: 1871, 1871, 477: 1871, 1871, 1871, 484: 1871, 494: 1871, 498: 1871, 1871, 1871, 537: 1871, 558: 1871, 1871, 1871, 562: 1871, 1871, 1871, 1871, 1871, 1871, 1871, 570: 1871, 1871, 1871, 1871, 575: 1871, 1871, 578: 1871, 580: 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 642: 1871}, + {2: 1870, 1870, 1870, 1870, 1870, 8: 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 51: 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 465: 1870, 467: 1870, 1870, 471: 1870, 474: 1870, 1870, 477: 1870, 1870, 1870, 484: 1870, 494: 1870, 498: 1870, 1870, 1870, 537: 1870, 558: 1870, 1870, 1870, 562: 1870, 1870, 1870, 1870, 1870, 1870, 1870, 570: 1870, 1870, 1870, 1870, 575: 1870, 1870, 578: 1870, 580: 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 642: 1870}, + {2: 1869, 1869, 1869, 1869, 1869, 8: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 51: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 465: 1869, 467: 1869, 1869, 471: 1869, 474: 1869, 1869, 477: 1869, 1869, 1869, 484: 1869, 494: 1869, 498: 1869, 1869, 1869, 537: 1869, 558: 1869, 1869, 1869, 562: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 570: 1869, 1869, 1869, 1869, 575: 1869, 1869, 578: 1869, 580: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 642: 1869}, // 1565 - {168: 1859, 465: 3991, 3990, 481: 1859, 560: 1859, 1859, 796: 4030}, - {168: 1858, 481: 1858, 560: 1858, 1858}, - {1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 463: 1873, 1873, 467: 1873, 469: 1873, 1873, 1873, 1873, 477: 1873, 1873, 1873, 482: 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 492: 1873, 1873, 1873, 498: 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 511: 1873, 513: 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 533: 1873, 535: 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873}, - {462: 2513, 697: 4039}, - {724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 463: 724, 724, 724, 724, 724, 469: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 482: 724, 724, 724, 724, 724, 724, 724, 724, 724, 492: 724, 724, 724, 498: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 535: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 571: 724, 648: 4037}, + {2: 1868, 1868, 1868, 1868, 1868, 8: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 51: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 465: 1868, 467: 1868, 1868, 471: 1868, 474: 1868, 1868, 477: 1868, 1868, 1868, 484: 1868, 494: 1868, 498: 1868, 1868, 1868, 537: 1868, 558: 1868, 1868, 1868, 562: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 570: 1868, 1868, 1868, 1868, 575: 1868, 1868, 578: 1868, 580: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 642: 1868}, + {2: 1867, 1867, 1867, 1867, 1867, 8: 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 51: 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 465: 1867, 467: 1867, 1867, 471: 1867, 474: 1867, 1867, 477: 1867, 1867, 1867, 484: 1867, 494: 1867, 498: 1867, 1867, 1867, 537: 1867, 558: 1867, 1867, 1867, 562: 1867, 1867, 1867, 1867, 1867, 1867, 1867, 570: 1867, 1867, 1867, 1867, 575: 1867, 1867, 578: 1867, 580: 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 642: 1867}, + {2: 1866, 1866, 1866, 1866, 1866, 8: 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 51: 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 465: 1866, 467: 1866, 1866, 471: 1866, 474: 1866, 1866, 477: 1866, 1866, 1866, 484: 1866, 494: 1866, 498: 1866, 1866, 1866, 537: 1866, 558: 1866, 1866, 1866, 562: 1866, 1866, 1866, 1866, 1866, 1866, 1866, 570: 1866, 1866, 1866, 1866, 575: 1866, 1866, 578: 1866, 580: 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 642: 1866}, + {168: 1863, 468: 3998, 3997, 484: 1863, 563: 1863, 1863, 799: 4037}, + {168: 1862, 484: 1862, 563: 1862, 1862}, // 1570 - {1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1851, 1675, 1675, 1675, 1675, 1675, 469: 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 482: 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 492: 1675, 1675, 1675, 498: 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 535: 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 571: 1675, 640: 1675, 643: 1675, 1675}, - {1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1850, 1674, 1674, 1674, 1674, 1674, 469: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 482: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 492: 1674, 1674, 1674, 498: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 535: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 571: 1674, 640: 1674, 643: 1674, 1674}, - {462: 1849}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 4038}, - {1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 463: 1871, 1871, 467: 1871, 469: 1871, 1871, 1871, 1871, 477: 1871, 1871, 1871, 482: 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 492: 1871, 1871, 1871, 498: 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 511: 1871, 513: 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 533: 1871, 535: 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871}, + {1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 466: 1877, 1877, 470: 1877, 472: 1877, 1877, 1877, 1877, 480: 1877, 1877, 1877, 485: 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 495: 1877, 1877, 1877, 501: 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 514: 1877, 516: 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 536: 1877, 538: 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877}, + {465: 2517, 700: 4046}, + {725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 466: 725, 725, 725, 725, 725, 472: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 485: 725, 725, 725, 725, 725, 725, 725, 725, 725, 495: 725, 725, 725, 501: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 538: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 574: 725, 651: 4044}, + {1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1855, 1678, 1678, 1678, 1678, 1678, 472: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 485: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 495: 1678, 1678, 1678, 501: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 538: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 574: 1678, 643: 1678, 646: 1678, 1678}, + {1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1854, 1677, 1677, 1677, 1677, 1677, 472: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 485: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 495: 1677, 1677, 1677, 501: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 538: 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 574: 1677, 643: 1677, 646: 1677, 1677}, // 1575 - {1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 463: 1872, 1872, 467: 1872, 469: 1872, 1872, 1872, 1872, 477: 1872, 1872, 1872, 482: 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 492: 1872, 1872, 1872, 498: 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 511: 1872, 513: 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 533: 1872, 535: 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872}, - {1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 463: 1898, 1898, 467: 1898, 469: 1898, 1898, 1898, 1898, 477: 1898, 1898, 1898, 482: 1898, 1898, 1898, 1898, 487: 1898, 1898, 1898, 1898, 492: 1898, 1898, 1898, 498: 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 511: 1898, 513: 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 533: 1898, 535: 1898}, - {1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 463: 1897, 1897, 467: 1897, 469: 1897, 1897, 1897, 1897, 477: 1897, 1897, 1897, 482: 1897, 1897, 1897, 1897, 487: 1897, 1897, 1897, 1897, 492: 1897, 1897, 1897, 498: 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 511: 1897, 513: 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 533: 1897, 535: 1897}, - {1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 463: 1896, 1896, 467: 1896, 469: 1896, 1896, 1896, 1896, 477: 1896, 1896, 1896, 482: 1896, 1896, 1896, 1896, 487: 1896, 1896, 1896, 1896, 492: 1896, 1896, 1896, 498: 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 511: 1896, 513: 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 533: 1896, 535: 1896}, - {1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 463: 1874, 1874, 467: 1874, 469: 1874, 1874, 1874, 1874, 477: 1874, 1874, 1874, 482: 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 492: 1874, 1874, 1874, 498: 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 511: 1874, 513: 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 533: 1874, 535: 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874}, + {465: 1853}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 4045}, + {1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 466: 1875, 1875, 470: 1875, 472: 1875, 1875, 1875, 1875, 480: 1875, 1875, 1875, 485: 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 495: 1875, 1875, 1875, 501: 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 514: 1875, 516: 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 536: 1875, 538: 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875}, + {1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 466: 1876, 1876, 470: 1876, 472: 1876, 1876, 1876, 1876, 480: 1876, 1876, 1876, 485: 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 495: 1876, 1876, 1876, 501: 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 514: 1876, 516: 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 536: 1876, 538: 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876}, + {1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 466: 1902, 1902, 470: 1902, 472: 1902, 1902, 1902, 1902, 480: 1902, 1902, 1902, 485: 1902, 1902, 1902, 1902, 490: 1902, 1902, 1902, 1902, 495: 1902, 1902, 1902, 501: 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 514: 1902, 516: 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 536: 1902, 538: 1902}, // 1580 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 4047}, - {2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 462: 2273, 480: 2273, 486: 2273, 493: 2273, 495: 2273, 518: 2273, 2273, 534: 2273, 635: 2273, 640: 4068, 657: 2273, 2273, 660: 2273, 665: 2273, 2273, 668: 2273, 2273, 2273, 2273, 2273, 2273, 676: 2273, 678: 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 693: 2273, 2273, 2273, 2273}, - {7: 2270, 50: 2270}, - {7: 4048, 50: 4049}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4067}, + {1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 466: 1901, 1901, 470: 1901, 472: 1901, 1901, 1901, 1901, 480: 1901, 1901, 1901, 485: 1901, 1901, 1901, 1901, 490: 1901, 1901, 1901, 1901, 495: 1901, 1901, 1901, 501: 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 514: 1901, 516: 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 536: 1901, 538: 1901}, + {1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 466: 1900, 1900, 470: 1900, 472: 1900, 1900, 1900, 1900, 480: 1900, 1900, 1900, 485: 1900, 1900, 1900, 1900, 490: 1900, 1900, 1900, 1900, 495: 1900, 1900, 1900, 501: 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 514: 1900, 516: 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 536: 1900, 538: 1900}, + {1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 466: 1878, 1878, 470: 1878, 472: 1878, 1878, 1878, 1878, 480: 1878, 1878, 1878, 485: 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 495: 1878, 1878, 1878, 501: 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 514: 1878, 516: 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 536: 1878, 538: 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 4054}, + {2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 465: 2277, 483: 2277, 489: 2277, 496: 2277, 498: 2277, 521: 2277, 2277, 537: 2277, 638: 2277, 643: 4075, 660: 2277, 2277, 663: 2277, 668: 2277, 2277, 671: 2277, 2277, 2277, 2277, 2277, 2277, 679: 2277, 681: 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 696: 2277, 2277, 2277, 2277}, // 1585 - {295: 4050}, - {462: 4051}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 4052}, - {50: 1892, 463: 4055, 474: 3593, 3592, 3598, 512: 3594, 532: 4054, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591, 1198: 4053}, - {50: 4066}, + {7: 2274, 50: 2274}, + {7: 4055, 50: 4056}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4074}, + {295: 4057}, + {465: 4058}, // 1590 - {220: 4059, 507: 4058}, - {143: 4056}, - {242: 4057}, - {50: 1888}, - {339: 4061}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 4059}, + {50: 1896, 466: 4062, 477: 3600, 3599, 3605, 515: 3601, 535: 4061, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598, 1201: 4060}, + {50: 4073}, + {220: 4066, 510: 4065}, + {143: 4063}, // 1595 - {203: 4060}, - {50: 1889}, - {203: 4062}, - {50: 1891, 463: 4063}, - {143: 4064}, + {242: 4064}, + {50: 1892}, + {342: 4068}, + {203: 4067}, + {50: 1893}, // 1600 - {242: 4065}, - {50: 1890}, - {1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 463: 1899, 1899, 467: 1899, 469: 1899, 1899, 1899, 1899, 477: 1899, 1899, 1899, 482: 1899, 1899, 1899, 1899, 487: 1899, 1899, 1899, 1899, 492: 1899, 1899, 1899, 498: 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 511: 1899, 513: 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 533: 1899, 535: 1899}, - {7: 2269, 50: 2269}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4069, 2681, 2682, 2680}, + {203: 4069}, + {50: 1895, 466: 4070}, + {143: 4071}, + {242: 4072}, + {50: 1894}, // 1605 - {2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 462: 2272, 480: 2272, 486: 2272, 493: 2272, 495: 2272, 518: 2272, 2272, 534: 2272, 635: 2272, 640: 4070, 657: 2272, 2272, 660: 2272, 665: 2272, 2272, 668: 2272, 2272, 2272, 2272, 2272, 2272, 676: 2272, 678: 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 693: 2272, 2272, 2272, 2272}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4071, 2681, 2682, 2680}, - {2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 462: 2271, 480: 2271, 486: 2271, 493: 2271, 495: 2271, 518: 2271, 2271, 534: 2271, 635: 2271, 657: 2271, 2271, 660: 2271, 665: 2271, 2271, 668: 2271, 2271, 2271, 2271, 2271, 2271, 676: 2271, 678: 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 693: 2271, 2271, 2271, 2271}, - {1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 463: 1900, 1900, 467: 1900, 469: 1900, 1900, 1900, 1900, 477: 1900, 1900, 1900, 482: 1900, 1900, 1900, 1900, 487: 1900, 1900, 1900, 1900, 492: 1900, 1900, 1900, 498: 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 511: 1900, 513: 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 533: 1900, 535: 1900, 722: 3248, 3246}, - {1274, 1274, 7: 1274, 50: 1274, 124: 1274, 461: 1274, 463: 1274, 469: 1274, 1274, 477: 1274, 1274, 482: 1274, 1274, 1274, 1274, 488: 1274, 490: 1274, 504: 1274, 1274, 513: 1274, 516: 1274, 1274}, + {1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 466: 1903, 1903, 470: 1903, 472: 1903, 1903, 1903, 1903, 480: 1903, 1903, 1903, 485: 1903, 1903, 1903, 1903, 490: 1903, 1903, 1903, 1903, 495: 1903, 1903, 1903, 501: 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 514: 1903, 516: 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 536: 1903, 538: 1903}, + {7: 2273, 50: 2273}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4076, 2685, 2686, 2684}, + {2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 465: 2276, 483: 2276, 489: 2276, 496: 2276, 498: 2276, 521: 2276, 2276, 537: 2276, 638: 2276, 643: 4077, 660: 2276, 2276, 663: 2276, 668: 2276, 2276, 671: 2276, 2276, 2276, 2276, 2276, 2276, 679: 2276, 681: 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 696: 2276, 2276, 2276, 2276}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4078, 2685, 2686, 2684}, // 1610 - {1273, 1273, 7: 1273, 50: 1273, 124: 1273, 461: 1273, 463: 1273, 469: 1273, 1273, 477: 1273, 1273, 482: 1273, 1273, 1273, 1273, 488: 1273, 490: 1273, 504: 1273, 1273, 513: 1273, 516: 1273, 1273}, - {1272, 1272, 7: 1272, 50: 1272, 124: 1272, 461: 1272, 463: 1272, 469: 1272, 1272, 477: 1272, 1272, 482: 1272, 1272, 1272, 1272, 488: 1272, 490: 1272, 504: 1272, 1272, 513: 1272, 516: 1272, 1272}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4077}, - {1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 463: 1904, 1904, 467: 1904, 469: 1904, 1904, 1904, 1904, 477: 1904, 1904, 1904, 482: 1904, 1904, 1904, 1904, 487: 1904, 1904, 1904, 1904, 492: 1904, 1904, 3252, 498: 3250, 3251, 3249, 3247, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 511: 1904, 513: 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 533: 1904, 535: 1904, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4079}, + {2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 465: 2275, 483: 2275, 489: 2275, 496: 2275, 498: 2275, 521: 2275, 2275, 537: 2275, 638: 2275, 660: 2275, 2275, 663: 2275, 668: 2275, 2275, 671: 2275, 2275, 2275, 2275, 2275, 2275, 679: 2275, 681: 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 696: 2275, 2275, 2275, 2275}, + {1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 466: 1904, 1904, 470: 1904, 472: 1904, 1904, 1904, 1904, 480: 1904, 1904, 1904, 485: 1904, 1904, 1904, 1904, 490: 1904, 1904, 1904, 1904, 495: 1904, 1904, 1904, 501: 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 514: 1904, 516: 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 536: 1904, 538: 1904, 725: 3255, 3253}, + {1275, 1275, 7: 1275, 50: 1275, 125: 1275, 464: 1275, 466: 1275, 472: 1275, 1275, 480: 1275, 1275, 485: 1275, 1275, 1275, 1275, 491: 1275, 493: 1275, 507: 1275, 1275, 516: 1275, 519: 1275, 1275}, + {1274, 1274, 7: 1274, 50: 1274, 125: 1274, 464: 1274, 466: 1274, 472: 1274, 1274, 480: 1274, 1274, 485: 1274, 1274, 1274, 1274, 491: 1274, 493: 1274, 507: 1274, 1274, 516: 1274, 519: 1274, 1274}, + {1273, 1273, 7: 1273, 50: 1273, 125: 1273, 464: 1273, 466: 1273, 472: 1273, 1273, 480: 1273, 1273, 485: 1273, 1273, 1273, 1273, 491: 1273, 493: 1273, 507: 1273, 1273, 516: 1273, 519: 1273, 1273}, // 1615 - {50: 4080}, - {2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 463: 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 492: 2178, 2178, 2178, 498: 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 535: 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 566: 2178, 571: 2178, 574: 2178, 576: 2178, 630: 2178, 2178, 2178, 2178}, - {482: 4082}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4083}, - {2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 463: 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 492: 2179, 2179, 2179, 498: 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 535: 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 566: 2179, 571: 2179, 574: 2179, 576: 2179, 630: 2179, 2179, 2179, 2179}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4084}, + {1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 466: 1908, 1908, 470: 1908, 472: 1908, 1908, 1908, 1908, 480: 1908, 1908, 1908, 485: 1908, 1908, 1908, 1908, 490: 1908, 1908, 1908, 1908, 495: 1908, 1908, 3259, 501: 3257, 3258, 3256, 3254, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 514: 1908, 516: 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 536: 1908, 538: 1908, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4086}, + {50: 4087}, + {2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 466: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 495: 2182, 2182, 2182, 501: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 538: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 569: 2182, 574: 2182, 577: 2182, 579: 2182, 633: 2182, 2182, 2182, 2182}, // 1620 - {240, 240, 50: 240, 461: 240, 463: 240, 469: 240, 240, 477: 240, 240, 482: 240, 240, 240, 240, 488: 240, 490: 240, 494: 3252, 498: 3250, 3251, 3249, 3247, 240, 504: 240, 240, 722: 3248, 3246}, + {485: 4089}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4090}, + {2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 466: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 495: 2183, 2183, 2183, 501: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 538: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 569: 2183, 574: 2183, 577: 2183, 579: 2183, 633: 2183, 2183, 2183, 2183}, + {240, 240, 50: 240, 464: 240, 466: 240, 472: 240, 240, 480: 240, 240, 485: 240, 240, 240, 240, 491: 240, 493: 240, 497: 3259, 501: 3257, 3258, 3256, 3254, 240, 507: 240, 240, 725: 3255, 3253}, {4, 4}, - {143: 4087}, - {239, 239, 483: 239, 488: 239, 2641, 239, 776: 2642, 4088}, - {1268, 1268, 483: 1268, 488: 1268, 490: 2644, 754: 2645, 797: 4089}, // 1625 - {844, 844, 483: 2647, 488: 2648, 755: 2649, 814: 4090}, + {143: 4094}, + {239, 239, 486: 239, 491: 239, 2645, 239, 779: 2646, 4095}, + {1269, 1269, 486: 1269, 491: 1269, 493: 2648, 757: 2649, 800: 4096}, + {845, 845, 486: 2651, 491: 2652, 758: 2653, 817: 4097}, {2, 2}, - {558: 4093}, - {2: 1815, 1815, 1815, 1815, 1815, 8: 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 51: 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 462: 1815, 484: 1815, 487: 1815, 558: 1815, 568: 1815}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4094}, // 1630 - {2347, 2347, 2347, 2347, 4139, 4141, 391, 13: 4158, 2121, 4156, 4097, 4160, 4147, 4176, 4140, 4143, 4142, 4145, 4146, 4148, 4155, 391, 4166, 4167, 4153, 4154, 4159, 4161, 4173, 4172, 4178, 4174, 4171, 4164, 4169, 4170, 4163, 4165, 4168, 4157, 69: 4110, 72: 4131, 4132, 81: 4133, 132: 4113, 173: 4117, 4118, 195: 4098, 209: 4112, 215: 4128, 226: 4107, 236: 4114, 240: 4109, 256: 4119, 264: 4115, 272: 4129, 4130, 279: 4099, 463: 4127, 468: 4138, 4175, 473: 2121, 480: 2347, 485: 4134, 490: 4116, 492: 4126, 4101, 495: 2121, 574: 4106, 4102, 635: 2121, 637: 4144, 641: 4096, 650: 4121, 657: 4108, 659: 4135, 667: 4120, 674: 4122, 677: 4103, 692: 4111, 767: 4149, 778: 4151, 798: 4150, 820: 4152, 824: 4162, 828: 4177, 855: 4125, 868: 4123, 904: 4100, 911: 4104, 971: 4137, 1117: 4105, 1144: 4124, 1149: 4136, 4095}, - {2119, 2119, 4898, 4899, 480: 4900, 1079: 4897, 1148: 4896}, - {480: 4870}, - {158: 4862}, - {464: 2002, 468: 2002, 486: 4179, 724: 4859}, + {561: 4100}, + {2: 1819, 1819, 1819, 1819, 1819, 8: 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 51: 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 465: 1819, 487: 1819, 490: 1819, 561: 1819, 571: 1819}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4101}, + {2351, 2351, 2351, 2351, 4146, 4148, 391, 13: 4165, 2125, 4163, 4104, 4167, 4154, 4183, 4147, 4150, 4149, 4152, 4153, 4155, 4162, 391, 4173, 4174, 4160, 4161, 4166, 4168, 4180, 4179, 4185, 4181, 4178, 4171, 4176, 4177, 4170, 4172, 4175, 4164, 69: 4117, 72: 4138, 4139, 81: 4140, 132: 4120, 193: 4105, 4124, 197: 4125, 209: 4119, 215: 4135, 226: 4114, 236: 4121, 240: 4116, 256: 4126, 264: 4122, 272: 4136, 4137, 279: 4106, 466: 4134, 471: 4145, 4182, 476: 2125, 483: 2351, 488: 4141, 493: 4123, 495: 4133, 4108, 498: 2125, 577: 4113, 4109, 638: 2125, 640: 4151, 644: 4103, 653: 4128, 660: 4115, 662: 4142, 670: 4127, 677: 4129, 680: 4110, 695: 4118, 770: 4156, 781: 4158, 801: 4157, 823: 4159, 827: 4169, 831: 4184, 858: 4132, 871: 4130, 907: 4107, 914: 4111, 974: 4144, 1120: 4112, 1147: 4131, 1152: 4143, 4102}, + {2123, 2123, 4905, 4906, 483: 4907, 1082: 4904, 1151: 4903}, // 1635 - {464: 2002, 468: 2002, 486: 4179, 724: 4856}, - {2430, 2430, 2430, 2430, 4139, 4141, 391, 2430, 13: 4158, 2121, 4156, 4097, 4160, 4147, 4176, 4140, 4143, 4142, 4145, 4146, 4148, 4155, 391, 4166, 4167, 4153, 4154, 4159, 4161, 4173, 4172, 4178, 4174, 4171, 4164, 4169, 4170, 4163, 4165, 4168, 4157, 468: 4138, 4175, 473: 2121, 480: 2430, 492: 4852, 495: 2121, 635: 2121, 637: 4144, 767: 4149, 778: 4151, 798: 4150, 820: 4152, 824: 4162, 828: 4853}, - {282: 4842}, - {638: 4834}, - {2: 2352, 2352, 2352, 2352, 2352, 8: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 51: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 462: 2352, 480: 4693, 555: 2352, 566: 2341, 574: 2341, 576: 2341, 630: 2341, 4486, 637: 2341, 663: 2341, 2341, 818: 4695, 832: 4321, 858: 4691, 888: 4692, 899: 4694}, + {483: 4877}, + {158: 4869}, + {467: 2006, 471: 2006, 489: 4186, 727: 4866}, + {467: 2006, 471: 2006, 489: 4186, 727: 4863}, + {2434, 2434, 2434, 2434, 4146, 4148, 391, 2434, 13: 4165, 2125, 4163, 4104, 4167, 4154, 4183, 4147, 4150, 4149, 4152, 4153, 4155, 4162, 391, 4173, 4174, 4160, 4161, 4166, 4168, 4180, 4179, 4185, 4181, 4178, 4171, 4176, 4177, 4170, 4172, 4175, 4164, 471: 4145, 4182, 476: 2125, 483: 2434, 495: 4859, 498: 2125, 638: 2125, 640: 4151, 770: 4156, 781: 4158, 801: 4157, 823: 4159, 827: 4169, 831: 4860}, // 1640 - {2420, 2420, 2420, 2420, 7: 2420, 480: 2420}, - {2419, 2419, 2419, 2419, 7: 2419, 480: 2419}, - {480: 4689}, - {480: 4686}, - {2: 2352, 2352, 2352, 2352, 2352, 8: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 51: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 480: 4665, 555: 2352, 566: 4307, 574: 4322, 576: 4664, 631: 4323, 637: 4308, 663: 4668, 813: 4667, 832: 4321, 858: 4663, 899: 4666, 982: 4669}, + {282: 4849}, + {641: 4841}, + {2: 2356, 2356, 2356, 2356, 2356, 8: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 51: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 465: 2356, 483: 4700, 558: 2356, 569: 2345, 577: 2345, 579: 2345, 633: 2345, 4493, 640: 2345, 666: 2345, 2345, 821: 4702, 835: 4328, 861: 4698, 891: 4699, 902: 4701}, + {2424, 2424, 2424, 2424, 7: 2424, 483: 2424}, + {2423, 2423, 2423, 2423, 7: 2423, 483: 2423}, // 1645 - {480: 4652}, - {480: 4650}, - {480: 4647}, - {480: 4644}, - {18: 4641, 480: 4640}, + {483: 4696}, + {483: 4693}, + {2: 2356, 2356, 2356, 2356, 2356, 8: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 51: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 483: 4672, 558: 2356, 569: 4314, 577: 4329, 579: 4671, 634: 4330, 640: 4315, 666: 4675, 816: 4674, 835: 4328, 861: 4670, 902: 4673, 985: 4676}, + {483: 4659}, + {483: 4657}, // 1650 - {18: 4637, 480: 4636}, - {480: 4626}, - {647: 4619}, - {928: 4618}, - {928: 4617}, + {483: 4654}, + {483: 4651}, + {18: 4648, 483: 4647}, + {18: 4644, 483: 4643}, + {483: 4633}, // 1655 - {2: 2352, 2352, 2352, 2352, 2352, 8: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 51: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 555: 2352, 832: 4321, 858: 4613}, - {2: 2352, 2352, 2352, 2352, 2352, 8: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 51: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 555: 2352, 832: 4321, 858: 4347}, - {2: 2352, 2352, 2352, 2352, 2352, 8: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 51: 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 574: 4322, 631: 4323, 637: 4320, 832: 4321, 858: 4318, 982: 4319}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 467: 4305, 486: 4179, 566: 4307, 637: 4308, 4303, 724: 4304, 813: 4306, 832: 4302}, - {2388, 2388, 2388, 2388, 7: 2388, 480: 2388}, + {650: 4626}, + {931: 4625}, + {931: 4624}, + {2: 2356, 2356, 2356, 2356, 2356, 8: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 51: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 558: 2356, 835: 4328, 861: 4620}, + {2: 2356, 2356, 2356, 2356, 2356, 8: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 51: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 558: 2356, 835: 4328, 861: 4354}, // 1660 - {2387, 2387, 2387, 2387, 7: 2387, 480: 2387}, - {2386, 2386, 2386, 2386, 7: 2386, 480: 2386}, - {2385, 2385, 2385, 2385, 6: 390, 2385, 27: 390, 480: 2385}, - {193: 4301}, - {193: 4300}, + {2: 2356, 2356, 2356, 2356, 2356, 8: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 51: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 577: 4329, 634: 4330, 640: 4327, 835: 4328, 861: 4325, 985: 4326}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 470: 4312, 489: 4186, 569: 4314, 640: 4315, 4310, 727: 4311, 816: 4313, 835: 4309}, + {2392, 2392, 2392, 2392, 7: 2392, 483: 2392}, + {2391, 2391, 2391, 2391, 7: 2391, 483: 2391}, + {2390, 2390, 2390, 2390, 7: 2390, 483: 2390}, // 1665 - {2382, 2382, 2382, 2382, 7: 2382, 480: 2382}, - {2381, 2381, 2381, 2381, 7: 2381, 480: 2381}, - {2377, 2377, 2377, 2377, 7: 2377, 480: 2377}, - {2376, 2376, 2376, 2376, 7: 2376, 480: 2376}, - {163: 2002, 230: 2002, 248: 2002, 250: 2002, 468: 2002, 486: 4179, 724: 4294}, + {2389, 2389, 2389, 2389, 6: 390, 2389, 27: 390, 483: 2389}, + {191: 4308}, + {191: 4307}, + {2386, 2386, 2386, 2386, 7: 2386, 483: 2386}, + {2385, 2385, 2385, 2385, 7: 2385, 483: 2385}, // 1670 - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 468: 2002, 486: 4179, 724: 4291}, - {150: 4290, 675: 4289}, - {2346, 2346, 2346, 2346, 7: 4287, 480: 2346}, - {2345, 2345, 2345, 2345, 7: 2345, 480: 2345}, - {14: 2120, 16: 2120, 19: 2120, 473: 2120, 495: 2120, 635: 2120}, + {2381, 2381, 2381, 2381, 7: 2381, 483: 2381}, + {2380, 2380, 2380, 2380, 7: 2380, 483: 2380}, + {163: 2006, 230: 2006, 248: 2006, 250: 2006, 471: 2006, 489: 4186, 727: 4301}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 471: 2006, 489: 4186, 727: 4298}, + {150: 4297, 678: 4296}, // 1675 - {464: 2002, 486: 4179, 724: 4285}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 486: 4179, 724: 4283}, - {20: 4278, 180: 4279, 237: 4280}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 486: 4179, 724: 4276}, - {235: 4273}, + {2350, 2350, 2350, 2350, 7: 4294, 483: 2350}, + {2349, 2349, 2349, 2349, 7: 2349, 483: 2349}, + {14: 2124, 16: 2124, 19: 2124, 476: 2124, 498: 2124, 638: 2124}, + {467: 2006, 489: 4186, 727: 4292}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 489: 4186, 727: 4290}, // 1680 - {235: 4270}, - {486: 4179, 497: 2002, 724: 4268}, - {486: 4179, 497: 2002, 724: 4266}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 486: 4179, 724: 4264}, - {486: 4179, 497: 2002, 724: 4262}, + {20: 4285, 178: 4286, 237: 4287}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 489: 4186, 727: 4283}, + {235: 4280}, + {235: 4277}, + {489: 4186, 500: 2006, 727: 4275}, // 1685 - {2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 13: 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 50: 2075, 461: 2075, 2075, 2075, 467: 2075, 2075, 2075, 473: 2075, 479: 2075, 2075, 491: 2075, 2075, 495: 2075, 2075, 558: 2075, 634: 2075, 2075, 637: 2075}, - {425, 425, 425, 425, 425, 425, 425, 425, 13: 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 461: 425, 425, 425, 467: 425, 425, 425, 473: 425, 479: 425, 425, 491: 425, 425, 495: 425, 425, 558: 425, 634: 425, 425, 637: 425}, - {14: 3740, 473: 4257, 495: 3741, 635: 3739, 759: 4256}, - {6: 4250, 27: 4251}, - {486: 4179, 497: 2002, 724: 4248}, + {489: 4186, 500: 2006, 727: 4273}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 489: 4186, 727: 4271}, + {489: 4186, 500: 2006, 727: 4269}, + {2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 13: 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 50: 2079, 464: 2079, 2079, 2079, 470: 2079, 2079, 2079, 476: 2079, 482: 2079, 2079, 494: 2079, 2079, 498: 2079, 2079, 561: 2079, 637: 2079, 2079, 640: 2079}, + {425, 425, 425, 425, 425, 425, 425, 425, 13: 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, 464: 425, 425, 425, 470: 425, 425, 425, 476: 425, 482: 425, 425, 494: 425, 425, 498: 425, 425, 561: 425, 637: 425, 425, 640: 425}, // 1690 - {486: 4179, 497: 2002, 724: 4246}, - {464: 2002, 486: 4179, 724: 4244}, - {486: 4179, 497: 2002, 724: 4242}, - {486: 4179, 497: 2002, 724: 4240}, - {464: 2002, 486: 4179, 724: 4238}, + {14: 3747, 476: 4264, 498: 3748, 638: 3746, 762: 4263}, + {6: 4257, 27: 4258}, + {489: 4186, 500: 2006, 727: 4255}, + {489: 4186, 500: 2006, 727: 4253}, + {467: 2006, 489: 4186, 727: 4251}, // 1695 - {464: 2002, 486: 4179, 724: 4236}, - {486: 4179, 497: 2002, 724: 4234}, - {486: 4179, 497: 2002, 724: 4232}, - {411, 411, 411, 411, 411, 411, 411, 411, 13: 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 461: 411, 411, 411, 467: 411, 411, 411, 473: 411, 479: 411, 411, 491: 411, 411, 495: 411, 411, 558: 411, 634: 411, 411, 637: 411}, - {468: 2002, 486: 4179, 497: 2002, 724: 4230}, + {489: 4186, 500: 2006, 727: 4249}, + {489: 4186, 500: 2006, 727: 4247}, + {467: 2006, 489: 4186, 727: 4245}, + {467: 2006, 489: 4186, 727: 4243}, + {489: 4186, 500: 2006, 727: 4241}, // 1700 - {468: 2002, 486: 4179, 497: 2002, 724: 4227}, - {468: 2002, 486: 4179, 497: 2002, 724: 4224}, - {486: 4179, 497: 2002, 724: 4222}, - {486: 4179, 497: 2002, 724: 4220}, - {486: 4179, 497: 2002, 562: 2002, 2002, 724: 4218}, + {489: 4186, 500: 2006, 727: 4239}, + {411, 411, 411, 411, 411, 411, 411, 411, 13: 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 464: 411, 411, 411, 470: 411, 411, 411, 476: 411, 482: 411, 411, 494: 411, 411, 498: 411, 411, 561: 411, 637: 411, 411, 640: 411}, + {471: 2006, 489: 4186, 500: 2006, 727: 4237}, + {471: 2006, 489: 4186, 500: 2006, 727: 4234}, + {471: 2006, 489: 4186, 500: 2006, 727: 4231}, // 1705 - {464: 2002, 486: 4179, 724: 4216}, - {464: 2002, 486: 4179, 724: 4214}, - {486: 4179, 497: 2002, 724: 4212}, - {486: 4179, 497: 2002, 724: 4210}, - {468: 2002, 486: 4179, 497: 2002, 724: 4206}, + {489: 4186, 500: 2006, 727: 4229}, + {489: 4186, 500: 2006, 727: 4227}, + {489: 4186, 500: 2006, 565: 2006, 2006, 727: 4225}, + {467: 2006, 489: 4186, 727: 4223}, + {467: 2006, 489: 4186, 727: 4221}, // 1710 - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 481: 2002, 486: 4179, 724: 4203}, - {462: 2002, 486: 4179, 724: 4198}, - {464: 2002, 486: 4179, 724: 4195}, - {385, 385, 385, 385, 385, 385, 385, 385, 13: 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 461: 385, 385, 385, 467: 385, 385, 385, 473: 385, 479: 385, 385, 491: 385, 385, 495: 385, 385, 558: 385, 634: 385, 385, 637: 385}, - {175: 2002, 197: 2002, 227: 2002, 2002, 265: 2002, 283: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 468: 2002, 486: 4179, 724: 4180}, + {489: 4186, 500: 2006, 727: 4219}, + {489: 4186, 500: 2006, 727: 4217}, + {471: 2006, 489: 4186, 500: 2006, 727: 4213}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 484: 2006, 489: 4186, 727: 4210}, + {465: 2006, 489: 4186, 727: 4205}, // 1715 - {2: 2001, 2001, 2001, 2001, 2001, 8: 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 51: 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 462: 2001, 464: 2001, 468: 2001, 474: 2001, 2001, 479: 2001, 481: 2001, 496: 2001, 2001, 534: 2001, 560: 2001, 2001, 2001, 2001}, - {175: 4183, 197: 4182, 227: 4186, 4184, 265: 4185, 283: 4187, 4188, 4192, 4191, 4189, 4193, 4194, 4190, 468: 4181}, - {379, 379, 379, 379, 379, 379, 379, 379, 13: 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 461: 379, 379, 379, 467: 379, 379, 379, 473: 379, 479: 379, 379, 491: 379, 379, 495: 379, 379, 558: 379, 634: 379, 379, 637: 379}, - {378, 378, 378, 378, 378, 378, 378, 378, 13: 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 461: 378, 378, 378, 467: 378, 378, 378, 473: 378, 479: 378, 378, 491: 378, 378, 495: 378, 378, 558: 378, 634: 378, 378, 637: 378}, - {377, 377, 377, 377, 377, 377, 377, 377, 13: 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 461: 377, 377, 377, 467: 377, 377, 377, 473: 377, 479: 377, 377, 491: 377, 377, 495: 377, 377, 558: 377, 634: 377, 377, 637: 377}, + {467: 2006, 489: 4186, 727: 4202}, + {385, 385, 385, 385, 385, 385, 385, 385, 13: 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 464: 385, 385, 385, 470: 385, 385, 385, 476: 385, 482: 385, 385, 494: 385, 385, 498: 385, 385, 561: 385, 637: 385, 385, 640: 385}, + {173: 2006, 196: 2006, 227: 2006, 2006, 265: 2006, 283: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 471: 2006, 489: 4186, 727: 4187}, + {2: 2005, 2005, 2005, 2005, 2005, 8: 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 51: 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 465: 2005, 467: 2005, 471: 2005, 477: 2005, 2005, 482: 2005, 484: 2005, 499: 2005, 2005, 537: 2005, 563: 2005, 2005, 2005, 2005}, + {173: 4190, 196: 4189, 227: 4193, 4191, 265: 4192, 283: 4194, 4195, 4199, 4198, 4196, 4200, 4201, 4197, 471: 4188}, // 1720 - {376, 376, 376, 376, 376, 376, 376, 376, 13: 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 461: 376, 376, 376, 467: 376, 376, 376, 473: 376, 479: 376, 376, 491: 376, 376, 495: 376, 376, 558: 376, 634: 376, 376, 637: 376}, - {375, 375, 375, 375, 375, 375, 375, 375, 13: 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 461: 375, 375, 375, 467: 375, 375, 375, 473: 375, 479: 375, 375, 491: 375, 375, 495: 375, 375, 558: 375, 634: 375, 375, 637: 375}, - {374, 374, 374, 374, 374, 374, 374, 374, 13: 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 461: 374, 374, 374, 467: 374, 374, 374, 473: 374, 479: 374, 374, 491: 374, 374, 495: 374, 374, 558: 374, 634: 374, 374, 637: 374}, - {373, 373, 373, 373, 373, 373, 373, 373, 13: 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 461: 373, 373, 373, 467: 373, 373, 373, 473: 373, 479: 373, 373, 491: 373, 373, 495: 373, 373, 558: 373, 634: 373, 373, 637: 373}, - {372, 372, 372, 372, 372, 372, 372, 372, 13: 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 461: 372, 372, 372, 467: 372, 372, 372, 473: 372, 479: 372, 372, 491: 372, 372, 495: 372, 372, 558: 372, 634: 372, 372, 637: 372}, + {379, 379, 379, 379, 379, 379, 379, 379, 13: 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 464: 379, 379, 379, 470: 379, 379, 379, 476: 379, 482: 379, 379, 494: 379, 379, 498: 379, 379, 561: 379, 637: 379, 379, 640: 379}, + {378, 378, 378, 378, 378, 378, 378, 378, 13: 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 464: 378, 378, 378, 470: 378, 378, 378, 476: 378, 482: 378, 378, 494: 378, 378, 498: 378, 378, 561: 378, 637: 378, 378, 640: 378}, + {377, 377, 377, 377, 377, 377, 377, 377, 13: 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 464: 377, 377, 377, 470: 377, 377, 377, 476: 377, 482: 377, 377, 494: 377, 377, 498: 377, 377, 561: 377, 637: 377, 377, 640: 377}, + {376, 376, 376, 376, 376, 376, 376, 376, 13: 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 464: 376, 376, 376, 470: 376, 376, 376, 476: 376, 482: 376, 376, 494: 376, 376, 498: 376, 376, 561: 376, 637: 376, 376, 640: 376}, + {375, 375, 375, 375, 375, 375, 375, 375, 13: 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 464: 375, 375, 375, 470: 375, 375, 375, 476: 375, 482: 375, 375, 494: 375, 375, 498: 375, 375, 561: 375, 637: 375, 375, 640: 375}, // 1725 - {371, 371, 371, 371, 371, 371, 371, 371, 13: 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 461: 371, 371, 371, 467: 371, 371, 371, 473: 371, 479: 371, 371, 491: 371, 371, 495: 371, 371, 558: 371, 634: 371, 371, 637: 371}, - {370, 370, 370, 370, 370, 370, 370, 370, 13: 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 461: 370, 370, 370, 467: 370, 370, 370, 473: 370, 479: 370, 370, 491: 370, 370, 495: 370, 370, 558: 370, 634: 370, 370, 637: 370}, - {369, 369, 369, 369, 369, 369, 369, 369, 13: 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 461: 369, 369, 369, 467: 369, 369, 369, 473: 369, 479: 369, 369, 491: 369, 369, 495: 369, 369, 558: 369, 634: 369, 369, 637: 369}, - {368, 368, 368, 368, 368, 368, 368, 368, 13: 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 461: 368, 368, 368, 467: 368, 368, 368, 473: 368, 479: 368, 368, 491: 368, 368, 495: 368, 368, 558: 368, 634: 368, 368, 637: 368}, - {367, 367, 367, 367, 367, 367, 367, 367, 13: 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 461: 367, 367, 367, 467: 367, 367, 367, 473: 367, 479: 367, 367, 491: 367, 367, 495: 367, 367, 558: 367, 634: 367, 367, 637: 367}, + {374, 374, 374, 374, 374, 374, 374, 374, 13: 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 464: 374, 374, 374, 470: 374, 374, 374, 476: 374, 482: 374, 374, 494: 374, 374, 498: 374, 374, 561: 374, 637: 374, 374, 640: 374}, + {373, 373, 373, 373, 373, 373, 373, 373, 13: 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 464: 373, 373, 373, 470: 373, 373, 373, 476: 373, 482: 373, 373, 494: 373, 373, 498: 373, 373, 561: 373, 637: 373, 373, 640: 373}, + {372, 372, 372, 372, 372, 372, 372, 372, 13: 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 464: 372, 372, 372, 470: 372, 372, 372, 476: 372, 482: 372, 372, 494: 372, 372, 498: 372, 372, 561: 372, 637: 372, 372, 640: 372}, + {371, 371, 371, 371, 371, 371, 371, 371, 13: 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 464: 371, 371, 371, 470: 371, 371, 371, 476: 371, 482: 371, 371, 494: 371, 371, 498: 371, 371, 561: 371, 637: 371, 371, 640: 371}, + {370, 370, 370, 370, 370, 370, 370, 370, 13: 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 464: 370, 370, 370, 470: 370, 370, 370, 476: 370, 482: 370, 370, 494: 370, 370, 498: 370, 370, 561: 370, 637: 370, 370, 640: 370}, // 1730 - {366, 366, 366, 366, 366, 366, 366, 366, 13: 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 461: 366, 366, 366, 467: 366, 366, 366, 473: 366, 479: 366, 366, 491: 366, 366, 495: 366, 366, 558: 366, 634: 366, 366, 637: 366}, - {464: 4197, 1021: 4196}, - {392, 392, 392, 392, 392, 392, 392, 392, 13: 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 461: 392, 392, 392, 467: 392, 392, 392, 473: 392, 479: 392, 392, 491: 392, 392, 495: 392, 392, 558: 392, 634: 392, 392, 637: 392}, - {9, 9, 9, 9, 9, 9, 9, 9, 13: 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 461: 9, 9, 9, 467: 9, 9, 9, 473: 9, 479: 9, 9, 491: 9, 9, 9, 495: 9, 9, 558: 9, 634: 9, 9, 637: 9}, - {462: 4199}, + {369, 369, 369, 369, 369, 369, 369, 369, 13: 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 464: 369, 369, 369, 470: 369, 369, 369, 476: 369, 482: 369, 369, 494: 369, 369, 498: 369, 369, 561: 369, 637: 369, 369, 640: 369}, + {368, 368, 368, 368, 368, 368, 368, 368, 13: 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 464: 368, 368, 368, 470: 368, 368, 368, 476: 368, 482: 368, 368, 494: 368, 368, 498: 368, 368, 561: 368, 637: 368, 368, 640: 368}, + {367, 367, 367, 367, 367, 367, 367, 367, 13: 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, 464: 367, 367, 367, 470: 367, 367, 367, 476: 367, 482: 367, 367, 494: 367, 367, 498: 367, 367, 561: 367, 637: 367, 367, 640: 367}, + {366, 366, 366, 366, 366, 366, 366, 366, 13: 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 464: 366, 366, 366, 470: 366, 366, 366, 476: 366, 482: 366, 366, 494: 366, 366, 498: 366, 366, 561: 366, 637: 366, 366, 640: 366}, + {467: 4204, 1024: 4203}, // 1735 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 550, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 4200, 1126: 4201}, - {549, 549, 7: 3828, 50: 549, 463: 549}, - {50: 4202}, - {393, 393, 393, 393, 393, 393, 393, 393, 13: 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 461: 393, 393, 393, 467: 393, 393, 393, 473: 393, 479: 393, 393, 491: 393, 393, 495: 393, 393, 558: 393, 634: 393, 393, 637: 393}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 481: 4204, 651: 3397, 2681, 2682, 2680, 726: 4205}, + {392, 392, 392, 392, 392, 392, 392, 392, 13: 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 464: 392, 392, 392, 470: 392, 392, 392, 476: 392, 482: 392, 392, 494: 392, 392, 498: 392, 392, 561: 392, 637: 392, 392, 640: 392}, + {9, 9, 9, 9, 9, 9, 9, 9, 13: 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 464: 9, 9, 9, 470: 9, 9, 9, 476: 9, 482: 9, 9, 494: 9, 9, 9, 498: 9, 9, 561: 9, 637: 9, 9, 640: 9}, + {465: 4206}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 550, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 4207, 1129: 4208}, + {549, 549, 7: 3835, 50: 549, 466: 549}, // 1740 - {395, 395, 395, 395, 395, 395, 395, 395, 13: 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 461: 395, 395, 395, 467: 395, 395, 395, 473: 395, 479: 395, 395, 491: 395, 395, 495: 395, 395, 558: 395, 634: 395, 395, 637: 395}, - {394, 394, 394, 394, 394, 394, 394, 394, 13: 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 461: 394, 394, 394, 467: 394, 394, 394, 473: 394, 479: 394, 394, 491: 394, 394, 495: 394, 394, 558: 394, 634: 394, 394, 637: 394}, - {468: 4208, 497: 2655, 721: 2654, 731: 4209, 1118: 4207}, - {398, 398, 398, 398, 398, 398, 398, 398, 13: 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 461: 398, 398, 398, 467: 398, 398, 398, 473: 398, 479: 398, 398, 491: 398, 398, 495: 398, 398, 558: 398, 634: 398, 398, 637: 398}, - {389, 389, 389, 389, 389, 389, 389, 389, 13: 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 461: 389, 389, 389, 467: 389, 389, 389, 473: 389, 479: 389, 389, 491: 389, 389, 495: 389, 389, 558: 389, 634: 389, 389, 637: 389}, + {50: 4209}, + {393, 393, 393, 393, 393, 393, 393, 393, 13: 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 464: 393, 393, 393, 470: 393, 393, 393, 476: 393, 482: 393, 393, 494: 393, 393, 498: 393, 393, 561: 393, 637: 393, 393, 640: 393}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 484: 4211, 655: 3404, 2685, 2686, 2684, 729: 4212}, + {395, 395, 395, 395, 395, 395, 395, 395, 13: 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, 464: 395, 395, 395, 470: 395, 395, 395, 476: 395, 482: 395, 395, 494: 395, 395, 498: 395, 395, 561: 395, 637: 395, 395, 640: 395}, + {394, 394, 394, 394, 394, 394, 394, 394, 13: 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 464: 394, 394, 394, 470: 394, 394, 394, 476: 394, 482: 394, 394, 494: 394, 394, 498: 394, 394, 561: 394, 637: 394, 394, 640: 394}, // 1745 - {388, 388, 388, 388, 388, 388, 388, 388, 13: 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 461: 388, 388, 388, 467: 388, 388, 388, 473: 388, 479: 388, 388, 491: 388, 388, 495: 388, 388, 558: 388, 634: 388, 388, 637: 388}, - {497: 2655, 721: 2654, 731: 4211}, - {399, 399, 399, 399, 399, 399, 399, 399, 13: 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 461: 399, 399, 399, 467: 399, 399, 399, 473: 399, 479: 399, 399, 491: 399, 399, 495: 399, 399, 558: 399, 634: 399, 399, 637: 399}, - {497: 2655, 721: 2654, 731: 4213}, - {400, 400, 400, 400, 400, 400, 400, 400, 13: 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 461: 400, 400, 400, 467: 400, 400, 400, 473: 400, 479: 400, 400, 491: 400, 400, 495: 400, 400, 558: 400, 634: 400, 400, 637: 400}, + {471: 4215, 500: 2659, 724: 2658, 734: 4216, 1121: 4214}, + {398, 398, 398, 398, 398, 398, 398, 398, 13: 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 464: 398, 398, 398, 470: 398, 398, 398, 476: 398, 482: 398, 398, 494: 398, 398, 498: 398, 398, 561: 398, 637: 398, 398, 640: 398}, + {389, 389, 389, 389, 389, 389, 389, 389, 13: 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, 464: 389, 389, 389, 470: 389, 389, 389, 476: 389, 482: 389, 389, 494: 389, 389, 498: 389, 389, 561: 389, 637: 389, 389, 640: 389}, + {388, 388, 388, 388, 388, 388, 388, 388, 13: 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, 464: 388, 388, 388, 470: 388, 388, 388, 476: 388, 482: 388, 388, 494: 388, 388, 498: 388, 388, 561: 388, 637: 388, 388, 640: 388}, + {500: 2659, 724: 2658, 734: 4218}, // 1750 - {464: 4215}, - {401, 401, 401, 401, 401, 401, 401, 401, 13: 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 461: 401, 401, 401, 467: 401, 401, 401, 473: 401, 479: 401, 401, 491: 401, 401, 495: 401, 401, 558: 401, 634: 401, 401, 637: 401}, - {464: 4217}, - {402, 402, 402, 402, 402, 402, 402, 402, 13: 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 461: 402, 402, 402, 467: 402, 402, 402, 473: 402, 479: 402, 402, 491: 402, 402, 495: 402, 402, 558: 402, 634: 402, 402, 637: 402}, - {497: 3329, 562: 3331, 3330, 805: 4219}, + {399, 399, 399, 399, 399, 399, 399, 399, 13: 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 464: 399, 399, 399, 470: 399, 399, 399, 476: 399, 482: 399, 399, 494: 399, 399, 498: 399, 399, 561: 399, 637: 399, 399, 640: 399}, + {500: 2659, 724: 2658, 734: 4220}, + {400, 400, 400, 400, 400, 400, 400, 400, 13: 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 464: 400, 400, 400, 470: 400, 400, 400, 476: 400, 482: 400, 400, 494: 400, 400, 498: 400, 400, 561: 400, 637: 400, 400, 640: 400}, + {467: 4222}, + {401, 401, 401, 401, 401, 401, 401, 401, 13: 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 464: 401, 401, 401, 470: 401, 401, 401, 476: 401, 482: 401, 401, 494: 401, 401, 498: 401, 401, 561: 401, 637: 401, 401, 640: 401}, // 1755 - {403, 403, 403, 403, 403, 403, 403, 403, 13: 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 461: 403, 403, 403, 467: 403, 403, 403, 473: 403, 479: 403, 403, 491: 403, 403, 495: 403, 403, 558: 403, 634: 403, 403, 637: 403}, - {497: 2655, 721: 2654, 731: 4221}, - {404, 404, 404, 404, 404, 404, 404, 404, 13: 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 461: 404, 404, 404, 467: 404, 404, 404, 473: 404, 479: 404, 404, 491: 404, 404, 495: 404, 404, 558: 404, 634: 404, 404, 637: 404}, - {497: 2655, 721: 2654, 731: 4223}, - {405, 405, 405, 405, 405, 405, 405, 405, 13: 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 461: 405, 405, 405, 467: 405, 405, 405, 473: 405, 479: 405, 405, 491: 405, 405, 495: 405, 405, 558: 405, 634: 405, 405, 637: 405}, + {467: 4224}, + {402, 402, 402, 402, 402, 402, 402, 402, 13: 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 464: 402, 402, 402, 470: 402, 402, 402, 476: 402, 482: 402, 402, 494: 402, 402, 498: 402, 402, 561: 402, 637: 402, 402, 640: 402}, + {500: 3336, 565: 3338, 3337, 808: 4226}, + {403, 403, 403, 403, 403, 403, 403, 403, 13: 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 464: 403, 403, 403, 470: 403, 403, 403, 476: 403, 482: 403, 403, 494: 403, 403, 498: 403, 403, 561: 403, 637: 403, 403, 640: 403}, + {500: 2659, 724: 2658, 734: 4228}, // 1760 - {468: 4226, 497: 2655, 721: 2654, 731: 4225}, - {407, 407, 407, 407, 407, 407, 407, 407, 13: 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 461: 407, 407, 407, 467: 407, 407, 407, 473: 407, 479: 407, 407, 491: 407, 407, 495: 407, 407, 558: 407, 634: 407, 407, 637: 407}, - {406, 406, 406, 406, 406, 406, 406, 406, 13: 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 461: 406, 406, 406, 467: 406, 406, 406, 473: 406, 479: 406, 406, 491: 406, 406, 495: 406, 406, 558: 406, 634: 406, 406, 637: 406}, - {468: 4229, 497: 2655, 721: 2654, 731: 4228}, - {409, 409, 409, 409, 409, 409, 409, 409, 13: 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 461: 409, 409, 409, 467: 409, 409, 409, 473: 409, 479: 409, 409, 491: 409, 409, 495: 409, 409, 558: 409, 634: 409, 409, 637: 409}, + {404, 404, 404, 404, 404, 404, 404, 404, 13: 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 464: 404, 404, 404, 470: 404, 404, 404, 476: 404, 482: 404, 404, 494: 404, 404, 498: 404, 404, 561: 404, 637: 404, 404, 640: 404}, + {500: 2659, 724: 2658, 734: 4230}, + {405, 405, 405, 405, 405, 405, 405, 405, 13: 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 464: 405, 405, 405, 470: 405, 405, 405, 476: 405, 482: 405, 405, 494: 405, 405, 498: 405, 405, 561: 405, 637: 405, 405, 640: 405}, + {471: 4233, 500: 2659, 724: 2658, 734: 4232}, + {407, 407, 407, 407, 407, 407, 407, 407, 13: 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 464: 407, 407, 407, 470: 407, 407, 407, 476: 407, 482: 407, 407, 494: 407, 407, 498: 407, 407, 561: 407, 637: 407, 407, 640: 407}, // 1765 - {408, 408, 408, 408, 408, 408, 408, 408, 13: 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 461: 408, 408, 408, 467: 408, 408, 408, 473: 408, 479: 408, 408, 491: 408, 408, 495: 408, 408, 558: 408, 634: 408, 408, 637: 408}, - {468: 4208, 497: 2655, 721: 2654, 731: 4209, 1118: 4231}, - {410, 410, 410, 410, 410, 410, 410, 410, 13: 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 461: 410, 410, 410, 467: 410, 410, 410, 473: 410, 479: 410, 410, 491: 410, 410, 495: 410, 410, 558: 410, 634: 410, 410, 637: 410}, - {497: 2655, 721: 2654, 731: 4233}, - {412, 412, 412, 412, 412, 412, 412, 412, 13: 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 461: 412, 412, 412, 467: 412, 412, 412, 473: 412, 479: 412, 412, 491: 412, 412, 495: 412, 412, 558: 412, 634: 412, 412, 637: 412}, + {406, 406, 406, 406, 406, 406, 406, 406, 13: 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 464: 406, 406, 406, 470: 406, 406, 406, 476: 406, 482: 406, 406, 494: 406, 406, 498: 406, 406, 561: 406, 637: 406, 406, 640: 406}, + {471: 4236, 500: 2659, 724: 2658, 734: 4235}, + {409, 409, 409, 409, 409, 409, 409, 409, 13: 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 464: 409, 409, 409, 470: 409, 409, 409, 476: 409, 482: 409, 409, 494: 409, 409, 498: 409, 409, 561: 409, 637: 409, 409, 640: 409}, + {408, 408, 408, 408, 408, 408, 408, 408, 13: 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 464: 408, 408, 408, 470: 408, 408, 408, 476: 408, 482: 408, 408, 494: 408, 408, 498: 408, 408, 561: 408, 637: 408, 408, 640: 408}, + {471: 4215, 500: 2659, 724: 2658, 734: 4216, 1121: 4238}, // 1770 - {497: 2655, 721: 2654, 731: 4235}, - {413, 413, 413, 413, 413, 413, 413, 413, 13: 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 461: 413, 413, 413, 467: 413, 413, 413, 473: 413, 479: 413, 413, 491: 413, 413, 495: 413, 413, 558: 413, 634: 413, 413, 637: 413}, - {464: 4237}, - {414, 414, 414, 414, 414, 414, 414, 414, 13: 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 461: 414, 414, 414, 467: 414, 414, 414, 473: 414, 479: 414, 414, 491: 414, 414, 495: 414, 414, 558: 414, 634: 414, 414, 637: 414}, - {464: 4239}, + {410, 410, 410, 410, 410, 410, 410, 410, 13: 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 464: 410, 410, 410, 470: 410, 410, 410, 476: 410, 482: 410, 410, 494: 410, 410, 498: 410, 410, 561: 410, 637: 410, 410, 640: 410}, + {500: 2659, 724: 2658, 734: 4240}, + {412, 412, 412, 412, 412, 412, 412, 412, 13: 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, 464: 412, 412, 412, 470: 412, 412, 412, 476: 412, 482: 412, 412, 494: 412, 412, 498: 412, 412, 561: 412, 637: 412, 412, 640: 412}, + {500: 2659, 724: 2658, 734: 4242}, + {413, 413, 413, 413, 413, 413, 413, 413, 13: 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 464: 413, 413, 413, 470: 413, 413, 413, 476: 413, 482: 413, 413, 494: 413, 413, 498: 413, 413, 561: 413, 637: 413, 413, 640: 413}, // 1775 - {415, 415, 415, 415, 415, 415, 415, 415, 13: 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 461: 415, 415, 415, 467: 415, 415, 415, 473: 415, 479: 415, 415, 491: 415, 415, 495: 415, 415, 558: 415, 634: 415, 415, 637: 415}, - {497: 2655, 721: 2654, 731: 4241}, - {416, 416, 416, 416, 416, 416, 416, 416, 13: 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 461: 416, 416, 416, 467: 416, 416, 416, 473: 416, 479: 416, 416, 491: 416, 416, 495: 416, 416, 558: 416, 634: 416, 416, 637: 416}, - {497: 2655, 721: 2654, 731: 4243}, - {417, 417, 417, 417, 417, 417, 417, 417, 13: 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 461: 417, 417, 417, 467: 417, 417, 417, 473: 417, 479: 417, 417, 491: 417, 417, 495: 417, 417, 558: 417, 634: 417, 417, 637: 417}, + {467: 4244}, + {414, 414, 414, 414, 414, 414, 414, 414, 13: 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 464: 414, 414, 414, 470: 414, 414, 414, 476: 414, 482: 414, 414, 494: 414, 414, 498: 414, 414, 561: 414, 637: 414, 414, 640: 414}, + {467: 4246}, + {415, 415, 415, 415, 415, 415, 415, 415, 13: 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 464: 415, 415, 415, 470: 415, 415, 415, 476: 415, 482: 415, 415, 494: 415, 415, 498: 415, 415, 561: 415, 637: 415, 415, 640: 415}, + {500: 2659, 724: 2658, 734: 4248}, // 1780 - {464: 4245}, - {418, 418, 418, 418, 418, 418, 418, 418, 13: 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, 461: 418, 418, 418, 467: 418, 418, 418, 473: 418, 479: 418, 418, 491: 418, 418, 495: 418, 418, 558: 418, 634: 418, 418, 637: 418}, - {497: 2655, 721: 2654, 731: 4247}, - {419, 419, 419, 419, 419, 419, 419, 419, 13: 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, 419, 419, 419, 419, 419, 419, 419, 461: 419, 419, 419, 467: 419, 419, 419, 473: 419, 479: 419, 419, 491: 419, 419, 495: 419, 419, 558: 419, 634: 419, 419, 637: 419}, - {497: 2655, 721: 2654, 731: 4249}, + {416, 416, 416, 416, 416, 416, 416, 416, 13: 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 464: 416, 416, 416, 470: 416, 416, 416, 476: 416, 482: 416, 416, 494: 416, 416, 498: 416, 416, 561: 416, 637: 416, 416, 640: 416}, + {500: 2659, 724: 2658, 734: 4250}, + {417, 417, 417, 417, 417, 417, 417, 417, 13: 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 464: 417, 417, 417, 470: 417, 417, 417, 476: 417, 482: 417, 417, 494: 417, 417, 498: 417, 417, 561: 417, 637: 417, 417, 640: 417}, + {467: 4252}, + {418, 418, 418, 418, 418, 418, 418, 418, 13: 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, 464: 418, 418, 418, 470: 418, 418, 418, 476: 418, 482: 418, 418, 494: 418, 418, 498: 418, 418, 561: 418, 637: 418, 418, 640: 418}, // 1785 - {421, 421, 421, 421, 421, 421, 421, 421, 13: 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 461: 421, 421, 421, 467: 421, 421, 421, 473: 421, 479: 421, 421, 491: 421, 421, 495: 421, 421, 558: 421, 634: 421, 421, 637: 421}, - {486: 4179, 497: 2002, 724: 4254}, - {486: 4179, 497: 2002, 724: 4252}, - {497: 2655, 721: 2654, 731: 4253}, - {420, 420, 420, 420, 420, 420, 420, 420, 13: 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 461: 420, 420, 420, 467: 420, 420, 420, 473: 420, 479: 420, 420, 491: 420, 420, 495: 420, 420, 558: 420, 634: 420, 420, 637: 420}, + {500: 2659, 724: 2658, 734: 4254}, + {419, 419, 419, 419, 419, 419, 419, 419, 13: 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, 419, 419, 419, 419, 419, 419, 419, 464: 419, 419, 419, 470: 419, 419, 419, 476: 419, 482: 419, 419, 494: 419, 419, 498: 419, 419, 561: 419, 637: 419, 419, 640: 419}, + {500: 2659, 724: 2658, 734: 4256}, + {421, 421, 421, 421, 421, 421, 421, 421, 13: 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 464: 421, 421, 421, 470: 421, 421, 421, 476: 421, 482: 421, 421, 494: 421, 421, 498: 421, 421, 561: 421, 637: 421, 421, 640: 421}, + {489: 4186, 500: 2006, 727: 4261}, // 1790 - {497: 2655, 721: 2654, 731: 4255}, - {422, 422, 422, 422, 422, 422, 422, 422, 13: 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 461: 422, 422, 422, 467: 422, 422, 422, 473: 422, 479: 422, 422, 491: 422, 422, 495: 422, 422, 558: 422, 634: 422, 422, 637: 422}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 486: 4179, 534: 2002, 724: 4260}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 486: 4179, 534: 2002, 724: 4258}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3395, 651: 3397, 2681, 2682, 2680, 726: 3394, 857: 4259}, + {489: 4186, 500: 2006, 727: 4259}, + {500: 2659, 724: 2658, 734: 4260}, + {420, 420, 420, 420, 420, 420, 420, 420, 13: 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 464: 420, 420, 420, 470: 420, 420, 420, 476: 420, 482: 420, 420, 494: 420, 420, 498: 420, 420, 561: 420, 637: 420, 420, 640: 420}, + {500: 2659, 724: 2658, 734: 4262}, + {422, 422, 422, 422, 422, 422, 422, 422, 13: 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 464: 422, 422, 422, 470: 422, 422, 422, 476: 422, 482: 422, 422, 494: 422, 422, 498: 422, 422, 561: 422, 637: 422, 422, 640: 422}, // 1795 - {423, 423, 423, 423, 423, 423, 423, 423, 13: 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 461: 423, 423, 423, 467: 423, 423, 423, 473: 423, 479: 423, 423, 491: 423, 423, 495: 423, 423, 558: 423, 634: 423, 423, 637: 423}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 4261}, - {424, 424, 424, 424, 424, 424, 424, 424, 13: 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 461: 424, 424, 424, 467: 424, 424, 424, 473: 424, 479: 424, 424, 491: 424, 424, 495: 424, 424, 558: 424, 634: 424, 424, 637: 424}, - {497: 2655, 721: 2654, 731: 4263}, - {2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 13: 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 50: 2076, 461: 2076, 2076, 2076, 467: 2076, 2076, 2076, 473: 2076, 479: 2076, 2076, 491: 2076, 2076, 495: 2076, 2076, 558: 2076, 634: 2076, 2076, 637: 2076}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 489: 4186, 537: 2006, 727: 4267}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 489: 4186, 537: 2006, 727: 4265}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3402, 655: 3404, 2685, 2686, 2684, 729: 3401, 860: 4266}, + {423, 423, 423, 423, 423, 423, 423, 423, 13: 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 464: 423, 423, 423, 470: 423, 423, 423, 476: 423, 482: 423, 423, 494: 423, 423, 498: 423, 423, 561: 423, 637: 423, 423, 640: 423}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 4268}, // 1800 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4265, 2681, 2682, 2680}, - {2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 13: 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 50: 2077, 461: 2077, 2077, 2077, 467: 2077, 2077, 2077, 473: 2077, 479: 2077, 2077, 491: 2077, 2077, 495: 2077, 2077, 558: 2077, 634: 2077, 2077, 637: 2077}, - {497: 2655, 721: 2654, 731: 4267}, - {2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 13: 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 50: 2078, 461: 2078, 2078, 2078, 467: 2078, 2078, 2078, 473: 2078, 479: 2078, 2078, 491: 2078, 2078, 495: 2078, 2078, 558: 2078, 634: 2078, 2078, 637: 2078}, - {497: 2655, 721: 2654, 731: 4269}, + {424, 424, 424, 424, 424, 424, 424, 424, 13: 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, 464: 424, 424, 424, 470: 424, 424, 424, 476: 424, 482: 424, 424, 494: 424, 424, 498: 424, 424, 561: 424, 637: 424, 424, 640: 424}, + {500: 2659, 724: 2658, 734: 4270}, + {2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 13: 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 50: 2080, 464: 2080, 2080, 2080, 470: 2080, 2080, 2080, 476: 2080, 482: 2080, 2080, 494: 2080, 2080, 498: 2080, 2080, 561: 2080, 637: 2080, 2080, 640: 2080}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4272, 2685, 2686, 2684}, + {2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 13: 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, 50: 2081, 464: 2081, 2081, 2081, 470: 2081, 2081, 2081, 476: 2081, 482: 2081, 2081, 494: 2081, 2081, 498: 2081, 2081, 561: 2081, 637: 2081, 2081, 640: 2081}, // 1805 - {2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 13: 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 50: 2079, 461: 2079, 2079, 2079, 467: 2079, 2079, 2079, 473: 2079, 479: 2079, 2079, 491: 2079, 2079, 495: 2079, 2079, 558: 2079, 634: 2079, 2079, 637: 2079}, - {464: 2002, 486: 4179, 724: 4271}, - {464: 4272}, - {2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 13: 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 50: 2080, 461: 2080, 2080, 2080, 467: 2080, 2080, 2080, 473: 2080, 479: 2080, 2080, 491: 2080, 2080, 495: 2080, 2080, 558: 2080, 634: 2080, 2080, 637: 2080}, - {464: 2002, 486: 4179, 724: 4274}, + {500: 2659, 724: 2658, 734: 4274}, + {2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 13: 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 50: 2082, 464: 2082, 2082, 2082, 470: 2082, 2082, 2082, 476: 2082, 482: 2082, 2082, 494: 2082, 2082, 498: 2082, 2082, 561: 2082, 637: 2082, 2082, 640: 2082}, + {500: 2659, 724: 2658, 734: 4276}, + {2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 13: 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 50: 2083, 464: 2083, 2083, 2083, 470: 2083, 2083, 2083, 476: 2083, 482: 2083, 2083, 494: 2083, 2083, 498: 2083, 2083, 561: 2083, 637: 2083, 2083, 640: 2083}, + {467: 2006, 489: 4186, 727: 4278}, // 1810 - {464: 4275}, - {2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 13: 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, 50: 2081, 461: 2081, 2081, 2081, 467: 2081, 2081, 2081, 473: 2081, 479: 2081, 2081, 491: 2081, 2081, 495: 2081, 2081, 558: 2081, 634: 2081, 2081, 637: 2081}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 651: 3397, 2681, 2682, 2680, 726: 4277}, - {2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 13: 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 50: 2082, 461: 2082, 2082, 2082, 467: 2082, 2082, 2082, 473: 2082, 479: 2082, 2082, 491: 2082, 2082, 495: 2082, 2082, 558: 2082, 634: 2082, 2082, 637: 2082}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 486: 4179, 724: 4281}, + {467: 4279}, + {2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 13: 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 50: 2084, 464: 2084, 2084, 2084, 470: 2084, 2084, 2084, 476: 2084, 482: 2084, 2084, 494: 2084, 2084, 498: 2084, 2084, 561: 2084, 637: 2084, 2084, 640: 2084}, + {467: 2006, 489: 4186, 727: 4281}, + {467: 4282}, + {2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 13: 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 50: 2085, 464: 2085, 2085, 2085, 470: 2085, 2085, 2085, 476: 2085, 482: 2085, 2085, 494: 2085, 2085, 498: 2085, 2085, 561: 2085, 637: 2085, 2085, 640: 2085}, // 1815 - {397, 397, 397, 397, 397, 397, 397, 397, 13: 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 461: 397, 397, 397, 467: 397, 397, 397, 473: 397, 479: 397, 397, 491: 397, 397, 495: 397, 397, 558: 397, 634: 397, 397, 637: 397}, - {396, 396, 396, 396, 396, 396, 396, 396, 13: 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 461: 396, 396, 396, 467: 396, 396, 396, 473: 396, 479: 396, 396, 491: 396, 396, 495: 396, 396, 558: 396, 634: 396, 396, 637: 396}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 651: 3397, 2681, 2682, 2680, 726: 4282}, - {2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 13: 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 50: 2083, 461: 2083, 2083, 2083, 467: 2083, 2083, 2083, 473: 2083, 479: 2083, 2083, 491: 2083, 2083, 495: 2083, 2083, 558: 2083, 634: 2083, 2083, 637: 2083}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 651: 3397, 2681, 2682, 2680, 726: 4284}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 655: 3404, 2685, 2686, 2684, 729: 4284}, + {2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 13: 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 50: 2086, 464: 2086, 2086, 2086, 470: 2086, 2086, 2086, 476: 2086, 482: 2086, 2086, 494: 2086, 2086, 498: 2086, 2086, 561: 2086, 637: 2086, 2086, 640: 2086}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 489: 4186, 727: 4288}, + {397, 397, 397, 397, 397, 397, 397, 397, 13: 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, 464: 397, 397, 397, 470: 397, 397, 397, 476: 397, 482: 397, 397, 494: 397, 397, 498: 397, 397, 561: 397, 637: 397, 397, 640: 397}, + {396, 396, 396, 396, 396, 396, 396, 396, 13: 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 464: 396, 396, 396, 470: 396, 396, 396, 476: 396, 482: 396, 396, 494: 396, 396, 498: 396, 396, 561: 396, 637: 396, 396, 640: 396}, // 1820 - {2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 13: 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 50: 2084, 461: 2084, 2084, 2084, 467: 2084, 2084, 2084, 473: 2084, 479: 2084, 2084, 491: 2084, 2084, 495: 2084, 2084, 558: 2084, 634: 2084, 2084, 637: 2084}, - {464: 4286}, - {2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 13: 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 50: 2085, 461: 2085, 2085, 2085, 467: 2085, 2085, 2085, 473: 2085, 479: 2085, 2085, 491: 2085, 2085, 495: 2085, 2085, 558: 2085, 634: 2085, 2085, 637: 2085}, - {4: 4139, 4141, 391, 13: 4158, 2121, 4156, 4097, 4160, 4147, 4176, 4140, 4143, 4142, 4145, 4146, 4148, 4155, 391, 4166, 4167, 4153, 4154, 4159, 4161, 4173, 4172, 4178, 4174, 4171, 4164, 4169, 4170, 4163, 4165, 4168, 4157, 69: 4110, 72: 4131, 4132, 81: 4133, 132: 4113, 173: 4117, 4118, 195: 4098, 209: 4112, 215: 4128, 226: 4107, 236: 4114, 240: 4109, 256: 4119, 264: 4115, 272: 4129, 4130, 279: 4099, 463: 4127, 468: 4138, 4175, 473: 2121, 485: 4134, 490: 4116, 492: 4126, 4101, 495: 2121, 574: 4106, 4102, 635: 2121, 637: 4144, 650: 4121, 657: 4108, 659: 4135, 667: 4120, 674: 4122, 677: 4103, 692: 4111, 767: 4149, 778: 4151, 798: 4150, 820: 4152, 824: 4162, 828: 4177, 855: 4125, 868: 4123, 904: 4100, 911: 4104, 971: 4288, 1117: 4105, 1144: 4124}, - {2344, 2344, 2344, 2344, 7: 2344, 480: 2344}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 655: 3404, 2685, 2686, 2684, 729: 4289}, + {2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 13: 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 50: 2087, 464: 2087, 2087, 2087, 470: 2087, 2087, 2087, 476: 2087, 482: 2087, 2087, 494: 2087, 2087, 498: 2087, 2087, 561: 2087, 637: 2087, 2087, 640: 2087}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 655: 3404, 2685, 2686, 2684, 729: 4291}, + {2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 13: 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 50: 2088, 464: 2088, 2088, 2088, 470: 2088, 2088, 2088, 476: 2088, 482: 2088, 2088, 494: 2088, 2088, 498: 2088, 2088, 561: 2088, 637: 2088, 2088, 640: 2088}, + {467: 4293}, // 1825 - {2358, 2358, 2358, 2358, 7: 2358, 480: 2358}, - {2357, 2357, 2357, 2357, 7: 2357, 480: 2357}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 468: 4292, 651: 4293, 2681, 2682, 2680}, - {2360, 2360, 2360, 2360, 7: 2360, 81: 2360, 480: 2360}, - {2359, 2359, 2359, 2359, 7: 2359, 81: 2359, 480: 2359}, + {2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 13: 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 50: 2089, 464: 2089, 2089, 2089, 470: 2089, 2089, 2089, 476: 2089, 482: 2089, 2089, 494: 2089, 2089, 498: 2089, 2089, 561: 2089, 637: 2089, 2089, 640: 2089}, + {4: 4146, 4148, 391, 13: 4165, 2125, 4163, 4104, 4167, 4154, 4183, 4147, 4150, 4149, 4152, 4153, 4155, 4162, 391, 4173, 4174, 4160, 4161, 4166, 4168, 4180, 4179, 4185, 4181, 4178, 4171, 4176, 4177, 4170, 4172, 4175, 4164, 69: 4117, 72: 4138, 4139, 81: 4140, 132: 4120, 193: 4105, 4124, 197: 4125, 209: 4119, 215: 4135, 226: 4114, 236: 4121, 240: 4116, 256: 4126, 264: 4122, 272: 4136, 4137, 279: 4106, 466: 4134, 471: 4145, 4182, 476: 2125, 488: 4141, 493: 4123, 495: 4133, 4108, 498: 2125, 577: 4113, 4109, 638: 2125, 640: 4151, 653: 4128, 660: 4115, 662: 4142, 670: 4127, 677: 4129, 680: 4110, 695: 4118, 770: 4156, 781: 4158, 801: 4157, 823: 4159, 827: 4169, 831: 4184, 858: 4132, 871: 4130, 907: 4107, 914: 4111, 974: 4295, 1120: 4112, 1147: 4131}, + {2348, 2348, 2348, 2348, 7: 2348, 483: 2348}, + {2362, 2362, 2362, 2362, 7: 2362, 483: 2362}, + {2361, 2361, 2361, 2361, 7: 2361, 483: 2361}, // 1830 - {163: 4299, 230: 4296, 248: 4297, 250: 4298, 468: 4295}, - {2365, 2365, 2365, 2365, 7: 2365, 480: 2365, 485: 2365}, - {2364, 2364, 2364, 2364, 7: 2364, 480: 2364, 485: 2364}, - {2363, 2363, 2363, 2363, 7: 2363, 480: 2363, 485: 2363}, - {2362, 2362, 2362, 2362, 7: 2362, 480: 2362, 485: 2362}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 471: 4299, 655: 4300, 2685, 2686, 2684}, + {2364, 2364, 2364, 2364, 7: 2364, 81: 2364, 483: 2364}, + {2363, 2363, 2363, 2363, 7: 2363, 81: 2363, 483: 2363}, + {163: 4306, 230: 4303, 248: 4304, 250: 4305, 471: 4302}, + {2369, 2369, 2369, 2369, 7: 2369, 483: 2369, 488: 2369}, // 1835 - {2361, 2361, 2361, 2361, 7: 2361, 480: 2361, 485: 2361}, - {2383, 2383, 2383, 2383, 7: 2383, 480: 2383}, - {2384, 2384, 2384, 2384, 7: 2384, 480: 2384}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4315, 2681, 2682, 2680}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4314}, + {2368, 2368, 2368, 2368, 7: 2368, 483: 2368, 488: 2368}, + {2367, 2367, 2367, 2367, 7: 2367, 483: 2367, 488: 2367}, + {2366, 2366, 2366, 2366, 7: 2366, 483: 2366, 488: 2366}, + {2365, 2365, 2365, 2365, 7: 2365, 483: 2365, 488: 2365}, + {2387, 2387, 2387, 2387, 7: 2387, 483: 2387}, // 1840 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4313}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4312}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4309, 2681, 2682, 2680}, - {2: 2356, 2356, 2356, 2356, 2356, 8: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 51: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 462: 2356, 470: 2356, 482: 2356, 555: 2356}, - {2: 2355, 2355, 2355, 2355, 2355, 8: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 51: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 462: 2355, 470: 2355, 482: 2355, 555: 2355}, + {2388, 2388, 2388, 2388, 7: 2388, 483: 2388}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4322, 2685, 2686, 2684}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4321}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4320}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4319}, // 1845 - {638: 4310}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4311, 2681, 2682, 2680}, - {2389, 2389, 2389, 2389, 7: 2389, 480: 2389}, - {2390, 2390, 2390, 2390, 7: 2390, 480: 2390}, - {2391, 2391, 2391, 2391, 7: 2391, 480: 2391}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4316, 2685, 2686, 2684}, + {2: 2360, 2360, 2360, 2360, 2360, 8: 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 51: 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 2360, 465: 2360, 473: 2360, 485: 2360, 558: 2360}, + {2: 2359, 2359, 2359, 2359, 2359, 8: 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 51: 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 465: 2359, 473: 2359, 485: 2359, 558: 2359}, + {641: 4317}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4318, 2685, 2686, 2684}, // 1850 - {2392, 2392, 2392, 2392, 7: 2392, 480: 2392}, - {638: 4316}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4317, 2681, 2682, 2680}, - {2393, 2393, 2393, 2393, 7: 2393, 480: 2393}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4333}, + {2393, 2393, 2393, 2393, 7: 2393, 483: 2393}, + {2394, 2394, 2394, 2394, 7: 2394, 483: 2394}, + {2395, 2395, 2395, 2395, 7: 2395, 483: 2395}, + {2396, 2396, 2396, 2396, 7: 2396, 483: 2396}, + {641: 4323}, // 1855 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4328, 2681, 2682, 2680}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4324, 2681, 2682, 2680}, - {2: 2351, 2351, 2351, 2351, 2351, 8: 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 51: 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 462: 2351, 555: 2351}, - {2: 433, 433, 433, 433, 433, 8: 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 51: 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433}, - {2: 432, 432, 432, 432, 432, 8: 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 51: 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4324, 2685, 2686, 2684}, + {2397, 2397, 2397, 2397, 7: 2397, 483: 2397}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4340}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4335, 2685, 2686, 2684}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4331, 2685, 2686, 2684}, // 1860 - {84: 4327, 87: 4326, 842: 4325}, - {2378, 2378, 2378, 2378, 7: 2378, 480: 2378}, - {1794, 1794, 1794, 1794, 1794, 7: 1794, 17: 1794, 50: 1794, 81: 1794, 1794, 1794, 1794, 1794, 87: 1794, 463: 1794, 470: 1794, 480: 1794, 485: 1794}, - {1793, 1793, 1793, 1793, 1793, 7: 1793, 17: 1793, 50: 1793, 81: 1793, 1793, 1793, 1793, 1793, 87: 1793, 463: 1793, 470: 1793, 480: 1793, 485: 1793}, - {147: 4330, 465: 3991, 3990, 796: 4331, 919: 4329}, + {2: 2355, 2355, 2355, 2355, 2355, 8: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 51: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 465: 2355, 558: 2355}, + {2: 433, 433, 433, 433, 433, 8: 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 51: 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433}, + {2: 432, 432, 432, 432, 432, 8: 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 51: 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 432}, + {84: 4334, 87: 4333, 845: 4332}, + {2382, 2382, 2382, 2382, 7: 2382, 483: 2382}, // 1865 - {2380, 2380, 2380, 2380, 7: 2380, 480: 2380}, - {2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 50: 2248, 461: 2248, 465: 2248, 2248, 2248, 2248, 473: 2248, 480: 2248, 2248, 566: 2248, 574: 2248, 576: 2248, 630: 2248, 2248, 2248, 2248}, - {147: 4332}, - {2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 50: 2247, 461: 2247, 465: 2247, 2247, 2247, 2247, 473: 2247, 480: 2247, 2247, 566: 2247, 574: 2247, 576: 2247, 630: 2247, 2247, 2247, 2247}, - {493: 4334, 657: 4335}, + {1798, 1798, 1798, 1798, 1798, 7: 1798, 17: 1798, 50: 1798, 81: 1798, 1798, 1798, 1798, 1798, 87: 1798, 466: 1798, 473: 1798, 483: 1798, 488: 1798}, + {1797, 1797, 1797, 1797, 1797, 7: 1797, 17: 1797, 50: 1797, 81: 1797, 1797, 1797, 1797, 1797, 87: 1797, 466: 1797, 473: 1797, 483: 1797, 488: 1797}, + {147: 4337, 468: 3998, 3997, 799: 4338, 922: 4336}, + {2384, 2384, 2384, 2384, 7: 2384, 483: 2384}, + {2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 50: 2252, 464: 2252, 468: 2252, 2252, 2252, 2252, 476: 2252, 483: 2252, 2252, 569: 2252, 577: 2252, 579: 2252, 633: 2252, 2252, 2252, 2252}, // 1870 - {468: 4337}, - {468: 4336}, - {2394, 2394, 2394, 2394, 7: 2394, 480: 2394}, - {462: 4339, 464: 3147, 474: 4342, 4341, 481: 3138, 497: 3142, 560: 3137, 3139, 3141, 3140, 565: 3145, 569: 3146, 582: 3144, 700: 4340, 3143, 1113: 4338}, - {2396, 2396, 2396, 2396, 7: 2396, 480: 2396}, + {147: 4339}, + {2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 50: 2251, 464: 2251, 468: 2251, 2251, 2251, 2251, 476: 2251, 483: 2251, 2251, 569: 2251, 577: 2251, 579: 2251, 633: 2251, 2251, 2251, 2251}, + {496: 4341, 660: 4342}, + {471: 4344}, + {471: 4343}, // 1875 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4345}, - {2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 50: 2170, 461: 2170, 465: 2170, 2170, 2170, 2170, 473: 2170, 480: 2170, 2170, 566: 2170, 574: 2170, 576: 2170, 630: 2170, 2170, 2170, 2170}, - {497: 3329, 562: 3331, 3330, 805: 4344}, - {497: 3329, 562: 3331, 3330, 805: 4343}, - {2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 50: 2168, 461: 2168, 465: 2168, 2168, 2168, 2168, 473: 2168, 480: 2168, 2168, 566: 2168, 574: 2168, 576: 2168, 630: 2168, 2168, 2168, 2168}, + {2398, 2398, 2398, 2398, 7: 2398, 483: 2398}, + {465: 4346, 467: 3154, 477: 4349, 4348, 484: 3145, 500: 3149, 563: 3144, 3146, 3148, 3147, 568: 3152, 572: 3153, 585: 3151, 703: 4347, 3150, 1116: 4345}, + {2400, 2400, 2400, 2400, 7: 2400, 483: 2400}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4352}, + {2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 50: 2174, 464: 2174, 468: 2174, 2174, 2174, 2174, 476: 2174, 483: 2174, 2174, 569: 2174, 577: 2174, 579: 2174, 633: 2174, 2174, 2174, 2174}, // 1880 - {2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 50: 2169, 461: 2169, 465: 2169, 2169, 2169, 2169, 473: 2169, 480: 2169, 2169, 566: 2169, 574: 2169, 576: 2169, 630: 2169, 2169, 2169, 2169}, - {50: 4346, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2395, 2395, 2395, 2395, 7: 2395, 480: 2395}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 4348}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4351}, + {500: 3336, 565: 3338, 3337, 808: 4351}, + {500: 3336, 565: 3338, 3337, 808: 4350}, + {2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 50: 2172, 464: 2172, 468: 2172, 2172, 2172, 2172, 476: 2172, 483: 2172, 2172, 569: 2172, 577: 2172, 579: 2172, 633: 2172, 2172, 2172, 2172}, + {2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 50: 2173, 464: 2173, 468: 2173, 2173, 2173, 2173, 476: 2173, 483: 2173, 2173, 569: 2173, 577: 2173, 579: 2173, 633: 2173, 2173, 2173, 2173}, + {50: 4353, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 1885 - {573: 4350}, - {2: 1819, 1819, 1819, 1819, 1819, 8: 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 51: 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 464: 1819, 559: 1819}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4353, 833: 4352}, - {2350, 2350, 2350, 2350, 7: 2350, 4610, 4611, 480: 2350, 914: 4609}, - {10: 4355, 105: 4403, 109: 4404, 171: 4414, 4413, 175: 4379, 177: 4394, 192: 4416, 214: 4415, 220: 4376, 300: 4383, 4375, 321: 4392, 347: 4399, 4398, 351: 4402, 384: 4410, 493: 4393, 495: 4397, 534: 4388, 635: 4396, 665: 4401, 4400, 668: 4377, 4382, 4380, 4373, 4367, 4381, 676: 4389, 678: 4374, 4406, 4368, 4369, 4370, 4371, 4372, 4395, 4408, 4412, 4407, 4366, 4411, 4378, 693: 4365, 4405, 4364, 4409, 886: 4384, 1136: 4386, 1159: 4363, 4390, 4360, 1179: 4358, 1193: 4361, 1195: 4362, 1214: 4359, 1230: 4385, 4356, 4387, 1288: 4357, 1300: 4391, 1303: 4354, 1328: 4417}, + {2399, 2399, 2399, 2399, 7: 2399, 483: 2399}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 4355}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4358}, + {576: 4357}, + {2: 1823, 1823, 1823, 1823, 1823, 8: 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 51: 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 467: 1823, 562: 1823}, // 1890 - {2211, 2211, 2211, 2211, 4497, 4503, 4491, 2211, 2211, 2211, 4495, 4504, 4502, 50: 2211, 461: 4496, 465: 3991, 3990, 2218, 4494, 473: 4501, 480: 2211, 4490, 566: 2252, 574: 2341, 576: 4488, 630: 4493, 4486, 4508, 4505, 796: 4489, 818: 4498, 895: 4500, 913: 4506, 922: 4499, 938: 4492, 985: 4507, 4608}, - {2211, 2211, 2211, 2211, 4497, 4503, 4491, 2211, 2211, 2211, 4495, 4504, 4502, 50: 2211, 461: 4496, 465: 3991, 3990, 2218, 4494, 473: 4501, 480: 2211, 4490, 566: 2252, 574: 2341, 576: 4488, 630: 4493, 4486, 4508, 4505, 796: 4489, 818: 4498, 895: 4500, 913: 4506, 922: 4499, 938: 4492, 985: 4507, 4487}, - {365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 50: 365, 461: 365, 465: 365, 365, 365, 365, 473: 365, 480: 365, 365, 566: 365, 574: 365, 576: 365, 630: 365, 365, 365, 365}, - {364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 50: 364, 461: 364, 465: 364, 364, 364, 364, 473: 364, 480: 364, 364, 566: 364, 574: 364, 576: 364, 630: 364, 364, 364, 364}, - {363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 50: 363, 461: 363, 465: 363, 363, 363, 363, 473: 363, 480: 363, 363, 566: 363, 574: 363, 576: 363, 630: 363, 363, 363, 363}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4360, 836: 4359}, + {2354, 2354, 2354, 2354, 7: 2354, 4617, 4618, 483: 2354, 917: 4616}, + {10: 4362, 105: 4410, 109: 4411, 171: 4421, 4420, 4386, 175: 4401, 190: 4423, 214: 4422, 220: 4383, 301: 4390, 4382, 324: 4399, 350: 4406, 4405, 354: 4409, 387: 4417, 496: 4400, 498: 4404, 537: 4395, 638: 4403, 668: 4408, 4407, 671: 4384, 4389, 4387, 4380, 4374, 4388, 679: 4396, 681: 4381, 4413, 4375, 4376, 4377, 4378, 4379, 4402, 4415, 4419, 4414, 4373, 4418, 4385, 696: 4372, 4412, 4371, 4416, 889: 4391, 1139: 4393, 1162: 4370, 4397, 4367, 1182: 4365, 1196: 4368, 1198: 4369, 1217: 4366, 1233: 4392, 4363, 4394, 1291: 4364, 1303: 4398, 1306: 4361, 1331: 4424}, + {2215, 2215, 2215, 2215, 4504, 4510, 4498, 2215, 2215, 2215, 4502, 4511, 4509, 50: 2215, 464: 4503, 468: 3998, 3997, 2222, 4501, 476: 4508, 483: 2215, 4497, 569: 2256, 577: 2345, 579: 4495, 633: 4500, 4493, 4515, 4512, 799: 4496, 821: 4505, 898: 4507, 916: 4513, 925: 4506, 941: 4499, 988: 4514, 4615}, + {2215, 2215, 2215, 2215, 4504, 4510, 4498, 2215, 2215, 2215, 4502, 4511, 4509, 50: 2215, 464: 4503, 468: 3998, 3997, 2222, 4501, 476: 4508, 483: 2215, 4497, 569: 2256, 577: 2345, 579: 4495, 633: 4500, 4493, 4515, 4512, 799: 4496, 821: 4505, 898: 4507, 916: 4513, 925: 4506, 941: 4499, 988: 4514, 4494}, // 1895 - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 48: 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 727: 280, 729: 280, 751: 3731, 772: 4484}, - {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 461: 275, 465: 275, 275, 275, 275, 473: 275, 480: 275, 275, 566: 275, 574: 275, 576: 275, 630: 275, 275, 275, 275, 727: 275, 729: 275, 861: 4483}, - {273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 48: 273, 50: 273, 461: 273, 3717, 465: 273, 273, 273, 273, 473: 273, 480: 273, 273, 566: 273, 574: 273, 576: 273, 630: 273, 273, 273, 273, 727: 273, 729: 273, 751: 3718, 889: 4481, 894: 3719}, - {273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 48: 273, 50: 273, 461: 273, 3717, 465: 273, 273, 273, 273, 473: 273, 480: 273, 273, 566: 273, 574: 273, 576: 273, 630: 273, 273, 273, 273, 727: 273, 729: 273, 751: 3718, 889: 4479, 894: 3719}, - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 751: 3731, 772: 4478}, + {365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 50: 365, 464: 365, 468: 365, 365, 365, 365, 476: 365, 483: 365, 365, 569: 365, 577: 365, 579: 365, 633: 365, 365, 365, 365}, + {364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 50: 364, 464: 364, 468: 364, 364, 364, 364, 476: 364, 483: 364, 364, 569: 364, 577: 364, 579: 364, 633: 364, 364, 364, 364}, + {363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 50: 363, 464: 363, 468: 363, 363, 363, 363, 476: 363, 483: 363, 363, 569: 363, 577: 363, 579: 363, 633: 363, 363, 363, 363}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 48: 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 730: 280, 732: 280, 754: 3738, 775: 4491}, + {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 464: 275, 468: 275, 275, 275, 275, 476: 275, 483: 275, 275, 569: 275, 577: 275, 579: 275, 633: 275, 275, 275, 275, 730: 275, 732: 275, 864: 4490}, // 1900 - {357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 48: 357, 50: 357, 461: 357, 357, 465: 357, 357, 357, 357, 473: 357, 480: 357, 357, 566: 357, 574: 357, 576: 357, 630: 357, 357, 357, 357, 727: 357, 729: 357}, - {356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 48: 356, 50: 356, 461: 356, 356, 465: 356, 356, 356, 356, 473: 356, 480: 356, 356, 566: 356, 574: 356, 576: 356, 630: 356, 356, 356, 356, 727: 356, 729: 356}, - {355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 48: 355, 50: 355, 461: 355, 355, 465: 355, 355, 355, 355, 473: 355, 480: 355, 355, 566: 355, 574: 355, 576: 355, 630: 355, 355, 355, 355, 727: 355, 729: 355}, - {354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 48: 354, 50: 354, 461: 354, 354, 465: 354, 354, 354, 354, 473: 354, 480: 354, 354, 566: 354, 574: 354, 576: 354, 630: 354, 354, 354, 354, 727: 354, 729: 354}, - {353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 48: 353, 50: 353, 461: 353, 353, 465: 353, 353, 353, 353, 473: 353, 480: 353, 353, 566: 353, 574: 353, 576: 353, 630: 353, 353, 353, 353, 727: 353, 729: 353}, + {273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 48: 273, 50: 273, 464: 273, 3724, 468: 273, 273, 273, 273, 476: 273, 483: 273, 273, 569: 273, 577: 273, 579: 273, 633: 273, 273, 273, 273, 730: 273, 732: 273, 754: 3725, 892: 4488, 897: 3726}, + {273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 48: 273, 50: 273, 464: 273, 3724, 468: 273, 273, 273, 273, 476: 273, 483: 273, 273, 569: 273, 577: 273, 579: 273, 633: 273, 273, 273, 273, 730: 273, 732: 273, 754: 3725, 892: 4486, 897: 3726}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 754: 3738, 775: 4485}, + {357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 48: 357, 50: 357, 464: 357, 357, 468: 357, 357, 357, 357, 476: 357, 483: 357, 357, 569: 357, 577: 357, 579: 357, 633: 357, 357, 357, 357, 730: 357, 732: 357}, + {356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 48: 356, 50: 356, 464: 356, 356, 468: 356, 356, 356, 356, 476: 356, 483: 356, 356, 569: 356, 577: 356, 579: 356, 633: 356, 356, 356, 356, 730: 356, 732: 356}, // 1905 - {352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 48: 352, 50: 352, 461: 352, 352, 465: 352, 352, 352, 352, 473: 352, 480: 352, 352, 566: 352, 574: 352, 576: 352, 630: 352, 352, 352, 352, 727: 352, 729: 352}, - {351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 48: 351, 50: 351, 461: 351, 351, 465: 351, 351, 351, 351, 473: 351, 480: 351, 351, 566: 351, 574: 351, 576: 351, 630: 351, 351, 351, 351, 727: 351, 729: 351}, - {350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 48: 350, 50: 350, 461: 350, 350, 465: 350, 350, 350, 350, 473: 350, 480: 350, 350, 566: 350, 574: 350, 576: 350, 630: 350, 350, 350, 350, 727: 350, 729: 350}, - {349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 48: 349, 50: 349, 461: 349, 349, 465: 349, 349, 349, 349, 473: 349, 480: 349, 349, 566: 349, 574: 349, 576: 349, 630: 349, 349, 349, 349, 727: 349, 729: 349}, - {348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 48: 348, 50: 348, 461: 348, 348, 465: 348, 348, 348, 348, 473: 348, 480: 348, 348, 566: 348, 574: 348, 576: 348, 630: 348, 348, 348, 348, 727: 348, 729: 348}, + {355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 48: 355, 50: 355, 464: 355, 355, 468: 355, 355, 355, 355, 476: 355, 483: 355, 355, 569: 355, 577: 355, 579: 355, 633: 355, 355, 355, 355, 730: 355, 732: 355}, + {354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 48: 354, 50: 354, 464: 354, 354, 468: 354, 354, 354, 354, 476: 354, 483: 354, 354, 569: 354, 577: 354, 579: 354, 633: 354, 354, 354, 354, 730: 354, 732: 354}, + {353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 48: 353, 50: 353, 464: 353, 353, 468: 353, 353, 353, 353, 476: 353, 483: 353, 353, 569: 353, 577: 353, 579: 353, 633: 353, 353, 353, 353, 730: 353, 732: 353}, + {352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 48: 352, 50: 352, 464: 352, 352, 468: 352, 352, 352, 352, 476: 352, 483: 352, 352, 569: 352, 577: 352, 579: 352, 633: 352, 352, 352, 352, 730: 352, 732: 352}, + {351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 48: 351, 50: 351, 464: 351, 351, 468: 351, 351, 351, 351, 476: 351, 483: 351, 351, 569: 351, 577: 351, 579: 351, 633: 351, 351, 351, 351, 730: 351, 732: 351}, // 1910 - {347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 48: 347, 50: 347, 461: 347, 347, 465: 347, 347, 347, 347, 473: 347, 480: 347, 347, 566: 347, 574: 347, 576: 347, 630: 347, 347, 347, 347, 727: 347, 729: 347}, - {346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 48: 346, 50: 346, 461: 346, 465: 346, 346, 346, 346, 473: 346, 480: 346, 346, 566: 346, 574: 346, 576: 346, 630: 346, 346, 346, 346, 727: 346, 729: 346}, - {345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 48: 345, 50: 345, 461: 345, 465: 345, 345, 345, 345, 473: 345, 480: 345, 345, 566: 345, 574: 345, 576: 345, 630: 345, 345, 345, 345, 727: 345, 729: 345}, - {341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 48: 341, 50: 341, 461: 341, 341, 465: 341, 341, 341, 341, 473: 341, 480: 341, 341, 566: 341, 574: 341, 576: 341, 630: 341, 341, 341, 341, 727: 341, 729: 341}, - {340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 48: 340, 50: 340, 461: 340, 340, 465: 340, 340, 340, 340, 473: 340, 480: 340, 340, 566: 340, 574: 340, 576: 340, 630: 340, 340, 340, 340, 727: 340, 729: 340}, + {350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 48: 350, 50: 350, 464: 350, 350, 468: 350, 350, 350, 350, 476: 350, 483: 350, 350, 569: 350, 577: 350, 579: 350, 633: 350, 350, 350, 350, 730: 350, 732: 350}, + {349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 48: 349, 50: 349, 464: 349, 349, 468: 349, 349, 349, 349, 476: 349, 483: 349, 349, 569: 349, 577: 349, 579: 349, 633: 349, 349, 349, 349, 730: 349, 732: 349}, + {348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 48: 348, 50: 348, 464: 348, 348, 468: 348, 348, 348, 348, 476: 348, 483: 348, 348, 569: 348, 577: 348, 579: 348, 633: 348, 348, 348, 348, 730: 348, 732: 348}, + {347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 48: 347, 50: 347, 464: 347, 347, 468: 347, 347, 347, 347, 476: 347, 483: 347, 347, 569: 347, 577: 347, 579: 347, 633: 347, 347, 347, 347, 730: 347, 732: 347}, + {346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 48: 346, 50: 346, 464: 346, 468: 346, 346, 346, 346, 476: 346, 483: 346, 346, 569: 346, 577: 346, 579: 346, 633: 346, 346, 346, 346, 730: 346, 732: 346}, // 1915 - {339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 48: 339, 50: 339, 461: 339, 339, 465: 339, 339, 339, 339, 473: 339, 480: 339, 339, 566: 339, 574: 339, 576: 339, 630: 339, 339, 339, 339, 727: 339, 729: 339}, - {338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 48: 338, 50: 338, 461: 338, 338, 465: 338, 338, 338, 338, 473: 338, 480: 338, 338, 566: 338, 574: 338, 576: 338, 630: 338, 338, 338, 338, 727: 338, 729: 338}, - {337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 48: 337, 50: 337, 461: 337, 337, 465: 337, 337, 337, 337, 473: 337, 480: 337, 337, 566: 337, 574: 337, 576: 337, 630: 337, 337, 337, 337, 727: 337, 729: 337}, - {336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 48: 336, 50: 336, 461: 336, 336, 465: 336, 336, 336, 336, 473: 336, 480: 336, 336, 566: 336, 574: 336, 576: 336, 630: 336, 336, 336, 336, 727: 336, 729: 336, 1254: 4477}, - {334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 50: 334, 461: 334, 334, 465: 334, 334, 334, 334, 473: 334, 480: 334, 334, 566: 334, 574: 334, 576: 334, 630: 334, 334, 334, 334}, + {345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 48: 345, 50: 345, 464: 345, 468: 345, 345, 345, 345, 476: 345, 483: 345, 345, 569: 345, 577: 345, 579: 345, 633: 345, 345, 345, 345, 730: 345, 732: 345}, + {341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 48: 341, 50: 341, 464: 341, 341, 468: 341, 341, 341, 341, 476: 341, 483: 341, 341, 569: 341, 577: 341, 579: 341, 633: 341, 341, 341, 341, 730: 341, 732: 341}, + {340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 48: 340, 50: 340, 464: 340, 340, 468: 340, 340, 340, 340, 476: 340, 483: 340, 340, 569: 340, 577: 340, 579: 340, 633: 340, 340, 340, 340, 730: 340, 732: 340}, + {339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 48: 339, 50: 339, 464: 339, 339, 468: 339, 339, 339, 339, 476: 339, 483: 339, 339, 569: 339, 577: 339, 579: 339, 633: 339, 339, 339, 339, 730: 339, 732: 339}, + {338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 48: 338, 50: 338, 464: 338, 338, 468: 338, 338, 338, 338, 476: 338, 483: 338, 338, 569: 338, 577: 338, 579: 338, 633: 338, 338, 338, 338, 730: 338, 732: 338}, // 1920 - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 461: 267, 3730, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 751: 4474, 759: 3738, 786: 4475}, - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 461: 267, 3730, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 751: 4471, 759: 3738, 786: 4472}, - {462: 3730, 751: 4469}, - {462: 3730, 751: 4467}, - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 751: 3731, 772: 4466}, + {337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 48: 337, 50: 337, 464: 337, 337, 468: 337, 337, 337, 337, 476: 337, 483: 337, 337, 569: 337, 577: 337, 579: 337, 633: 337, 337, 337, 337, 730: 337, 732: 337}, + {336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 48: 336, 50: 336, 464: 336, 336, 468: 336, 336, 336, 336, 476: 336, 483: 336, 336, 569: 336, 577: 336, 579: 336, 633: 336, 336, 336, 336, 730: 336, 732: 336, 1257: 4484}, + {334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 50: 334, 464: 334, 334, 468: 334, 334, 334, 334, 476: 334, 483: 334, 334, 569: 334, 577: 334, 579: 334, 633: 334, 334, 334, 334}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 464: 267, 3737, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 754: 4481, 762: 3745, 789: 4482}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 464: 267, 3737, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 754: 4478, 762: 3745, 789: 4479}, // 1925 - {462: 3730, 751: 4465}, - {325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 50: 325, 461: 325, 465: 325, 325, 325, 325, 473: 325, 480: 325, 325, 566: 325, 574: 325, 576: 325, 630: 325, 325, 325, 325}, - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 101: 4446, 4448, 104: 4447, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 759: 3738, 786: 4445, 869: 4464}, - {462: 4460}, - {462: 4450}, + {465: 3737, 754: 4476}, + {465: 3737, 754: 4474}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 754: 3738, 775: 4473}, + {465: 3737, 754: 4472}, + {325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 50: 325, 464: 325, 468: 325, 325, 325, 325, 476: 325, 483: 325, 325, 569: 325, 577: 325, 579: 325, 633: 325, 325, 325, 325}, // 1930 - {321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 50: 321, 461: 321, 465: 321, 321, 321, 321, 473: 321, 480: 321, 321, 566: 321, 574: 321, 576: 321, 630: 321, 321, 321, 321}, - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 101: 4446, 4448, 104: 4447, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 4443, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 4442, 665: 4401, 4400, 676: 4444, 759: 3738, 786: 4445, 869: 4441, 1136: 4440}, - {318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 14: 318, 50: 318, 461: 318, 318, 465: 318, 318, 318, 318, 473: 318, 480: 318, 318, 495: 318, 534: 318, 566: 318, 574: 318, 576: 318, 630: 318, 318, 318, 318, 635: 318, 829: 4439}, - {317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 14: 317, 50: 317, 461: 317, 317, 465: 317, 317, 317, 317, 473: 317, 480: 317, 317, 495: 317, 534: 317, 566: 317, 574: 317, 576: 317, 630: 317, 317, 317, 317, 635: 317, 829: 4438}, - {316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 14: 316, 50: 316, 461: 316, 316, 465: 316, 316, 316, 316, 473: 316, 480: 316, 316, 495: 316, 534: 316, 566: 316, 574: 316, 576: 316, 630: 316, 316, 316, 316, 635: 316, 665: 4436, 4435, 829: 4437}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 101: 4453, 4455, 104: 4454, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 762: 3745, 789: 4452, 872: 4471}, + {465: 4467}, + {465: 4457}, + {321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 50: 321, 464: 321, 468: 321, 321, 321, 321, 476: 321, 483: 321, 321, 569: 321, 577: 321, 579: 321, 633: 321, 321, 321, 321}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 101: 4453, 4455, 104: 4454, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 4450, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 4449, 668: 4408, 4407, 679: 4451, 762: 3745, 789: 4452, 872: 4448, 1139: 4447}, // 1935 - {495: 4430, 635: 4429, 665: 4432, 4431}, - {311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 14: 311, 50: 311, 101: 311, 311, 104: 311, 461: 311, 311, 465: 311, 311, 311, 311, 473: 311, 480: 311, 311, 495: 311, 534: 311, 566: 311, 574: 311, 576: 311, 630: 311, 311, 311, 311, 635: 311}, - {310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 14: 310, 50: 310, 101: 310, 310, 104: 310, 461: 310, 310, 465: 310, 310, 310, 310, 473: 310, 480: 310, 310, 495: 310, 534: 310, 566: 310, 574: 310, 576: 310, 630: 310, 310, 310, 310, 635: 310}, - {462: 307}, - {301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 48: 301, 50: 301, 461: 301, 301, 465: 301, 301, 301, 301, 473: 301, 480: 301, 301, 566: 301, 574: 301, 576: 301, 630: 301, 301, 301, 301, 727: 301, 729: 301}, + {318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 14: 318, 50: 318, 464: 318, 318, 468: 318, 318, 318, 318, 476: 318, 483: 318, 318, 498: 318, 537: 318, 569: 318, 577: 318, 579: 318, 633: 318, 318, 318, 318, 638: 318, 832: 4446}, + {317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 14: 317, 50: 317, 464: 317, 317, 468: 317, 317, 317, 317, 476: 317, 483: 317, 317, 498: 317, 537: 317, 569: 317, 577: 317, 579: 317, 633: 317, 317, 317, 317, 638: 317, 832: 4445}, + {316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 14: 316, 50: 316, 464: 316, 316, 468: 316, 316, 316, 316, 476: 316, 483: 316, 316, 498: 316, 537: 316, 569: 316, 577: 316, 579: 316, 633: 316, 316, 316, 316, 638: 316, 668: 4443, 4442, 832: 4444}, + {498: 4437, 638: 4436, 668: 4439, 4438}, + {311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 14: 311, 50: 311, 101: 311, 311, 104: 311, 464: 311, 311, 468: 311, 311, 311, 311, 476: 311, 483: 311, 311, 498: 311, 537: 311, 569: 311, 577: 311, 579: 311, 633: 311, 311, 311, 311, 638: 311}, // 1940 - {300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 48: 300, 50: 300, 461: 300, 300, 465: 300, 300, 300, 300, 473: 300, 480: 300, 300, 566: 300, 574: 300, 576: 300, 630: 300, 300, 300, 300, 727: 300, 729: 300}, - {299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 50: 299, 461: 299, 465: 299, 299, 299, 299, 473: 299, 480: 299, 299, 566: 299, 574: 299, 576: 299, 630: 299, 299, 299, 299}, - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 751: 3731, 772: 4428}, - {297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 50: 297, 461: 297, 465: 297, 297, 297, 297, 473: 297, 480: 297, 297, 566: 297, 574: 297, 576: 297, 630: 297, 297, 297, 297}, - {296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 50: 296, 461: 296, 465: 296, 296, 296, 296, 473: 296, 480: 296, 296, 566: 296, 574: 296, 576: 296, 630: 296, 296, 296, 296}, + {310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 14: 310, 50: 310, 101: 310, 310, 104: 310, 464: 310, 310, 468: 310, 310, 310, 310, 476: 310, 483: 310, 310, 498: 310, 537: 310, 569: 310, 577: 310, 579: 310, 633: 310, 310, 310, 310, 638: 310}, + {465: 307}, + {301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 48: 301, 50: 301, 464: 301, 301, 468: 301, 301, 301, 301, 476: 301, 483: 301, 301, 569: 301, 577: 301, 579: 301, 633: 301, 301, 301, 301, 730: 301, 732: 301}, + {300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 48: 300, 50: 300, 464: 300, 300, 468: 300, 300, 300, 300, 476: 300, 483: 300, 300, 569: 300, 577: 300, 579: 300, 633: 300, 300, 300, 300, 730: 300, 732: 300}, + {299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 50: 299, 464: 299, 468: 299, 299, 299, 299, 476: 299, 483: 299, 299, 569: 299, 577: 299, 579: 299, 633: 299, 299, 299, 299}, // 1945 - {294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 14: 294, 50: 294, 101: 294, 294, 104: 294, 461: 294, 465: 294, 294, 294, 294, 473: 294, 480: 294, 294, 495: 294, 534: 294, 566: 294, 574: 294, 576: 294, 630: 294, 294, 294, 294, 635: 294}, - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 14: 280, 50: 280, 101: 280, 280, 104: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 495: 280, 534: 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 635: 280, 751: 3731, 772: 4427}, - {292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 14: 292, 50: 292, 101: 292, 292, 104: 292, 461: 292, 465: 292, 292, 292, 292, 473: 292, 480: 292, 292, 495: 292, 534: 292, 566: 292, 574: 292, 576: 292, 630: 292, 292, 292, 292, 635: 292}, - {291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 14: 291, 50: 291, 101: 291, 291, 104: 291, 461: 291, 465: 291, 291, 291, 291, 473: 291, 480: 291, 291, 495: 291, 534: 291, 566: 291, 574: 291, 576: 291, 630: 291, 291, 291, 291, 635: 291}, - {286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 50: 286, 461: 286, 465: 286, 286, 286, 286, 473: 286, 480: 286, 286, 566: 286, 574: 286, 576: 286, 630: 286, 286, 286, 286}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 754: 3738, 775: 4435}, + {297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, 50: 297, 464: 297, 468: 297, 297, 297, 297, 476: 297, 483: 297, 297, 569: 297, 577: 297, 579: 297, 633: 297, 297, 297, 297}, + {296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 50: 296, 464: 296, 468: 296, 296, 296, 296, 476: 296, 483: 296, 296, 569: 296, 577: 296, 579: 296, 633: 296, 296, 296, 296}, + {294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 14: 294, 50: 294, 101: 294, 294, 104: 294, 464: 294, 468: 294, 294, 294, 294, 476: 294, 483: 294, 294, 498: 294, 537: 294, 569: 294, 577: 294, 579: 294, 633: 294, 294, 294, 294, 638: 294}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 14: 280, 50: 280, 101: 280, 280, 104: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 498: 280, 537: 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 638: 280, 754: 3738, 775: 4434}, // 1950 - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 751: 3731, 772: 4426}, - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 751: 3731, 772: 4425}, - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 751: 3731, 772: 4424}, - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 48: 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 727: 280, 729: 280, 751: 3731, 772: 4418}, - {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 461: 275, 465: 275, 275, 275, 275, 473: 275, 480: 275, 275, 566: 275, 574: 275, 576: 275, 630: 275, 275, 275, 275, 727: 275, 729: 275, 861: 4419}, + {292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 14: 292, 50: 292, 101: 292, 292, 104: 292, 464: 292, 468: 292, 292, 292, 292, 476: 292, 483: 292, 292, 498: 292, 537: 292, 569: 292, 577: 292, 579: 292, 633: 292, 292, 292, 292, 638: 292}, + {291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 14: 291, 50: 291, 101: 291, 291, 104: 291, 464: 291, 468: 291, 291, 291, 291, 476: 291, 483: 291, 291, 498: 291, 537: 291, 569: 291, 577: 291, 579: 291, 633: 291, 291, 291, 291, 638: 291}, + {286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 50: 286, 464: 286, 468: 286, 286, 286, 286, 476: 286, 483: 286, 286, 569: 286, 577: 286, 579: 286, 633: 286, 286, 286, 286}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 754: 3738, 775: 4433}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 754: 3738, 775: 4432}, // 1955 - {282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 48: 4421, 50: 282, 461: 282, 465: 282, 282, 282, 282, 473: 282, 480: 282, 282, 566: 282, 574: 282, 576: 282, 630: 282, 282, 282, 282, 727: 4420, 729: 4422, 860: 4423}, - {278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 48: 278, 50: 278, 461: 278, 465: 278, 278, 278, 278, 473: 278, 480: 278, 278, 566: 278, 574: 278, 576: 278, 630: 278, 278, 278, 278, 727: 278, 729: 278}, - {277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 48: 277, 50: 277, 461: 277, 465: 277, 277, 277, 277, 473: 277, 480: 277, 277, 566: 277, 574: 277, 576: 277, 630: 277, 277, 277, 277, 727: 277, 729: 277}, - {276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 48: 276, 50: 276, 461: 276, 465: 276, 276, 276, 276, 473: 276, 480: 276, 276, 566: 276, 574: 276, 576: 276, 630: 276, 276, 276, 276, 727: 276, 729: 276}, - {274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 48: 274, 50: 274, 461: 274, 465: 274, 274, 274, 274, 473: 274, 480: 274, 274, 566: 274, 574: 274, 576: 274, 630: 274, 274, 274, 274, 727: 274, 729: 274}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 754: 3738, 775: 4431}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 48: 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 730: 280, 732: 280, 754: 3738, 775: 4425}, + {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 464: 275, 468: 275, 275, 275, 275, 476: 275, 483: 275, 275, 569: 275, 577: 275, 579: 275, 633: 275, 275, 275, 275, 730: 275, 732: 275, 864: 4426}, + {282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 48: 4428, 50: 282, 464: 282, 468: 282, 282, 282, 282, 476: 282, 483: 282, 282, 569: 282, 577: 282, 579: 282, 633: 282, 282, 282, 282, 730: 4427, 732: 4429, 863: 4430}, + {278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 48: 278, 50: 278, 464: 278, 468: 278, 278, 278, 278, 476: 278, 483: 278, 278, 569: 278, 577: 278, 579: 278, 633: 278, 278, 278, 278, 730: 278, 732: 278}, // 1960 - {283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 50: 283, 461: 283, 465: 283, 283, 283, 283, 473: 283, 480: 283, 283, 566: 283, 574: 283, 576: 283, 630: 283, 283, 283, 283}, - {284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 50: 284, 461: 284, 465: 284, 284, 284, 284, 473: 284, 480: 284, 284, 566: 284, 574: 284, 576: 284, 630: 284, 284, 284, 284}, - {285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 50: 285, 461: 285, 465: 285, 285, 285, 285, 473: 285, 480: 285, 285, 566: 285, 574: 285, 576: 285, 630: 285, 285, 285, 285}, - {293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 14: 293, 50: 293, 101: 293, 293, 104: 293, 461: 293, 465: 293, 293, 293, 293, 473: 293, 480: 293, 293, 495: 293, 534: 293, 566: 293, 574: 293, 576: 293, 630: 293, 293, 293, 293, 635: 293}, - {298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 50: 298, 461: 298, 465: 298, 298, 298, 298, 473: 298, 480: 298, 298, 566: 298, 574: 298, 576: 298, 630: 298, 298, 298, 298}, + {277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 48: 277, 50: 277, 464: 277, 468: 277, 277, 277, 277, 476: 277, 483: 277, 277, 569: 277, 577: 277, 579: 277, 633: 277, 277, 277, 277, 730: 277, 732: 277}, + {276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 48: 276, 50: 276, 464: 276, 468: 276, 276, 276, 276, 476: 276, 483: 276, 276, 569: 276, 577: 276, 579: 276, 633: 276, 276, 276, 276, 730: 276, 732: 276}, + {274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 48: 274, 50: 274, 464: 274, 468: 274, 274, 274, 274, 476: 274, 483: 274, 274, 569: 274, 577: 274, 579: 274, 633: 274, 274, 274, 274, 730: 274, 732: 274}, + {283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 50: 283, 464: 283, 468: 283, 283, 283, 283, 476: 283, 483: 283, 283, 569: 283, 577: 283, 579: 283, 633: 283, 283, 283, 283}, + {284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 50: 284, 464: 284, 468: 284, 284, 284, 284, 476: 284, 483: 284, 284, 569: 284, 577: 284, 579: 284, 633: 284, 284, 284, 284}, // 1965 - {315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 14: 315, 50: 315, 461: 315, 315, 465: 315, 315, 315, 315, 473: 315, 480: 315, 315, 495: 315, 534: 315, 566: 315, 574: 315, 576: 315, 630: 315, 315, 315, 315, 635: 315, 829: 4434}, - {314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 14: 314, 50: 314, 461: 314, 314, 465: 314, 314, 314, 314, 473: 314, 480: 314, 314, 495: 314, 534: 314, 566: 314, 574: 314, 576: 314, 630: 314, 314, 314, 314, 635: 314, 829: 4433}, - {462: 309}, - {462: 308}, - {462: 303}, + {285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 50: 285, 464: 285, 468: 285, 285, 285, 285, 476: 285, 483: 285, 285, 569: 285, 577: 285, 579: 285, 633: 285, 285, 285, 285}, + {293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 14: 293, 50: 293, 101: 293, 293, 104: 293, 464: 293, 468: 293, 293, 293, 293, 476: 293, 483: 293, 293, 498: 293, 537: 293, 569: 293, 577: 293, 579: 293, 633: 293, 293, 293, 293, 638: 293}, + {298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 50: 298, 464: 298, 468: 298, 298, 298, 298, 476: 298, 483: 298, 298, 569: 298, 577: 298, 579: 298, 633: 298, 298, 298, 298}, + {315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 14: 315, 50: 315, 464: 315, 315, 468: 315, 315, 315, 315, 476: 315, 483: 315, 315, 498: 315, 537: 315, 569: 315, 577: 315, 579: 315, 633: 315, 315, 315, 315, 638: 315, 832: 4441}, + {314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 14: 314, 50: 314, 464: 314, 314, 468: 314, 314, 314, 314, 476: 314, 483: 314, 314, 498: 314, 537: 314, 569: 314, 577: 314, 579: 314, 633: 314, 314, 314, 314, 638: 314, 832: 4440}, // 1970 - {462: 304}, - {462: 306}, - {462: 305}, - {462: 302}, - {312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 14: 312, 50: 312, 101: 312, 312, 104: 312, 461: 312, 312, 465: 312, 312, 312, 312, 473: 312, 480: 312, 312, 495: 312, 534: 312, 566: 312, 574: 312, 576: 312, 630: 312, 312, 312, 312, 635: 312}, + {465: 309}, + {465: 308}, + {465: 303}, + {465: 304}, + {465: 306}, // 1975 - {313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 14: 313, 50: 313, 101: 313, 313, 104: 313, 461: 313, 313, 465: 313, 313, 313, 313, 473: 313, 480: 313, 313, 495: 313, 534: 313, 566: 313, 574: 313, 576: 313, 630: 313, 313, 313, 313, 635: 313}, - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 101: 4446, 4448, 104: 4447, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 759: 3738, 786: 4445, 869: 4449}, - {319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 50: 319, 461: 319, 465: 319, 319, 319, 319, 473: 319, 480: 319, 319, 566: 319, 574: 319, 576: 319, 630: 319, 319, 319, 319}, - {493: 3743, 829: 4439}, - {493: 3742, 829: 4438}, + {465: 305}, + {465: 302}, + {312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 14: 312, 50: 312, 101: 312, 312, 104: 312, 464: 312, 312, 468: 312, 312, 312, 312, 476: 312, 483: 312, 312, 498: 312, 537: 312, 569: 312, 577: 312, 579: 312, 633: 312, 312, 312, 312, 638: 312}, + {313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 14: 313, 50: 313, 101: 313, 313, 104: 313, 464: 313, 313, 468: 313, 313, 313, 313, 476: 313, 483: 313, 313, 498: 313, 537: 313, 569: 313, 577: 313, 579: 313, 633: 313, 313, 313, 313, 638: 313}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 101: 4453, 4455, 104: 4454, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 762: 3745, 789: 4452, 872: 4456}, // 1980 - {295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 50: 295, 461: 295, 465: 295, 295, 295, 295, 473: 295, 480: 295, 295, 566: 295, 574: 295, 576: 295, 630: 295, 295, 295, 295}, - {290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 50: 290, 461: 290, 465: 290, 290, 290, 290, 473: 290, 480: 290, 290, 566: 290, 574: 290, 576: 290, 630: 290, 290, 290, 290}, - {289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 50: 289, 461: 289, 465: 289, 289, 289, 289, 473: 289, 480: 289, 289, 566: 289, 574: 289, 576: 289, 630: 289, 289, 289, 289}, - {288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 50: 288, 461: 288, 465: 288, 288, 288, 288, 473: 288, 480: 288, 288, 566: 288, 574: 288, 576: 288, 630: 288, 288, 288, 288}, - {287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 50: 287, 461: 287, 465: 287, 287, 287, 287, 473: 287, 480: 287, 287, 566: 287, 574: 287, 576: 287, 630: 287, 287, 287, 287}, + {319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 50: 319, 464: 319, 468: 319, 319, 319, 319, 476: 319, 483: 319, 319, 569: 319, 577: 319, 579: 319, 633: 319, 319, 319, 319}, + {496: 3750, 832: 4446}, + {496: 3749, 832: 4445}, + {295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 50: 295, 464: 295, 468: 295, 295, 295, 295, 476: 295, 483: 295, 295, 569: 295, 577: 295, 579: 295, 633: 295, 295, 295, 295}, + {290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 50: 290, 464: 290, 468: 290, 290, 290, 290, 476: 290, 483: 290, 290, 569: 290, 577: 290, 579: 290, 633: 290, 290, 290, 290}, // 1985 - {320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 50: 320, 461: 320, 465: 320, 320, 320, 320, 473: 320, 480: 320, 320, 566: 320, 574: 320, 576: 320, 630: 320, 320, 320, 320}, - {464: 4452, 565: 4453, 569: 4454, 952: 4455, 1130: 4451}, - {7: 4457, 50: 4456}, + {289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 50: 289, 464: 289, 468: 289, 289, 289, 289, 476: 289, 483: 289, 289, 569: 289, 577: 289, 579: 289, 633: 289, 289, 289, 289}, + {288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 50: 288, 464: 288, 468: 288, 288, 288, 288, 476: 288, 483: 288, 288, 569: 288, 577: 288, 579: 288, 633: 288, 288, 288, 288}, + {287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 50: 287, 464: 287, 468: 287, 287, 287, 287, 476: 287, 483: 287, 287, 569: 287, 577: 287, 579: 287, 633: 287, 287, 287, 287}, + {320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 50: 320, 464: 320, 468: 320, 320, 320, 320, 476: 320, 483: 320, 320, 569: 320, 577: 320, 579: 320, 633: 320, 320, 320, 320}, + {467: 4459, 568: 4460, 572: 4461, 955: 4462, 1133: 4458}, + // 1990 + {7: 4464, 50: 4463}, {7: 255, 50: 255}, {7: 254, 50: 254}, - // 1990 {7: 253, 50: 253}, {7: 252, 50: 252}, - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 101: 4446, 4448, 104: 4447, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 759: 3738, 786: 4445, 869: 4459}, - {464: 4452, 565: 4453, 569: 4454, 952: 4458}, - {7: 251, 50: 251}, // 1995 - {322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 50: 322, 461: 322, 465: 322, 322, 322, 322, 473: 322, 480: 322, 322, 566: 322, 574: 322, 576: 322, 630: 322, 322, 322, 322}, - {464: 4452, 565: 4453, 569: 4454, 952: 4455, 1130: 4461}, - {7: 4457, 50: 4462}, - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 101: 4446, 4448, 104: 4447, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 759: 3738, 786: 4445, 869: 4463}, - {323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 50: 323, 461: 323, 465: 323, 323, 323, 323, 473: 323, 480: 323, 323, 566: 323, 574: 323, 576: 323, 630: 323, 323, 323, 323}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 101: 4453, 4455, 104: 4454, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 762: 3745, 789: 4452, 872: 4466}, + {467: 4459, 568: 4460, 572: 4461, 955: 4465}, + {7: 251, 50: 251}, + {322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 50: 322, 464: 322, 468: 322, 322, 322, 322, 476: 322, 483: 322, 322, 569: 322, 577: 322, 579: 322, 633: 322, 322, 322, 322}, + {467: 4459, 568: 4460, 572: 4461, 955: 4462, 1133: 4468}, // 2000 - {324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 50: 324, 461: 324, 465: 324, 324, 324, 324, 473: 324, 480: 324, 324, 566: 324, 574: 324, 576: 324, 630: 324, 324, 324, 324}, - {326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 50: 326, 461: 326, 465: 326, 326, 326, 326, 473: 326, 480: 326, 326, 566: 326, 574: 326, 576: 326, 630: 326, 326, 326, 326}, - {327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 50: 327, 461: 327, 465: 327, 327, 327, 327, 473: 327, 480: 327, 327, 566: 327, 574: 327, 576: 327, 630: 327, 327, 327, 327}, - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 759: 3738, 786: 4468}, - {328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 50: 328, 461: 328, 465: 328, 328, 328, 328, 473: 328, 480: 328, 328, 566: 328, 574: 328, 576: 328, 630: 328, 328, 328, 328}, + {7: 4464, 50: 4469}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 101: 4453, 4455, 104: 4454, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 762: 3745, 789: 4452, 872: 4470}, + {323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 50: 323, 464: 323, 468: 323, 323, 323, 323, 476: 323, 483: 323, 323, 569: 323, 577: 323, 579: 323, 633: 323, 323, 323, 323}, + {324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 50: 324, 464: 324, 468: 324, 324, 324, 324, 476: 324, 483: 324, 324, 569: 324, 577: 324, 579: 324, 633: 324, 324, 324, 324}, + {326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 50: 326, 464: 326, 468: 326, 326, 326, 326, 476: 326, 483: 326, 326, 569: 326, 577: 326, 579: 326, 633: 326, 326, 326, 326}, // 2005 - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 759: 3738, 786: 4470}, - {329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 50: 329, 461: 329, 465: 329, 329, 329, 329, 473: 329, 480: 329, 329, 566: 329, 574: 329, 576: 329, 630: 329, 329, 329, 329}, - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 759: 3738, 786: 4473}, - {330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 50: 330, 461: 330, 465: 330, 330, 330, 330, 473: 330, 480: 330, 330, 566: 330, 574: 330, 576: 330, 630: 330, 330, 330, 330}, - {331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 50: 331, 461: 331, 465: 331, 331, 331, 331, 473: 331, 480: 331, 331, 566: 331, 574: 331, 576: 331, 630: 331, 331, 331, 331}, + {327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 50: 327, 464: 327, 468: 327, 327, 327, 327, 476: 327, 483: 327, 327, 569: 327, 577: 327, 579: 327, 633: 327, 327, 327, 327}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 762: 3745, 789: 4475}, + {328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 50: 328, 464: 328, 468: 328, 328, 328, 328, 476: 328, 483: 328, 328, 569: 328, 577: 328, 579: 328, 633: 328, 328, 328, 328}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 762: 3745, 789: 4477}, + {329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 50: 329, 464: 329, 468: 329, 329, 329, 329, 476: 329, 483: 329, 329, 569: 329, 577: 329, 579: 329, 633: 329, 329, 329, 329}, // 2010 - {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3740, 50: 267, 461: 267, 465: 267, 267, 267, 267, 473: 267, 480: 267, 267, 495: 3741, 534: 3737, 566: 267, 574: 267, 576: 267, 630: 267, 267, 267, 267, 635: 3739, 759: 3738, 786: 4476}, - {332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 50: 332, 461: 332, 465: 332, 332, 332, 332, 473: 332, 480: 332, 332, 566: 332, 574: 332, 576: 332, 630: 332, 332, 332, 332}, - {333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 50: 333, 461: 333, 465: 333, 333, 333, 333, 473: 333, 480: 333, 333, 566: 333, 574: 333, 576: 333, 630: 333, 333, 333, 333}, - {335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 48: 335, 50: 335, 461: 335, 335, 465: 335, 335, 335, 335, 473: 335, 480: 335, 335, 566: 335, 574: 335, 576: 335, 630: 335, 335, 335, 335, 727: 335, 729: 335}, - {358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 50: 358, 461: 358, 465: 358, 358, 358, 358, 473: 358, 480: 358, 358, 566: 358, 574: 358, 576: 358, 630: 358, 358, 358, 358}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 762: 3745, 789: 4480}, + {330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 50: 330, 464: 330, 468: 330, 330, 330, 330, 476: 330, 483: 330, 330, 569: 330, 577: 330, 579: 330, 633: 330, 330, 330, 330}, + {331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 50: 331, 464: 331, 468: 331, 331, 331, 331, 476: 331, 483: 331, 331, 569: 331, 577: 331, 579: 331, 633: 331, 331, 331, 331}, + {267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 14: 3747, 50: 267, 464: 267, 468: 267, 267, 267, 267, 476: 267, 483: 267, 267, 498: 3748, 537: 3744, 569: 267, 577: 267, 579: 267, 633: 267, 267, 267, 267, 638: 3746, 762: 3745, 789: 4483}, + {332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 50: 332, 464: 332, 468: 332, 332, 332, 332, 476: 332, 483: 332, 332, 569: 332, 577: 332, 579: 332, 633: 332, 332, 332, 332}, // 2015 - {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 461: 275, 465: 275, 275, 275, 275, 473: 275, 480: 275, 275, 566: 275, 574: 275, 576: 275, 630: 275, 275, 275, 275, 727: 275, 729: 275, 861: 4480}, - {359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 48: 4421, 50: 359, 461: 359, 465: 359, 359, 359, 359, 473: 359, 480: 359, 359, 566: 359, 574: 359, 576: 359, 630: 359, 359, 359, 359, 727: 4420, 729: 4422, 860: 4423}, - {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 461: 275, 465: 275, 275, 275, 275, 473: 275, 480: 275, 275, 566: 275, 574: 275, 576: 275, 630: 275, 275, 275, 275, 727: 275, 729: 275, 861: 4482}, - {360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 48: 4421, 50: 360, 461: 360, 465: 360, 360, 360, 360, 473: 360, 480: 360, 360, 566: 360, 574: 360, 576: 360, 630: 360, 360, 360, 360, 727: 4420, 729: 4422, 860: 4423}, - {361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 48: 4421, 50: 361, 461: 361, 465: 361, 361, 361, 361, 473: 361, 480: 361, 361, 566: 361, 574: 361, 576: 361, 630: 361, 361, 361, 361, 727: 4420, 729: 4422, 860: 4423}, + {333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 50: 333, 464: 333, 468: 333, 333, 333, 333, 476: 333, 483: 333, 333, 569: 333, 577: 333, 579: 333, 633: 333, 333, 333, 333}, + {335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 48: 335, 50: 335, 464: 335, 335, 468: 335, 335, 335, 335, 476: 335, 483: 335, 335, 569: 335, 577: 335, 579: 335, 633: 335, 335, 335, 335, 730: 335, 732: 335}, + {358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 50: 358, 464: 358, 468: 358, 358, 358, 358, 476: 358, 483: 358, 358, 569: 358, 577: 358, 579: 358, 633: 358, 358, 358, 358}, + {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 464: 275, 468: 275, 275, 275, 275, 476: 275, 483: 275, 275, 569: 275, 577: 275, 579: 275, 633: 275, 275, 275, 275, 730: 275, 732: 275, 864: 4487}, + {359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 48: 4428, 50: 359, 464: 359, 468: 359, 359, 359, 359, 476: 359, 483: 359, 359, 569: 359, 577: 359, 579: 359, 633: 359, 359, 359, 359, 730: 4427, 732: 4429, 863: 4430}, // 2020 - {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 461: 275, 465: 275, 275, 275, 275, 473: 275, 480: 275, 275, 566: 275, 574: 275, 576: 275, 630: 275, 275, 275, 275, 727: 275, 729: 275, 861: 4485}, - {362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 48: 4421, 50: 362, 461: 362, 465: 362, 362, 362, 362, 473: 362, 480: 362, 362, 566: 362, 574: 362, 576: 362, 630: 362, 362, 362, 362, 727: 4420, 729: 4422, 860: 4423}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 566: 2340, 574: 2340, 576: 2340, 630: 2340, 637: 2340, 651: 4607, 2681, 2682, 2680, 663: 2340, 2340, 1123: 4606}, - {2274, 2274, 2274, 2274, 7: 2274, 2274, 2274, 50: 2274, 480: 2274}, - {566: 2251}, + {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 464: 275, 468: 275, 275, 275, 275, 476: 275, 483: 275, 275, 569: 275, 577: 275, 579: 275, 633: 275, 275, 275, 275, 730: 275, 732: 275, 864: 4489}, + {360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 48: 4428, 50: 360, 464: 360, 468: 360, 360, 360, 360, 476: 360, 483: 360, 360, 569: 360, 577: 360, 579: 360, 633: 360, 360, 360, 360, 730: 4427, 732: 4429, 863: 4430}, + {361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 48: 4428, 50: 361, 464: 361, 468: 361, 361, 361, 361, 476: 361, 483: 361, 361, 569: 361, 577: 361, 579: 361, 633: 361, 361, 361, 361, 730: 4427, 732: 4429, 863: 4430}, + {275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 48: 275, 50: 275, 464: 275, 468: 275, 275, 275, 275, 476: 275, 483: 275, 275, 569: 275, 577: 275, 579: 275, 633: 275, 275, 275, 275, 730: 275, 732: 275, 864: 4492}, + {362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 48: 4428, 50: 362, 464: 362, 468: 362, 362, 362, 362, 476: 362, 483: 362, 362, 569: 362, 577: 362, 579: 362, 633: 362, 362, 362, 362, 730: 4427, 732: 4429, 863: 4430}, // 2025 - {481: 4605}, - {2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 50: 2241, 461: 2241, 465: 2241, 2241, 2241, 2241, 473: 2241, 480: 2241, 2241, 566: 2241, 574: 2241, 576: 2241, 630: 2241, 2241, 2241, 2241}, - {2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 50: 2240, 461: 2240, 465: 2240, 2240, 2240, 2240, 473: 2240, 480: 2240, 2240, 566: 2240, 574: 2240, 576: 2240, 630: 2240, 2240, 2240, 2240}, - {566: 4601}, - {2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 50: 2237, 461: 2237, 465: 2237, 2237, 2237, 2237, 473: 2237, 480: 2237, 2237, 566: 4600, 574: 2237, 576: 2237, 630: 2237, 2237, 2237, 2237}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 569: 2344, 577: 2344, 579: 2344, 633: 2344, 640: 2344, 655: 4614, 2685, 2686, 2684, 666: 2344, 2344, 1126: 4613}, + {2278, 2278, 2278, 2278, 7: 2278, 2278, 2278, 50: 2278, 483: 2278}, + {569: 2255}, + {484: 4612}, + {2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 50: 2245, 464: 2245, 468: 2245, 2245, 2245, 2245, 476: 2245, 483: 2245, 2245, 569: 2245, 577: 2245, 579: 2245, 633: 2245, 2245, 2245, 2245}, // 2030 - {257: 4598, 349: 4599, 464: 3147, 474: 4342, 4341, 481: 3138, 497: 3142, 560: 3137, 3139, 3141, 3140, 565: 3145, 569: 3146, 578: 4587, 4584, 4585, 4586, 3144, 700: 4340, 3143, 4597, 1059: 4582, 4583, 4595, 1113: 4596, 1181: 4594}, - {468: 4592}, - {642: 4580}, - {464: 4579}, - {574: 4570}, + {2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 50: 2244, 464: 2244, 468: 2244, 2244, 2244, 2244, 476: 2244, 483: 2244, 2244, 569: 2244, 577: 2244, 579: 2244, 633: 2244, 2244, 2244, 2244}, + {569: 4608}, + {2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 50: 2241, 464: 2241, 468: 2241, 2241, 2241, 2241, 476: 2241, 483: 2241, 2241, 569: 4607, 577: 2241, 579: 2241, 633: 2241, 2241, 2241, 2241}, + {257: 4605, 352: 4606, 467: 3154, 477: 4349, 4348, 484: 3145, 500: 3149, 563: 3144, 3146, 3148, 3147, 568: 3152, 572: 3153, 581: 4594, 4591, 4592, 4593, 3151, 703: 4347, 3150, 4604, 1062: 4589, 4590, 4602, 1116: 4603, 1184: 4601}, + {471: 4599}, // 2035 - {467: 4563}, - {2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 50: 2229, 461: 2229, 465: 2229, 2229, 2229, 2229, 473: 2229, 480: 2229, 2229, 566: 2229, 574: 2229, 576: 2229, 630: 2229, 2229, 2229, 2229}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3395, 651: 3397, 2681, 2682, 2680, 726: 3394, 857: 4562}, - {175: 4560, 197: 4561, 468: 4559, 1166: 4558}, - {180: 4557, 237: 4556, 468: 4555, 1284: 4554}, + {645: 4587}, + {467: 4586}, + {577: 4577}, + {470: 4570}, + {2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 50: 2233, 464: 2233, 468: 2233, 2233, 2233, 2233, 476: 2233, 483: 2233, 2233, 569: 2233, 577: 2233, 579: 2233, 633: 2233, 2233, 2233, 2233}, // 2040 - {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 461: 280, 3730, 465: 280, 280, 280, 280, 473: 280, 480: 280, 280, 566: 280, 574: 280, 576: 280, 630: 280, 280, 280, 280, 751: 3731, 772: 4553}, - {297: 4552}, - {2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 50: 2213, 461: 2213, 465: 2213, 2213, 2213, 2213, 473: 2213, 480: 2213, 2213, 566: 2213, 574: 2213, 576: 2213, 630: 2213, 2213, 2213, 2213}, - {2210, 2210, 2210, 2210, 4497, 4503, 4491, 2210, 2210, 2210, 4495, 4504, 4502, 50: 2210, 461: 4496, 465: 3991, 3990, 2218, 4494, 473: 4501, 480: 2210, 4490, 566: 2252, 574: 2341, 576: 4488, 630: 4493, 4486, 4508, 4505, 796: 4489, 818: 4498, 895: 4500, 913: 4551, 922: 4499, 938: 4492}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4509}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3402, 655: 3404, 2685, 2686, 2684, 729: 3401, 860: 4569}, + {173: 4567, 196: 4568, 471: 4566, 1169: 4565}, + {178: 4564, 237: 4563, 471: 4562, 1287: 4561}, + {280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 50: 280, 464: 280, 3737, 468: 280, 280, 280, 280, 476: 280, 483: 280, 280, 569: 280, 577: 280, 579: 280, 633: 280, 280, 280, 280, 754: 3738, 775: 4560}, + {297: 4559}, // 2045 - {2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 50: 2156, 461: 2156, 4511, 465: 2156, 2156, 2156, 2156, 473: 2156, 480: 2156, 2156, 566: 2156, 574: 2156, 576: 2156, 630: 2156, 2156, 2156, 2156, 636: 2156, 1210: 4510}, - {2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 50: 2200, 461: 2200, 465: 2200, 2200, 2200, 2200, 473: 2200, 480: 2200, 2200, 566: 2200, 574: 2200, 576: 2200, 630: 2200, 2200, 2200, 2200, 636: 4526, 1226: 4527, 4528}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4515, 651: 4045, 2681, 2682, 2680, 732: 4514, 812: 4513, 821: 4512}, - {7: 4524, 50: 4523}, - {7: 2154, 50: 2154}, + {2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 50: 2217, 464: 2217, 468: 2217, 2217, 2217, 2217, 476: 2217, 483: 2217, 2217, 569: 2217, 577: 2217, 579: 2217, 633: 2217, 2217, 2217, 2217}, + {2214, 2214, 2214, 2214, 4504, 4510, 4498, 2214, 2214, 2214, 4502, 4511, 4509, 50: 2214, 464: 4503, 468: 3998, 3997, 2222, 4501, 476: 4508, 483: 2214, 4497, 569: 2256, 577: 2345, 579: 4495, 633: 4500, 4493, 4515, 4512, 799: 4496, 821: 4505, 898: 4507, 916: 4558, 925: 4506, 941: 4499}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4516}, + {2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 50: 2160, 464: 2160, 4518, 468: 2160, 2160, 2160, 2160, 476: 2160, 483: 2160, 2160, 569: 2160, 577: 2160, 579: 2160, 633: 2160, 2160, 2160, 2160, 639: 2160, 1213: 4517}, + {2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 50: 2204, 464: 2204, 468: 2204, 2204, 2204, 2204, 476: 2204, 483: 2204, 2204, 569: 2204, 577: 2204, 579: 2204, 633: 2204, 2204, 2204, 2204, 639: 4533, 1229: 4534, 4535}, // 2050 - {7: 280, 50: 280, 462: 3730, 518: 280, 280, 751: 3731, 772: 4521}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4516}, - {50: 4517, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {7: 1271, 50: 1271, 518: 4520, 4519, 931: 4518}, - {7: 2151, 50: 2151}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4522, 655: 4052, 2685, 2686, 2684, 735: 4521, 815: 4520, 824: 4519}, + {7: 4531, 50: 4530}, + {7: 2158, 50: 2158}, + {7: 280, 50: 280, 465: 3737, 521: 280, 280, 754: 3738, 775: 4528}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4523}, // 2055 - {1270, 1270, 1270, 1270, 7: 1270, 50: 1270, 480: 1270}, - {1269, 1269, 1269, 1269, 7: 1269, 50: 1269, 480: 1269}, - {7: 1271, 50: 1271, 518: 4520, 4519, 931: 4522}, - {7: 2152, 50: 2152}, - {2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 50: 2155, 461: 2155, 465: 2155, 2155, 2155, 2155, 473: 2155, 480: 2155, 2155, 566: 2155, 574: 2155, 576: 2155, 630: 2155, 2155, 2155, 2155, 636: 2155}, + {50: 4524, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {7: 1272, 50: 1272, 521: 4527, 4526, 934: 4525}, + {7: 2155, 50: 2155}, + {1271, 1271, 1271, 1271, 7: 1271, 50: 1271, 483: 1271}, + {1270, 1270, 1270, 1270, 7: 1270, 50: 1270, 483: 1270}, // 2060 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4515, 651: 4045, 2681, 2682, 2680, 732: 4514, 812: 4525}, - {7: 2153, 50: 2153}, - {200: 4548, 356: 4549, 372: 4550}, - {2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 50: 2199, 461: 2199, 465: 2199, 2199, 2199, 2199, 473: 2199, 480: 2199, 2199, 566: 2199, 574: 2199, 576: 2199, 630: 2199, 2199, 2199, 2199}, - {2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 50: 2195, 461: 4530, 465: 2195, 2195, 2195, 2195, 473: 2195, 480: 2195, 2195, 566: 2195, 574: 2195, 576: 2195, 630: 2195, 2195, 2195, 2195, 1067: 4531, 4532, 1233: 4529}, + {7: 1272, 50: 1272, 521: 4527, 4526, 934: 4529}, + {7: 2156, 50: 2156}, + {2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 50: 2159, 464: 2159, 468: 2159, 2159, 2159, 2159, 476: 2159, 483: 2159, 2159, 569: 2159, 577: 2159, 579: 2159, 633: 2159, 2159, 2159, 2159, 639: 2159}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4522, 655: 4052, 2685, 2686, 2684, 735: 4521, 815: 4532}, + {7: 2157, 50: 2157}, // 2065 - {2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 50: 2198, 461: 2198, 465: 2198, 2198, 2198, 2198, 473: 2198, 480: 2198, 2198, 566: 2198, 574: 2198, 576: 2198, 630: 2198, 2198, 2198, 2198}, - {642: 4546, 730: 4535}, - {2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 50: 2194, 461: 4544, 465: 2194, 2194, 2194, 2194, 473: 2194, 480: 2194, 2194, 566: 2194, 574: 2194, 576: 2194, 630: 2194, 2194, 2194, 2194, 1068: 4545}, - {2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 50: 2193, 461: 4533, 465: 2193, 2193, 2193, 2193, 473: 2193, 480: 2193, 2193, 566: 2193, 574: 2193, 576: 2193, 630: 2193, 2193, 2193, 2193, 1067: 4534}, - {730: 4535}, + {200: 4555, 359: 4556, 375: 4557}, + {2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 50: 2203, 464: 2203, 468: 2203, 2203, 2203, 2203, 476: 2203, 483: 2203, 2203, 569: 2203, 577: 2203, 579: 2203, 633: 2203, 2203, 2203, 2203}, + {2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 50: 2199, 464: 4537, 468: 2199, 2199, 2199, 2199, 476: 2199, 483: 2199, 2199, 569: 2199, 577: 2199, 579: 2199, 633: 2199, 2199, 2199, 2199, 1070: 4538, 4539, 1236: 4536}, + {2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 50: 2202, 464: 2202, 468: 2202, 2202, 2202, 2202, 476: 2202, 483: 2202, 2202, 569: 2202, 577: 2202, 579: 2202, 633: 2202, 2202, 2202, 2202}, + {645: 4553, 733: 4542}, // 2070 - {2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 50: 2191, 461: 2191, 465: 2191, 2191, 2191, 2191, 473: 2191, 480: 2191, 2191, 566: 2191, 574: 2191, 576: 2191, 630: 2191, 2191, 2191, 2191}, - {70: 4540, 493: 4539, 658: 4538, 660: 4537, 1090: 4536}, - {2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 50: 2197, 461: 2197, 465: 2197, 2197, 2197, 2197, 473: 2197, 480: 2197, 2197, 566: 2197, 574: 2197, 576: 2197, 630: 2197, 2197, 2197, 2197}, - {2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 50: 2190, 461: 2190, 465: 2190, 2190, 2190, 2190, 473: 2190, 480: 2190, 2190, 566: 2190, 574: 2190, 576: 2190, 630: 2190, 2190, 2190, 2190}, - {2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 50: 2189, 461: 2189, 465: 2189, 2189, 2189, 2189, 473: 2189, 480: 2189, 2189, 566: 2189, 574: 2189, 576: 2189, 630: 2189, 2189, 2189, 2189}, + {2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 50: 2198, 464: 4551, 468: 2198, 2198, 2198, 2198, 476: 2198, 483: 2198, 2198, 569: 2198, 577: 2198, 579: 2198, 633: 2198, 2198, 2198, 2198, 1071: 4552}, + {2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 50: 2197, 464: 4540, 468: 2197, 2197, 2197, 2197, 476: 2197, 483: 2197, 2197, 569: 2197, 577: 2197, 579: 2197, 633: 2197, 2197, 2197, 2197, 1070: 4541}, + {733: 4542}, + {2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 50: 2195, 464: 2195, 468: 2195, 2195, 2195, 2195, 476: 2195, 483: 2195, 2195, 569: 2195, 577: 2195, 579: 2195, 633: 2195, 2195, 2195, 2195}, + {70: 4547, 496: 4546, 661: 4545, 663: 4544, 1093: 4543}, // 2075 - {468: 4543, 481: 4542}, - {293: 4541}, - {2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 50: 2187, 461: 2187, 465: 2187, 2187, 2187, 2187, 473: 2187, 480: 2187, 2187, 566: 2187, 574: 2187, 576: 2187, 630: 2187, 2187, 2187, 2187}, - {2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 50: 2188, 461: 2188, 465: 2188, 2188, 2188, 2188, 473: 2188, 480: 2188, 2188, 566: 2188, 574: 2188, 576: 2188, 630: 2188, 2188, 2188, 2188}, - {2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 50: 2186, 461: 2186, 465: 2186, 2186, 2186, 2186, 473: 2186, 480: 2186, 2186, 566: 2186, 574: 2186, 576: 2186, 630: 2186, 2186, 2186, 2186}, + {2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 50: 2201, 464: 2201, 468: 2201, 2201, 2201, 2201, 476: 2201, 483: 2201, 2201, 569: 2201, 577: 2201, 579: 2201, 633: 2201, 2201, 2201, 2201}, + {2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 50: 2194, 464: 2194, 468: 2194, 2194, 2194, 2194, 476: 2194, 483: 2194, 2194, 569: 2194, 577: 2194, 579: 2194, 633: 2194, 2194, 2194, 2194}, + {2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 50: 2193, 464: 2193, 468: 2193, 2193, 2193, 2193, 476: 2193, 483: 2193, 2193, 569: 2193, 577: 2193, 579: 2193, 633: 2193, 2193, 2193, 2193}, + {471: 4550, 484: 4549}, + {293: 4548}, // 2080 - {642: 4546}, - {2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 50: 2192, 461: 2192, 465: 2192, 2192, 2192, 2192, 473: 2192, 480: 2192, 2192, 566: 2192, 574: 2192, 576: 2192, 630: 2192, 2192, 2192, 2192}, - {70: 4540, 493: 4539, 658: 4538, 660: 4537, 1090: 4547}, - {2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 50: 2196, 461: 2196, 465: 2196, 2196, 2196, 2196, 473: 2196, 480: 2196, 2196, 566: 2196, 574: 2196, 576: 2196, 630: 2196, 2196, 2196, 2196}, - {2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 50: 2203, 461: 2203, 465: 2203, 2203, 2203, 2203, 473: 2203, 480: 2203, 2203, 566: 2203, 574: 2203, 576: 2203, 630: 2203, 2203, 2203, 2203}, + {2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 50: 2191, 464: 2191, 468: 2191, 2191, 2191, 2191, 476: 2191, 483: 2191, 2191, 569: 2191, 577: 2191, 579: 2191, 633: 2191, 2191, 2191, 2191}, + {2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 50: 2192, 464: 2192, 468: 2192, 2192, 2192, 2192, 476: 2192, 483: 2192, 2192, 569: 2192, 577: 2192, 579: 2192, 633: 2192, 2192, 2192, 2192}, + {2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 50: 2190, 464: 2190, 468: 2190, 2190, 2190, 2190, 476: 2190, 483: 2190, 2190, 569: 2190, 577: 2190, 579: 2190, 633: 2190, 2190, 2190, 2190}, + {645: 4553}, + {2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 50: 2196, 464: 2196, 468: 2196, 2196, 2196, 2196, 476: 2196, 483: 2196, 2196, 569: 2196, 577: 2196, 579: 2196, 633: 2196, 2196, 2196, 2196}, // 2085 - {2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 50: 2202, 461: 2202, 465: 2202, 2202, 2202, 2202, 473: 2202, 480: 2202, 2202, 566: 2202, 574: 2202, 576: 2202, 630: 2202, 2202, 2202, 2202}, - {2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 50: 2201, 461: 2201, 465: 2201, 2201, 2201, 2201, 473: 2201, 480: 2201, 2201, 566: 2201, 574: 2201, 576: 2201, 630: 2201, 2201, 2201, 2201}, - {2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 50: 2212, 461: 2212, 465: 2212, 2212, 2212, 2212, 473: 2212, 480: 2212, 2212, 566: 2212, 574: 2212, 576: 2212, 630: 2212, 2212, 2212, 2212}, - {467: 2217}, - {2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 50: 2225, 461: 2225, 465: 2225, 2225, 2225, 2225, 473: 2225, 480: 2225, 2225, 566: 2225, 574: 2225, 576: 2225, 630: 2225, 2225, 2225, 2225}, + {70: 4547, 496: 4546, 661: 4545, 663: 4544, 1093: 4554}, + {2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 50: 2200, 464: 2200, 468: 2200, 2200, 2200, 2200, 476: 2200, 483: 2200, 2200, 569: 2200, 577: 2200, 579: 2200, 633: 2200, 2200, 2200, 2200}, + {2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 50: 2207, 464: 2207, 468: 2207, 2207, 2207, 2207, 476: 2207, 483: 2207, 2207, 569: 2207, 577: 2207, 579: 2207, 633: 2207, 2207, 2207, 2207}, + {2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 50: 2206, 464: 2206, 468: 2206, 2206, 2206, 2206, 476: 2206, 483: 2206, 2206, 569: 2206, 577: 2206, 579: 2206, 633: 2206, 2206, 2206, 2206}, + {2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 50: 2205, 464: 2205, 468: 2205, 2205, 2205, 2205, 476: 2205, 483: 2205, 2205, 569: 2205, 577: 2205, 579: 2205, 633: 2205, 2205, 2205, 2205}, // 2090 - {2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 50: 2226, 461: 2226, 465: 2226, 2226, 2226, 2226, 473: 2226, 480: 2226, 2226, 566: 2226, 574: 2226, 576: 2226, 630: 2226, 2226, 2226, 2226}, - {2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 50: 2224, 461: 2224, 465: 2224, 2224, 2224, 2224, 473: 2224, 480: 2224, 2224, 566: 2224, 574: 2224, 576: 2224, 630: 2224, 2224, 2224, 2224}, - {2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 50: 2223, 461: 2223, 465: 2223, 2223, 2223, 2223, 473: 2223, 480: 2223, 2223, 566: 2223, 574: 2223, 576: 2223, 630: 2223, 2223, 2223, 2223}, - {2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 50: 2222, 461: 2222, 465: 2222, 2222, 2222, 2222, 473: 2222, 480: 2222, 2222, 566: 2222, 574: 2222, 576: 2222, 630: 2222, 2222, 2222, 2222}, - {2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 50: 2227, 461: 2227, 465: 2227, 2227, 2227, 2227, 473: 2227, 480: 2227, 2227, 566: 2227, 574: 2227, 576: 2227, 630: 2227, 2227, 2227, 2227}, + {2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 50: 2216, 464: 2216, 468: 2216, 2216, 2216, 2216, 476: 2216, 483: 2216, 2216, 569: 2216, 577: 2216, 579: 2216, 633: 2216, 2216, 2216, 2216}, + {470: 2221}, + {2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 50: 2229, 464: 2229, 468: 2229, 2229, 2229, 2229, 476: 2229, 483: 2229, 2229, 569: 2229, 577: 2229, 579: 2229, 633: 2229, 2229, 2229, 2229}, + {2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 50: 2230, 464: 2230, 468: 2230, 2230, 2230, 2230, 476: 2230, 483: 2230, 2230, 569: 2230, 577: 2230, 579: 2230, 633: 2230, 2230, 2230, 2230}, + {2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 50: 2228, 464: 2228, 468: 2228, 2228, 2228, 2228, 476: 2228, 483: 2228, 2228, 569: 2228, 577: 2228, 579: 2228, 633: 2228, 2228, 2228, 2228}, // 2095 - {2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 50: 2221, 461: 2221, 465: 2221, 2221, 2221, 2221, 473: 2221, 480: 2221, 2221, 566: 2221, 574: 2221, 576: 2221, 630: 2221, 2221, 2221, 2221}, - {2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 50: 2220, 461: 2220, 465: 2220, 2220, 2220, 2220, 473: 2220, 480: 2220, 2220, 566: 2220, 574: 2220, 576: 2220, 630: 2220, 2220, 2220, 2220}, - {2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 50: 2219, 461: 2219, 465: 2219, 2219, 2219, 2219, 473: 2219, 480: 2219, 2219, 566: 2219, 574: 2219, 576: 2219, 630: 2219, 2219, 2219, 2219}, - {2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 50: 2228, 461: 2228, 465: 2228, 2228, 2228, 2228, 473: 2228, 480: 2228, 2228, 566: 2228, 574: 2228, 576: 2228, 630: 2228, 2228, 2228, 2228}, - {462: 4564}, + {2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 50: 2227, 464: 2227, 468: 2227, 2227, 2227, 2227, 476: 2227, 483: 2227, 2227, 569: 2227, 577: 2227, 579: 2227, 633: 2227, 2227, 2227, 2227}, + {2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 50: 2226, 464: 2226, 468: 2226, 2226, 2226, 2226, 476: 2226, 483: 2226, 2226, 569: 2226, 577: 2226, 579: 2226, 633: 2226, 2226, 2226, 2226}, + {2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 50: 2231, 464: 2231, 468: 2231, 2231, 2231, 2231, 476: 2231, 483: 2231, 2231, 569: 2231, 577: 2231, 579: 2231, 633: 2231, 2231, 2231, 2231}, + {2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 50: 2225, 464: 2225, 468: 2225, 2225, 2225, 2225, 476: 2225, 483: 2225, 2225, 569: 2225, 577: 2225, 579: 2225, 633: 2225, 2225, 2225, 2225}, + {2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 50: 2224, 464: 2224, 468: 2224, 2224, 2224, 2224, 476: 2224, 483: 2224, 2224, 569: 2224, 577: 2224, 579: 2224, 633: 2224, 2224, 2224, 2224}, // 2100 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4565}, - {50: 4566, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 50: 2216, 461: 2216, 465: 2216, 2216, 2216, 2216, 473: 2216, 480: 2216, 2216, 566: 2216, 574: 2216, 576: 2216, 630: 2216, 2216, 2216, 2216, 1285: 4569, 1315: 4568, 4567}, - {2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 50: 2230, 461: 2230, 465: 2230, 2230, 2230, 2230, 473: 2230, 480: 2230, 2230, 566: 2230, 574: 2230, 576: 2230, 630: 2230, 2230, 2230, 2230}, - {2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 50: 2215, 461: 2215, 465: 2215, 2215, 2215, 2215, 473: 2215, 480: 2215, 2215, 566: 2215, 574: 2215, 576: 2215, 630: 2215, 2215, 2215, 2215}, + {2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 50: 2223, 464: 2223, 468: 2223, 2223, 2223, 2223, 476: 2223, 483: 2223, 2223, 569: 2223, 577: 2223, 579: 2223, 633: 2223, 2223, 2223, 2223}, + {2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 50: 2232, 464: 2232, 468: 2232, 2232, 2232, 2232, 476: 2232, 483: 2232, 2232, 569: 2232, 577: 2232, 579: 2232, 633: 2232, 2232, 2232, 2232}, + {465: 4571}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4572}, + {50: 4573, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 2105 - {2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 50: 2214, 461: 2214, 465: 2214, 2214, 2214, 2214, 473: 2214, 480: 2214, 2214, 566: 2214, 574: 2214, 576: 2214, 630: 2214, 2214, 2214, 2214}, - {462: 4571}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4572}, - {50: 4573, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 50: 2246, 147: 4330, 461: 2246, 465: 3991, 3990, 2246, 2246, 473: 2246, 480: 2246, 2246, 566: 2246, 574: 2246, 576: 2246, 630: 2246, 2246, 2246, 2246, 796: 4574, 919: 4575, 1022: 4576, 1184: 4577}, + {2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 50: 2220, 464: 2220, 468: 2220, 2220, 2220, 2220, 476: 2220, 483: 2220, 2220, 569: 2220, 577: 2220, 579: 2220, 633: 2220, 2220, 2220, 2220, 1288: 4576, 1318: 4575, 4574}, + {2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 50: 2234, 464: 2234, 468: 2234, 2234, 2234, 2234, 476: 2234, 483: 2234, 2234, 569: 2234, 577: 2234, 579: 2234, 633: 2234, 2234, 2234, 2234}, + {2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 50: 2219, 464: 2219, 468: 2219, 2219, 2219, 2219, 476: 2219, 483: 2219, 2219, 569: 2219, 577: 2219, 579: 2219, 633: 2219, 2219, 2219, 2219}, + {2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 50: 2218, 464: 2218, 468: 2218, 2218, 2218, 2218, 476: 2218, 483: 2218, 2218, 569: 2218, 577: 2218, 579: 2218, 633: 2218, 2218, 2218, 2218}, + {465: 4578}, // 2110 - {147: 4332, 481: 4578}, - {2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 50: 2245, 461: 2245, 465: 2245, 2245, 2245, 2245, 473: 2245, 480: 2245, 2245, 566: 2245, 574: 2245, 576: 2245, 630: 2245, 2245, 2245, 2245}, - {2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 50: 2243, 461: 2243, 465: 2243, 2243, 2243, 2243, 473: 2243, 480: 2243, 2243, 566: 2243, 574: 2243, 576: 2243, 630: 2243, 2243, 2243, 2243}, - {2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 50: 2231, 461: 2231, 465: 2231, 2231, 2231, 2231, 473: 2231, 480: 2231, 2231, 566: 2231, 574: 2231, 576: 2231, 630: 2231, 2231, 2231, 2231}, - {2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 50: 2244, 461: 2244, 465: 2244, 2244, 2244, 2244, 473: 2244, 480: 2244, 2244, 566: 2244, 574: 2244, 576: 2244, 630: 2244, 2244, 2244, 2244}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4579}, + {50: 4580, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 50: 2250, 147: 4337, 464: 2250, 468: 3998, 3997, 2250, 2250, 476: 2250, 483: 2250, 2250, 569: 2250, 577: 2250, 579: 2250, 633: 2250, 2250, 2250, 2250, 799: 4581, 922: 4582, 1025: 4583, 1187: 4584}, + {147: 4339, 484: 4585}, + {2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 50: 2249, 464: 2249, 468: 2249, 2249, 2249, 2249, 476: 2249, 483: 2249, 2249, 569: 2249, 577: 2249, 579: 2249, 633: 2249, 2249, 2249, 2249}, // 2115 - {2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 50: 2232, 461: 2232, 465: 2232, 2232, 2232, 2232, 473: 2232, 480: 2232, 2232, 566: 2232, 574: 2232, 576: 2232, 630: 2232, 2232, 2232, 2232}, - {578: 4587, 4584, 4585, 4586, 1059: 4582, 4583, 4581}, - {2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 50: 2233, 461: 2233, 465: 2233, 2233, 2233, 2233, 473: 2233, 480: 2233, 2233, 566: 2233, 574: 2233, 576: 2233, 630: 2233, 2233, 2233, 2233}, - {2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 50: 2182, 461: 2182, 465: 2182, 2182, 2182, 2182, 473: 2182, 480: 2182, 2182, 566: 2182, 574: 2182, 576: 2182, 630: 2182, 2182, 2182, 2182}, - {462: 4588}, + {2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 50: 2247, 464: 2247, 468: 2247, 2247, 2247, 2247, 476: 2247, 483: 2247, 2247, 569: 2247, 577: 2247, 579: 2247, 633: 2247, 2247, 2247, 2247}, + {2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 50: 2235, 464: 2235, 468: 2235, 2235, 2235, 2235, 476: 2235, 483: 2235, 2235, 569: 2235, 577: 2235, 579: 2235, 633: 2235, 2235, 2235, 2235}, + {2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 50: 2248, 464: 2248, 468: 2248, 2248, 2248, 2248, 476: 2248, 483: 2248, 2248, 569: 2248, 577: 2248, 579: 2248, 633: 2248, 2248, 2248, 2248}, + {2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 50: 2236, 464: 2236, 468: 2236, 2236, 2236, 2236, 476: 2236, 483: 2236, 2236, 569: 2236, 577: 2236, 579: 2236, 633: 2236, 2236, 2236, 2236}, + {581: 4594, 4591, 4592, 4593, 1062: 4589, 4590, 4588}, // 2120 - {2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 50: 2173, 461: 2173, 2177, 465: 2173, 2173, 2173, 2173, 473: 2173, 480: 2173, 2173, 566: 2173, 574: 2173, 576: 2173, 630: 2173, 2173, 2173, 2173}, - {2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 50: 2172, 461: 2172, 2176, 465: 2172, 2172, 2172, 2172, 473: 2172, 480: 2172, 2172, 566: 2172, 574: 2172, 576: 2172, 630: 2172, 2172, 2172, 2172}, - {2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 50: 2171, 461: 2171, 2175, 465: 2171, 2171, 2171, 2171, 473: 2171, 480: 2171, 2171, 566: 2171, 574: 2171, 576: 2171, 630: 2171, 2171, 2171, 2171}, - {462: 2174}, - {50: 4589, 497: 2655, 721: 4590}, + {2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 50: 2237, 464: 2237, 468: 2237, 2237, 2237, 2237, 476: 2237, 483: 2237, 2237, 569: 2237, 577: 2237, 579: 2237, 633: 2237, 2237, 2237, 2237}, + {2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 50: 2186, 464: 2186, 468: 2186, 2186, 2186, 2186, 476: 2186, 483: 2186, 2186, 569: 2186, 577: 2186, 579: 2186, 633: 2186, 2186, 2186, 2186}, + {465: 4595}, + {2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 50: 2177, 464: 2177, 2181, 468: 2177, 2177, 2177, 2177, 476: 2177, 483: 2177, 2177, 569: 2177, 577: 2177, 579: 2177, 633: 2177, 2177, 2177, 2177}, + {2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 50: 2176, 464: 2176, 2180, 468: 2176, 2176, 2176, 2176, 476: 2176, 483: 2176, 2176, 569: 2176, 577: 2176, 579: 2176, 633: 2176, 2176, 2176, 2176}, // 2125 - {2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 50: 2181, 461: 2181, 465: 2181, 2181, 2181, 2181, 473: 2181, 480: 2181, 2181, 566: 2181, 574: 2181, 576: 2181, 630: 2181, 2181, 2181, 2181}, - {50: 4591}, - {2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 50: 2180, 461: 2180, 465: 2180, 2180, 2180, 2180, 473: 2180, 480: 2180, 2180, 566: 2180, 574: 2180, 576: 2180, 630: 2180, 2180, 2180, 2180}, - {152: 4593}, - {2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 50: 2234, 461: 2234, 465: 2234, 2234, 2234, 2234, 473: 2234, 480: 2234, 2234, 566: 2234, 574: 2234, 576: 2234, 630: 2234, 2234, 2234, 2234}, + {2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 50: 2175, 464: 2175, 2179, 468: 2175, 2175, 2175, 2175, 476: 2175, 483: 2175, 2175, 569: 2175, 577: 2175, 579: 2175, 633: 2175, 2175, 2175, 2175}, + {465: 2178}, + {50: 4596, 500: 2659, 724: 4597}, + {2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 50: 2185, 464: 2185, 468: 2185, 2185, 2185, 2185, 476: 2185, 483: 2185, 2185, 569: 2185, 577: 2185, 579: 2185, 633: 2185, 2185, 2185, 2185}, + {50: 4598}, // 2130 - {2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 50: 2235, 461: 2235, 465: 2235, 2235, 2235, 2235, 473: 2235, 480: 2235, 2235, 566: 2235, 574: 2235, 576: 2235, 630: 2235, 2235, 2235, 2235}, - {2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 50: 2185, 461: 2185, 465: 2185, 2185, 2185, 2185, 473: 2185, 480: 2185, 2185, 566: 2185, 574: 2185, 576: 2185, 630: 2185, 2185, 2185, 2185}, - {2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 50: 2184, 461: 2184, 465: 2184, 2184, 2184, 2184, 473: 2184, 480: 2184, 2184, 566: 2184, 574: 2184, 576: 2184, 630: 2184, 2184, 2184, 2184}, - {2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 50: 2183, 461: 2183, 465: 2183, 2183, 2183, 2183, 473: 2183, 480: 2183, 2183, 566: 2183, 574: 2183, 576: 2183, 630: 2183, 2183, 2183, 2183}, - {152: 4081}, + {2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 50: 2184, 464: 2184, 468: 2184, 2184, 2184, 2184, 476: 2184, 483: 2184, 2184, 569: 2184, 577: 2184, 579: 2184, 633: 2184, 2184, 2184, 2184}, + {152: 4600}, + {2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 50: 2238, 464: 2238, 468: 2238, 2238, 2238, 2238, 476: 2238, 483: 2238, 2238, 569: 2238, 577: 2238, 579: 2238, 633: 2238, 2238, 2238, 2238}, + {2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 50: 2239, 464: 2239, 468: 2239, 2239, 2239, 2239, 476: 2239, 483: 2239, 2239, 569: 2239, 577: 2239, 579: 2239, 633: 2239, 2239, 2239, 2239}, + {2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 50: 2189, 464: 2189, 468: 2189, 2189, 2189, 2189, 476: 2189, 483: 2189, 2189, 569: 2189, 577: 2189, 579: 2189, 633: 2189, 2189, 2189, 2189}, // 2135 - {462: 4078}, - {2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 50: 2236, 461: 2236, 465: 2236, 2236, 2236, 2236, 473: 2236, 480: 2236, 2236, 566: 2236, 574: 2236, 576: 2236, 630: 2236, 2236, 2236, 2236}, - {2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 50: 2239, 83: 4602, 85: 4603, 461: 2239, 465: 2239, 2239, 2239, 2239, 473: 2239, 480: 2239, 2239, 566: 2239, 574: 2239, 576: 2239, 630: 2239, 2239, 2239, 2239, 854: 4604}, - {2367, 2367, 2367, 2367, 2367, 2367, 2367, 2367, 2367, 2367, 2367, 2367, 2367, 17: 2367, 50: 2367, 81: 2367, 2367, 2367, 2367, 2367, 87: 2367, 461: 2367, 463: 2367, 465: 2367, 2367, 2367, 2367, 470: 2367, 473: 2367, 480: 2367, 2367, 485: 2367, 566: 2367, 574: 2367, 576: 2367, 630: 2367, 2367, 2367, 2367}, - {2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 17: 2366, 50: 2366, 81: 2366, 2366, 2366, 2366, 2366, 87: 2366, 461: 2366, 463: 2366, 465: 2366, 2366, 2366, 2366, 470: 2366, 473: 2366, 480: 2366, 2366, 485: 2366, 566: 2366, 574: 2366, 576: 2366, 630: 2366, 2366, 2366, 2366}, + {2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 50: 2188, 464: 2188, 468: 2188, 2188, 2188, 2188, 476: 2188, 483: 2188, 2188, 569: 2188, 577: 2188, 579: 2188, 633: 2188, 2188, 2188, 2188}, + {2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 50: 2187, 464: 2187, 468: 2187, 2187, 2187, 2187, 476: 2187, 483: 2187, 2187, 569: 2187, 577: 2187, 579: 2187, 633: 2187, 2187, 2187, 2187}, + {152: 4088}, + {465: 4085}, + {2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 50: 2240, 464: 2240, 468: 2240, 2240, 2240, 2240, 476: 2240, 483: 2240, 2240, 569: 2240, 577: 2240, 579: 2240, 633: 2240, 2240, 2240, 2240}, // 2140 - {2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 50: 2238, 461: 2238, 465: 2238, 2238, 2238, 2238, 473: 2238, 480: 2238, 2238, 566: 2238, 574: 2238, 576: 2238, 630: 2238, 2238, 2238, 2238}, - {2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 50: 2242, 461: 2242, 465: 2242, 2242, 2242, 2242, 473: 2242, 480: 2242, 2242, 566: 2242, 574: 2242, 576: 2242, 630: 2242, 2242, 2242, 2242}, - {566: 2339, 574: 2339, 576: 2339, 630: 2339, 637: 2339, 663: 2339, 2339}, - {2338, 2338, 2338, 2338, 7: 2338, 480: 2338, 566: 2338, 574: 2338, 576: 2338, 630: 2338, 637: 2338, 663: 2338, 2338}, - {2275, 2275, 2275, 2275, 7: 2275, 2275, 2275, 50: 2275, 480: 2275}, + {2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 50: 2243, 83: 4609, 85: 4610, 464: 2243, 468: 2243, 2243, 2243, 2243, 476: 2243, 483: 2243, 2243, 569: 2243, 577: 2243, 579: 2243, 633: 2243, 2243, 2243, 2243, 857: 4611}, + {2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 17: 2371, 50: 2371, 81: 2371, 2371, 2371, 2371, 2371, 87: 2371, 464: 2371, 466: 2371, 468: 2371, 2371, 2371, 2371, 473: 2371, 476: 2371, 483: 2371, 2371, 488: 2371, 569: 2371, 577: 2371, 579: 2371, 633: 2371, 2371, 2371, 2371}, + {2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 17: 2370, 50: 2370, 81: 2370, 2370, 2370, 2370, 2370, 87: 2370, 464: 2370, 466: 2370, 468: 2370, 2370, 2370, 2370, 473: 2370, 476: 2370, 483: 2370, 2370, 488: 2370, 569: 2370, 577: 2370, 579: 2370, 633: 2370, 2370, 2370, 2370}, + {2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 50: 2242, 464: 2242, 468: 2242, 2242, 2242, 2242, 476: 2242, 483: 2242, 2242, 569: 2242, 577: 2242, 579: 2242, 633: 2242, 2242, 2242, 2242}, + {2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 50: 2246, 464: 2246, 468: 2246, 2246, 2246, 2246, 476: 2246, 483: 2246, 2246, 569: 2246, 577: 2246, 579: 2246, 633: 2246, 2246, 2246, 2246}, // 2145 - {2397, 2397, 2397, 2397, 7: 2397, 480: 2397}, - {2349, 2349, 2349, 2349, 7: 2349, 480: 2349}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4612}, - {2348, 2348, 2348, 2348, 7: 2348, 480: 2348}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 4614}, + {569: 2343, 577: 2343, 579: 2343, 633: 2343, 640: 2343, 666: 2343, 2343}, + {2342, 2342, 2342, 2342, 7: 2342, 483: 2342, 569: 2342, 577: 2342, 579: 2342, 633: 2342, 640: 2342, 666: 2342, 2342}, + {2279, 2279, 2279, 2279, 7: 2279, 2279, 2279, 50: 2279, 483: 2279}, + {2401, 2401, 2401, 2401, 7: 2401, 483: 2401}, + {2353, 2353, 2353, 2353, 7: 2353, 483: 2353}, // 2150 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4353, 833: 4615}, - {2350, 2350, 2350, 2350, 7: 2350, 4610, 4611, 480: 2350, 914: 4616}, - {2398, 2398, 2398, 2398, 7: 2398, 480: 2398}, - {2399, 2399, 2399, 2399, 7: 2399, 480: 2399}, - {2400, 2400, 2400, 2400, 7: 2400, 480: 2400}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4619}, + {2352, 2352, 2352, 2352, 7: 2352, 483: 2352}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 4621}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4360, 836: 4622}, + {2354, 2354, 2354, 2354, 7: 2354, 4617, 4618, 483: 2354, 917: 4623}, // 2155 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4622, 967: 4621, 1146: 4620}, - {2401, 2401, 2401, 2401, 7: 4624, 480: 2401}, - {1281, 1281, 1281, 1281, 7: 1281, 480: 1281}, - {1271, 1271, 1271, 1271, 7: 1271, 480: 1271, 518: 4520, 4519, 931: 4623}, - {1279, 1279, 1279, 1279, 7: 1279, 480: 1279}, + {2402, 2402, 2402, 2402, 7: 2402, 483: 2402}, + {2403, 2403, 2403, 2403, 7: 2403, 483: 2403}, + {2404, 2404, 2404, 2404, 7: 2404, 483: 2404}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4629, 970: 4628, 1149: 4627}, + {2405, 2405, 2405, 2405, 7: 4631, 483: 2405}, // 2160 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4622, 967: 4625}, - {1280, 1280, 1280, 1280, 7: 1280, 480: 1280}, - {2: 553, 553, 553, 553, 553, 8: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 51: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 4629, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 639: 553, 804: 4628, 822: 4627}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 639: 4631, 651: 4633, 2681, 2682, 2680, 775: 4632, 817: 4630}, - {552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 51: 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 462: 552, 480: 552, 497: 552, 534: 552, 558: 552, 639: 552}, + {1282, 1282, 1282, 1282, 7: 1282, 483: 1282}, + {1272, 1272, 1272, 1272, 7: 1272, 483: 1272, 521: 4527, 4526, 934: 4630}, + {1280, 1280, 1280, 1280, 7: 1280, 483: 1280}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4629, 970: 4632}, + {1281, 1281, 1281, 1281, 7: 1281, 483: 1281}, // 2165 - {551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 51: 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 462: 551, 480: 551, 497: 551, 534: 551, 558: 551, 639: 551}, - {2404, 2404, 2404, 2404, 7: 2404, 480: 2404}, - {2373, 2373, 2373, 2373, 7: 2373, 18: 2373, 480: 2373}, - {2372, 2372, 2372, 2372, 7: 4634, 18: 2372, 480: 2372}, - {2343, 2343, 2343, 2343, 7: 2343, 18: 2343, 50: 2343, 98: 2343, 159: 2343, 463: 2343, 480: 2343, 484: 2343, 637: 2343, 639: 2343}, + {2: 553, 553, 553, 553, 553, 8: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 51: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 4636, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 642: 553, 807: 4635, 825: 4634}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 642: 4638, 655: 4640, 2685, 2686, 2684, 778: 4639, 820: 4637}, + {552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 51: 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 465: 552, 483: 552, 500: 552, 537: 552, 561: 552, 642: 552}, + {551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 51: 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 465: 551, 483: 551, 500: 551, 537: 551, 561: 551, 642: 551}, + {2408, 2408, 2408, 2408, 7: 2408, 483: 2408}, // 2170 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4635, 2681, 2682, 2680}, - {2342, 2342, 2342, 2342, 7: 2342, 18: 2342, 50: 2342, 98: 2342, 159: 2342, 463: 2342, 480: 2342, 484: 2342, 637: 2342, 639: 2342}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 639: 4631, 651: 4633, 2681, 2682, 2680, 775: 4632, 817: 4638}, - {2405, 2405, 2405, 2405, 7: 2405, 480: 2405}, - {18: 4639}, + {2377, 2377, 2377, 2377, 7: 2377, 18: 2377, 483: 2377}, + {2376, 2376, 2376, 2376, 7: 4641, 18: 2376, 483: 2376}, + {2347, 2347, 2347, 2347, 7: 2347, 18: 2347, 50: 2347, 98: 2347, 159: 2347, 466: 2347, 483: 2347, 487: 2347, 640: 2347, 642: 2347}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4642, 2685, 2686, 2684}, + {2346, 2346, 2346, 2346, 7: 2346, 18: 2346, 50: 2346, 98: 2346, 159: 2346, 466: 2346, 483: 2346, 487: 2346, 640: 2346, 642: 2346}, // 2175 - {2407, 2407, 2407, 2407, 7: 2407, 480: 2407}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 639: 4631, 651: 4633, 2681, 2682, 2680, 775: 4632, 817: 4642}, - {2406, 2406, 2406, 2406, 7: 2406, 480: 2406}, - {18: 4643}, - {2408, 2408, 2408, 2408, 7: 2408, 480: 2408}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 642: 4638, 655: 4640, 2685, 2686, 2684, 778: 4639, 820: 4645}, + {2409, 2409, 2409, 2409, 7: 2409, 483: 2409}, + {18: 4646}, + {2411, 2411, 2411, 2411, 7: 2411, 483: 2411}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 642: 4638, 655: 4640, 2685, 2686, 2684, 778: 4639, 820: 4649}, // 2180 - {2: 553, 553, 553, 553, 553, 8: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 51: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 4629, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 639: 553, 804: 4628, 822: 4645}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 639: 4631, 651: 4633, 2681, 2682, 2680, 775: 4632, 817: 4646}, - {2409, 2409, 2409, 2409, 7: 2409, 480: 2409}, - {2: 553, 553, 553, 553, 553, 8: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 51: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 4629, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 639: 553, 804: 4628, 822: 4648}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 639: 4631, 651: 4633, 2681, 2682, 2680, 775: 4632, 817: 4649}, + {2410, 2410, 2410, 2410, 7: 2410, 483: 2410}, + {18: 4650}, + {2412, 2412, 2412, 2412, 7: 2412, 483: 2412}, + {2: 553, 553, 553, 553, 553, 8: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 51: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 4636, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 642: 553, 807: 4635, 825: 4652}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 642: 4638, 655: 4640, 2685, 2686, 2684, 778: 4639, 820: 4653}, // 2185 - {2410, 2410, 2410, 2410, 7: 2410, 480: 2410}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 639: 4631, 651: 4633, 2681, 2682, 2680, 775: 4632, 817: 4651}, - {2411, 2411, 2411, 2411, 7: 2411, 480: 2411}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4653, 2681, 2682, 2680}, - {463: 4654}, + {2413, 2413, 2413, 2413, 7: 2413, 483: 2413}, + {2: 553, 553, 553, 553, 553, 8: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 51: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 4636, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 642: 553, 807: 4635, 825: 4655}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 642: 4638, 655: 4640, 2685, 2686, 2684, 778: 4639, 820: 4656}, + {2414, 2414, 2414, 2414, 7: 2414, 483: 2414}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 642: 4638, 655: 4640, 2685, 2686, 2684, 778: 4639, 820: 4658}, // 2190 - {558: 4655}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4656}, - {2371, 2371, 2371, 2371, 7: 2371, 215: 4660, 463: 4659, 480: 2371, 1326: 4658, 4657}, - {2412, 2412, 2412, 2412, 7: 2412, 480: 2412}, - {2370, 2370, 2370, 2370, 7: 2370, 480: 2370}, + {2415, 2415, 2415, 2415, 7: 2415, 483: 2415}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4660, 2685, 2686, 2684}, + {466: 4661}, + {561: 4662}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4663}, // 2195 - {193: 4662}, - {193: 4661}, - {2368, 2368, 2368, 2368, 7: 2368, 480: 2368}, - {2369, 2369, 2369, 2369, 7: 2369, 480: 2369}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 4681}, + {2375, 2375, 2375, 2375, 7: 2375, 215: 4667, 466: 4666, 483: 2375, 1329: 4665, 4664}, + {2416, 2416, 2416, 2416, 7: 2416, 483: 2416}, + {2374, 2374, 2374, 2374, 7: 2374, 483: 2374}, + {191: 4669}, + {191: 4668}, // 2200 - {566: 4680}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 4678}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 4676}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 4674}, - {566: 4671}, + {2372, 2372, 2372, 2372, 7: 2372, 483: 2372}, + {2373, 2373, 2373, 2373, 7: 2373, 483: 2373}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 4688}, + {569: 4687}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 4685}, // 2205 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4670, 2681, 2682, 2680}, - {2379, 2379, 2379, 2379, 7: 2379, 480: 2379}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 4672}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4607, 2681, 2682, 2680, 1123: 4673}, - {2402, 2402, 2402, 2402, 7: 2402, 480: 2402}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 4683}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 4681}, + {569: 4678}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4677, 2685, 2686, 2684}, + {2383, 2383, 2383, 2383, 7: 2383, 483: 2383}, // 2210 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4675, 2681, 2682, 2680}, - {2403, 2403, 2403, 2403, 7: 2403, 480: 2403}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4677, 2681, 2682, 2680}, - {2413, 2413, 2413, 2413, 7: 2413, 480: 2413}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4633, 2681, 2682, 2680, 775: 4679}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 4679}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4614, 2685, 2686, 2684, 1126: 4680}, + {2406, 2406, 2406, 2406, 7: 2406, 483: 2406}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4682, 2685, 2686, 2684}, + {2407, 2407, 2407, 2407, 7: 2407, 483: 2407}, // 2215 - {2414, 2414, 2414, 2414, 7: 4634, 480: 2414}, - {2415, 2415, 2415, 2415, 7: 2415, 480: 2415}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4682}, - {2007, 2007, 2007, 2007, 7: 2007, 480: 2007, 658: 4685, 660: 4684, 896: 4683}, - {2416, 2416, 2416, 2416, 7: 2416, 480: 2416}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4684, 2685, 2686, 2684}, + {2417, 2417, 2417, 2417, 7: 2417, 483: 2417}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4640, 2685, 2686, 2684, 778: 4686}, + {2418, 2418, 2418, 2418, 7: 4641, 483: 2418}, + {2419, 2419, 2419, 2419, 7: 2419, 483: 2419}, // 2220 - {2006, 2006, 2006, 2006, 7: 2006, 480: 2006}, - {2005, 2005, 2005, 2005, 7: 2005, 480: 2005}, - {136: 4629, 497: 553, 804: 4628, 822: 4687}, - {497: 2655, 721: 4688}, - {2417, 2417, 2417, 2417, 7: 2417, 480: 2417}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4689}, + {2011, 2011, 2011, 2011, 7: 2011, 483: 2011, 661: 4692, 663: 4691, 899: 4690}, + {2420, 2420, 2420, 2420, 7: 2420, 483: 2420}, + {2010, 2010, 2010, 2010, 7: 2010, 483: 2010}, + {2009, 2009, 2009, 2009, 7: 2009, 483: 2009}, // 2225 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 639: 4631, 651: 4633, 2681, 2682, 2680, 775: 4632, 817: 4690}, - {2418, 2418, 2418, 2418, 7: 2418, 480: 2418}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 462: 1818, 555: 4709, 771: 4823}, - {2424, 2424, 2424, 2424, 7: 2424, 480: 2424}, - {1818, 1818, 1818, 1818, 7: 1818, 103: 1818, 136: 1818, 462: 1818, 480: 1818, 555: 4709, 771: 4777, 804: 1818}, + {136: 4636, 500: 553, 807: 4635, 825: 4694}, + {500: 2659, 724: 4695}, + {2421, 2421, 2421, 2421, 7: 2421, 483: 2421}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 642: 4638, 655: 4640, 2685, 2686, 2684, 778: 4639, 820: 4697}, + {2422, 2422, 2422, 2422, 7: 2422, 483: 2422}, // 2230 - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 4768}, - {566: 4307, 574: 4701, 576: 4696, 630: 4699, 637: 4308, 663: 4700, 4697, 813: 4698, 1174: 4702}, - {566: 4762}, - {2: 2354, 2354, 2354, 2354, 2354, 8: 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 51: 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 462: 2354, 566: 4307, 637: 4308, 813: 4718, 1046: 4756}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 462: 1818, 470: 1818, 555: 4709, 771: 4750}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 465: 1822, 558: 4716, 774: 4830}, + {2428, 2428, 2428, 2428, 7: 2428, 483: 2428}, + {1822, 1822, 1822, 1822, 7: 1822, 103: 1822, 136: 1822, 465: 1822, 483: 1822, 558: 4716, 774: 4784, 807: 1822}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 4775}, + {569: 4314, 577: 4708, 579: 4703, 633: 4706, 640: 4315, 666: 4707, 4704, 816: 4705, 1177: 4709}, // 2235 - {2: 2354, 2354, 2354, 2354, 2354, 8: 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 51: 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 462: 2354, 470: 2354, 566: 4307, 637: 4308, 813: 4718, 1046: 4719}, - {566: 4707}, - {462: 4703}, - {434, 434, 434, 434, 7: 434, 50: 434, 480: 434}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4704}, + {569: 4769}, + {2: 2358, 2358, 2358, 2358, 2358, 8: 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 51: 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 465: 2358, 569: 4314, 640: 4315, 816: 4725, 1049: 4763}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 465: 1822, 473: 1822, 558: 4716, 774: 4757}, + {2: 2358, 2358, 2358, 2358, 2358, 8: 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 51: 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 465: 2358, 473: 2358, 569: 4314, 640: 4315, 816: 4725, 1049: 4726}, + {569: 4714}, // 2240 - {50: 4705, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {2246, 2246, 2246, 2246, 7: 2246, 50: 2246, 147: 4330, 465: 3991, 3990, 480: 2246, 796: 4331, 919: 4575, 1022: 4706}, - {2204, 2204, 2204, 2204, 7: 2204, 50: 2204, 480: 2204}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 462: 1818, 555: 4709, 771: 4708}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 1814, 651: 4713, 2681, 2682, 2680, 863: 4712}, + {465: 4710}, + {434, 434, 434, 434, 7: 434, 50: 434, 483: 434}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4711}, + {50: 4712, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2250, 2250, 2250, 2250, 7: 2250, 50: 2250, 147: 4337, 468: 3998, 3997, 483: 2250, 799: 4338, 922: 4582, 1025: 4713}, // 2245 - {465: 3991, 3990, 796: 4710}, - {573: 4711}, - {1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 51: 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 462: 1817, 464: 1817, 470: 1817, 480: 1817, 559: 1817, 804: 1817}, - {462: 4714}, - {462: 1813}, + {2208, 2208, 2208, 2208, 7: 2208, 50: 2208, 483: 2208}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 465: 1822, 558: 4716, 774: 4715}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 1818, 655: 4720, 2685, 2686, 2684, 866: 4719}, + {468: 3998, 3997, 799: 4717}, + {576: 4718}, // 2250 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4515, 651: 4045, 2681, 2682, 2680, 732: 4514, 812: 4513, 821: 4715}, - {7: 4524, 50: 4716}, - {632: 4508, 895: 4717}, - {2205, 2205, 2205, 2205, 7: 2205, 50: 2205, 480: 2205}, - {2: 2353, 2353, 2353, 2353, 2353, 8: 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 51: 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 462: 2353, 470: 2353}, + {1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 51: 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 465: 1821, 467: 1821, 473: 1821, 483: 1821, 562: 1821, 807: 1821}, + {465: 4721}, + {465: 1817}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4522, 655: 4052, 2685, 2686, 2684, 735: 4521, 815: 4520, 824: 4722}, + {7: 4531, 50: 4723}, // 2255 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 1814, 470: 1814, 651: 4721, 2681, 2682, 2680, 863: 4722, 927: 4720}, - {462: 4730}, - {82: 4728, 462: 1813, 470: 1813}, - {462: 1804, 470: 4723}, - {140: 4726, 170: 4725, 186: 4727, 890: 4724}, + {635: 4515, 898: 4724}, + {2209, 2209, 2209, 2209, 7: 2209, 50: 2209, 483: 2209}, + {2: 2357, 2357, 2357, 2357, 2357, 8: 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 51: 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 465: 2357, 473: 2357}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 1818, 473: 1818, 655: 4728, 2685, 2686, 2684, 866: 4729, 930: 4727}, + {465: 4737}, // 2260 - {462: 1803}, - {1797, 1797, 1797, 1797, 1797, 7: 1797, 17: 1797, 50: 1797, 81: 1797, 1797, 1797, 1797, 1797, 87: 1797, 461: 1797, 1797, 1797, 470: 1797, 480: 1797, 485: 1797}, - {1796, 1796, 1796, 1796, 1796, 7: 1796, 17: 1796, 50: 1796, 81: 1796, 1796, 1796, 1796, 1796, 87: 1796, 461: 1796, 1796, 1796, 470: 1796, 480: 1796, 485: 1796}, - {1795, 1795, 1795, 1795, 1795, 7: 1795, 17: 1795, 50: 1795, 81: 1795, 1795, 1795, 1795, 1795, 87: 1795, 461: 1795, 1795, 1795, 470: 1795, 480: 1795, 485: 1795}, - {140: 4726, 170: 4725, 186: 4727, 890: 4729}, + {82: 4735, 465: 1817, 473: 1817}, + {465: 1808, 473: 4730}, + {140: 4733, 170: 4732, 184: 4734, 893: 4731}, + {465: 1807}, + {1801, 1801, 1801, 1801, 1801, 7: 1801, 17: 1801, 50: 1801, 81: 1801, 1801, 1801, 1801, 1801, 87: 1801, 464: 1801, 1801, 1801, 473: 1801, 483: 1801, 488: 1801}, // 2265 - {462: 1802}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4515, 651: 4045, 2681, 2682, 2680, 732: 4514, 812: 4513, 821: 4731}, - {7: 4524, 50: 4732}, - {1812, 1812, 1812, 1812, 1812, 7: 1812, 17: 1812, 50: 1812, 82: 1812, 1812, 1812, 1812, 87: 1812, 463: 1812, 470: 1812, 480: 1812, 865: 4733}, - {2206, 2206, 2206, 2206, 4738, 7: 2206, 17: 4735, 50: 2206, 82: 4742, 4602, 4327, 4603, 87: 4326, 463: 4737, 470: 4741, 480: 2206, 842: 4739, 844: 4736, 854: 4740, 864: 4734}, + {1800, 1800, 1800, 1800, 1800, 7: 1800, 17: 1800, 50: 1800, 81: 1800, 1800, 1800, 1800, 1800, 87: 1800, 464: 1800, 1800, 1800, 473: 1800, 483: 1800, 488: 1800}, + {1799, 1799, 1799, 1799, 1799, 7: 1799, 17: 1799, 50: 1799, 81: 1799, 1799, 1799, 1799, 1799, 87: 1799, 464: 1799, 1799, 1799, 473: 1799, 483: 1799, 488: 1799}, + {140: 4733, 170: 4732, 184: 4734, 893: 4736}, + {465: 1806}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4522, 655: 4052, 2685, 2686, 2684, 735: 4521, 815: 4520, 824: 4738}, // 2270 - {1811, 1811, 1811, 1811, 1811, 7: 1811, 17: 1811, 50: 1811, 81: 1811, 1811, 1811, 1811, 1811, 87: 1811, 463: 1811, 470: 1811, 480: 1811, 485: 1811}, - {486: 4179, 497: 2002, 724: 4748}, - {1809, 1809, 1809, 1809, 1809, 7: 1809, 17: 1809, 50: 1809, 81: 1809, 1809, 1809, 1809, 1809, 87: 1809, 463: 1809, 470: 1809, 480: 1809, 485: 1809}, - {355: 4746}, - {464: 4745}, + {7: 4531, 50: 4739}, + {1816, 1816, 1816, 1816, 1816, 7: 1816, 17: 1816, 50: 1816, 82: 1816, 1816, 1816, 1816, 87: 1816, 466: 1816, 473: 1816, 483: 1816, 868: 4740}, + {2210, 2210, 2210, 2210, 4745, 7: 2210, 17: 4742, 50: 2210, 82: 4749, 4609, 4334, 4610, 87: 4333, 466: 4744, 473: 4748, 483: 2210, 845: 4746, 847: 4743, 857: 4747, 867: 4741}, + {1815, 1815, 1815, 1815, 1815, 7: 1815, 17: 1815, 50: 1815, 81: 1815, 1815, 1815, 1815, 1815, 87: 1815, 466: 1815, 473: 1815, 483: 1815, 488: 1815}, + {489: 4186, 500: 2006, 727: 4755}, // 2275 - {1806, 1806, 1806, 1806, 1806, 7: 1806, 17: 1806, 50: 1806, 81: 1806, 1806, 1806, 1806, 1806, 87: 1806, 463: 1806, 470: 1806, 480: 1806, 485: 1806}, - {1805, 1805, 1805, 1805, 1805, 7: 1805, 17: 1805, 50: 1805, 81: 1805, 1805, 1805, 1805, 1805, 87: 1805, 463: 1805, 470: 1805, 480: 1805, 485: 1805}, - {140: 4726, 170: 4725, 186: 4727, 890: 4744}, - {140: 4726, 170: 4725, 186: 4727, 890: 4743}, - {1798, 1798, 1798, 1798, 1798, 7: 1798, 17: 1798, 50: 1798, 81: 1798, 1798, 1798, 1798, 1798, 87: 1798, 461: 1798, 463: 1798, 470: 1798, 480: 1798, 485: 1798}, + {1813, 1813, 1813, 1813, 1813, 7: 1813, 17: 1813, 50: 1813, 81: 1813, 1813, 1813, 1813, 1813, 87: 1813, 466: 1813, 473: 1813, 483: 1813, 488: 1813}, + {358: 4753}, + {467: 4752}, + {1810, 1810, 1810, 1810, 1810, 7: 1810, 17: 1810, 50: 1810, 81: 1810, 1810, 1810, 1810, 1810, 87: 1810, 466: 1810, 473: 1810, 483: 1810, 488: 1810}, + {1809, 1809, 1809, 1809, 1809, 7: 1809, 17: 1809, 50: 1809, 81: 1809, 1809, 1809, 1809, 1809, 87: 1809, 466: 1809, 473: 1809, 483: 1809, 488: 1809}, // 2280 - {1799, 1799, 1799, 1799, 1799, 7: 1799, 17: 1799, 50: 1799, 81: 1799, 1799, 1799, 1799, 1799, 87: 1799, 461: 1799, 463: 1799, 470: 1799, 480: 1799, 485: 1799}, - {1807, 1807, 1807, 1807, 1807, 7: 1807, 17: 1807, 50: 1807, 81: 1807, 1807, 1807, 1807, 1807, 87: 1807, 463: 1807, 470: 1807, 480: 1807, 485: 1807}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4747, 2681, 2682, 2680}, - {1808, 1808, 1808, 1808, 1808, 7: 1808, 17: 1808, 50: 1808, 81: 1808, 1808, 1808, 1808, 1808, 87: 1808, 463: 1808, 470: 1808, 480: 1808, 485: 1808}, - {497: 2655, 721: 2654, 731: 4749}, + {140: 4733, 170: 4732, 184: 4734, 893: 4751}, + {140: 4733, 170: 4732, 184: 4734, 893: 4750}, + {1802, 1802, 1802, 1802, 1802, 7: 1802, 17: 1802, 50: 1802, 81: 1802, 1802, 1802, 1802, 1802, 87: 1802, 464: 1802, 466: 1802, 473: 1802, 483: 1802, 488: 1802}, + {1803, 1803, 1803, 1803, 1803, 7: 1803, 17: 1803, 50: 1803, 81: 1803, 1803, 1803, 1803, 1803, 87: 1803, 464: 1803, 466: 1803, 473: 1803, 483: 1803, 488: 1803}, + {1811, 1811, 1811, 1811, 1811, 7: 1811, 17: 1811, 50: 1811, 81: 1811, 1811, 1811, 1811, 1811, 87: 1811, 466: 1811, 473: 1811, 483: 1811, 488: 1811}, // 2285 - {1810, 1810, 1810, 1810, 1810, 7: 1810, 17: 1810, 50: 1810, 81: 1810, 1810, 1810, 1810, 1810, 87: 1810, 463: 1810, 470: 1810, 480: 1810, 485: 1810}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 1814, 470: 1814, 651: 4721, 2681, 2682, 2680, 863: 4722, 927: 4751}, - {462: 4752}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4515, 651: 4045, 2681, 2682, 2680, 732: 4514, 812: 4513, 821: 4753}, - {7: 4524, 50: 4754}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4754, 2685, 2686, 2684}, + {1812, 1812, 1812, 1812, 1812, 7: 1812, 17: 1812, 50: 1812, 81: 1812, 1812, 1812, 1812, 1812, 87: 1812, 466: 1812, 473: 1812, 483: 1812, 488: 1812}, + {500: 2659, 724: 2658, 734: 4756}, + {1814, 1814, 1814, 1814, 1814, 7: 1814, 17: 1814, 50: 1814, 81: 1814, 1814, 1814, 1814, 1814, 87: 1814, 466: 1814, 473: 1814, 483: 1814, 488: 1814}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 1818, 473: 1818, 655: 4728, 2685, 2686, 2684, 866: 4729, 930: 4758}, // 2290 - {1812, 1812, 1812, 1812, 1812, 7: 1812, 17: 1812, 50: 1812, 82: 1812, 1812, 1812, 1812, 87: 1812, 463: 1812, 470: 1812, 480: 1812, 865: 4755}, - {2207, 2207, 2207, 2207, 4738, 7: 2207, 17: 4735, 50: 2207, 82: 4742, 4602, 4327, 4603, 87: 4326, 463: 4737, 470: 4741, 480: 2207, 842: 4739, 844: 4736, 854: 4740, 864: 4734}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 1814, 651: 4713, 2681, 2682, 2680, 863: 4757}, - {462: 4758}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4515, 651: 4045, 2681, 2682, 2680, 732: 4514, 812: 4513, 821: 4759}, + {465: 4759}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4522, 655: 4052, 2685, 2686, 2684, 735: 4521, 815: 4520, 824: 4760}, + {7: 4531, 50: 4761}, + {1816, 1816, 1816, 1816, 1816, 7: 1816, 17: 1816, 50: 1816, 82: 1816, 1816, 1816, 1816, 87: 1816, 466: 1816, 473: 1816, 483: 1816, 868: 4762}, + {2211, 2211, 2211, 2211, 4745, 7: 2211, 17: 4742, 50: 2211, 82: 4749, 4609, 4334, 4610, 87: 4333, 466: 4744, 473: 4748, 483: 2211, 845: 4746, 847: 4743, 857: 4747, 867: 4741}, // 2295 - {7: 4524, 50: 4760}, - {1812, 1812, 1812, 1812, 1812, 7: 1812, 17: 1812, 50: 1812, 82: 1812, 1812, 1812, 1812, 87: 1812, 463: 1812, 470: 1812, 480: 1812, 865: 4761}, - {2208, 2208, 2208, 2208, 4738, 7: 2208, 17: 4735, 50: 2208, 82: 4742, 4602, 4327, 4603, 87: 4326, 463: 4737, 470: 4741, 480: 2208, 842: 4739, 844: 4736, 854: 4740, 864: 4734}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 1814, 470: 1814, 651: 4721, 2681, 2682, 2680, 863: 4722, 927: 4763}, - {462: 4764}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 1818, 655: 4720, 2685, 2686, 2684, 866: 4764}, + {465: 4765}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4522, 655: 4052, 2685, 2686, 2684, 735: 4521, 815: 4520, 824: 4766}, + {7: 4531, 50: 4767}, + {1816, 1816, 1816, 1816, 1816, 7: 1816, 17: 1816, 50: 1816, 82: 1816, 1816, 1816, 1816, 87: 1816, 466: 1816, 473: 1816, 483: 1816, 868: 4768}, // 2300 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4515, 651: 4045, 2681, 2682, 2680, 732: 4514, 812: 4513, 821: 4765}, - {7: 4524, 50: 4766}, - {1812, 1812, 1812, 1812, 1812, 7: 1812, 17: 1812, 50: 1812, 82: 1812, 1812, 1812, 1812, 87: 1812, 463: 1812, 470: 1812, 480: 1812, 865: 4767}, - {2209, 2209, 2209, 2209, 4738, 7: 2209, 17: 4735, 50: 2209, 82: 4742, 4602, 4327, 4603, 87: 4326, 463: 4737, 470: 4741, 480: 2209, 842: 4739, 844: 4736, 854: 4740, 864: 4734}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4769, 2681, 2682, 2680}, + {2212, 2212, 2212, 2212, 4745, 7: 2212, 17: 4742, 50: 2212, 82: 4749, 4609, 4334, 4610, 87: 4333, 466: 4744, 473: 4748, 483: 2212, 845: 4746, 847: 4743, 857: 4747, 867: 4741}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 1818, 473: 1818, 655: 4728, 2685, 2686, 2684, 866: 4729, 930: 4770}, + {465: 4771}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4522, 655: 4052, 2685, 2686, 2684, 735: 4521, 815: 4520, 824: 4772}, + {7: 4531, 50: 4773}, // 2305 - {222: 4771, 231: 4773, 234: 4772, 1119: 4770}, - {462: 4774}, - {50: 2164, 462: 2164}, - {50: 2163, 462: 2163}, - {50: 2162, 462: 2162}, + {1816, 1816, 1816, 1816, 1816, 7: 1816, 17: 1816, 50: 1816, 82: 1816, 1816, 1816, 1816, 87: 1816, 466: 1816, 473: 1816, 483: 1816, 868: 4774}, + {2213, 2213, 2213, 2213, 4745, 7: 2213, 17: 4742, 50: 2213, 82: 4749, 4609, 4334, 4610, 87: 4333, 466: 4744, 473: 4748, 483: 2213, 845: 4746, 847: 4743, 857: 4747, 867: 4741}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4776, 2685, 2686, 2684}, + {222: 4778, 231: 4780, 234: 4779, 1122: 4777}, + {465: 4781}, // 2310 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 4775}, - {7: 4048, 50: 4776}, - {2421, 2421, 2421, 2421, 7: 2421, 480: 2421}, - {553, 553, 553, 553, 7: 553, 103: 553, 136: 4629, 462: 553, 480: 553, 804: 4628, 822: 4778}, - {2097, 2097, 2097, 2097, 7: 2097, 103: 4780, 462: 4781, 480: 2097, 1078: 4779}, + {50: 2168, 465: 2168}, + {50: 2167, 465: 2167}, + {50: 2166, 465: 2166}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 4782}, + {7: 4055, 50: 4783}, // 2315 - {2423, 2423, 2423, 2423, 7: 2423, 480: 2423}, - {497: 2655, 721: 4822}, - {480: 4784, 934: 4783, 1077: 4782}, - {7: 4820, 50: 4819}, - {7: 2095, 50: 2095}, + {2425, 2425, 2425, 2425, 7: 2425, 483: 2425}, + {553, 553, 553, 553, 7: 553, 103: 553, 136: 4636, 465: 553, 483: 553, 807: 4635, 825: 4785}, + {2101, 2101, 2101, 2101, 7: 2101, 103: 4787, 465: 4788, 483: 2101, 1081: 4786}, + {2427, 2427, 2427, 2427, 7: 2427, 483: 2427}, + {500: 2659, 724: 4829}, // 2320 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4785, 2681, 2682, 2680}, - {4: 2074, 2074, 7: 2074, 16: 2074, 18: 2074, 20: 2074, 2074, 2074, 2074, 2074, 2074, 50: 2074, 146: 4790, 332: 4789, 462: 2074, 468: 4788, 491: 4787, 637: 2074, 1248: 4786}, - {4: 2087, 2087, 7: 2087, 16: 2087, 18: 2087, 20: 2087, 2087, 2087, 2087, 2087, 2087, 50: 2087, 462: 2087, 637: 2087, 933: 4806}, - {341: 4791, 532: 4792}, - {4: 2071, 2071, 7: 2071, 16: 2071, 18: 2071, 20: 2071, 2071, 2071, 2071, 2071, 2071, 50: 2071, 462: 2071, 637: 2071}, + {483: 4791, 937: 4790, 1080: 4789}, + {7: 4827, 50: 4826}, + {7: 2099, 50: 2099}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4792, 2685, 2686, 2684}, + {4: 2078, 2078, 7: 2078, 16: 2078, 18: 2078, 20: 2078, 2078, 2078, 2078, 2078, 2078, 50: 2078, 146: 4797, 335: 4796, 465: 2078, 471: 4795, 494: 4794, 640: 2078, 1251: 4793}, // 2325 - {4: 2069, 2069, 7: 2069, 16: 2069, 18: 2069, 20: 2069, 2069, 2069, 2069, 2069, 2069, 50: 2069, 462: 2069, 637: 2069}, - {4: 2068, 2068, 7: 2068, 16: 2068, 18: 2068, 20: 2068, 2068, 2068, 2068, 2068, 2068, 50: 2068, 462: 2068, 637: 2068}, - {385: 4801}, - {462: 4793}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 645: 4795, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 4796, 930: 4797, 1058: 4794}, + {4: 2091, 2091, 7: 2091, 16: 2091, 18: 2091, 20: 2091, 2091, 2091, 2091, 2091, 2091, 50: 2091, 465: 2091, 640: 2091, 936: 4813}, + {344: 4798, 535: 4799}, + {4: 2075, 2075, 7: 2075, 16: 2075, 18: 2075, 20: 2075, 2075, 2075, 2075, 2075, 2075, 50: 2075, 465: 2075, 640: 2075}, + {4: 2073, 2073, 7: 2073, 16: 2073, 18: 2073, 20: 2073, 2073, 2073, 2073, 2073, 2073, 50: 2073, 465: 2073, 640: 2073}, + {4: 2072, 2072, 7: 2072, 16: 2072, 18: 2072, 20: 2072, 2072, 2072, 2072, 2072, 2072, 50: 2072, 465: 2072, 640: 2072}, // 2330 - {7: 4799, 50: 4798}, - {7: 1894, 50: 1894}, - {7: 1893, 50: 1893, 474: 3593, 3592, 3598, 512: 3594, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591}, - {7: 1881, 50: 1881}, - {4: 2070, 2070, 7: 2070, 16: 2070, 18: 2070, 20: 2070, 2070, 2070, 2070, 2070, 2070, 50: 2070, 462: 2070, 637: 2070}, + {388: 4808}, + {465: 4800}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 648: 4802, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 4803, 933: 4804, 1061: 4801}, + {7: 4806, 50: 4805}, + {7: 1898, 50: 1898}, // 2335 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 645: 4795, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 4796, 930: 4800}, - {7: 1880, 50: 1880}, - {462: 4803, 645: 4802}, - {4: 2073, 2073, 7: 2073, 16: 2073, 18: 2073, 20: 2073, 2073, 2073, 2073, 2073, 2073, 50: 2073, 462: 2073, 637: 2073}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 645: 4795, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 4796, 930: 4797, 1058: 4804}, + {7: 1897, 50: 1897, 477: 3600, 3599, 3605, 515: 3601, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598}, + {7: 1885, 50: 1885}, + {4: 2074, 2074, 7: 2074, 16: 2074, 18: 2074, 20: 2074, 2074, 2074, 2074, 2074, 2074, 50: 2074, 465: 2074, 640: 2074}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 648: 4802, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 4803, 933: 4807}, + {7: 1884, 50: 1884}, // 2340 - {7: 4799, 50: 4805}, - {4: 2072, 2072, 7: 2072, 16: 2072, 18: 2072, 20: 2072, 2072, 2072, 2072, 2072, 2072, 50: 2072, 462: 2072, 637: 2072}, - {4: 4139, 4810, 7: 2092, 16: 4097, 18: 4147, 20: 4140, 4143, 4142, 4145, 4146, 4148, 50: 2092, 462: 4808, 637: 4144, 767: 4149, 798: 4809, 1290: 4807}, - {7: 2093, 50: 2093}, - {100: 4813, 1121: 4812, 1289: 4811}, + {465: 4810, 648: 4809}, + {4: 2077, 2077, 7: 2077, 16: 2077, 18: 2077, 20: 2077, 2077, 2077, 2077, 2077, 2077, 50: 2077, 465: 2077, 640: 2077}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 648: 4802, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 4803, 933: 4804, 1061: 4811}, + {7: 4806, 50: 4812}, + {4: 2076, 2076, 7: 2076, 16: 2076, 18: 2076, 20: 2076, 2076, 2076, 2076, 2076, 2076, 50: 2076, 465: 2076, 640: 2076}, // 2345 - {2086, 2086, 4: 2086, 2086, 7: 2086, 16: 2086, 18: 2086, 20: 2086, 2086, 2086, 2086, 2086, 2086, 50: 2086, 462: 2086, 637: 2086}, - {20: 4278}, - {7: 4817, 50: 4816}, - {7: 2090, 50: 2090}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4814, 2681, 2682, 2680}, + {4: 4146, 4817, 7: 2096, 16: 4104, 18: 4154, 20: 4147, 4150, 4149, 4152, 4153, 4155, 50: 2096, 465: 4815, 640: 4151, 770: 4156, 801: 4816, 1293: 4814}, + {7: 2097, 50: 2097}, + {100: 4820, 1124: 4819, 1292: 4818}, + {2090, 2090, 4: 2090, 2090, 7: 2090, 16: 2090, 18: 2090, 20: 2090, 2090, 2090, 2090, 2090, 2090, 50: 2090, 465: 2090, 640: 2090}, + {20: 4285}, // 2350 - {4: 2087, 2087, 7: 2087, 16: 2087, 18: 2087, 20: 2087, 2087, 2087, 2087, 2087, 2087, 50: 2087, 637: 2087, 933: 4815}, - {4: 4139, 4810, 7: 2088, 16: 4097, 18: 4147, 20: 4140, 4143, 4142, 4145, 4146, 4148, 50: 2088, 637: 4144, 767: 4149, 798: 4809}, - {7: 2091, 50: 2091}, - {100: 4813, 1121: 4818}, - {7: 2089, 50: 2089}, - // 2355 - {2096, 2096, 2096, 2096, 7: 2096, 461: 2096, 2096, 2096, 467: 2096, 479: 2096, 2096, 491: 2096, 496: 2096, 558: 2096, 634: 2096}, - {480: 4784, 934: 4821}, + {7: 4824, 50: 4823}, {7: 2094, 50: 2094}, - {2422, 2422, 2422, 2422, 7: 2422, 480: 2422}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4825, 651: 4045, 2681, 2682, 2680, 732: 4353, 833: 4824}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4821, 2685, 2686, 2684}, + {4: 2091, 2091, 7: 2091, 16: 2091, 18: 2091, 20: 2091, 2091, 2091, 2091, 2091, 2091, 50: 2091, 640: 2091, 936: 4822}, + {4: 4146, 4817, 7: 2092, 16: 4104, 18: 4154, 20: 4147, 4150, 4149, 4152, 4153, 4155, 50: 2092, 640: 4151, 770: 4156, 801: 4816}, + // 2355 + {7: 2095, 50: 2095}, + {100: 4820, 1124: 4825}, + {7: 2093, 50: 2093}, + {2100, 2100, 2100, 2100, 7: 2100, 464: 2100, 2100, 2100, 470: 2100, 482: 2100, 2100, 494: 2100, 499: 2100, 561: 2100, 637: 2100}, + {483: 4791, 937: 4828}, // 2360 - {2350, 2350, 2350, 2350, 7: 2350, 4610, 4611, 480: 2350, 914: 4833}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 566: 2341, 574: 2341, 576: 2341, 630: 2341, 4486, 637: 2341, 651: 4045, 2681, 2682, 2680, 663: 2341, 2341, 732: 4353, 818: 4695, 833: 4827, 888: 4828, 950: 4829, 1124: 4826}, - {7: 4831, 50: 4830}, + {7: 2098, 50: 2098}, + {2426, 2426, 2426, 2426, 7: 2426, 483: 2426}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4832, 655: 4052, 2685, 2686, 2684, 735: 4360, 836: 4831}, + {2354, 2354, 2354, 2354, 7: 2354, 4617, 4618, 483: 2354, 917: 4840}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 569: 2345, 577: 2345, 579: 2345, 633: 2345, 4493, 640: 2345, 655: 4052, 2685, 2686, 2684, 666: 2345, 2345, 735: 4360, 821: 4702, 836: 4834, 891: 4835, 953: 4836, 1127: 4833}, + // 2365 + {7: 4838, 50: 4837}, {7: 431, 50: 431}, {7: 430, 50: 430}, - // 2365 {7: 429, 50: 429}, - {2425, 2425, 2425, 2425, 7: 2425, 480: 2425}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 566: 2341, 574: 2341, 576: 2341, 630: 2341, 4486, 637: 2341, 651: 4045, 2681, 2682, 2680, 663: 2341, 2341, 732: 4353, 818: 4695, 833: 4827, 888: 4828, 950: 4832}, - {7: 428, 50: 428}, - {2426, 2426, 2426, 2426, 7: 2426, 480: 2426}, + {2429, 2429, 2429, 2429, 7: 2429, 483: 2429}, // 2370 - {14: 3740, 495: 3741, 635: 3739, 759: 4835}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 468: 4837, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 4836}, - {259, 259, 259, 259, 7: 259, 473: 4839, 480: 259, 1069: 4841}, - {259, 259, 259, 259, 7: 259, 473: 4839, 480: 259, 1069: 4838}, - {2427, 2427, 2427, 2427, 7: 2427, 480: 2427}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 569: 2345, 577: 2345, 579: 2345, 633: 2345, 4493, 640: 2345, 655: 4052, 2685, 2686, 2684, 666: 2345, 2345, 735: 4360, 821: 4702, 836: 4834, 891: 4835, 953: 4839}, + {7: 428, 50: 428}, + {2430, 2430, 2430, 2430, 7: 2430, 483: 2430}, + {14: 3747, 498: 3748, 638: 3746, 762: 4842}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 471: 4844, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 4843}, // 2375 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3395, 651: 3397, 2681, 2682, 2680, 726: 3394, 857: 4840}, - {258, 258, 258, 258, 7: 258, 480: 258}, - {2428, 2428, 2428, 2428, 7: 2428, 480: 2428}, - {267: 4843}, - {497: 2655, 721: 2654, 731: 4844}, + {259, 259, 259, 259, 7: 259, 476: 4846, 483: 259, 1072: 4848}, + {259, 259, 259, 259, 7: 259, 476: 4846, 483: 259, 1072: 4845}, + {2431, 2431, 2431, 2431, 7: 2431, 483: 2431}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3402, 655: 3404, 2685, 2686, 2684, 729: 3401, 860: 4847}, + {258, 258, 258, 258, 7: 258, 483: 258}, // 2380 - {2432, 2432, 2432, 2432, 7: 2432, 178: 4845, 480: 2432, 1056: 4846}, - {254: 4847}, - {2429, 2429, 2429, 2429, 7: 2429, 480: 2429}, - {464: 4849, 1286: 4848}, - {2431, 2431, 2431, 2431, 7: 4850, 14: 2431, 16: 2431, 19: 2431, 468: 2431, 473: 2431, 480: 2431, 493: 2431, 495: 2431, 635: 2431}, + {2432, 2432, 2432, 2432, 7: 2432, 483: 2432}, + {267: 4850}, + {500: 2659, 724: 2658, 734: 4851}, + {2436, 2436, 2436, 2436, 7: 2436, 176: 4852, 483: 2436, 1059: 4853}, + {254: 4854}, // 2385 - {257, 257, 257, 257, 7: 257, 14: 257, 16: 257, 19: 257, 468: 257, 473: 257, 480: 257, 493: 257, 495: 257, 635: 257}, - {464: 4851}, - {256, 256, 256, 256, 7: 256, 14: 256, 16: 256, 19: 256, 468: 256, 473: 256, 480: 256, 493: 256, 495: 256, 635: 256}, - {6: 390, 27: 390}, - {384, 384, 384, 384, 384, 384, 384, 384, 13: 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 461: 384, 384, 384, 467: 384, 384, 384, 473: 384, 479: 384, 384, 491: 384, 384, 495: 384, 384, 558: 384, 634: 384, 384, 637: 384}, + {2433, 2433, 2433, 2433, 7: 2433, 483: 2433}, + {467: 4856, 1289: 4855}, + {2435, 2435, 2435, 2435, 7: 4857, 14: 2435, 16: 2435, 19: 2435, 471: 2435, 476: 2435, 483: 2435, 496: 2435, 498: 2435, 638: 2435}, + {257, 257, 257, 257, 7: 257, 14: 257, 16: 257, 19: 257, 471: 257, 476: 257, 483: 257, 496: 257, 498: 257, 638: 257}, + {467: 4858}, // 2390 - {4: 4139, 4141, 391, 13: 4158, 2121, 4156, 4097, 4160, 4147, 4176, 4140, 4143, 4142, 4145, 4146, 4148, 4155, 391, 4166, 4167, 4153, 4154, 4159, 4161, 4173, 4172, 4178, 4174, 4171, 4164, 4169, 4170, 4163, 4165, 4168, 4157, 468: 4138, 4175, 473: 2121, 492: 4852, 495: 2121, 635: 2121, 637: 4144, 767: 4149, 778: 4151, 798: 4150, 820: 4152, 824: 4162, 828: 4855}, - {383, 383, 383, 383, 383, 383, 383, 383, 13: 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 461: 383, 383, 383, 467: 383, 383, 383, 473: 383, 479: 383, 383, 491: 383, 383, 495: 383, 383, 558: 383, 634: 383, 383, 637: 383}, - {464: 4858, 468: 4857}, - {2439, 2439, 2439, 2439, 7: 2439, 480: 2439}, - {2438, 2438, 2438, 2438, 7: 2438, 480: 2438}, + {256, 256, 256, 256, 7: 256, 14: 256, 16: 256, 19: 256, 471: 256, 476: 256, 483: 256, 496: 256, 498: 256, 638: 256}, + {6: 390, 27: 390}, + {384, 384, 384, 384, 384, 384, 384, 384, 13: 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 464: 384, 384, 384, 470: 384, 384, 384, 476: 384, 482: 384, 384, 494: 384, 384, 498: 384, 384, 561: 384, 637: 384, 384, 640: 384}, + {4: 4146, 4148, 391, 13: 4165, 2125, 4163, 4104, 4167, 4154, 4183, 4147, 4150, 4149, 4152, 4153, 4155, 4162, 391, 4173, 4174, 4160, 4161, 4166, 4168, 4180, 4179, 4185, 4181, 4178, 4171, 4176, 4177, 4170, 4172, 4175, 4164, 471: 4145, 4182, 476: 2125, 495: 4859, 498: 2125, 638: 2125, 640: 4151, 770: 4156, 781: 4158, 801: 4157, 823: 4159, 827: 4169, 831: 4862}, + {383, 383, 383, 383, 383, 383, 383, 383, 13: 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 464: 383, 383, 383, 470: 383, 383, 383, 476: 383, 482: 383, 383, 494: 383, 383, 498: 383, 383, 561: 383, 637: 383, 383, 640: 383}, // 2395 - {464: 4861, 468: 4860}, - {2441, 2441, 2441, 2441, 7: 2441, 480: 2441}, - {2440, 2440, 2440, 2440, 7: 2440, 480: 2440}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 468: 2002, 486: 4179, 493: 4864, 724: 4863}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 4866, 468: 4868, 651: 4869, 2681, 2682, 2680, 871: 4867}, + {467: 4865, 471: 4864}, + {2443, 2443, 2443, 2443, 7: 2443, 483: 2443}, + {2442, 2442, 2442, 2442, 7: 2442, 483: 2442}, + {467: 4868, 471: 4867}, + {2445, 2445, 2445, 2445, 7: 2445, 483: 2445}, // 2400 - {468: 4865}, - {2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 13: 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 50: 2442, 461: 2442, 2442, 2442, 467: 2442, 2442, 2442, 473: 2442, 479: 2442, 2442, 491: 2442, 2442, 2442, 495: 2442, 2442, 558: 2442, 634: 2442, 2442, 637: 2442}, - {2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 13: 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 50: 2445, 461: 2445, 2445, 2445, 467: 2445, 2445, 2445, 473: 2445, 479: 2445, 2445, 491: 2445, 2445, 2445, 495: 2445, 2445, 558: 2445, 634: 2445, 2445, 637: 2445}, - {2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 13: 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 50: 2444, 461: 2444, 2444, 2444, 467: 2444, 2444, 2444, 473: 2444, 479: 2444, 2444, 491: 2444, 2444, 2444, 495: 2444, 2444, 558: 2444, 634: 2444, 2444, 637: 2444}, - {2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 13: 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 50: 2443, 461: 2443, 2443, 2443, 467: 2443, 2443, 2443, 473: 2443, 479: 2443, 2443, 491: 2443, 2443, 2443, 495: 2443, 2443, 558: 2443, 634: 2443, 2443, 637: 2443}, + {2444, 2444, 2444, 2444, 7: 2444, 483: 2444}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 471: 2006, 489: 4186, 496: 4871, 727: 4870}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 4873, 471: 4875, 655: 4876, 2685, 2686, 2684, 874: 4874}, + {471: 4872}, + {2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 13: 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 50: 2446, 464: 2446, 2446, 2446, 470: 2446, 2446, 2446, 476: 2446, 482: 2446, 2446, 494: 2446, 2446, 2446, 498: 2446, 2446, 561: 2446, 637: 2446, 2446, 640: 2446}, // 2405 - {2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 13: 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 50: 2137, 86: 2137, 88: 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 461: 2137, 2137, 2137, 467: 2137, 2137, 2137, 473: 2137, 479: 2137, 2137, 491: 2137, 2137, 2137, 495: 2137, 2137, 558: 2137, 634: 2137, 2137, 637: 2137}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4633, 2681, 2682, 2680, 775: 4871}, - {2302, 2302, 7: 4634, 463: 4874, 637: 4873, 790: 4872}, - {2461, 2461}, - {883, 883, 2917, 2765, 2801, 2919, 2692, 883, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 463: 883, 576: 4891, 651: 4890, 2681, 2682, 2680, 843: 4889}, + {2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 13: 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 50: 2449, 464: 2449, 2449, 2449, 470: 2449, 2449, 2449, 476: 2449, 482: 2449, 2449, 494: 2449, 2449, 2449, 498: 2449, 2449, 561: 2449, 637: 2449, 2449, 640: 2449}, + {2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 13: 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 50: 2448, 464: 2448, 2448, 2448, 470: 2448, 2448, 2448, 476: 2448, 482: 2448, 2448, 494: 2448, 2448, 2448, 498: 2448, 2448, 561: 2448, 637: 2448, 2448, 640: 2448}, + {2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 13: 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 50: 2447, 464: 2447, 2447, 2447, 470: 2447, 2447, 2447, 476: 2447, 482: 2447, 2447, 494: 2447, 2447, 2447, 498: 2447, 2447, 561: 2447, 637: 2447, 2447, 640: 2447}, + {2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 13: 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 50: 2141, 86: 2141, 88: 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 464: 2141, 2141, 2141, 470: 2141, 2141, 2141, 476: 2141, 482: 2141, 2141, 494: 2141, 2141, 2141, 498: 2141, 2141, 561: 2141, 637: 2141, 2141, 640: 2141}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4640, 2685, 2686, 2684, 778: 4878}, // 2410 - {497: 4879, 562: 3331, 3330, 721: 4877, 805: 4878, 973: 4876, 1151: 4875}, - {2301, 2301, 7: 4887}, - {2300, 2300, 7: 2300}, - {221: 4881, 225: 4883, 271: 4884, 291: 4882}, - {188: 4880}, + {2306, 2306, 7: 4641, 466: 4881, 640: 4880, 793: 4879}, + {2465, 2465}, + {884, 884, 2924, 2770, 2806, 2926, 2697, 884, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 466: 884, 579: 4898, 655: 4897, 2685, 2686, 2684, 846: 4896}, + {500: 4886, 565: 3338, 3337, 724: 4884, 808: 4885, 976: 4883, 1154: 4882}, + {2305, 2305, 7: 4894}, // 2415 - {188: 2167, 221: 1933, 225: 1933, 271: 1933, 291: 1933}, - {2293, 2293, 7: 2293}, - {2298, 2298, 7: 2298}, + {2304, 2304, 7: 2304}, + {221: 4888, 225: 4890, 271: 4891, 291: 4889}, + {186: 4887}, + {186: 2171, 221: 1937, 225: 1937, 271: 1937, 291: 1937}, {2297, 2297, 7: 2297}, - {317: 4885, 395: 4886}, // 2420 - {2294, 2294, 7: 2294}, - {2296, 2296, 7: 2296}, - {2295, 2295, 7: 2295}, - {497: 4879, 562: 3331, 3330, 721: 4877, 805: 4878, 973: 4888}, - {2299, 2299, 7: 2299}, + {2302, 2302, 7: 2302}, + {2301, 2301, 7: 2301}, + {318: 4892, 398: 4893}, + {2298, 2298, 7: 2298}, + {2300, 2300, 7: 2300}, // 2425 - {2302, 2302, 7: 4893, 463: 4874, 790: 4892}, - {882, 882, 7: 882, 50: 882, 463: 882}, - {880, 880, 7: 880, 50: 880, 463: 880}, - {2460, 2460}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 576: 4895, 651: 4894, 2681, 2682, 2680}, + {2299, 2299, 7: 2299}, + {500: 4886, 565: 3338, 3337, 724: 4884, 808: 4885, 976: 4895}, + {2303, 2303, 7: 2303}, + {2306, 2306, 7: 4900, 466: 4881, 793: 4899}, + {883, 883, 7: 883, 50: 883, 466: 883}, // 2430 - {881, 881, 7: 881, 50: 881, 463: 881}, - {879, 879, 7: 879, 50: 879, 463: 879}, - {2462, 2462}, - {2437, 2437}, - {357: 4963}, + {881, 881, 7: 881, 50: 881, 466: 881}, + {2464, 2464}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 579: 4902, 655: 4901, 2685, 2686, 2684}, + {882, 882, 7: 882, 50: 882, 466: 882}, + {880, 880, 7: 880, 50: 880, 466: 880}, // 2435 - {480: 4955}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 647: 4902, 651: 4901, 2681, 2682, 2680}, - {2087, 2087, 4: 2087, 2087, 16: 2087, 18: 2087, 20: 2087, 2087, 2087, 2087, 2087, 2087, 195: 4098, 637: 2087, 911: 4953, 933: 4954}, - {140: 2105, 343: 4907, 380: 4908, 516: 4906, 566: 2105, 1051: 4909, 4904, 1122: 4905, 1250: 4903}, - {2099, 2099, 100: 2099, 103: 4943, 461: 2099, 2099, 2099, 467: 2099, 479: 2099, 491: 2099, 496: 2099, 558: 2099, 634: 2099, 1251: 4942}, + {2466, 2466}, + {2441, 2441}, + {360: 4970}, + {483: 4962}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 650: 4909, 655: 4908, 2685, 2686, 2684}, // 2440 - {140: 4930, 566: 4929}, - {2113, 2113, 100: 2113, 103: 2113, 461: 2113, 2113, 2113, 467: 2113, 479: 2113, 491: 2113, 496: 2113, 558: 2113, 634: 2113}, - {98: 3848, 107: 3847, 462: 4922, 819: 4923}, - {98: 3848, 107: 3847, 462: 4915, 819: 4916}, - {2106, 2106, 100: 2106, 103: 2106, 461: 2106, 2106, 2106, 467: 2106, 479: 2106, 483: 4911, 491: 2106, 496: 2106, 558: 2106, 570: 4910, 634: 2106}, + {2091, 2091, 4: 2091, 2091, 16: 2091, 18: 2091, 20: 2091, 2091, 2091, 2091, 2091, 2091, 193: 4105, 640: 2091, 914: 4960, 936: 4961}, + {140: 2109, 346: 4914, 383: 4915, 519: 4913, 569: 2109, 1054: 4916, 4911, 1125: 4912, 1253: 4910}, + {2103, 2103, 100: 2103, 103: 4950, 464: 2103, 2103, 2103, 470: 2103, 482: 2103, 494: 2103, 499: 2103, 561: 2103, 637: 2103, 1254: 4949}, + {140: 4937, 569: 4936}, + {2117, 2117, 100: 2117, 103: 2117, 464: 2117, 2117, 2117, 470: 2117, 482: 2117, 494: 2117, 499: 2117, 561: 2117, 637: 2117}, // 2445 - {140: 2104, 566: 2104}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 4913}, - {497: 2655, 721: 2654, 731: 4912}, - {2107, 2107, 100: 2107, 103: 2107, 461: 2107, 2107, 2107, 467: 2107, 479: 2107, 491: 2107, 496: 2107, 558: 2107, 634: 2107}, - {105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 494: 3252, 498: 3250, 3251, 3249, 3247, 520: 3360, 3357, 3359, 3358, 3354, 3356, 3355, 3352, 3353, 3351, 3361, 722: 3248, 3246, 792: 3350, 815: 4914}, + {98: 3855, 107: 3854, 465: 4929, 822: 4930}, + {98: 3855, 107: 3854, 465: 4922, 822: 4923}, + {2110, 2110, 100: 2110, 103: 2110, 464: 2110, 2110, 2110, 470: 2110, 482: 2110, 486: 4918, 494: 2110, 499: 2110, 561: 2110, 573: 4917, 637: 2110}, + {140: 2108, 569: 2108}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 4920}, // 2450 - {2108, 2108, 100: 2108, 103: 2108, 461: 2108, 2108, 2108, 467: 2108, 479: 2108, 491: 2108, 496: 2108, 558: 2108, 634: 2108}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 4920}, - {462: 4917}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 4918}, - {7: 4048, 50: 4919}, + {500: 2659, 724: 2658, 734: 4919}, + {2111, 2111, 100: 2111, 103: 2111, 464: 2111, 2111, 2111, 470: 2111, 482: 2111, 494: 2111, 499: 2111, 561: 2111, 637: 2111}, + {105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 497: 3259, 501: 3257, 3258, 3256, 3254, 523: 3367, 3364, 3366, 3365, 3361, 3363, 3362, 3359, 3360, 3358, 3368, 725: 3255, 3253, 795: 3357, 818: 4921}, + {2112, 2112, 100: 2112, 103: 2112, 464: 2112, 2112, 2112, 470: 2112, 482: 2112, 494: 2112, 499: 2112, 561: 2112, 637: 2112}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 4927}, // 2455 - {2109, 2109, 100: 2109, 103: 2109, 461: 2109, 2109, 2109, 467: 2109, 479: 2109, 491: 2109, 496: 2109, 558: 2109, 634: 2109}, - {50: 4921, 474: 3593, 3592, 3598, 512: 3594, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591}, - {2110, 2110, 100: 2110, 103: 2110, 461: 2110, 2110, 2110, 467: 2110, 479: 2110, 491: 2110, 496: 2110, 558: 2110, 634: 2110}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 4927}, - {462: 4924}, + {465: 4924}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 4925}, + {7: 4055, 50: 4926}, + {2113, 2113, 100: 2113, 103: 2113, 464: 2113, 2113, 2113, 470: 2113, 482: 2113, 494: 2113, 499: 2113, 561: 2113, 637: 2113}, + {50: 4928, 477: 3600, 3599, 3605, 515: 3601, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598}, // 2460 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 4925}, - {7: 4048, 50: 4926}, - {2111, 2111, 100: 2111, 103: 2111, 461: 2111, 2111, 2111, 467: 2111, 479: 2111, 491: 2111, 496: 2111, 558: 2111, 634: 2111}, - {50: 4928, 474: 3593, 3592, 3598, 512: 3594, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591}, - {2112, 2112, 100: 2112, 103: 2112, 461: 2112, 2112, 2112, 467: 2112, 479: 2112, 491: 2112, 496: 2112, 558: 2112, 634: 2112}, + {2114, 2114, 100: 2114, 103: 2114, 464: 2114, 2114, 2114, 470: 2114, 482: 2114, 494: 2114, 499: 2114, 561: 2114, 637: 2114}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 4934}, + {465: 4931}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 4932}, + {7: 4055, 50: 4933}, // 2465 - {81: 4935, 462: 2115, 1249: 4934}, - {462: 4931}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 4932}, - {50: 4933, 474: 3593, 3592, 3598, 512: 3594, 545: 3595, 3596, 3589, 3599, 3588, 3597, 3590, 3591}, - {2116, 2116, 100: 2116, 103: 2116, 212: 2116, 461: 2116, 2116, 2116, 467: 2116, 479: 2116, 491: 2116, 496: 2116, 558: 2116, 634: 2116}, + {2115, 2115, 100: 2115, 103: 2115, 464: 2115, 2115, 2115, 470: 2115, 482: 2115, 494: 2115, 499: 2115, 561: 2115, 637: 2115}, + {50: 4935, 477: 3600, 3599, 3605, 515: 3601, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598}, + {2116, 2116, 100: 2116, 103: 2116, 464: 2116, 2116, 2116, 470: 2116, 482: 2116, 494: 2116, 499: 2116, 561: 2116, 637: 2116}, + {81: 4942, 465: 2119, 1252: 4941}, + {465: 4938}, // 2470 - {462: 4938}, - {486: 4936}, - {497: 2655, 721: 4937}, - {462: 2114}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 2268, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 4939, 983: 4940}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 4939}, + {50: 4940, 477: 3600, 3599, 3605, 515: 3601, 548: 3602, 3603, 3596, 3606, 3595, 3604, 3597, 3598}, + {2120, 2120, 100: 2120, 103: 2120, 212: 2120, 464: 2120, 2120, 2120, 470: 2120, 482: 2120, 494: 2120, 499: 2120, 561: 2120, 637: 2120}, + {465: 4945}, + {489: 4943}, // 2475 - {7: 4048, 50: 2267}, - {50: 4941}, - {2117, 2117, 100: 2117, 103: 2117, 212: 2117, 461: 2117, 2117, 2117, 467: 2117, 479: 2117, 491: 2117, 496: 2117, 558: 2117, 634: 2117}, - {2103, 2103, 100: 4946, 461: 2103, 2103, 2103, 467: 2103, 479: 2103, 491: 2103, 496: 2103, 558: 2103, 634: 2103, 1292: 4945}, - {497: 2655, 721: 2654, 731: 4944}, + {500: 2659, 724: 4944}, + {465: 2118}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 2272, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 4946, 986: 4947}, + {7: 4055, 50: 2271}, + {50: 4948}, // 2480 - {2098, 2098, 100: 2098, 461: 2098, 2098, 2098, 467: 2098, 479: 2098, 491: 2098, 496: 2098, 558: 2098, 634: 2098}, - {2097, 2097, 461: 2097, 4781, 2097, 467: 2097, 479: 2097, 491: 2097, 496: 2097, 558: 2097, 634: 2097, 1078: 4952}, - {647: 4947}, - {140: 2105, 566: 2105, 1051: 4909, 4904, 1122: 4948}, - {2101, 2101, 212: 4950, 461: 2101, 2101, 2101, 467: 2101, 479: 2101, 491: 2101, 496: 2101, 558: 2101, 634: 2101, 1291: 4949}, + {2121, 2121, 100: 2121, 103: 2121, 212: 2121, 464: 2121, 2121, 2121, 470: 2121, 482: 2121, 494: 2121, 499: 2121, 561: 2121, 637: 2121}, + {2107, 2107, 100: 4953, 464: 2107, 2107, 2107, 470: 2107, 482: 2107, 494: 2107, 499: 2107, 561: 2107, 637: 2107, 1295: 4952}, + {500: 2659, 724: 2658, 734: 4951}, + {2102, 2102, 100: 2102, 464: 2102, 2102, 2102, 470: 2102, 482: 2102, 494: 2102, 499: 2102, 561: 2102, 637: 2102}, + {2101, 2101, 464: 2101, 4788, 2101, 470: 2101, 482: 2101, 494: 2101, 499: 2101, 561: 2101, 637: 2101, 1081: 4959}, // 2485 - {2102, 2102, 461: 2102, 2102, 2102, 467: 2102, 479: 2102, 491: 2102, 496: 2102, 558: 2102, 634: 2102}, - {497: 2655, 721: 2654, 731: 4951}, - {2100, 2100, 461: 2100, 2100, 2100, 467: 2100, 479: 2100, 491: 2100, 496: 2100, 558: 2100, 634: 2100}, - {2118, 2118, 461: 2118, 2118, 2118, 467: 2118, 479: 2118, 491: 2118, 496: 2118, 558: 2118, 634: 2118}, - {2434, 2434}, + {650: 4954}, + {140: 2109, 569: 2109, 1054: 4916, 4911, 1125: 4955}, + {2105, 2105, 212: 4957, 464: 2105, 2105, 2105, 470: 2105, 482: 2105, 494: 2105, 499: 2105, 561: 2105, 637: 2105, 1294: 4956}, + {2106, 2106, 464: 2106, 2106, 2106, 470: 2106, 482: 2106, 494: 2106, 499: 2106, 561: 2106, 637: 2106}, + {500: 2659, 724: 2658, 734: 4958}, // 2490 - {2433, 2433, 4: 4139, 4810, 16: 4097, 18: 4147, 20: 4140, 4143, 4142, 4145, 4146, 4148, 637: 4144, 767: 4149, 798: 4809}, - {553, 553, 553, 553, 553, 553, 553, 8: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 51: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 4629, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 804: 4628, 822: 4956}, - {2375, 2375, 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4633, 2681, 2682, 2680, 775: 4958, 1259: 4957}, - {2435, 2435}, - {7: 4634, 484: 4959}, + {2104, 2104, 464: 2104, 2104, 2104, 470: 2104, 482: 2104, 494: 2104, 499: 2104, 561: 2104, 637: 2104}, + {2122, 2122, 464: 2122, 2122, 2122, 470: 2122, 482: 2122, 494: 2122, 499: 2122, 561: 2122, 637: 2122}, + {2438, 2438}, + {2437, 2437, 4: 4146, 4817, 16: 4104, 18: 4154, 20: 4147, 4150, 4149, 4152, 4153, 4155, 640: 4151, 770: 4156, 801: 4816}, + {553, 553, 553, 553, 553, 553, 553, 8: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 51: 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 4636, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 807: 4635, 825: 4963}, // 2495 - {462: 4960}, - {480: 4784, 934: 4783, 1077: 4961}, - {7: 4820, 50: 4962}, - {2374, 2374}, - {2436, 2436}, + {2379, 2379, 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4640, 2685, 2686, 2684, 778: 4965, 1262: 4964}, + {2439, 2439}, + {7: 4641, 487: 4966}, + {465: 4967}, + {483: 4791, 937: 4790, 1080: 4968}, // 2500 - {136: 4965, 866: 96, 1055: 4966}, - {866: 95}, - {866: 4967}, - {464: 4968}, - {17, 17, 179: 17, 345: 4970, 646: 17, 1229: 4969}, + {7: 4827, 50: 4969}, + {2378, 2378}, + {2440, 2440}, + {136: 4972, 869: 96, 1058: 4973}, + {869: 95}, // 2505 - {15, 15, 179: 4973, 646: 15, 1228: 4972}, - {497: 2655, 721: 4971}, - {16, 16, 179: 16, 646: 16}, - {81, 81, 646: 3869, 929: 4980}, - {13, 13, 183: 13, 358: 4975, 646: 13, 1253: 4974}, + {869: 4974}, + {467: 4975}, + {17, 17, 177: 17, 348: 4977, 649: 17, 1232: 4976}, + {15, 15, 177: 4980, 649: 15, 1231: 4979}, + {500: 2659, 724: 4978}, // 2510 - {11, 11, 183: 4978, 646: 11, 1252: 4977}, - {497: 2655, 721: 4976}, - {12, 12, 183: 12, 646: 12}, - {14, 14, 646: 14}, - {497: 2655, 721: 4979}, + {16, 16, 177: 16, 649: 16}, + {81, 81, 649: 3876, 932: 4987}, + {13, 13, 181: 13, 361: 4982, 649: 13, 1256: 4981}, + {11, 11, 181: 4985, 649: 11, 1255: 4984}, + {500: 2659, 724: 4983}, // 2515 - {10, 10, 646: 10}, + {12, 12, 181: 12, 649: 12}, + {14, 14, 649: 14}, + {500: 2659, 724: 4986}, + {10, 10, 649: 10}, {18, 18}, - {26: 55, 143: 55, 497: 55}, - {59, 59}, - {497: 2655, 721: 4986}, // 2520 - {497: 2655, 721: 4985}, + {26: 55, 143: 55, 500: 55}, + {59, 59}, + {500: 2659, 724: 4993}, + {500: 2659, 724: 4992}, {57, 57}, - {58, 58}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4991, 1125: 4992, 1294: 4990}, - {68, 68, 68, 68, 68, 68, 68, 8: 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 51: 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, // 2525 - {67, 67, 67, 67, 67, 67, 67, 8: 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 51: 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67}, - {69, 69, 7: 4998}, - {659: 4994, 675: 4995, 1224: 4993}, + {58, 58}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4998, 1128: 4999, 1297: 4997}, + {68, 68, 68, 68, 68, 68, 68, 8: 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 51: 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, + {67, 67, 67, 67, 67, 67, 67, 8: 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 51: 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67}, + {69, 69, 7: 5005}, + // 2530 + {662: 5001, 678: 5002, 1227: 5000}, {61, 61, 7: 61}, {66, 66, 7: 66}, - // 2530 - {65, 65, 7: 65, 136: 4997}, - {63, 63, 7: 63, 136: 4996}, + {65, 65, 7: 65, 136: 5004}, + {63, 63, 7: 63, 136: 5003}, + // 2535 {62, 62, 7: 62}, {64, 64, 7: 64}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 4991, 1125: 4999}, - // 2535 + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 4998, 1128: 5006}, {60, 60, 7: 60}, {70, 70}, - {136: 4965, 866: 96, 1055: 5004}, - {464: 5003}, - {54, 54}, // 2540 - {866: 5005}, - {464: 5006}, - {479: 5007, 484: 2067, 496: 5008, 1019: 5009}, - {2066, 2066, 461: 2066, 2066, 2066, 467: 2066, 484: 2066, 491: 2066, 558: 2066, 634: 2066}, - {2065, 2065, 461: 2065, 2065, 2065, 467: 2065, 484: 2065, 491: 2065, 558: 2065, 634: 2065}, + {136: 4972, 869: 96, 1058: 5011}, + {467: 5010}, + {54, 54}, + {869: 5012}, + {467: 5013}, // 2545 - {484: 5010}, - {558: 5011}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5012}, - {98, 98, 98: 98, 107: 98, 462: 98, 479: 98, 493: 98, 635: 5014, 646: 98, 1164: 5013}, - {94, 94, 98: 3848, 107: 3847, 462: 94, 479: 94, 493: 94, 646: 94, 819: 3846, 1029: 5017}, + {482: 5014, 487: 2071, 499: 5015, 1022: 5016}, + {2070, 2070, 464: 2070, 2070, 2070, 470: 2070, 487: 2070, 494: 2070, 561: 2070, 637: 2070}, + {2069, 2069, 464: 2069, 2069, 2069, 470: 2069, 487: 2069, 494: 2069, 561: 2069, 637: 2069}, + {487: 5017}, + {561: 5018}, // 2550 - {493: 5015}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 5016}, - {97, 97, 98: 97, 107: 97, 462: 97, 479: 97, 493: 97, 646: 97}, - {81, 81, 462: 81, 479: 81, 493: 81, 646: 3869, 929: 5018}, - {100, 100, 462: 100, 479: 5020, 493: 100, 1206: 5019}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5019}, + {98, 98, 98: 98, 107: 98, 465: 98, 482: 98, 496: 98, 638: 5021, 649: 98, 1167: 5020}, + {94, 94, 98: 3855, 107: 3854, 465: 94, 482: 94, 496: 94, 649: 94, 822: 3853, 1032: 5024}, + {496: 5022}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 5023}, // 2555 - {2256, 2256, 462: 5023, 493: 2256, 1170: 5024}, - {497: 2655, 721: 5021}, - {646: 5022}, - {99, 99, 462: 99, 493: 99}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 2262, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 557: 3255, 651: 4045, 2681, 2682, 2680, 698: 5037, 732: 5036, 984: 5035, 1168: 5034, 5038}, + {97, 97, 98: 97, 107: 97, 465: 97, 482: 97, 496: 97, 649: 97}, + {81, 81, 465: 81, 482: 81, 496: 81, 649: 3876, 932: 5025}, + {100, 100, 465: 100, 482: 5027, 496: 100, 1209: 5026}, + {2260, 2260, 465: 5030, 496: 2260, 1173: 5031}, + {500: 2659, 724: 5028}, // 2560 - {75, 75, 493: 5026, 1223: 5025}, + {649: 5029}, + {99, 99, 465: 99, 496: 99}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 2266, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 560: 3262, 655: 4052, 2685, 2686, 2684, 701: 5044, 735: 5043, 987: 5042, 1171: 5041, 5045}, + {75, 75, 496: 5033, 1226: 5032}, {101, 101}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3684, 2681, 2682, 2680, 699: 5029, 1053: 5028, 1222: 5027}, - {74, 74, 7: 5032}, - {72, 72, 7: 72}, // 2565 - {486: 5030}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5031}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3691, 2685, 2686, 2684, 702: 5036, 1056: 5035, 1225: 5034}, + {74, 74, 7: 5039}, + {72, 72, 7: 72}, + {489: 5037}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5038}, + // 2570 {71, 71, 7: 71}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3684, 2681, 2682, 2680, 699: 5029, 1053: 5033}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3691, 2685, 2686, 2684, 702: 5036, 1056: 5040}, {73, 73, 7: 73}, - // 2570 - {7: 5040, 50: 2261}, - {7: 2260, 50: 2260}, - {7: 2258, 50: 2258}, - {7: 2257, 50: 2257}, - {50: 5039}, + {7: 5047, 50: 2265}, + {7: 2264, 50: 2264}, // 2575 - {2255, 2255, 493: 2255}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 557: 3255, 651: 4045, 2681, 2682, 2680, 698: 5037, 732: 5036, 984: 5041}, - {7: 2259, 50: 2259}, - {7: 158, 163: 158, 461: 158, 487: 158, 557: 1792, 638: 158, 655: 1792}, - {7: 123, 461: 123, 123, 487: 123, 557: 1763, 638: 123, 655: 1763}, + {7: 2262, 50: 2262}, + {7: 2261, 50: 2261}, + {50: 5046}, + {2259, 2259, 496: 2259}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 560: 3262, 655: 4052, 2685, 2686, 2684, 701: 5044, 735: 5043, 987: 5048}, // 2580 - {7: 137, 461: 137, 137, 487: 137, 557: 1737, 638: 137, 655: 1737}, - {7: 124, 461: 124, 124, 487: 124, 557: 1734, 638: 124, 655: 1734}, - {7: 113, 461: 113, 113, 487: 113, 557: 1699, 638: 113, 655: 1699}, - {7: 133, 461: 133, 133, 487: 133, 557: 1624, 638: 133, 655: 1624}, - {7: 138, 461: 138, 138, 487: 138, 557: 1617, 638: 138, 655: 1617}, + {7: 2263, 50: 2263}, + {7: 158, 163: 158, 464: 158, 490: 158, 560: 1796, 641: 158, 654: 1796}, + {7: 123, 464: 123, 123, 490: 123, 560: 1766, 641: 123, 654: 1766}, + {7: 137, 464: 137, 137, 490: 137, 560: 1740, 641: 137, 654: 1740}, + {7: 124, 464: 124, 124, 490: 124, 560: 1737, 641: 124, 654: 1737}, // 2585 - {309: 5151, 373: 5150, 557: 1599, 655: 1599}, - {7: 125, 461: 125, 125, 487: 125, 557: 1596, 638: 125, 655: 1596}, - {7: 114, 461: 114, 114, 487: 114, 557: 1593, 638: 114, 655: 1593}, - {557: 5148, 655: 5147}, - {7: 710, 461: 710, 487: 710, 557: 250, 638: 710, 655: 250}, + {7: 113, 464: 113, 113, 490: 113, 560: 1702, 641: 113, 654: 1702}, + {7: 133, 464: 133, 133, 490: 133, 560: 1625, 641: 133, 654: 1625}, + {7: 138, 464: 138, 138, 490: 138, 560: 1618, 641: 138, 654: 1618}, + {310: 5158, 376: 5157, 560: 1600, 654: 1600}, + {7: 125, 464: 125, 125, 490: 125, 560: 1597, 641: 125, 654: 1597}, // 2590 - {7: 709, 461: 709, 487: 709, 638: 709}, - {7: 154, 163: 5146, 461: 154, 487: 154, 638: 154}, - {7: 156, 461: 156, 487: 156, 638: 156}, - {7: 155, 461: 155, 487: 155, 638: 155}, - {487: 5144}, + {7: 114, 464: 114, 114, 490: 114, 560: 1594, 641: 114, 654: 1594}, + {560: 5155, 654: 5154}, + {7: 711, 464: 711, 490: 711, 560: 250, 641: 711, 654: 250}, + {7: 710, 464: 710, 490: 710, 641: 710}, + {7: 154, 163: 5153, 464: 154, 490: 154, 641: 154}, // 2595 - {7: 134, 461: 134, 134, 484: 5142, 487: 134, 638: 134}, - {7: 151, 461: 151, 487: 151, 638: 151}, - {7: 5094, 461: 5095, 487: 5096}, - {7: 149, 461: 149, 5091, 487: 149, 638: 149}, - {7: 147, 184: 5090, 461: 147, 147, 487: 147, 638: 147}, + {7: 156, 464: 156, 490: 156, 641: 156}, + {7: 155, 464: 155, 490: 155, 641: 155}, + {490: 5151}, + {7: 134, 464: 134, 134, 487: 5149, 490: 134, 641: 134}, + {7: 151, 464: 151, 490: 151, 641: 151}, // 2600 - {7: 145, 269: 5089, 461: 145, 145, 487: 145, 638: 145}, - {7: 144, 18: 5083, 99: 5085, 160: 5084, 162: 5082, 167: 5086, 269: 5087, 461: 144, 144, 487: 144, 638: 144}, - {7: 141, 461: 141, 141, 487: 141, 638: 141}, - {7: 140, 461: 140, 140, 487: 140, 638: 140}, - {7: 139, 167: 5081, 461: 139, 139, 487: 139, 638: 139}, + {7: 5101, 464: 5102, 490: 5103}, + {7: 149, 464: 149, 5098, 490: 149, 641: 149}, + {7: 147, 182: 5097, 464: 147, 147, 490: 147, 641: 147}, + {7: 145, 269: 5096, 464: 145, 145, 490: 145, 641: 145}, + {7: 144, 18: 5090, 99: 5092, 160: 5091, 162: 5089, 167: 5093, 269: 5094, 464: 144, 144, 490: 144, 641: 144}, // 2605 - {7: 136, 461: 136, 136, 487: 136, 638: 136}, - {7: 135, 461: 135, 135, 487: 135, 638: 135}, - {99: 5080, 1002: 5079}, - {7: 131, 461: 131, 131, 487: 131, 638: 131}, - {891: 5078}, + {7: 141, 464: 141, 141, 490: 141, 641: 141}, + {7: 140, 464: 140, 140, 490: 140, 641: 140}, + {7: 139, 167: 5088, 464: 139, 139, 490: 139, 641: 139}, + {7: 136, 464: 136, 136, 490: 136, 641: 136}, + {7: 135, 464: 135, 135, 490: 135, 641: 135}, // 2610 - {7: 129, 461: 129, 129, 487: 129, 638: 129}, - {7: 126, 461: 126, 126, 487: 126, 638: 126}, - {110: 5077}, - {7: 121, 461: 121, 121, 487: 121, 638: 121}, - {7: 130, 461: 130, 130, 487: 130, 638: 130}, + {99: 5087, 1005: 5086}, + {7: 131, 464: 131, 131, 490: 131, 641: 131}, + {894: 5085}, + {7: 129, 464: 129, 129, 490: 129, 641: 129}, + {7: 126, 464: 126, 126, 490: 126, 641: 126}, // 2615 - {7: 132, 461: 132, 132, 487: 132, 638: 132}, - {7: 119, 461: 119, 119, 487: 119, 638: 119}, - {7: 117, 461: 117, 117, 487: 117, 638: 117}, - {7: 143, 461: 143, 143, 487: 143, 638: 143}, - {7: 142, 461: 142, 142, 487: 142, 638: 142}, + {110: 5084}, + {7: 121, 464: 121, 121, 490: 121, 641: 121}, + {7: 130, 464: 130, 130, 490: 130, 641: 130}, + {7: 132, 464: 132, 132, 490: 132, 641: 132}, + {7: 119, 464: 119, 119, 490: 119, 641: 119}, // 2620 - {110: 5088}, - {7: 120, 461: 120, 120, 487: 120, 638: 120}, - {7: 118, 461: 118, 118, 487: 118, 638: 118}, - {7: 116, 461: 116, 116, 487: 116, 638: 116}, - {7: 122, 461: 122, 122, 487: 122, 638: 122}, + {7: 117, 464: 117, 117, 490: 117, 641: 117}, + {7: 143, 464: 143, 143, 490: 143, 641: 143}, + {7: 142, 464: 142, 142, 490: 142, 641: 142}, + {110: 5095}, + {7: 120, 464: 120, 120, 490: 120, 641: 120}, // 2625 - {7: 115, 461: 115, 115, 487: 115, 638: 115}, - {7: 146, 461: 146, 146, 487: 146, 638: 146}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 5092}, - {7: 4048, 50: 5093}, - {7: 148, 461: 148, 487: 148, 638: 148}, + {7: 118, 464: 118, 118, 490: 118, 641: 118}, + {7: 116, 464: 116, 116, 490: 116, 641: 116}, + {7: 122, 464: 122, 122, 490: 122, 641: 122}, + {7: 115, 464: 115, 115, 490: 115, 641: 115}, + {7: 146, 464: 146, 146, 490: 146, 641: 146}, // 2630 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5042, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 5044, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 5050, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 5046, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 5043, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 5051, 3115, 2848, 3068, 5045, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 5048, 2761, 2762, 2998, 5049, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 5047, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5053, 485: 5076, 556: 5070, 632: 5074, 634: 5059, 637: 5069, 639: 5063, 642: 5072, 650: 5064, 3397, 2681, 2682, 2680, 657: 5068, 662: 5065, 726: 5052, 730: 5067, 787: 5054, 795: 5058, 840: 5073, 851: 5071, 921: 5055, 939: 5056, 5062, 945: 5057, 5141, 954: 5066, 956: 5075}, - {2: 112, 112, 112, 112, 112, 8: 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 51: 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 5108, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 512: 112, 558: 5107, 941: 5109, 1063: 5110}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5099, 853: 5100}, - {723, 723, 7: 723, 13: 723, 46: 723, 99: 723, 141: 723, 463: 723, 470: 723, 486: 723, 557: 5105, 638: 723, 649: 723, 655: 5104, 723}, - {1178, 1178, 7: 1178, 13: 1178, 46: 1178, 99: 1178, 141: 1178, 462: 3674, 1178, 470: 1178, 486: 1178, 638: 1178, 649: 1178, 656: 1178, 1072: 5103}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 5099}, + {7: 4055, 50: 5100}, + {7: 148, 464: 148, 490: 148, 641: 148}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5049, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 5051, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 5057, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 5053, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 5050, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 5058, 3122, 2855, 3075, 5052, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 5055, 2766, 2767, 3005, 5056, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 5054, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5060, 488: 5083, 559: 5077, 635: 5081, 637: 5066, 640: 5076, 642: 5070, 645: 5079, 653: 5071, 655: 3404, 2685, 2686, 2684, 660: 5075, 665: 5072, 729: 5059, 733: 5074, 790: 5061, 798: 5065, 843: 5080, 854: 5078, 924: 5062, 942: 5063, 5069, 948: 5064, 5148, 957: 5073, 959: 5082}, + {2: 112, 112, 112, 112, 112, 8: 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 51: 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 5115, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 515: 112, 561: 5114, 944: 5116, 1066: 5117}, // 2635 - {719, 719, 7: 719, 463: 719}, - {102, 102, 7: 5101}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5102}, - {718, 718, 7: 718, 463: 718}, - {720, 720, 7: 720, 13: 720, 46: 720, 99: 720, 141: 720, 463: 720, 470: 720, 486: 720, 638: 720, 649: 720, 656: 720}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5106, 856: 5107}, + {724, 724, 7: 724, 13: 724, 46: 724, 99: 724, 141: 724, 466: 724, 473: 724, 489: 724, 560: 5112, 641: 724, 652: 724, 654: 5111, 659: 724}, + {1179, 1179, 7: 1179, 13: 1179, 46: 1179, 99: 1179, 141: 1179, 465: 3681, 1179, 473: 1179, 489: 1179, 641: 1179, 652: 1179, 659: 1179, 1075: 5110}, + {720, 720, 7: 720, 466: 720}, + {102, 102, 7: 5108}, // 2640 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 651: 3397, 2681, 2682, 2680, 726: 5106}, - {721, 721, 7: 721, 13: 721, 46: 721, 99: 721, 141: 721, 463: 721, 470: 721, 486: 721, 638: 721, 649: 721, 656: 721}, - {722, 722, 7: 722, 13: 722, 46: 722, 99: 722, 141: 722, 463: 722, 470: 722, 486: 722, 638: 722, 649: 722, 656: 722}, - {2: 111, 111, 111, 111, 111, 8: 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 51: 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 512: 111}, - {2: 110, 110, 110, 110, 110, 8: 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 51: 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 512: 110}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5109}, + {719, 719, 7: 719, 466: 719}, + {721, 721, 7: 721, 13: 721, 46: 721, 99: 721, 141: 721, 466: 721, 473: 721, 489: 721, 641: 721, 652: 721, 659: 721}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 655: 3404, 2685, 2686, 2684, 729: 5113}, + {722, 722, 7: 722, 13: 722, 46: 722, 99: 722, 141: 722, 466: 722, 473: 722, 489: 722, 641: 722, 652: 722, 659: 722}, // 2645 - {2: 109, 109, 109, 109, 109, 8: 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 51: 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 512: 109}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 512: 5111, 651: 5112, 2681, 2682, 2680, 1086: 5113}, - {487: 108, 638: 108, 640: 5139}, - {487: 104, 638: 104, 640: 5136}, - {487: 5114}, + {723, 723, 7: 723, 13: 723, 46: 723, 99: 723, 141: 723, 466: 723, 473: 723, 489: 723, 641: 723, 652: 723, 659: 723}, + {2: 111, 111, 111, 111, 111, 8: 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 51: 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 515: 111}, + {2: 110, 110, 110, 110, 110, 8: 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 51: 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 515: 110}, + {2: 109, 109, 109, 109, 109, 8: 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 51: 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 515: 109}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 515: 5118, 655: 5119, 2685, 2686, 2684, 1089: 5120}, // 2650 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5115, 876: 5116, 907: 5117}, - {192, 192, 7: 192, 13: 192, 46: 192, 141: 5121, 463: 192, 649: 192, 1155: 5120}, - {227, 227, 7: 227, 13: 227, 46: 227, 463: 227, 649: 227}, - {103, 103, 7: 5118}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5115, 876: 5119}, + {490: 108, 641: 108, 643: 5146}, + {490: 104, 641: 104, 643: 5143}, + {490: 5121}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5122, 879: 5123, 910: 5124}, + {192, 192, 7: 192, 13: 192, 46: 192, 141: 5128, 466: 192, 652: 192, 1158: 5127}, // 2655 - {226, 226, 7: 226, 13: 226, 46: 226, 463: 226, 649: 226}, - {228, 228, 7: 228, 13: 228, 46: 228, 463: 228, 649: 228}, - {463: 5123, 647: 5122}, - {13: 5134, 464: 5131, 878: 5133}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 651: 3397, 2681, 2682, 2680, 726: 5125, 1156: 5124}, + {227, 227, 7: 227, 13: 227, 46: 227, 466: 227, 652: 227}, + {103, 103, 7: 5125}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5122, 879: 5126}, + {226, 226, 7: 226, 13: 226, 46: 226, 466: 226, 652: 226}, + {228, 228, 7: 228, 13: 228, 46: 228, 466: 228, 652: 228}, // 2660 - {190, 190, 7: 190, 13: 190, 46: 190, 463: 190, 467: 5127, 647: 5126, 649: 190}, - {186, 186, 7: 186, 13: 186, 46: 186, 463: 186, 467: 186, 647: 186, 649: 186}, - {464: 5131, 878: 5132}, - {464: 5129, 565: 5130, 1038: 5128}, - {188, 188, 7: 188, 13: 188, 46: 188, 463: 188, 649: 188}, + {466: 5130, 650: 5129}, + {13: 5141, 467: 5138, 881: 5140}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 655: 3404, 2685, 2686, 2684, 729: 5132, 1159: 5131}, + {190, 190, 7: 190, 13: 190, 46: 190, 466: 190, 470: 5134, 650: 5133, 652: 190}, + {186, 186, 7: 186, 13: 186, 46: 186, 466: 186, 470: 186, 650: 186, 652: 186}, // 2665 - {185, 185, 7: 185, 13: 185, 46: 185, 463: 185, 649: 185}, - {184, 184, 7: 184, 13: 184, 46: 184, 463: 184, 649: 184}, - {715, 715, 7: 715, 13: 715, 46: 715, 50: 715, 463: 715, 649: 715}, - {189, 189, 7: 189, 13: 189, 46: 189, 463: 189, 649: 189}, - {191, 191, 7: 191, 13: 191, 46: 191, 463: 191, 649: 191}, + {467: 5138, 881: 5139}, + {467: 5136, 568: 5137, 1041: 5135}, + {188, 188, 7: 188, 13: 188, 46: 188, 466: 188, 652: 188}, + {185, 185, 7: 185, 13: 185, 46: 185, 466: 185, 652: 185}, + {184, 184, 7: 184, 13: 184, 46: 184, 466: 184, 652: 184}, // 2670 - {464: 5129, 565: 5130, 1038: 5135}, - {187, 187, 7: 187, 13: 187, 46: 187, 463: 187, 649: 187}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 512: 5137, 651: 5138, 2681, 2682, 2680}, - {487: 106, 638: 106}, - {487: 105, 638: 105}, + {716, 716, 7: 716, 13: 716, 46: 716, 50: 716, 466: 716, 652: 716}, + {189, 189, 7: 189, 13: 189, 46: 189, 466: 189, 652: 189}, + {191, 191, 7: 191, 13: 191, 46: 191, 466: 191, 652: 191}, + {467: 5136, 568: 5137, 1041: 5142}, + {187, 187, 7: 187, 13: 187, 46: 187, 466: 187, 652: 187}, // 2675 - {512: 5140}, - {487: 107, 638: 107}, - {7: 150, 461: 150, 487: 150, 638: 150}, - {270: 5143}, - {7: 152, 461: 152, 487: 152, 638: 152}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 515: 5144, 655: 5145, 2685, 2686, 2684}, + {490: 106, 641: 106}, + {490: 105, 641: 105}, + {515: 5147}, + {490: 107, 641: 107}, // 2680 - {270: 5145}, - {7: 153, 461: 153, 487: 153, 638: 153}, - {7: 157, 163: 157, 461: 157, 487: 157, 638: 157}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 651: 3397, 2681, 2682, 2680, 726: 5149}, - {711, 711, 7: 711, 461: 711, 487: 711, 638: 711}, + {7: 150, 464: 150, 490: 150, 641: 150}, + {270: 5150}, + {7: 152, 464: 152, 490: 152, 641: 152}, + {270: 5152}, + {7: 153, 464: 153, 490: 153, 641: 153}, // 2685 - {712, 712, 7: 712, 461: 712, 487: 712, 638: 712}, - {7: 128, 461: 128, 128, 487: 128, 638: 128}, - {7: 127, 461: 127, 127, 487: 127, 638: 127}, - {461: 5192, 557: 1710, 655: 1710}, - {7: 5094, 461: 5154, 638: 5155}, + {7: 157, 163: 157, 464: 157, 490: 157, 641: 157}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 655: 3404, 2685, 2686, 2684, 729: 5156}, + {712, 712, 7: 712, 464: 712, 490: 712, 641: 712}, + {713, 713, 7: 713, 464: 713, 490: 713, 641: 713}, + {7: 128, 464: 128, 128, 490: 128, 641: 128}, // 2690 - {2: 112, 112, 112, 112, 112, 8: 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 51: 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 5108, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 512: 112, 558: 5107, 941: 5109, 1063: 5157}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5099, 853: 5156}, - {165, 165, 7: 5101}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 512: 5111, 651: 5112, 2681, 2682, 2680, 1086: 5158}, - {638: 5159}, + {7: 127, 464: 127, 127, 490: 127, 641: 127}, + {464: 5199, 560: 1713, 654: 1713}, + {7: 5101, 464: 5161, 641: 5162}, + {2: 112, 112, 112, 112, 112, 8: 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 51: 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 5115, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 515: 112, 561: 5114, 944: 5116, 1066: 5164}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5106, 856: 5163}, // 2695 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5115, 876: 5116, 907: 5160}, - {217, 217, 7: 5118, 463: 217, 649: 5162, 942: 5161, 5163}, - {216, 216, 13: 216, 46: 216, 463: 216}, - {131: 5183, 133: 5181, 5184, 5182, 350: 5176, 396: 5178, 944: 5180, 1260: 5179, 1278: 5177}, - {164, 164, 463: 5165, 1142: 5164}, + {165, 165, 7: 5108}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 515: 5118, 655: 5119, 2685, 2686, 2684, 1089: 5165}, + {641: 5166}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5122, 879: 5123, 910: 5167}, + {217, 217, 7: 5125, 466: 217, 652: 5169, 945: 5168, 5170}, // 2700 + {216, 216, 13: 216, 46: 216, 466: 216}, + {131: 5190, 133: 5188, 5191, 5189, 353: 5183, 399: 5185, 947: 5187, 1263: 5186, 1281: 5184}, + {164, 164, 466: 5172, 1145: 5171}, {167, 167}, - {126: 5169, 5167, 5168, 5170, 840: 5166}, - {891: 5175}, - {497: 2655, 721: 5174}, - {497: 2655, 721: 5173}, + {126: 5176, 5174, 5175, 5177, 843: 5173}, // 2705 - {497: 2655, 721: 5172}, - {497: 2655, 721: 5171}, + {894: 5182}, + {500: 2659, 724: 5181}, + {500: 2659, 724: 5180}, + {500: 2659, 724: 5179}, + {500: 2659, 724: 5178}, + // 2710 {159, 159}, {160, 160}, {161, 161}, - // 2710 {162, 162}, {163, 163}, - {215, 215, 13: 215, 46: 215, 463: 215}, - {214, 214, 13: 214, 46: 214, 463: 214}, - {213, 213, 13: 213, 46: 213, 463: 213}, // 2715 - {212, 212, 13: 212, 46: 212, 131: 5183, 133: 5181, 5184, 5182, 463: 212, 494: 5189, 944: 5190}, - {211, 211, 13: 211, 46: 211, 131: 211, 133: 211, 211, 211, 463: 211, 494: 211}, - {464: 5188}, - {464: 5187}, - {464: 5186}, + {215, 215, 13: 215, 46: 215, 466: 215}, + {214, 214, 13: 214, 46: 214, 466: 214}, + {213, 213, 13: 213, 46: 213, 466: 213}, + {212, 212, 13: 212, 46: 212, 131: 5190, 133: 5188, 5191, 5189, 466: 212, 497: 5196, 947: 5197}, + {211, 211, 13: 211, 46: 211, 131: 211, 133: 211, 211, 211, 466: 211, 497: 211}, // 2720 - {464: 5185}, - {205, 205, 13: 205, 46: 205, 131: 205, 133: 205, 205, 205, 463: 205, 494: 205}, - {206, 206, 13: 206, 46: 206, 131: 206, 133: 206, 206, 206, 463: 206, 494: 206}, - {207, 207, 13: 207, 46: 207, 131: 207, 133: 207, 207, 207, 463: 207, 494: 207}, - {208, 208, 13: 208, 46: 208, 131: 208, 133: 208, 208, 208, 463: 208, 494: 208}, + {467: 5195}, + {467: 5194}, + {467: 5193}, + {467: 5192}, + {205, 205, 13: 205, 46: 205, 131: 205, 133: 205, 205, 205, 466: 205, 497: 205}, // 2725 - {131: 5183, 133: 5181, 5184, 5182, 944: 5191}, - {209, 209, 13: 209, 46: 209, 131: 209, 133: 209, 209, 209, 463: 209, 494: 209}, - {210, 210, 13: 210, 46: 210, 131: 210, 133: 210, 210, 210, 463: 210, 494: 210}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5193}, - {638: 5194}, + {206, 206, 13: 206, 46: 206, 131: 206, 133: 206, 206, 206, 466: 206, 497: 206}, + {207, 207, 13: 207, 46: 207, 131: 207, 133: 207, 207, 207, 466: 207, 497: 207}, + {208, 208, 13: 208, 46: 208, 131: 208, 133: 208, 208, 208, 466: 208, 497: 208}, + {131: 5190, 133: 5188, 5191, 5189, 947: 5198}, + {209, 209, 13: 209, 46: 209, 131: 209, 133: 209, 209, 209, 466: 209, 497: 209}, // 2730 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5099, 853: 5195}, - {164, 164, 7: 5101, 463: 5165, 1142: 5196}, + {210, 210, 13: 210, 46: 210, 131: 210, 133: 210, 210, 210, 466: 210, 497: 210}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5200}, + {641: 5201}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5106, 856: 5202}, + {164, 164, 7: 5108, 466: 5172, 1145: 5203}, + // 2735 {166, 166}, - {2138, 2138, 7: 2138, 14: 2138, 16: 2138, 19: 2138, 468: 2138, 473: 2138, 487: 2138, 489: 2138, 493: 2138, 495: 2138, 510: 2138, 635: 2138, 638: 2138}, + {2142, 2142, 7: 2142, 14: 2142, 16: 2142, 19: 2142, 471: 2142, 476: 2142, 490: 2142, 492: 2142, 496: 2142, 498: 2142, 513: 2142, 638: 2142, 641: 2142}, {241, 241}, - // 2735 - {2: 829, 829, 829, 829, 829, 8: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 51: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 462: 829, 464: 829, 829, 829, 468: 829, 471: 829, 829, 474: 829, 829, 829, 479: 829, 481: 829, 484: 829, 487: 829, 491: 829, 495: 829, 829, 829, 503: 829, 512: 829, 534: 829, 555: 829, 829, 829, 559: 829, 829, 829, 829, 829, 829, 829, 567: 829, 829, 829, 829, 572: 829, 829, 575: 829, 577: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 636: 829, 639: 829, 733: 829, 829, 736: 829, 829, 829, 750: 829, 756: 829, 829, 829}, - {2: 827, 827, 827, 827, 827, 8: 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 51: 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 462: 827, 479: 827, 484: 827, 487: 827, 568: 827, 736: 827, 827, 827}, - {2: 1030, 1030, 1030, 1030, 1030, 8: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 51: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 462: 1030, 479: 1030, 568: 1030, 736: 5204, 5203, 5202, 823: 5205, 872: 5206}, - {2: 1033, 1033, 1033, 1033, 1033, 8: 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 51: 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 462: 1033, 464: 1033, 1033, 1033, 468: 1033, 471: 1033, 1033, 474: 1033, 1033, 1033, 479: 1033, 481: 1033, 484: 1033, 487: 1033, 491: 1033, 495: 1033, 1033, 1033, 503: 1033, 512: 1033, 534: 1033, 555: 1033, 1033, 1033, 559: 1033, 1033, 1033, 1033, 1033, 1033, 1033, 567: 1033, 1033, 1033, 1033, 572: 1033, 1033, 575: 1033, 577: 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 636: 1033, 639: 1033, 733: 1033, 1033, 736: 1033, 1033, 1033, 750: 1033, 756: 1033, 1033, 1033}, - {2: 1032, 1032, 1032, 1032, 1032, 8: 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 51: 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 462: 1032, 464: 1032, 1032, 1032, 468: 1032, 471: 1032, 1032, 474: 1032, 1032, 1032, 479: 1032, 481: 1032, 484: 1032, 487: 1032, 491: 1032, 495: 1032, 1032, 1032, 503: 1032, 512: 1032, 534: 1032, 555: 1032, 1032, 1032, 559: 1032, 1032, 1032, 1032, 1032, 1032, 1032, 567: 1032, 1032, 1032, 1032, 572: 1032, 1032, 575: 1032, 577: 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 636: 1032, 639: 1032, 733: 1032, 1032, 736: 1032, 1032, 1032, 750: 1032, 756: 1032, 1032, 1032}, + {2: 830, 830, 830, 830, 830, 8: 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 51: 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 465: 830, 467: 830, 830, 830, 471: 830, 474: 830, 830, 477: 830, 830, 830, 482: 830, 484: 830, 487: 830, 490: 830, 494: 830, 498: 830, 830, 830, 506: 830, 515: 830, 537: 830, 558: 830, 830, 830, 562: 830, 830, 830, 830, 830, 830, 830, 570: 830, 830, 830, 830, 575: 830, 830, 578: 830, 580: 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 639: 830, 642: 830, 736: 830, 830, 739: 830, 830, 830, 753: 830, 759: 830, 830, 830}, + {2: 828, 828, 828, 828, 828, 8: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 51: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 465: 828, 482: 828, 487: 828, 490: 828, 571: 828, 739: 828, 828, 828}, // 2740 - {2: 1031, 1031, 1031, 1031, 1031, 8: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 51: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 462: 1031, 464: 1031, 1031, 1031, 468: 1031, 471: 1031, 1031, 474: 1031, 1031, 1031, 479: 1031, 481: 1031, 484: 1031, 487: 1031, 491: 1031, 495: 1031, 1031, 1031, 503: 1031, 512: 1031, 534: 1031, 555: 1031, 1031, 1031, 559: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 567: 1031, 1031, 1031, 1031, 572: 1031, 1031, 575: 1031, 577: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 636: 1031, 639: 1031, 733: 1031, 1031, 736: 1031, 1031, 1031, 750: 1031, 756: 1031, 1031, 1031}, - {2: 1029, 1029, 1029, 1029, 1029, 8: 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 51: 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 462: 1029, 479: 1029, 484: 1029, 487: 1029, 568: 1029}, - {2: 1816, 1816, 1816, 1816, 1816, 8: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 51: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 462: 1816, 479: 4092, 568: 1816, 841: 5207}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 568: 5211, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5210, 837: 5208, 875: 5209}, - {906, 906, 7: 906, 50: 906, 461: 906, 463: 906, 469: 906, 906, 477: 906, 906, 482: 906, 906, 906, 906, 488: 906, 906, 906, 493: 906, 502: 906, 504: 906, 906}, + {2: 1031, 1031, 1031, 1031, 1031, 8: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 51: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 465: 1031, 482: 1031, 571: 1031, 739: 5211, 5210, 5209, 826: 5212, 875: 5213}, + {2: 1034, 1034, 1034, 1034, 1034, 8: 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 51: 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 465: 1034, 467: 1034, 1034, 1034, 471: 1034, 474: 1034, 1034, 477: 1034, 1034, 1034, 482: 1034, 484: 1034, 487: 1034, 490: 1034, 494: 1034, 498: 1034, 1034, 1034, 506: 1034, 515: 1034, 537: 1034, 558: 1034, 1034, 1034, 562: 1034, 1034, 1034, 1034, 1034, 1034, 1034, 570: 1034, 1034, 1034, 1034, 575: 1034, 1034, 578: 1034, 580: 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 639: 1034, 642: 1034, 736: 1034, 1034, 739: 1034, 1034, 1034, 753: 1034, 759: 1034, 1034, 1034}, + {2: 1033, 1033, 1033, 1033, 1033, 8: 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 51: 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 465: 1033, 467: 1033, 1033, 1033, 471: 1033, 474: 1033, 1033, 477: 1033, 1033, 1033, 482: 1033, 484: 1033, 487: 1033, 490: 1033, 494: 1033, 498: 1033, 1033, 1033, 506: 1033, 515: 1033, 537: 1033, 558: 1033, 1033, 1033, 562: 1033, 1033, 1033, 1033, 1033, 1033, 1033, 570: 1033, 1033, 1033, 1033, 575: 1033, 1033, 578: 1033, 580: 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 639: 1033, 642: 1033, 736: 1033, 1033, 739: 1033, 1033, 1033, 753: 1033, 759: 1033, 1033, 1033}, + {2: 1032, 1032, 1032, 1032, 1032, 8: 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 51: 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 465: 1032, 467: 1032, 1032, 1032, 471: 1032, 474: 1032, 1032, 477: 1032, 1032, 1032, 482: 1032, 484: 1032, 487: 1032, 490: 1032, 494: 1032, 498: 1032, 1032, 1032, 506: 1032, 515: 1032, 537: 1032, 558: 1032, 1032, 1032, 562: 1032, 1032, 1032, 1032, 1032, 1032, 1032, 570: 1032, 1032, 1032, 1032, 575: 1032, 1032, 578: 1032, 580: 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 639: 1032, 642: 1032, 736: 1032, 1032, 739: 1032, 1032, 1032, 753: 1032, 759: 1032, 1032, 1032}, + {2: 1030, 1030, 1030, 1030, 1030, 8: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 51: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 465: 1030, 482: 1030, 487: 1030, 490: 1030, 571: 1030}, // 2745 - {7: 5262, 493: 5332}, - {7: 904, 471: 5229, 5230, 493: 5319, 503: 5228, 506: 5231, 5227, 5232, 5233, 803: 5226, 809: 5225}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5316, 2681, 2682, 2680}, - {902, 902, 7: 902, 50: 902, 461: 902, 463: 902, 469: 902, 902, 902, 902, 477: 902, 902, 482: 902, 902, 902, 902, 488: 902, 902, 902, 493: 902, 502: 902, 902, 902, 902, 902, 902, 902, 902, 511: 902}, - {901, 901, 7: 901, 50: 901, 461: 901, 463: 901, 469: 901, 901, 901, 901, 477: 901, 901, 482: 901, 901, 901, 901, 488: 901, 901, 901, 493: 901, 502: 901, 901, 901, 901, 901, 901, 901, 901, 511: 901}, + {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 465: 1820, 482: 4099, 571: 1820, 844: 5214}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 571: 5218, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5217, 840: 5215, 878: 5216}, + {907, 907, 7: 907, 50: 907, 464: 907, 466: 907, 472: 907, 907, 480: 907, 907, 485: 907, 907, 907, 907, 491: 907, 907, 907, 496: 907, 505: 907, 507: 907, 907}, + {7: 5269, 496: 5339}, + {7: 905, 474: 5236, 5237, 496: 5326, 506: 5235, 509: 5238, 5234, 5239, 5240, 806: 5233, 812: 5232}, // 2750 - {897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 463: 897, 467: 897, 469: 897, 897, 897, 897, 477: 897, 897, 897, 5266, 482: 897, 897, 897, 897, 488: 897, 897, 897, 492: 897, 897, 502: 897, 897, 897, 897, 897, 897, 897, 897, 511: 897, 514: 897, 897, 661: 897, 846: 5265}, - {895, 895, 2917, 2765, 2801, 2919, 2692, 895, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 895, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 895, 463: 895, 467: 5223, 469: 895, 895, 895, 895, 477: 895, 895, 482: 895, 895, 895, 895, 488: 895, 895, 895, 493: 895, 502: 895, 895, 895, 895, 895, 895, 895, 895, 511: 895, 651: 5222, 2681, 2682, 2680, 900: 5221, 5220}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 2512, 491: 2511, 558: 2510, 568: 5211, 634: 2506, 651: 3825, 2681, 2682, 2680, 697: 5219, 725: 5214, 739: 3785, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 3787, 3786, 3784, 785: 5213, 788: 5212, 5218, 837: 5208, 875: 5217}, - {7: 5262, 50: 5263}, - {904, 904, 7: 904, 50: 904, 461: 904, 463: 904, 469: 904, 904, 5229, 5230, 477: 904, 904, 482: 904, 904, 904, 904, 488: 904, 904, 904, 493: 904, 502: 904, 5228, 904, 904, 5231, 5227, 5232, 5233, 803: 5226, 809: 5225}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5323, 2685, 2686, 2684}, + {903, 903, 7: 903, 50: 903, 464: 903, 466: 903, 472: 903, 903, 903, 903, 480: 903, 903, 485: 903, 903, 903, 903, 491: 903, 903, 903, 496: 903, 505: 903, 903, 903, 903, 903, 903, 903, 903, 514: 903}, + {902, 902, 7: 902, 50: 902, 464: 902, 466: 902, 472: 902, 902, 902, 902, 480: 902, 902, 485: 902, 902, 902, 902, 491: 902, 902, 902, 496: 902, 505: 902, 902, 902, 902, 902, 902, 902, 902, 514: 902}, + {898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 466: 898, 470: 898, 472: 898, 898, 898, 898, 480: 898, 898, 898, 5273, 485: 898, 898, 898, 898, 491: 898, 898, 898, 495: 898, 898, 505: 898, 898, 898, 898, 898, 898, 898, 898, 514: 898, 517: 898, 898, 664: 898, 849: 5272}, + {896, 896, 2924, 2770, 2806, 2926, 2697, 896, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 896, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 896, 466: 896, 470: 5230, 472: 896, 896, 896, 896, 480: 896, 896, 485: 896, 896, 896, 896, 491: 896, 896, 896, 496: 896, 505: 896, 896, 896, 896, 896, 896, 896, 896, 514: 896, 655: 5229, 2685, 2686, 2684, 903: 5228, 5227}, // 2755 - {2: 2917, 2765, 2801, 2919, 2692, 895, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 3878, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 467: 5223, 469: 789, 471: 895, 895, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 503: 895, 506: 895, 895, 895, 895, 651: 5222, 2681, 2682, 2680, 754: 3795, 3796, 900: 5221, 5220}, - {899, 899, 7: 899, 50: 899, 461: 899, 463: 899, 469: 899, 899, 899, 899, 477: 899, 899, 482: 899, 899, 899, 899, 488: 899, 899, 899, 493: 899, 502: 899, 899, 899, 899, 899, 899, 899, 899, 511: 899}, - {894, 894, 7: 894, 50: 894, 461: 894, 463: 894, 469: 894, 894, 894, 894, 477: 894, 894, 894, 482: 894, 894, 894, 894, 488: 894, 894, 894, 492: 894, 894, 502: 894, 894, 894, 894, 894, 894, 894, 894, 511: 894, 514: 894, 894, 661: 894}, - {893, 893, 7: 893, 50: 893, 461: 893, 463: 893, 469: 893, 893, 893, 893, 477: 893, 893, 893, 482: 893, 893, 893, 893, 488: 893, 893, 893, 492: 893, 893, 502: 893, 893, 893, 893, 893, 893, 893, 893, 511: 893, 514: 893, 893, 661: 893}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5224, 2681, 2682, 2680}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 2516, 494: 2515, 561: 2514, 571: 5218, 637: 2510, 655: 3832, 2685, 2686, 2684, 700: 5226, 728: 5221, 742: 3792, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 3794, 3793, 3791, 788: 5220, 791: 5219, 5225, 840: 5215, 878: 5224}, + {7: 5269, 50: 5270}, + {905, 905, 7: 905, 50: 905, 464: 905, 466: 905, 472: 905, 905, 5236, 5237, 480: 905, 905, 485: 905, 905, 905, 905, 491: 905, 905, 905, 496: 905, 505: 905, 5235, 905, 905, 5238, 5234, 5239, 5240, 806: 5233, 812: 5232}, + {2: 2924, 2770, 2806, 2926, 2697, 896, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 3885, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 470: 5230, 472: 790, 474: 896, 896, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 506: 896, 509: 896, 896, 896, 896, 655: 5229, 2685, 2686, 2684, 757: 3802, 3803, 903: 5228, 5227}, + {900, 900, 7: 900, 50: 900, 464: 900, 466: 900, 472: 900, 900, 900, 900, 480: 900, 900, 485: 900, 900, 900, 900, 491: 900, 900, 900, 496: 900, 505: 900, 900, 900, 900, 900, 900, 900, 900, 514: 900}, // 2760 - {892, 892, 7: 892, 50: 892, 461: 892, 463: 892, 469: 892, 892, 892, 892, 477: 892, 892, 892, 482: 892, 892, 892, 892, 488: 892, 892, 892, 492: 892, 892, 502: 892, 892, 892, 892, 892, 892, 892, 892, 511: 892, 514: 892, 892, 661: 892}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5255}, - {506: 863, 893: 5242, 1076: 5246}, - {471: 5229, 5230, 506: 5239, 803: 5240}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5236}, + {895, 895, 7: 895, 50: 895, 464: 895, 466: 895, 472: 895, 895, 895, 895, 480: 895, 895, 895, 485: 895, 895, 895, 895, 491: 895, 895, 895, 495: 895, 895, 505: 895, 895, 895, 895, 895, 895, 895, 895, 514: 895, 517: 895, 895, 664: 895}, + {894, 894, 7: 894, 50: 894, 464: 894, 466: 894, 472: 894, 894, 894, 894, 480: 894, 894, 894, 485: 894, 894, 894, 894, 491: 894, 894, 894, 495: 894, 894, 505: 894, 894, 894, 894, 894, 894, 894, 894, 514: 894, 517: 894, 894, 664: 894}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5231, 2685, 2686, 2684}, + {893, 893, 7: 893, 50: 893, 464: 893, 466: 893, 472: 893, 893, 893, 893, 480: 893, 893, 893, 485: 893, 893, 893, 893, 491: 893, 893, 893, 495: 893, 893, 505: 893, 893, 893, 893, 893, 893, 893, 893, 514: 893, 517: 893, 893, 664: 893}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5262}, // 2765 - {506: 865, 893: 865}, - {506: 864, 893: 864}, - {2: 861, 861, 861, 861, 861, 8: 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 51: 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 462: 861}, - {506: 5235}, - {506: 5234}, + {509: 864, 896: 5249, 1079: 5253}, + {474: 5236, 5237, 509: 5246, 806: 5247}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5243}, + {509: 866, 896: 866}, + {509: 865, 896: 865}, // 2770 - {2: 859, 859, 859, 859, 859, 8: 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 51: 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 462: 859}, - {2: 860, 860, 860, 860, 860, 8: 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 51: 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 462: 860}, - {867, 867, 7: 867, 50: 867, 461: 5237, 463: 867, 469: 867, 867, 867, 867, 477: 867, 867, 482: 867, 867, 867, 867, 488: 867, 867, 867, 493: 867, 502: 867, 867, 867, 867, 867, 867, 867, 867, 511: 867, 803: 5226, 809: 5225}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5238}, - {866, 866, 7: 866, 50: 866, 461: 866, 463: 866, 469: 866, 866, 866, 866, 477: 866, 866, 482: 866, 866, 866, 866, 488: 866, 866, 866, 493: 866, 3252, 498: 3250, 3251, 3249, 3247, 866, 866, 866, 866, 866, 866, 866, 866, 511: 866, 722: 3248, 3246}, + {2: 862, 862, 862, 862, 862, 8: 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 51: 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 465: 862}, + {509: 5242}, + {509: 5241}, + {2: 860, 860, 860, 860, 860, 8: 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 51: 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 465: 860}, + {2: 861, 861, 861, 861, 861, 8: 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 51: 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 465: 861}, // 2775 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5245}, - {506: 863, 893: 5242, 1076: 5241}, - {506: 5243}, - {506: 862}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5244}, + {868, 868, 7: 868, 50: 868, 464: 5244, 466: 868, 472: 868, 868, 868, 868, 480: 868, 868, 485: 868, 868, 868, 868, 491: 868, 868, 868, 496: 868, 505: 868, 868, 868, 868, 868, 868, 868, 868, 514: 868, 806: 5233, 812: 5232}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5245}, + {867, 867, 7: 867, 50: 867, 464: 867, 466: 867, 472: 867, 867, 867, 867, 480: 867, 867, 485: 867, 867, 867, 867, 491: 867, 867, 867, 496: 867, 3259, 501: 3257, 3258, 3256, 3254, 867, 867, 867, 867, 867, 867, 867, 867, 514: 867, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5252}, + {509: 864, 896: 5249, 1079: 5248}, // 2780 - {868, 868, 7: 868, 50: 868, 461: 868, 463: 868, 469: 868, 868, 868, 868, 477: 868, 868, 482: 868, 868, 868, 868, 488: 868, 868, 868, 493: 868, 502: 868, 868, 868, 868, 868, 868, 868, 868, 511: 868, 803: 5226, 809: 5225}, - {869, 869, 7: 869, 50: 869, 461: 869, 463: 869, 469: 869, 869, 869, 869, 477: 869, 869, 482: 869, 869, 869, 869, 488: 869, 869, 869, 493: 869, 502: 869, 869, 869, 869, 869, 869, 869, 869, 511: 869, 803: 5226, 809: 5225}, - {506: 5247}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5248}, - {461: 5249, 470: 5250, 5229, 5230, 503: 5228, 506: 5231, 5227, 5232, 5233, 803: 5226, 809: 5225}, + {509: 5250}, + {509: 863}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5251}, + {869, 869, 7: 869, 50: 869, 464: 869, 466: 869, 472: 869, 869, 869, 869, 480: 869, 869, 485: 869, 869, 869, 869, 491: 869, 869, 869, 496: 869, 505: 869, 869, 869, 869, 869, 869, 869, 869, 514: 869, 806: 5233, 812: 5232}, + {870, 870, 7: 870, 50: 870, 464: 870, 466: 870, 472: 870, 870, 870, 870, 480: 870, 870, 485: 870, 870, 870, 870, 491: 870, 870, 870, 496: 870, 505: 870, 870, 870, 870, 870, 870, 870, 870, 514: 870, 806: 5233, 812: 5232}, // 2785 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5254}, - {462: 5251}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 5252}, - {7: 4048, 50: 5253}, - {870, 870, 7: 870, 50: 870, 461: 870, 463: 870, 469: 870, 870, 870, 870, 477: 870, 870, 482: 870, 870, 870, 870, 488: 870, 870, 870, 493: 870, 502: 870, 870, 870, 870, 870, 870, 870, 870, 511: 870}, + {509: 5254}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5255}, + {464: 5256, 473: 5257, 5236, 5237, 506: 5235, 509: 5238, 5234, 5239, 5240, 806: 5233, 812: 5232}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5261}, + {465: 5258}, // 2790 - {871, 871, 7: 871, 50: 871, 461: 871, 463: 871, 469: 871, 871, 871, 871, 477: 871, 871, 482: 871, 871, 871, 871, 488: 871, 871, 871, 493: 871, 3252, 498: 3250, 3251, 3249, 3247, 871, 871, 871, 871, 871, 871, 871, 871, 511: 871, 722: 3248, 3246}, - {874, 874, 7: 874, 50: 874, 461: 5256, 463: 874, 469: 874, 5257, 5229, 5230, 477: 874, 874, 482: 874, 874, 874, 874, 488: 874, 874, 874, 493: 874, 502: 874, 5228, 874, 874, 5231, 5227, 5232, 5233, 511: 874, 803: 5226, 809: 5225}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5261}, - {462: 5258}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 5259}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 5259}, + {7: 4055, 50: 5260}, + {871, 871, 7: 871, 50: 871, 464: 871, 466: 871, 472: 871, 871, 871, 871, 480: 871, 871, 485: 871, 871, 871, 871, 491: 871, 871, 871, 496: 871, 505: 871, 871, 871, 871, 871, 871, 871, 871, 514: 871}, + {872, 872, 7: 872, 50: 872, 464: 872, 466: 872, 472: 872, 872, 872, 872, 480: 872, 872, 485: 872, 872, 872, 872, 491: 872, 872, 872, 496: 872, 3259, 501: 3257, 3258, 3256, 3254, 872, 872, 872, 872, 872, 872, 872, 872, 514: 872, 725: 3255, 3253}, + {875, 875, 7: 875, 50: 875, 464: 5263, 466: 875, 472: 875, 5264, 5236, 5237, 480: 875, 875, 485: 875, 875, 875, 875, 491: 875, 875, 875, 496: 875, 505: 875, 5235, 875, 875, 5238, 5234, 5239, 5240, 514: 875, 806: 5233, 812: 5232}, // 2795 - {7: 4048, 50: 5260}, - {872, 872, 7: 872, 50: 872, 461: 872, 463: 872, 469: 872, 872, 872, 872, 477: 872, 872, 482: 872, 872, 872, 872, 488: 872, 872, 872, 493: 872, 502: 872, 872, 872, 872, 872, 872, 872, 872, 511: 872}, - {873, 873, 7: 873, 50: 873, 461: 873, 463: 873, 469: 873, 873, 873, 873, 477: 873, 873, 482: 873, 873, 873, 873, 488: 873, 873, 873, 493: 873, 3252, 498: 3250, 3251, 3249, 3247, 873, 873, 873, 873, 873, 873, 873, 873, 511: 873, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 568: 5211, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5218, 837: 5264}, - {898, 898, 7: 898, 50: 898, 461: 898, 463: 898, 469: 898, 898, 898, 898, 477: 898, 898, 482: 898, 898, 898, 898, 488: 898, 898, 898, 493: 898, 502: 898, 898, 898, 898, 898, 898, 898, 898, 511: 898}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5268}, + {465: 5265}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 5266}, + {7: 4055, 50: 5267}, + {873, 873, 7: 873, 50: 873, 464: 873, 466: 873, 472: 873, 873, 873, 873, 480: 873, 873, 485: 873, 873, 873, 873, 491: 873, 873, 873, 496: 873, 505: 873, 873, 873, 873, 873, 873, 873, 873, 514: 873}, // 2800 - {905, 905, 7: 905, 50: 905, 461: 905, 463: 905, 469: 905, 905, 477: 905, 905, 482: 905, 905, 905, 905, 488: 905, 905, 905, 493: 905, 502: 905, 504: 905, 905}, - {895, 895, 2917, 2765, 2801, 2919, 2692, 895, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 895, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 895, 463: 895, 467: 5223, 469: 895, 895, 895, 895, 477: 895, 895, 895, 482: 895, 895, 895, 895, 488: 895, 895, 895, 492: 895, 895, 502: 895, 895, 895, 895, 895, 895, 895, 895, 511: 895, 514: 895, 895, 651: 5222, 2681, 2682, 2680, 661: 895, 900: 5221, 5270}, - {462: 5267}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4633, 2681, 2682, 2680, 775: 5268}, - {7: 4634, 50: 5269}, + {874, 874, 7: 874, 50: 874, 464: 874, 466: 874, 472: 874, 874, 874, 874, 480: 874, 874, 485: 874, 874, 874, 874, 491: 874, 874, 874, 496: 874, 3259, 501: 3257, 3258, 3256, 3254, 874, 874, 874, 874, 874, 874, 874, 874, 514: 874, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 571: 5218, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5225, 840: 5271}, + {899, 899, 7: 899, 50: 899, 464: 899, 466: 899, 472: 899, 899, 899, 899, 480: 899, 899, 485: 899, 899, 899, 899, 491: 899, 899, 899, 496: 899, 505: 899, 899, 899, 899, 899, 899, 899, 899, 514: 899}, + {906, 906, 7: 906, 50: 906, 464: 906, 466: 906, 472: 906, 906, 480: 906, 906, 485: 906, 906, 906, 906, 491: 906, 906, 906, 496: 906, 505: 906, 507: 906, 906}, + {896, 896, 2924, 2770, 2806, 2926, 2697, 896, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 896, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 896, 466: 896, 470: 5230, 472: 896, 896, 896, 896, 480: 896, 896, 896, 485: 896, 896, 896, 896, 491: 896, 896, 896, 495: 896, 896, 505: 896, 896, 896, 896, 896, 896, 896, 896, 514: 896, 517: 896, 896, 655: 5229, 2685, 2686, 2684, 664: 896, 903: 5228, 5277}, // 2805 - {896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 467: 896, 469: 896, 896, 896, 896, 477: 896, 896, 896, 482: 896, 896, 896, 896, 488: 896, 896, 896, 896, 896, 896, 502: 896, 896, 896, 896, 896, 896, 896, 896, 511: 896, 514: 896, 896, 544: 896, 558: 896, 634: 896, 637: 896, 647: 896, 661: 896}, - {1823, 1823, 7: 1823, 50: 1823, 461: 1823, 463: 1823, 469: 1823, 1823, 1823, 1823, 477: 1823, 1823, 1823, 482: 1823, 1823, 1823, 1823, 488: 1823, 1823, 1823, 492: 1823, 1823, 502: 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 511: 1823, 514: 1823, 1823, 661: 5272, 909: 5271, 1153: 5273}, - {1822, 1822, 7: 1822, 50: 1822, 461: 1822, 463: 1822, 469: 1822, 1822, 1822, 1822, 477: 1822, 1822, 1822, 482: 1822, 1822, 1822, 1822, 488: 1822, 1822, 1822, 492: 1822, 1822, 502: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 511: 1822, 514: 1822, 1822}, - {214: 5314}, - {876, 876, 7: 876, 50: 876, 461: 876, 463: 876, 469: 876, 876, 876, 876, 477: 876, 876, 5276, 482: 876, 876, 876, 876, 488: 876, 876, 876, 492: 5277, 876, 502: 876, 876, 876, 876, 876, 876, 876, 876, 511: 876, 514: 5275, 876, 925: 5279, 5278, 1041: 5280, 5274}, + {465: 5274}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4640, 2685, 2686, 2684, 778: 5275}, + {7: 4641, 50: 5276}, + {897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 470: 897, 472: 897, 897, 897, 897, 480: 897, 897, 897, 485: 897, 897, 897, 897, 491: 897, 897, 897, 897, 897, 897, 505: 897, 897, 897, 897, 897, 897, 897, 897, 514: 897, 517: 897, 897, 547: 897, 561: 897, 637: 897, 640: 897, 650: 897, 664: 897}, + {1827, 1827, 7: 1827, 50: 1827, 464: 1827, 466: 1827, 472: 1827, 1827, 1827, 1827, 480: 1827, 1827, 1827, 485: 1827, 1827, 1827, 1827, 491: 1827, 1827, 1827, 495: 1827, 1827, 505: 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 514: 1827, 517: 1827, 1827, 664: 5279, 912: 5278, 1156: 5280}, // 2810 - {991, 991, 7: 991, 50: 991, 461: 991, 463: 991, 469: 991, 991, 991, 991, 477: 991, 991, 482: 991, 991, 991, 991, 488: 991, 991, 991, 493: 991, 502: 991, 991, 991, 991, 991, 991, 991, 991, 511: 991, 515: 5295, 1297: 5296}, - {566: 4307, 637: 4308, 813: 5294}, - {566: 4307, 637: 4308, 813: 5293}, - {566: 4307, 637: 4308, 813: 5292}, - {462: 888, 482: 5282, 1208: 5283}, + {1826, 1826, 7: 1826, 50: 1826, 464: 1826, 466: 1826, 472: 1826, 1826, 1826, 1826, 480: 1826, 1826, 1826, 485: 1826, 1826, 1826, 1826, 491: 1826, 1826, 1826, 495: 1826, 1826, 505: 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 514: 1826, 517: 1826, 1826}, + {214: 5321}, + {877, 877, 7: 877, 50: 877, 464: 877, 466: 877, 472: 877, 877, 877, 877, 480: 877, 877, 5283, 485: 877, 877, 877, 877, 491: 877, 877, 877, 495: 5284, 877, 505: 877, 877, 877, 877, 877, 877, 877, 877, 514: 877, 517: 5282, 877, 928: 5286, 5285, 1044: 5287, 5281}, + {992, 992, 7: 992, 50: 992, 464: 992, 466: 992, 472: 992, 992, 992, 992, 480: 992, 992, 485: 992, 992, 992, 992, 491: 992, 992, 992, 496: 992, 505: 992, 992, 992, 992, 992, 992, 992, 992, 514: 992, 518: 5302, 1300: 5303}, + {569: 4314, 640: 4315, 816: 5301}, // 2815 - {878, 878, 7: 878, 50: 878, 461: 878, 463: 878, 469: 878, 878, 878, 878, 477: 878, 878, 878, 482: 878, 878, 878, 878, 488: 878, 878, 878, 492: 878, 878, 502: 878, 878, 878, 878, 878, 878, 878, 878, 511: 878, 514: 878, 878}, - {875, 875, 7: 875, 50: 875, 461: 875, 463: 875, 469: 875, 875, 875, 875, 477: 875, 875, 5276, 482: 875, 875, 875, 875, 488: 875, 875, 875, 492: 5277, 875, 502: 875, 875, 875, 875, 875, 875, 875, 875, 511: 875, 514: 5275, 875, 925: 5281, 5278}, - {877, 877, 7: 877, 50: 877, 461: 877, 463: 877, 469: 877, 877, 877, 877, 477: 877, 877, 877, 482: 877, 877, 877, 877, 488: 877, 877, 877, 492: 877, 877, 502: 877, 877, 877, 877, 877, 877, 877, 877, 511: 877, 514: 877, 877}, - {490: 5288, 502: 5289, 506: 5287}, - {462: 5284}, + {569: 4314, 640: 4315, 816: 5300}, + {569: 4314, 640: 4315, 816: 5299}, + {465: 889, 485: 5289, 1211: 5290}, + {879, 879, 7: 879, 50: 879, 464: 879, 466: 879, 472: 879, 879, 879, 879, 480: 879, 879, 879, 485: 879, 879, 879, 879, 491: 879, 879, 879, 495: 879, 879, 505: 879, 879, 879, 879, 879, 879, 879, 879, 514: 879, 517: 879, 879}, + {876, 876, 7: 876, 50: 876, 464: 876, 466: 876, 472: 876, 876, 876, 876, 480: 876, 876, 5283, 485: 876, 876, 876, 876, 491: 876, 876, 876, 495: 5284, 876, 505: 876, 876, 876, 876, 876, 876, 876, 876, 514: 876, 517: 5282, 876, 928: 5288, 5285}, // 2820 - {2: 2917, 2765, 2801, 2919, 2692, 883, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 883, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 576: 4891, 651: 4890, 2681, 2682, 2680, 843: 5285}, - {7: 4893, 50: 5286}, - {884, 884, 7: 884, 50: 884, 461: 884, 463: 884, 469: 884, 884, 884, 884, 477: 884, 884, 884, 482: 884, 884, 884, 884, 488: 884, 884, 884, 492: 884, 884, 502: 884, 884, 884, 884, 884, 884, 884, 884, 511: 884, 514: 884, 884}, - {462: 887}, - {647: 5291}, + {878, 878, 7: 878, 50: 878, 464: 878, 466: 878, 472: 878, 878, 878, 878, 480: 878, 878, 878, 485: 878, 878, 878, 878, 491: 878, 878, 878, 495: 878, 878, 505: 878, 878, 878, 878, 878, 878, 878, 878, 514: 878, 517: 878, 878}, + {493: 5295, 505: 5296, 509: 5294}, + {465: 5291}, + {2: 2924, 2770, 2806, 2926, 2697, 884, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 884, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 579: 4898, 655: 4897, 2685, 2686, 2684, 846: 5292}, + {7: 4900, 50: 5293}, // 2825 - {647: 5290}, - {462: 885}, - {462: 886}, - {462: 889, 482: 889}, - {462: 890, 482: 890}, + {885, 885, 7: 885, 50: 885, 464: 885, 466: 885, 472: 885, 885, 885, 885, 480: 885, 885, 885, 485: 885, 885, 885, 885, 491: 885, 885, 885, 495: 885, 885, 505: 885, 885, 885, 885, 885, 885, 885, 885, 514: 885, 517: 885, 885}, + {465: 888}, + {650: 5298}, + {650: 5297}, + {465: 886}, // 2830 - {462: 891, 482: 891}, - {86: 5300, 299: 5299, 379: 5298, 462: 988, 1296: 5297}, - {900, 900, 7: 900, 50: 900, 461: 900, 463: 900, 469: 900, 900, 900, 900, 477: 900, 900, 482: 900, 900, 900, 900, 488: 900, 900, 900, 493: 900, 502: 900, 900, 900, 900, 900, 900, 900, 900, 511: 900}, - {462: 5301}, - {462: 987}, + {465: 887}, + {465: 890, 485: 890}, + {465: 891, 485: 891}, + {465: 892, 485: 892}, + {86: 5307, 299: 5306, 382: 5305, 465: 989, 1299: 5304}, // 2835 - {462: 986}, - {462: 985}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 5303, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5302}, - {50: 984, 359: 5311, 494: 3252, 498: 3250, 3251, 3249, 3247, 513: 5310, 722: 3248, 3246, 1298: 5309}, - {981, 981, 7: 981, 50: 981, 210: 5305, 461: 981, 463: 981, 469: 981, 981, 981, 981, 477: 981, 981, 482: 981, 981, 981, 981, 488: 981, 981, 981, 493: 981, 502: 981, 981, 981, 981, 981, 981, 981, 981, 511: 981, 1094: 5304}, + {901, 901, 7: 901, 50: 901, 464: 901, 466: 901, 472: 901, 901, 901, 901, 480: 901, 901, 485: 901, 901, 901, 901, 491: 901, 901, 901, 496: 901, 505: 901, 901, 901, 901, 901, 901, 901, 901, 514: 901}, + {465: 5308}, + {465: 988}, + {465: 987}, + {465: 986}, // 2840 - {989, 989, 7: 989, 50: 989, 461: 989, 463: 989, 469: 989, 989, 989, 989, 477: 989, 989, 482: 989, 989, 989, 989, 488: 989, 989, 989, 493: 989, 502: 989, 989, 989, 989, 989, 989, 989, 989, 511: 989}, - {462: 5306}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5307}, - {50: 5308, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, - {980, 980, 7: 980, 50: 980, 461: 980, 463: 980, 469: 980, 980, 980, 980, 477: 980, 980, 482: 980, 980, 980, 980, 488: 980, 980, 980, 493: 980, 502: 980, 980, 980, 980, 980, 980, 980, 980, 511: 980}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 5310, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5309}, + {50: 985, 362: 5318, 497: 3259, 501: 3257, 3258, 3256, 3254, 516: 5317, 725: 3255, 3253, 1301: 5316}, + {982, 982, 7: 982, 50: 982, 210: 5312, 464: 982, 466: 982, 472: 982, 982, 982, 982, 480: 982, 982, 485: 982, 982, 982, 982, 491: 982, 982, 982, 496: 982, 505: 982, 982, 982, 982, 982, 982, 982, 982, 514: 982, 1097: 5311}, + {990, 990, 7: 990, 50: 990, 464: 990, 466: 990, 472: 990, 990, 990, 990, 480: 990, 990, 485: 990, 990, 990, 990, 491: 990, 990, 990, 496: 990, 505: 990, 990, 990, 990, 990, 990, 990, 990, 514: 990}, + {465: 5313}, // 2845 - {50: 5312}, - {50: 983}, - {50: 982}, - {981, 981, 7: 981, 50: 981, 210: 5305, 461: 981, 463: 981, 469: 981, 981, 981, 981, 477: 981, 981, 482: 981, 981, 981, 981, 488: 981, 981, 981, 493: 981, 502: 981, 981, 981, 981, 981, 981, 981, 981, 511: 981, 1094: 5313}, - {990, 990, 7: 990, 50: 990, 461: 990, 463: 990, 469: 990, 990, 990, 990, 477: 990, 990, 482: 990, 990, 990, 990, 488: 990, 990, 990, 493: 990, 502: 990, 990, 990, 990, 990, 990, 990, 990, 511: 990}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5314}, + {50: 5315, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {981, 981, 7: 981, 50: 981, 464: 981, 466: 981, 472: 981, 981, 981, 981, 480: 981, 981, 485: 981, 981, 981, 981, 491: 981, 981, 981, 496: 981, 505: 981, 981, 981, 981, 981, 981, 981, 981, 514: 981}, + {50: 5319}, + {50: 984}, // 2850 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5315}, - {1821, 1821, 7: 1821, 50: 1821, 461: 1821, 463: 1821, 469: 1821, 1821, 1821, 1821, 477: 1821, 1821, 1821, 482: 1821, 1821, 1821, 1821, 488: 1821, 1821, 1821, 492: 1821, 1821, 3252, 498: 3250, 3251, 3249, 3247, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 511: 1821, 514: 1821, 1821, 722: 3248, 3246}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5317}, - {471: 5229, 5230, 503: 5228, 506: 5231, 5227, 5232, 5233, 511: 5318, 803: 5226, 809: 5225}, - {903, 903, 7: 903, 50: 903, 461: 903, 463: 903, 469: 903, 903, 477: 903, 903, 482: 903, 903, 903, 903, 488: 903, 903, 903, 493: 903, 502: 903, 504: 903, 903}, + {50: 983}, + {982, 982, 7: 982, 50: 982, 210: 5312, 464: 982, 466: 982, 472: 982, 982, 982, 982, 480: 982, 982, 485: 982, 982, 982, 982, 491: 982, 982, 982, 496: 982, 505: 982, 982, 982, 982, 982, 982, 982, 982, 514: 982, 1097: 5320}, + {991, 991, 7: 991, 50: 991, 464: 991, 466: 991, 472: 991, 991, 991, 991, 480: 991, 991, 485: 991, 991, 991, 991, 491: 991, 991, 991, 496: 991, 505: 991, 991, 991, 991, 991, 991, 991, 991, 514: 991}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5322}, + {1825, 1825, 7: 1825, 50: 1825, 464: 1825, 466: 1825, 472: 1825, 1825, 1825, 1825, 480: 1825, 1825, 1825, 485: 1825, 1825, 1825, 1825, 491: 1825, 1825, 1825, 495: 1825, 1825, 3259, 501: 3257, 3258, 3256, 3254, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 514: 1825, 517: 1825, 1825, 725: 3255, 3253}, // 2855 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 5320, 877: 5321, 910: 5322}, - {486: 5330}, - {2291, 2291, 7: 2291, 470: 2291, 483: 2291, 489: 2291, 2291}, - {239, 239, 7: 5323, 470: 239, 483: 239, 489: 2641, 239, 776: 2642, 5324}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 5320, 877: 5329}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5324}, + {474: 5236, 5237, 506: 5235, 509: 5238, 5234, 5239, 5240, 514: 5325, 806: 5233, 812: 5232}, + {904, 904, 7: 904, 50: 904, 464: 904, 466: 904, 472: 904, 904, 480: 904, 904, 485: 904, 904, 904, 904, 491: 904, 904, 904, 496: 904, 505: 904, 507: 904, 904}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 5327, 880: 5328, 913: 5329}, + {489: 5337}, // 2860 - {1268, 1268, 470: 1268, 483: 1268, 490: 2644, 754: 2645, 797: 5325}, - {858, 858, 470: 858, 483: 5326, 1050: 5327}, - {497: 2655, 567: 2657, 721: 2654, 731: 2656, 867: 5328}, - {243, 243, 470: 243}, - {857, 857, 470: 857}, + {2295, 2295, 7: 2295, 473: 2295, 486: 2295, 492: 2295, 2295}, + {239, 239, 7: 5330, 473: 239, 486: 239, 492: 2645, 239, 779: 2646, 5331}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 5327, 880: 5336}, + {1269, 1269, 473: 1269, 486: 1269, 493: 2648, 757: 2649, 800: 5332}, + {859, 859, 473: 859, 486: 5333, 1053: 5334}, // 2865 - {2290, 2290, 7: 2290, 470: 2290, 483: 2290, 489: 2290, 2290}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5331}, - {2292, 2292, 7: 2292, 470: 2292, 483: 2292, 489: 2292, 2292}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 5320, 877: 5321, 910: 5333}, - {239, 239, 7: 5323, 470: 239, 489: 2641, 776: 2642, 5334}, + {500: 2659, 570: 2661, 724: 2658, 734: 2660, 870: 5335}, + {243, 243, 473: 243}, + {858, 858, 473: 858}, + {2294, 2294, 7: 2294, 473: 2294, 486: 2294, 492: 2294, 2294}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5338}, // 2870 - {242, 242, 470: 242}, - {2: 381, 381, 381, 381, 381, 8: 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 51: 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5337}, - {380, 380}, - {20: 5350, 110: 5340, 125: 5343, 142: 559, 184: 5342, 191: 5353, 198: 5351, 213: 5344, 224: 5348, 244: 5352, 247: 5345, 534: 5349, 558: 5339, 1127: 5347, 1196: 5341, 1225: 5346}, + {2296, 2296, 7: 2296, 473: 2296, 486: 2296, 492: 2296, 2296}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 5327, 880: 5328, 913: 5340}, + {239, 239, 7: 5330, 473: 239, 492: 2645, 779: 2646, 5341}, + {242, 242, 473: 242}, + {2: 381, 381, 381, 381, 381, 8: 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 51: 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381}, // 2875 - {2004, 2004, 2004, 2004, 2004, 2004, 2004, 8: 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 51: 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 463: 2004, 555: 2004}, - {2003, 2003, 2003, 2003, 2003, 2003, 2003, 8: 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 51: 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 463: 2003, 555: 2003}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5344}, + {380, 380}, + {20: 5357, 110: 5347, 123: 5350, 142: 559, 182: 5349, 189: 5360, 198: 5358, 213: 5351, 224: 5355, 244: 5359, 247: 5352, 537: 5356, 561: 5346, 1130: 5354, 1199: 5348, 1228: 5353}, + {2008, 2008, 2008, 2008, 2008, 2008, 2008, 8: 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 51: 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 466: 2008, 558: 2008}, + {2007, 2007, 2007, 2007, 2007, 2007, 2007, 8: 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 51: 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 466: 2007, 558: 2007}, + // 2880 {569, 569}, {566, 566}, {565, 565}, - // 2880 - {206: 5360}, + {206: 5367}, {563, 563}, - {142: 5359}, - {550, 550, 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 463: 550, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 4200, 1126: 5354}, - {560, 560}, // 2885 + {142: 5366}, + {550, 550, 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 466: 550, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 4207, 1129: 5361}, + {560, 560}, {142: 558}, {142: 557}, + // 2890 {142: 556}, {142: 555}, {142: 554}, - // 2890 - {546, 546, 463: 5356, 1325: 5355}, + {546, 546, 466: 5363, 1328: 5362}, {561, 561}, - {659: 5357}, - {485: 5358}, - {545, 545}, // 2895 + {662: 5364}, + {488: 5365}, + {545, 545}, {562, 562}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5361, 2681, 2682, 2680, 937: 5362}, - {568, 568, 7: 568}, - {564, 564, 7: 5363}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5364, 2681, 2682, 2680}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5368, 2685, 2686, 2684, 940: 5369}, // 2900 + {568, 568, 7: 568}, + {564, 564, 7: 5370}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5371, 2685, 2686, 2684}, {567, 567, 7: 567}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 5468, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 5469, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 5470, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5471}, - {558: 5454, 637: 5455}, - {637: 5451}, - {558: 5446, 637: 5445}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 5475, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 5476, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 5477, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5478}, // 2905 - {558: 5443}, - {316: 5437}, - {138: 5434, 211: 5436, 325: 5432, 354: 5433, 899: 5435}, - {173: 5429, 5428}, - {558: 5387}, + {561: 5461, 640: 5462}, + {640: 5458}, + {561: 5453, 640: 5452}, + {561: 5450}, + {317: 5444}, // 2910 - {138: 5381, 156: 5383, 165: 578, 190: 5385, 249: 5384, 1283: 5382}, - {138: 5380}, - {138: 5379}, - {382: 5378}, - {678, 678}, + {138: 5441, 211: 5443, 328: 5439, 357: 5440, 902: 5442}, + {194: 5436, 197: 5435}, + {561: 5394}, + {138: 5388, 156: 5390, 165: 578, 188: 5392, 249: 5391, 1286: 5389}, + {138: 5387}, // 2915 - {683, 683}, + {138: 5386}, + {385: 5385}, + {679, 679}, {684, 684}, {685, 685}, - {165: 5386}, - {165: 577}, // 2920 + {686, 686}, + {165: 5393}, + {165: 577}, {165: 576}, {165: 575}, - {677, 677}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5388}, - {662: 5389, 916: 5390}, // 2925 - {156: 5393, 160: 5392, 558: 2019, 932: 5391}, - {686, 686}, - {558: 5395}, - {110: 2018, 558: 2018}, - {160: 5394}, + {678, 678}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5395}, + {665: 5396, 919: 5397}, + {156: 5400, 160: 5399, 561: 2023, 935: 5398}, + {687, 687}, // 2930 - {110: 2017, 558: 2017}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 5396}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5397}, - {427, 427, 4: 427, 427, 427, 13: 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 461: 427, 5401, 427, 467: 427, 427, 427, 473: 427, 479: 427, 427, 491: 427, 427, 495: 427, 427, 510: 5400, 558: 427, 634: 427, 427, 637: 427, 1220: 5399, 1293: 5398}, - {387, 387, 4: 4139, 4141, 391, 13: 4158, 2121, 4156, 4097, 4160, 4147, 4176, 4140, 4143, 4142, 4145, 4146, 4148, 4155, 391, 4166, 4167, 4153, 4154, 4159, 4161, 4173, 4172, 4178, 4174, 4171, 4164, 4169, 4170, 4163, 4165, 4168, 4157, 461: 387, 387, 387, 467: 387, 4138, 4175, 473: 2121, 479: 387, 387, 491: 387, 4852, 495: 2121, 387, 558: 387, 634: 387, 2121, 637: 4144, 767: 4149, 778: 4151, 798: 4150, 820: 4152, 824: 4162, 828: 4177, 904: 5416, 999: 5415}, + {561: 5402}, + {110: 2022, 561: 2022}, + {160: 5401}, + {110: 2021, 561: 2021}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 5403}, // 2935 - {2124, 2124, 461: 5409, 1066: 5408}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5407}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 510: 5402, 566: 2341, 574: 2341, 576: 2341, 630: 2341, 4486, 637: 2341, 651: 4045, 2681, 2682, 2680, 663: 2341, 2341, 732: 4353, 818: 4695, 833: 4827, 888: 4828, 950: 4829, 1124: 5403}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5405}, - {7: 4831, 50: 5404}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5404}, + {427, 427, 4: 427, 427, 427, 13: 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, 464: 427, 5408, 427, 470: 427, 427, 427, 476: 427, 482: 427, 427, 494: 427, 427, 498: 427, 427, 513: 5407, 561: 427, 637: 427, 427, 640: 427, 1223: 5406, 1296: 5405}, + {387, 387, 4: 4146, 4148, 391, 13: 4165, 2125, 4163, 4104, 4167, 4154, 4183, 4147, 4150, 4149, 4152, 4153, 4155, 4162, 391, 4173, 4174, 4160, 4161, 4166, 4168, 4180, 4179, 4185, 4181, 4178, 4171, 4176, 4177, 4170, 4172, 4175, 4164, 464: 387, 387, 387, 470: 387, 4145, 4182, 476: 2125, 482: 387, 387, 494: 387, 4859, 498: 2125, 387, 561: 387, 637: 387, 2125, 640: 4151, 770: 4156, 781: 4158, 801: 4157, 823: 4159, 827: 4169, 831: 4184, 907: 5423, 1002: 5422}, + {2128, 2128, 464: 5416, 1069: 5415}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5414}, // 2940 - {426, 426, 4: 426, 426, 426, 13: 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 461: 426, 426, 426, 467: 426, 426, 426, 473: 426, 479: 426, 426, 491: 426, 426, 495: 426, 426, 558: 426, 634: 426, 426, 637: 426}, - {50: 5406}, - {2052, 2052, 461: 2052}, - {2053, 2053, 461: 2053}, - {2125, 2125}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 513: 5409, 569: 2345, 577: 2345, 579: 2345, 633: 2345, 4493, 640: 2345, 655: 4052, 2685, 2686, 2684, 666: 2345, 2345, 735: 4360, 821: 4702, 836: 4834, 891: 4835, 953: 4836, 1127: 5410}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5412}, + {7: 4838, 50: 5411}, + {426, 426, 4: 426, 426, 426, 13: 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 464: 426, 426, 426, 470: 426, 426, 426, 476: 426, 482: 426, 426, 494: 426, 426, 498: 426, 426, 561: 426, 637: 426, 426, 640: 426}, + {50: 5413}, // 2945 - {145: 5410}, - {361: 5412, 730: 5411}, - {513: 5414}, - {513: 5413}, - {2122, 2122}, + {2056, 2056, 464: 2056}, + {2057, 2057, 464: 2057}, + {2129, 2129}, + {145: 5417}, + {364: 5419, 733: 5418}, // 2950 - {2123, 2123}, - {2119, 2119, 461: 2119, 2119, 2119, 467: 2119, 479: 2119, 5418, 491: 2119, 496: 2119, 558: 2119, 634: 2119, 1079: 5417}, - {386, 386, 4: 4139, 4141, 391, 4854, 13: 4158, 2121, 4156, 4097, 4160, 4147, 4176, 4140, 4143, 4142, 4145, 4146, 4148, 4155, 391, 4166, 4167, 4153, 4154, 4159, 4161, 4173, 4172, 4178, 4174, 4171, 4164, 4169, 4170, 4163, 4165, 4168, 4157, 461: 386, 386, 386, 467: 386, 4138, 4175, 473: 2121, 479: 386, 386, 491: 386, 4852, 495: 2121, 386, 558: 386, 634: 386, 2121, 637: 4144, 767: 4149, 778: 4151, 798: 4150, 820: 4152, 824: 4162, 828: 4853}, - {2067, 2067, 461: 2067, 2067, 2067, 467: 2067, 479: 5007, 491: 2067, 496: 5008, 558: 2067, 634: 2067, 1019: 5419}, - {647: 4902}, + {516: 5421}, + {516: 5420}, + {2126, 2126}, + {2127, 2127}, + {2123, 2123, 464: 2123, 2123, 2123, 470: 2123, 482: 2123, 5425, 494: 2123, 499: 2123, 561: 2123, 637: 2123, 1082: 5424}, // 2955 - {2064, 2064, 461: 2064, 2064, 2064, 467: 5421, 491: 2064, 558: 2064, 634: 2064, 1154: 5420}, - {2062, 2062, 461: 2062, 2513, 2512, 491: 2511, 558: 2510, 634: 2506, 697: 5426, 739: 5424, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5425, 5423, 3784, 1176: 5422}, - {2063, 2063, 461: 2063, 2063, 2063, 491: 2063, 558: 2063, 634: 2063}, - {2124, 2124, 461: 5409, 1066: 5427}, - {2061, 2061, 461: 2061}, + {386, 386, 4: 4146, 4148, 391, 4861, 13: 4165, 2125, 4163, 4104, 4167, 4154, 4183, 4147, 4150, 4149, 4152, 4153, 4155, 4162, 391, 4173, 4174, 4160, 4161, 4166, 4168, 4180, 4179, 4185, 4181, 4178, 4171, 4176, 4177, 4170, 4172, 4175, 4164, 464: 386, 386, 386, 470: 386, 4145, 4182, 476: 2125, 482: 386, 386, 494: 386, 4859, 498: 2125, 386, 561: 386, 637: 386, 2125, 640: 4151, 770: 4156, 781: 4158, 801: 4157, 823: 4159, 827: 4169, 831: 4860}, + {2071, 2071, 464: 2071, 2071, 2071, 470: 2071, 482: 5014, 494: 2071, 499: 5015, 561: 2071, 637: 2071, 1022: 5426}, + {650: 4909}, + {2068, 2068, 464: 2068, 2068, 2068, 470: 5428, 494: 2068, 561: 2068, 637: 2068, 1157: 5427}, + {2066, 2066, 464: 2066, 2517, 2516, 494: 2515, 561: 2514, 637: 2510, 700: 5433, 742: 5431, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5432, 5430, 3791, 1179: 5429}, // 2960 - {2060, 2060, 461: 2060, 469: 790, 477: 790, 790}, - {2059, 2059, 461: 2059}, - {2058, 2058, 461: 2058, 469: 789, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, - {2126, 2126}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5361, 2681, 2682, 2680, 937: 5431}, + {2067, 2067, 464: 2067, 2067, 2067, 494: 2067, 561: 2067, 637: 2067}, + {2128, 2128, 464: 5416, 1069: 5434}, + {2065, 2065, 464: 2065}, + {2064, 2064, 464: 2064, 472: 791, 480: 791, 791}, + {2063, 2063, 464: 2063}, // 2965 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5361, 2681, 2682, 2680, 937: 5430}, - {688, 688, 7: 5363}, - {689, 689, 7: 5363}, - {691, 691}, - {690, 690}, + {2062, 2062, 464: 2062, 472: 790, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {2130, 2130}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5368, 2685, 2686, 2684, 940: 5438}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5368, 2685, 2686, 2684, 940: 5437}, + {689, 689, 7: 5370}, // 2970 + {690, 690, 7: 5370}, + {692, 692}, + {691, 691}, + {683, 683}, {682, 682}, - {681, 681}, - {680, 680}, - {253: 5438}, - {497: 2655, 721: 3955, 752: 5440, 1062: 5439}, // 2975 - {694, 694, 7: 5441}, - {669, 669, 7: 669}, - {497: 2655, 721: 3955, 752: 5442}, - {668, 668, 7: 668}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 5444}, + {681, 681}, + {253: 5445}, + {500: 2659, 724: 3962, 755: 5447, 1065: 5446}, + {695, 695, 7: 5448}, + {670, 670, 7: 670}, // 2980 - {695, 695, 7: 3828}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5449}, - {485: 5447}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 5448}, - {687, 687, 7: 3828}, + {500: 2659, 724: 3962, 755: 5449}, + {669, 669, 7: 669}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 5451}, + {696, 696, 7: 3835}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5456}, // 2985 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5450, 2681, 2682, 2680}, - {697, 697}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5452}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5453, 2681, 2682, 2680}, + {488: 5454}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 5455}, + {688, 688, 7: 3835}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5457, 2685, 2686, 2684}, {698, 698}, // 2990 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 5467}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5456}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5457, 2681, 2682, 2680}, - {699, 699, 462: 5460, 1037: 5459, 1201: 5458}, - {696, 696, 7: 5465}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5459}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5460, 2685, 2686, 2684}, + {699, 699}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 5474}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5463}, // 2995 - {672, 672, 7: 672}, - {497: 2655, 721: 3955, 752: 5461}, - {7: 5462}, - {497: 2655, 721: 3955, 752: 5463}, - {50: 5464}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5464, 2685, 2686, 2684}, + {700, 700, 465: 5467, 1040: 5466, 1204: 5465}, + {697, 697, 7: 5472}, + {673, 673, 7: 673}, + {500: 2659, 724: 3962, 755: 5468}, // 3000 - {670, 670, 7: 670}, - {462: 5460, 1037: 5466}, + {7: 5469}, + {500: 2659, 724: 3962, 755: 5470}, + {50: 5471}, {671, 671, 7: 671}, - {700, 700, 7: 3828}, - {157: 1604, 365: 5481, 387: 5482, 640: 1604, 1145: 5480}, + {465: 5467, 1040: 5473}, // 3005 - {704, 704, 157: 1446, 252: 5474, 5473, 640: 1446}, - {679, 679, 157: 1427, 640: 1427}, - {157: 5472}, - {701, 701}, - {239, 239, 489: 2641, 497: 2655, 721: 3955, 752: 5478, 776: 2642, 5477}, + {672, 672, 7: 672}, + {701, 701, 7: 3835}, + {157: 1605, 368: 5488, 390: 5489, 643: 1605, 1148: 5487}, + {705, 705, 157: 1447, 252: 5481, 5480, 643: 1447}, + {680, 680, 157: 1428, 643: 1428}, // 3010 - {364: 5475}, - {497: 2655, 721: 3955, 752: 5440, 1062: 5476}, - {693, 693, 7: 5441}, - {703, 703}, - {239, 239, 489: 2641, 776: 2642, 5479}, - // 3015 + {157: 5479}, {702, 702}, - {692, 692}, - {497: 2655, 721: 5488}, - {336: 5484, 497: 2655, 639: 5485, 721: 5483}, - {675, 675}, + {239, 239, 492: 2645, 500: 2659, 724: 3962, 755: 5485, 779: 2646, 5484}, + {367: 5482}, + {500: 2659, 724: 3962, 755: 5447, 1065: 5483}, + // 3015 + {694, 694, 7: 5448}, + {704, 704}, + {239, 239, 492: 2645, 779: 2646, 5486}, + {703, 703}, + {693, 693}, // 3020 - {497: 2655, 721: 5487}, - {497: 2655, 721: 5486}, - {673, 673}, - {674, 674}, + {500: 2659, 724: 5495}, + {339: 5491, 500: 2659, 642: 5492, 724: 5490}, {676, 676}, + {500: 2659, 724: 5494}, + {500: 2659, 724: 5493}, // 3025 - {2: 261, 261, 261, 261, 261, 8: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 51: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 464: 261, 468: 261, 486: 1765, 534: 261, 640: 1765, 648: 1765}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5639, 486: 1763, 640: 1763, 648: 1763, 651: 5638, 2681, 2682, 2680}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 5636, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 486: 1726, 640: 1726, 648: 1726, 651: 5501, 2681, 2682, 2680, 816: 5544}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 486: 1720, 640: 1720, 648: 1720, 651: 5501, 2681, 2682, 2680, 816: 5633}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 468: 5629, 486: 1718, 534: 3665, 640: 1718, 648: 1718, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 5628}, + {674, 674}, + {675, 675}, + {677, 677}, + {2: 261, 261, 261, 261, 261, 8: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 51: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 467: 261, 471: 261, 489: 1768, 537: 261, 643: 1768, 651: 1768}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5646, 489: 1766, 643: 1766, 651: 1766, 655: 5645, 2685, 2686, 2684}, // 3030 - {482: 5618, 486: 5617, 640: 1713, 648: 1713}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 5525, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 468: 5614, 486: 1704, 639: 5612, 1704, 648: 1704, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 5532, 5530, 848: 5528, 1105: 5613, 1268: 5611}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 5609, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 486: 1702, 640: 1702, 648: 1702, 651: 5501, 2681, 2682, 2680, 816: 5541}, - {176: 5594, 486: 1685, 640: 1685, 648: 1685, 659: 5595, 906: 5593, 953: 5592}, - {173: 5548, 5547, 486: 1631, 640: 1631, 648: 1631, 1158: 5549}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 5643, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 489: 1729, 643: 1729, 651: 1729, 655: 5508, 2685, 2686, 2684, 819: 5551}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 489: 1723, 643: 1723, 651: 1723, 655: 5508, 2685, 2686, 2684, 819: 5640}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 471: 5636, 489: 1721, 537: 3672, 643: 1721, 651: 1721, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 5635}, + {485: 5625, 489: 5624, 643: 1716, 651: 1716}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 5532, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 471: 5621, 489: 1707, 642: 5619, 1707, 651: 1707, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 5539, 5537, 851: 5535, 1108: 5620, 1271: 5618}, // 3035 - {782, 782, 7: 5537}, - {167: 5523}, - {486: 751, 640: 5521, 648: 751}, - {486: 5510, 648: 5511, 810: 5519}, - {486: 5510, 648: 5511, 810: 5514}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 5616, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 489: 1705, 643: 1705, 651: 1705, 655: 5508, 2685, 2686, 2684, 819: 5548}, + {174: 5601, 489: 1688, 643: 1688, 651: 1688, 662: 5602, 909: 5600, 956: 5599}, + {319: 5555, 322: 5554, 489: 1632, 643: 1632, 651: 1632, 1161: 5556}, + {783, 783, 7: 5544}, + {167: 5530}, // 3040 - {486: 5510, 648: 5511, 810: 5512}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 468: 5509, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 5508, 1163: 5507}, - {729, 729, 7: 729}, + {489: 752, 643: 5528, 651: 752}, + {489: 5517, 651: 5518, 813: 5526}, + {489: 5517, 651: 5518, 813: 5521}, + {489: 5517, 651: 5518, 813: 5519}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 471: 5516, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 5515, 1166: 5514}, + // 3045 + {730, 730, 7: 730}, + {737, 737, 7: 737}, {736, 736, 7: 736}, {735, 735, 7: 735}, - // 3045 - {734, 734, 7: 734}, - {2: 753, 753, 753, 753, 753, 8: 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 51: 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 464: 753, 753, 753, 468: 753, 471: 753, 753, 474: 753, 753, 753, 481: 753, 491: 753, 495: 753, 753, 753, 534: 753, 555: 753, 753, 753, 559: 753, 753, 753, 753, 753, 753, 753, 567: 753, 753, 753, 753, 572: 753, 753, 575: 753, 577: 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 636: 753}, - {2: 752, 752, 752, 752, 752, 8: 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 51: 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 464: 752, 752, 752, 468: 752, 471: 752, 752, 474: 752, 752, 752, 481: 752, 491: 752, 495: 752, 752, 752, 534: 752, 555: 752, 752, 752, 559: 752, 752, 752, 752, 752, 752, 752, 567: 752, 752, 752, 752, 572: 752, 752, 575: 752, 577: 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, 636: 752}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5513}, - {741, 741, 7: 741, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, + {2: 754, 754, 754, 754, 754, 8: 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 51: 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 467: 754, 754, 754, 471: 754, 474: 754, 754, 477: 754, 754, 754, 484: 754, 494: 754, 498: 754, 754, 754, 537: 754, 558: 754, 754, 754, 562: 754, 754, 754, 754, 754, 754, 754, 570: 754, 754, 754, 754, 575: 754, 754, 578: 754, 580: 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, 639: 754}, // 3050 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 5516, 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 5515, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5517, 826: 5518}, - {755, 755, 2917, 2765, 2801, 2919, 2692, 755, 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3770, 3160, 3241, 3159, 3156}, - {756, 756, 7: 756}, - {754, 754, 7: 754}, - {742, 742, 7: 742}, + {2: 753, 753, 753, 753, 753, 8: 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 51: 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 467: 753, 753, 753, 471: 753, 474: 753, 753, 477: 753, 753, 753, 484: 753, 494: 753, 498: 753, 753, 753, 537: 753, 558: 753, 753, 753, 562: 753, 753, 753, 753, 753, 753, 753, 570: 753, 753, 753, 753, 575: 753, 753, 578: 753, 580: 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 639: 753}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5520}, + {742, 742, 7: 742, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 5523, 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 5522, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5524, 829: 5525}, + {756, 756, 2924, 2770, 2806, 2926, 2697, 756, 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3777, 3167, 3248, 3166, 3163}, // 3055 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 5516, 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 5515, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5517, 826: 5520}, - {746, 746, 7: 746}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5522, 2681, 2682, 2680}, - {486: 750, 648: 750}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 5525, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 639: 5527, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 5532, 5530, 848: 5528, 1105: 5526}, + {757, 757, 7: 757}, + {755, 755, 7: 755}, + {743, 743, 7: 743}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 5523, 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 5522, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5524, 829: 5527}, + {747, 747, 7: 747}, // 3060 - {713, 713, 7: 713, 557: 1792, 638: 713, 655: 1792}, - {772, 772, 557: 1626, 638: 772, 655: 1626}, - {638: 5535}, - {638: 771}, - {770, 770, 7: 5533, 638: 770}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5529, 2685, 2686, 2684}, + {489: 751, 651: 751}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 5532, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 642: 5534, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 5539, 5537, 851: 5535, 1108: 5533}, + {714, 714, 7: 714, 560: 1796, 641: 714, 654: 1796}, + {773, 773, 560: 1627, 641: 773, 654: 1627}, // 3065 - {714, 714, 7: 714, 557: 250, 638: 714, 655: 250}, - {708, 708, 7: 708, 638: 708}, - {707, 707, 7: 707, 638: 707}, - {706, 706, 7: 706, 638: 706}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 5534, 5530}, + {641: 5542}, + {641: 772}, + {771, 771, 7: 5540, 641: 771}, + {715, 715, 7: 715, 560: 250, 641: 715, 654: 250}, + {709, 709, 7: 709, 641: 709}, // 3070 - {705, 705, 7: 705, 638: 705}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5099, 853: 5536}, - {773, 773, 7: 5101}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 5489, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 5492, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 5538, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 5539, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 5493, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 495: 3741, 557: 5504, 577: 5503, 635: 3739, 651: 5501, 2681, 2682, 2680, 759: 5505, 816: 5502, 960: 5540}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 486: 1726, 640: 1726, 648: 1726, 651: 5501, 2681, 2682, 2680, 816: 5544}, + {708, 708, 7: 708, 641: 708}, + {707, 707, 7: 707, 641: 707}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 5541, 5537}, + {706, 706, 7: 706, 641: 706}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5106, 856: 5543}, // 3075 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 486: 1702, 640: 1702, 648: 1702, 651: 5501, 2681, 2682, 2680, 816: 5541}, - {728, 728, 7: 728}, - {486: 5510, 648: 5511, 810: 5542}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 5516, 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 5515, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5517, 826: 5543}, - {744, 744, 7: 744}, + {774, 774, 7: 5108}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 5496, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 5499, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 5545, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 5546, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 5500, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 498: 3748, 560: 5511, 580: 5510, 638: 3746, 655: 5508, 2685, 2686, 2684, 762: 5512, 819: 5509, 963: 5547}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 489: 1729, 643: 1729, 651: 1729, 655: 5508, 2685, 2686, 2684, 819: 5551}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 489: 1705, 643: 1705, 651: 1705, 655: 5508, 2685, 2686, 2684, 819: 5548}, + {729, 729, 7: 729}, // 3080 - {486: 5510, 648: 5511, 810: 5545}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 5516, 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 5515, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5517, 826: 5546}, + {489: 5517, 651: 5518, 813: 5549}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 5523, 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 5522, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5524, 829: 5550}, {745, 745, 7: 745}, - {482: 2161}, - {482: 2160}, + {489: 5517, 651: 5518, 813: 5552}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 5523, 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 5522, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5524, 829: 5553}, // 3085 - {482: 5550}, - {462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 5553, 730: 5551, 739: 5554, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5556, 5555, 5552, 760: 2610, 762: 5558, 5559, 5560, 5557, 831: 5561}, - {2: 828, 828, 828, 828, 828, 8: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 51: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 479: 828, 487: 828, 736: 828, 828, 828, 750: 5199, 852: 5200, 903: 5565}, - {462: 2513, 491: 2511, 558: 2510, 634: 2506, 642: 2611, 697: 3792, 739: 3791, 2507, 2508, 2509, 2518, 2516, 3793, 3794, 760: 5564}, - {177, 177, 469: 789, 177, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, + {746, 746, 7: 746}, + {485: 2165}, + {485: 2164}, + {485: 5557}, + {465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 5560, 733: 5558, 742: 5561, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5563, 5562, 5559, 763: 2614, 765: 5565, 5566, 5567, 5564, 834: 5568}, // 3090 - {179, 179, 469: 790, 179, 477: 790, 790}, - {180, 180, 470: 180}, - {178, 178, 470: 178}, - {176, 176, 470: 176}, - {175, 175, 470: 175}, + {2: 829, 829, 829, 829, 829, 8: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 51: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 482: 829, 490: 829, 739: 829, 829, 829, 753: 5206, 855: 5207, 906: 5572}, + {465: 2517, 494: 2515, 561: 2514, 637: 2510, 645: 2615, 700: 3799, 742: 3798, 2511, 2512, 2513, 2522, 2520, 3800, 3801, 763: 5571}, + {177, 177, 472: 790, 177, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {179, 179, 472: 791, 179, 480: 791, 791}, + {180, 180, 473: 180}, // 3095 - {174, 174, 470: 174}, - {173, 173, 470: 173}, - {169, 169, 470: 5562}, - {462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 5553, 730: 5551, 739: 5554, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5556, 5555, 5552, 760: 2610, 762: 5558, 5559, 5560, 5557, 831: 5563}, - {168, 168}, + {178, 178, 473: 178}, + {176, 176, 473: 176}, + {175, 175, 473: 175}, + {174, 174, 473: 174}, + {173, 173, 473: 173}, // 3100 - {244, 244, 470: 244}, - {2: 1030, 1030, 1030, 1030, 1030, 8: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 51: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 479: 1030, 487: 1030, 736: 5204, 5203, 5202, 823: 5205, 872: 5566}, - {2: 1018, 1018, 1018, 1018, 1018, 8: 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 51: 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 5568, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 479: 1018, 487: 1018, 1088: 5567}, - {2: 1816, 1816, 1816, 1816, 1816, 8: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 51: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 479: 4092, 487: 1816, 841: 5569}, - {2: 1017, 1017, 1017, 1017, 1017, 8: 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 51: 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 479: 1017, 487: 1017}, + {169, 169, 473: 5569}, + {465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 5560, 733: 5558, 742: 5561, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5563, 5562, 5559, 763: 2614, 765: 5565, 5566, 5567, 5564, 834: 5570}, + {168, 168}, + {244, 244, 473: 244}, + {2: 1031, 1031, 1031, 1031, 1031, 8: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 51: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 482: 1031, 490: 1031, 739: 5211, 5210, 5209, 826: 5212, 875: 5573}, // 3105 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 487: 5570, 651: 5572, 2681, 2682, 2680, 902: 5573, 949: 5571}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5585}, - {7: 5581, 487: 5580}, - {7: 1020, 470: 1020, 487: 1020, 640: 5575, 892: 5574}, - {7: 1022, 470: 1022, 487: 1022}, + {2: 1019, 1019, 1019, 1019, 1019, 8: 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 51: 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 5575, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 482: 1019, 490: 1019, 1091: 5574}, + {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 482: 4099, 490: 1820, 844: 5576}, + {2: 1018, 1018, 1018, 1018, 1018, 8: 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 51: 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 482: 1018, 490: 1018}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 490: 5577, 655: 5579, 2685, 2686, 2684, 905: 5580, 952: 5578}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5592}, // 3110 - {7: 1024, 470: 1024, 487: 1024}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 512: 5577, 651: 5576, 2681, 2682, 2680}, - {7: 1020, 470: 1020, 487: 1020, 640: 5579, 892: 5578}, - {7: 1019, 470: 1019, 487: 1019}, - {7: 1023, 470: 1023, 487: 1023}, + {7: 5588, 490: 5587}, + {7: 1021, 473: 1021, 490: 1021, 643: 5582, 895: 5581}, + {7: 1023, 473: 1023, 490: 1023}, + {7: 1025, 473: 1025, 490: 1025}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 515: 5584, 655: 5583, 2685, 2686, 2684}, // 3115 - {512: 5577}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 568: 5211, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5218, 837: 5208, 875: 5583}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5572, 2681, 2682, 2680, 902: 5582}, - {7: 1021, 470: 1021, 487: 1021}, - {239, 239, 7: 5262, 470: 239, 489: 2641, 776: 2642, 5584}, + {7: 1021, 473: 1021, 490: 1021, 643: 5586, 895: 5585}, + {7: 1020, 473: 1020, 490: 1020}, + {7: 1024, 473: 1024, 490: 1024}, + {515: 5584}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 571: 5218, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5225, 840: 5215, 878: 5590}, // 3120 - {2029, 2029, 470: 2029}, - {897, 897, 897, 897, 897, 897, 897, 8: 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 51: 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 467: 897, 470: 897, 479: 897, 5266, 483: 897, 489: 897, 897, 492: 897, 514: 897, 846: 5586}, - {895, 895, 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 467: 5223, 470: 895, 479: 895, 483: 895, 489: 895, 895, 492: 895, 514: 895, 651: 5222, 2681, 2682, 2680, 900: 5221, 5587}, - {876, 876, 470: 876, 479: 5276, 483: 876, 489: 876, 876, 492: 5277, 514: 5275, 925: 5279, 5278, 1041: 5280, 5588}, - {239, 239, 470: 239, 483: 239, 489: 2641, 239, 776: 2642, 5589}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5579, 2685, 2686, 2684, 905: 5589}, + {7: 1022, 473: 1022, 490: 1022}, + {239, 239, 7: 5269, 473: 239, 492: 2645, 779: 2646, 5591}, + {2033, 2033, 473: 2033}, + {898, 898, 898, 898, 898, 898, 898, 8: 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 51: 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 470: 898, 473: 898, 482: 898, 5273, 486: 898, 492: 898, 898, 495: 898, 517: 898, 849: 5593}, // 3125 - {1268, 1268, 470: 1268, 483: 1268, 490: 2644, 754: 2645, 797: 5590}, - {858, 858, 470: 858, 483: 5326, 1050: 5591}, - {2030, 2030, 470: 2030}, - {777, 777, 7: 5607}, - {766, 766, 7: 766}, + {896, 896, 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 470: 5230, 473: 896, 482: 896, 486: 896, 492: 896, 896, 495: 896, 517: 896, 655: 5229, 2685, 2686, 2684, 903: 5228, 5594}, + {877, 877, 473: 877, 482: 5283, 486: 877, 492: 877, 877, 495: 5284, 517: 5282, 928: 5286, 5285, 1044: 5287, 5595}, + {239, 239, 473: 239, 486: 239, 492: 2645, 239, 779: 2646, 5596}, + {1269, 1269, 473: 1269, 486: 1269, 493: 2648, 757: 2649, 800: 5597}, + {859, 859, 473: 859, 486: 5333, 1053: 5598}, // 3130 - {342: 5599}, - {150: 5597, 675: 5596}, - {763, 763, 7: 763}, - {762, 762, 7: 762, 661: 5272, 909: 5598}, - {761, 761, 7: 761}, + {2034, 2034, 473: 2034}, + {778, 778, 7: 5614}, + {767, 767, 7: 767}, + {345: 5606}, + {150: 5604, 678: 5603}, // 3135 - {210: 5601, 371: 5603, 659: 5602, 1215: 5600}, {764, 764, 7: 764}, - {659: 5606}, - {312: 5604, 391: 5605}, - {757, 757, 7: 757}, + {763, 763, 7: 763, 664: 5279, 912: 5605}, + {762, 762, 7: 762}, + {210: 5608, 374: 5610, 662: 5609, 1218: 5607}, + {765, 765, 7: 765}, // 3140 - {759, 759, 7: 759}, + {662: 5613}, + {313: 5611, 394: 5612}, {758, 758, 7: 758}, {760, 760, 7: 760}, - {176: 5594, 659: 5595, 906: 5608}, - {765, 765, 7: 765}, + {759, 759, 7: 759}, // 3145 - {176: 5594, 486: 1685, 640: 1685, 648: 1685, 659: 5595, 906: 5593, 953: 5610}, - {778, 778, 7: 5607}, - {774, 774}, - {771, 771, 477: 5615}, - {768, 768}, + {761, 761, 7: 761}, + {174: 5601, 662: 5602, 909: 5615}, + {766, 766, 7: 766}, + {174: 5601, 489: 1688, 643: 1688, 651: 1688, 662: 5602, 909: 5600, 956: 5617}, + {779, 779, 7: 5614}, // 3150 - {767, 767}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 5532, 5530, 848: 5616}, - {769, 769, 7: 5533}, - {13: 5623, 464: 5622, 1080: 5627}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5619}, + {775, 775}, + {772, 772, 480: 5622}, + {769, 769}, + {768, 768}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 5539, 5537, 851: 5623}, // 3155 - {486: 5620}, - {13: 5623, 464: 5622, 1080: 5621}, - {780, 780}, - {717, 717}, - {462: 5624}, + {770, 770, 7: 5540}, + {13: 5630, 467: 5629, 1083: 5634}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5626}, + {489: 5627}, + {13: 5630, 467: 5629, 1083: 5628}, // 3160 - {464: 5131, 878: 5625}, - {50: 5626}, - {716, 716}, {781, 781}, - {740, 740, 7: 740, 473: 5630}, + {718, 718}, + {465: 5631}, + {467: 5138, 881: 5632}, + {50: 5633}, // 3165 - {737, 737, 7: 737}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 468: 5631, 651: 3397, 2681, 2682, 2680, 726: 5632}, - {739, 739, 7: 739}, + {717, 717}, + {782, 782}, + {741, 741, 7: 741, 476: 5637}, {738, 738, 7: 738}, - {486: 5510, 648: 5511, 810: 5634}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 471: 5638, 655: 3404, 2685, 2686, 2684, 729: 5639}, // 3170 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 5516, 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 5515, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5517, 826: 5635}, - {743, 743, 7: 743}, - {176: 5594, 486: 1685, 640: 1685, 648: 1685, 659: 5595, 906: 5593, 953: 5637}, - {779, 779, 7: 5607}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5641, 2681, 2682, 2680, 887: 5648}, + {740, 740, 7: 740}, + {739, 739, 7: 739}, + {489: 5517, 651: 5518, 813: 5641}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 5523, 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 5522, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5524, 829: 5642}, + {744, 744, 7: 744}, // 3175 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5641, 2681, 2682, 2680, 887: 5640}, - {486: 5510, 648: 5511, 810: 5646}, - {474: 5643, 486: 749, 640: 5642, 648: 749}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5641, 2681, 2682, 2680, 887: 5645}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5641, 2681, 2682, 2680, 887: 5644}, + {174: 5601, 489: 1688, 643: 1688, 651: 1688, 662: 5602, 909: 5600, 956: 5644}, + {780, 780, 7: 5614}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5648, 2685, 2686, 2684, 890: 5655}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5648, 2685, 2686, 2684, 890: 5647}, + {489: 5517, 651: 5518, 813: 5653}, // 3180 - {486: 747, 648: 747}, - {486: 748, 648: 748}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 5516, 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 5515, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5517, 826: 5647}, - {775, 775}, - {486: 5510, 648: 5511, 810: 5649}, + {477: 5650, 489: 750, 643: 5649, 651: 750}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5648, 2685, 2686, 2684, 890: 5652}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5648, 2685, 2686, 2684, 890: 5651}, + {489: 748, 651: 748}, + {489: 749, 651: 749}, // 3185 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 5516, 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 5515, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5517, 826: 5650}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 5523, 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 5522, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5524, 829: 5654}, {776, 776}, - {638: 5660}, - {638: 5653}, - {259: 5654}, + {489: 5517, 651: 5518, 813: 5656}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 5523, 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 5522, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5524, 829: 5657}, + {777, 777}, // 3190 - {486: 5655}, - {464: 5656}, - {482: 5657}, - {258: 5658}, - {464: 5659}, - // 3195 - {783, 783}, + {641: 5667}, + {641: 5660}, {259: 5661}, - {486: 5662}, - {464: 5663}, - {482: 5664}, - // 3200 + {489: 5662}, + {467: 5663}, + // 3195 + {485: 5664}, {258: 5665}, - {464: 5666}, + {467: 5666}, {784, 784}, - {462: 2513, 491: 2511, 558: 2510, 634: 2506, 697: 5678, 739: 5677, 2507, 2508, 2509, 5679}, - {462: 1211, 491: 1211, 558: 1211, 634: 1211, 639: 3452, 733: 3450, 3451, 770: 5671, 773: 5672, 918: 5674, 948: 5676}, + {259: 5668}, + // 3200 + {489: 5669}, + {467: 5670}, + {485: 5671}, + {258: 5672}, + {467: 5673}, // 3205 - {462: 1211, 491: 1211, 558: 1211, 634: 1211, 639: 3452, 733: 3450, 3451, 770: 5671, 773: 5672, 918: 5674, 948: 5675}, - {462: 1211, 491: 1211, 558: 1211, 634: 1211, 639: 3452, 733: 3450, 3451, 770: 5671, 773: 5672, 918: 5674, 948: 5673}, - {2: 1214, 1214, 1214, 1214, 1214, 8: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 51: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 462: 1214, 464: 1214, 1214, 1214, 468: 1214, 471: 1214, 1214, 474: 1214, 1214, 1214, 481: 1214, 491: 1214, 495: 1214, 1214, 1214, 503: 1214, 512: 1214, 534: 1214, 555: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 567: 1214, 1214, 1214, 1214, 572: 1214, 1214, 575: 1214, 577: 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 634: 1214, 636: 1214, 639: 1214, 733: 1214, 1214, 736: 1214, 1214, 1214, 750: 1214, 756: 1214, 1214, 1214}, - {462: 1210, 491: 1210, 558: 1210, 634: 1210}, - {462: 786, 491: 786, 558: 786, 634: 786}, + {785, 785}, + {465: 2517, 494: 2515, 561: 2514, 637: 2510, 700: 5685, 742: 5684, 2511, 2512, 2513, 5686}, + {465: 1212, 494: 1212, 561: 1212, 637: 1212, 642: 3459, 736: 3457, 3458, 773: 5678, 776: 5679, 921: 5681, 951: 5683}, + {465: 1212, 494: 1212, 561: 1212, 637: 1212, 642: 3459, 736: 3457, 3458, 773: 5678, 776: 5679, 921: 5681, 951: 5682}, + {465: 1212, 494: 1212, 561: 1212, 637: 1212, 642: 3459, 736: 3457, 3458, 773: 5678, 776: 5679, 921: 5681, 951: 5680}, // 3210 - {462: 785, 491: 785, 558: 785, 634: 785}, - {462: 787, 491: 787, 558: 787, 634: 787}, - {462: 788, 491: 788, 558: 788, 634: 788}, - {800, 800, 50: 800, 461: 800, 463: 800, 469: 790, 800, 477: 790, 790}, - {799, 799, 50: 799, 461: 799, 463: 799, 469: 789, 799, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 5680, 5681}, + {2: 1215, 1215, 1215, 1215, 1215, 8: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 51: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 465: 1215, 467: 1215, 1215, 1215, 471: 1215, 474: 1215, 1215, 477: 1215, 1215, 1215, 484: 1215, 494: 1215, 498: 1215, 1215, 1215, 506: 1215, 515: 1215, 537: 1215, 558: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 570: 1215, 1215, 1215, 1215, 575: 1215, 1215, 578: 1215, 580: 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 637: 1215, 639: 1215, 642: 1215, 736: 1215, 1215, 739: 1215, 1215, 1215, 753: 1215, 759: 1215, 1215, 1215}, + {465: 1211, 494: 1211, 561: 1211, 637: 1211}, + {465: 787, 494: 787, 561: 787, 637: 787}, + {465: 786, 494: 786, 561: 786, 637: 786}, + {465: 788, 494: 788, 561: 788, 637: 788}, // 3215 - {469: 791, 477: 791, 791}, - {798, 798, 50: 798, 461: 798, 463: 798, 470: 798, 483: 2647, 488: 2648, 755: 5682}, - {797, 797, 50: 797, 461: 797, 463: 797, 470: 797}, - {796, 796, 50: 796, 461: 796, 463: 796, 470: 796}, - {50: 3878, 469: 789, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, + {465: 789, 494: 789, 561: 789, 637: 789}, + {801, 801, 50: 801, 464: 801, 466: 801, 472: 791, 801, 480: 791, 791}, + {800, 800, 50: 800, 464: 800, 466: 800, 472: 790, 800, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 5687, 5688}, + {472: 792, 480: 792, 792}, + {799, 799, 50: 799, 464: 799, 466: 799, 473: 799, 486: 2651, 491: 2652, 758: 5689}, // 3220 - {7: 5698, 462: 972, 491: 972, 558: 972, 634: 972, 642: 972, 730: 972}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5687, 2681, 2682, 2680, 915: 5686, 1143: 5697}, - {7: 969, 462: 969, 491: 969, 558: 969, 634: 969, 642: 969, 730: 969}, - {462: 5688, 467: 2266, 1203: 5689}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5693, 2681, 2682, 2680, 862: 5692}, + {798, 798, 50: 798, 464: 798, 466: 798, 473: 798}, + {797, 797, 50: 797, 464: 797, 466: 797, 473: 797}, + {50: 3885, 472: 790, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {7: 5705, 465: 973, 494: 973, 561: 973, 637: 973, 645: 973, 733: 973}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5694, 2685, 2686, 2684, 918: 5693, 1146: 5704}, // 3225 - {467: 5690}, - {462: 2513, 697: 5691}, - {7: 968, 462: 968, 491: 968, 558: 968, 634: 968, 642: 968, 730: 968}, - {7: 5695, 50: 5694}, - {2264, 2264, 7: 2264, 50: 2264, 463: 2264}, + {7: 970, 465: 970, 494: 970, 561: 970, 637: 970, 645: 970, 733: 970}, + {465: 5695, 470: 2270, 1206: 5696}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5700, 2685, 2686, 2684, 865: 5699}, + {470: 5697}, + {465: 2517, 700: 5698}, // 3230 - {467: 2265}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5696, 2681, 2682, 2680}, - {2263, 2263, 7: 2263, 50: 2263, 463: 2263}, - {7: 5698, 462: 971, 491: 971, 558: 971, 634: 971, 642: 971, 730: 971}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5687, 2681, 2682, 2680, 915: 5699}, + {7: 969, 465: 969, 494: 969, 561: 969, 637: 969, 645: 969, 733: 969}, + {7: 5702, 50: 5701}, + {2268, 2268, 7: 2268, 50: 2268, 466: 2268}, + {470: 2269}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5703, 2685, 2686, 2684}, // 3235 - {7: 970, 462: 970, 491: 970, 558: 970, 634: 970, 642: 970, 730: 970}, - {1268, 1268, 50: 1268, 461: 1268, 463: 1268, 469: 1268, 1268, 477: 1268, 1268, 482: 1268, 1268, 1268, 1268, 488: 1268, 490: 2644, 754: 2645, 797: 5701}, - {844, 844, 50: 844, 461: 844, 463: 844, 469: 844, 844, 477: 844, 844, 482: 844, 2647, 844, 844, 488: 2648, 755: 2649, 814: 5702}, - {815, 815, 50: 815, 461: 815, 463: 815, 469: 815, 815, 477: 815, 815, 482: 3816, 484: 815, 3817, 873: 5703}, - {821, 821, 50: 821, 461: 821, 463: 821, 469: 821, 821, 477: 821, 821, 484: 3842, 874: 5704}, + {2267, 2267, 7: 2267, 50: 2267, 466: 2267}, + {7: 5705, 465: 972, 494: 972, 561: 972, 637: 972, 645: 972, 733: 972}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5694, 2685, 2686, 2684, 918: 5706}, + {7: 971, 465: 971, 494: 971, 561: 971, 637: 971, 645: 971, 733: 971}, + {1269, 1269, 50: 1269, 464: 1269, 466: 1269, 472: 1269, 1269, 480: 1269, 1269, 485: 1269, 1269, 1269, 1269, 491: 1269, 493: 2648, 757: 2649, 800: 5708}, // 3240 - {976, 976, 50: 976, 461: 976, 463: 976, 469: 976, 976, 477: 976, 976}, - {844, 844, 50: 844, 461: 844, 463: 844, 469: 844, 844, 477: 844, 844, 482: 844, 2647, 844, 844, 488: 2648, 755: 2649, 814: 5706}, - {815, 815, 50: 815, 461: 815, 463: 815, 469: 815, 815, 477: 815, 815, 482: 3816, 484: 815, 3817, 873: 5707}, - {821, 821, 50: 821, 461: 821, 463: 821, 469: 821, 821, 477: 821, 821, 484: 3842, 874: 5708}, - {977, 977, 50: 977, 461: 977, 463: 977, 469: 977, 977, 477: 977, 977}, + {845, 845, 50: 845, 464: 845, 466: 845, 472: 845, 845, 480: 845, 845, 485: 845, 2651, 845, 845, 491: 2652, 758: 2653, 817: 5709}, + {816, 816, 50: 816, 464: 816, 466: 816, 472: 816, 816, 480: 816, 816, 485: 3823, 487: 816, 3824, 876: 5710}, + {822, 822, 50: 822, 464: 822, 466: 822, 472: 822, 822, 480: 822, 822, 487: 3849, 877: 5711}, + {977, 977, 50: 977, 464: 977, 466: 977, 472: 977, 977, 480: 977, 977}, + {845, 845, 50: 845, 464: 845, 466: 845, 472: 845, 845, 480: 845, 845, 485: 845, 2651, 845, 845, 491: 2652, 758: 2653, 817: 5713}, // 3245 - {647: 5716}, - {1268, 1268, 50: 1268, 461: 1268, 463: 1268, 469: 1268, 1268, 477: 1268, 1268, 482: 1268, 1268, 1268, 1268, 488: 1268, 490: 2644, 754: 2645, 797: 5712}, - {822, 822, 50: 822, 461: 822, 463: 822, 469: 822, 822, 477: 822, 822, 482: 822, 822, 822, 822, 488: 822, 490: 822, 504: 822, 822}, - {844, 844, 50: 844, 461: 844, 463: 844, 469: 844, 844, 477: 844, 844, 482: 844, 2647, 844, 844, 488: 2648, 755: 2649, 814: 5713}, - {815, 815, 50: 815, 461: 815, 463: 815, 469: 815, 815, 477: 815, 815, 482: 3816, 484: 815, 3817, 873: 5714}, + {816, 816, 50: 816, 464: 816, 466: 816, 472: 816, 816, 480: 816, 816, 485: 3823, 487: 816, 3824, 876: 5714}, + {822, 822, 50: 822, 464: 822, 466: 822, 472: 822, 822, 480: 822, 822, 487: 3849, 877: 5715}, + {978, 978, 50: 978, 464: 978, 466: 978, 472: 978, 978, 480: 978, 978}, + {650: 5723}, + {1269, 1269, 50: 1269, 464: 1269, 466: 1269, 472: 1269, 1269, 480: 1269, 1269, 485: 1269, 1269, 1269, 1269, 491: 1269, 493: 2648, 757: 2649, 800: 5719}, // 3250 - {821, 821, 50: 821, 461: 821, 463: 821, 469: 821, 821, 477: 821, 821, 484: 3842, 874: 5715}, - {978, 978, 50: 978, 461: 978, 463: 978, 469: 978, 978, 477: 978, 978}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 2673, 856: 3149, 885: 5717}, - {1826, 1826, 7: 3318, 50: 1826, 461: 1826, 463: 1826, 469: 1826, 1826, 477: 1826, 1826, 482: 1826, 1826, 1826, 1826, 488: 1826, 490: 1826, 504: 1826, 1826}, - {239, 239, 50: 239, 461: 239, 463: 239, 469: 239, 239, 477: 239, 239, 482: 239, 239, 239, 239, 488: 239, 2641, 239, 502: 239, 776: 2642, 5743}, + {823, 823, 50: 823, 464: 823, 466: 823, 472: 823, 823, 480: 823, 823, 485: 823, 823, 823, 823, 491: 823, 493: 823, 507: 823, 823}, + {845, 845, 50: 845, 464: 845, 466: 845, 472: 845, 845, 480: 845, 845, 485: 845, 2651, 845, 845, 491: 2652, 758: 2653, 817: 5720}, + {816, 816, 50: 816, 464: 816, 466: 816, 472: 816, 816, 480: 816, 816, 485: 3823, 487: 816, 3824, 876: 5721}, + {822, 822, 50: 822, 464: 822, 466: 822, 472: 822, 822, 480: 822, 822, 487: 3849, 877: 5722}, + {979, 979, 50: 979, 464: 979, 466: 979, 472: 979, 979, 480: 979, 979}, // 3255 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 568: 5211, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5218, 837: 5208, 875: 5728, 1182: 5727, 1295: 5726}, - {823, 823, 50: 823, 461: 823, 463: 823, 469: 823, 823, 477: 823, 823, 482: 823, 823, 823, 823, 488: 823, 490: 823, 502: 5709, 924: 5711, 947: 5721}, - {1268, 1268, 50: 1268, 461: 1268, 463: 1268, 469: 1268, 1268, 477: 1268, 1268, 482: 1268, 1268, 1268, 1268, 488: 1268, 490: 2644, 754: 2645, 797: 5722}, - {844, 844, 50: 844, 461: 844, 463: 844, 469: 844, 844, 477: 844, 844, 482: 844, 2647, 844, 844, 488: 2648, 755: 2649, 814: 5723}, - {815, 815, 50: 815, 461: 815, 463: 815, 469: 815, 815, 477: 815, 815, 482: 3816, 484: 815, 3817, 873: 5724}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 2677, 859: 3156, 888: 5724}, + {1830, 1830, 7: 3325, 50: 1830, 464: 1830, 466: 1830, 472: 1830, 1830, 480: 1830, 1830, 485: 1830, 1830, 1830, 1830, 491: 1830, 493: 1830, 507: 1830, 1830}, + {239, 239, 50: 239, 464: 239, 466: 239, 472: 239, 239, 480: 239, 239, 485: 239, 239, 239, 239, 491: 239, 2645, 239, 505: 239, 779: 2646, 5750}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 571: 5218, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5225, 840: 5215, 878: 5735, 1185: 5734, 1298: 5733}, + {824, 824, 50: 824, 464: 824, 466: 824, 472: 824, 824, 480: 824, 824, 485: 824, 824, 824, 824, 491: 824, 493: 824, 505: 5716, 927: 5718, 950: 5728}, // 3260 - {821, 821, 50: 821, 461: 821, 463: 821, 469: 821, 821, 477: 821, 821, 484: 3842, 874: 5725}, - {979, 979, 50: 979, 461: 979, 463: 979, 469: 979, 979, 477: 979, 979}, - {239, 239, 50: 239, 461: 239, 463: 239, 469: 239, 239, 477: 239, 239, 482: 239, 239, 239, 239, 488: 239, 2641, 239, 502: 239, 504: 239, 239, 776: 2642, 5729}, - {967, 967, 50: 967, 461: 967, 463: 967, 469: 967, 967, 477: 967, 967, 482: 967, 967, 967, 967, 488: 967, 967, 967, 502: 967}, - {907, 907, 7: 5262, 50: 907, 461: 907, 463: 907, 469: 907, 907, 477: 907, 907, 482: 907, 907, 907, 907, 488: 907, 907, 907, 502: 907, 504: 907, 907}, + {1269, 1269, 50: 1269, 464: 1269, 466: 1269, 472: 1269, 1269, 480: 1269, 1269, 485: 1269, 1269, 1269, 1269, 491: 1269, 493: 2648, 757: 2649, 800: 5729}, + {845, 845, 50: 845, 464: 845, 466: 845, 472: 845, 845, 480: 845, 845, 485: 845, 2651, 845, 845, 491: 2652, 758: 2653, 817: 5730}, + {816, 816, 50: 816, 464: 816, 466: 816, 472: 816, 816, 480: 816, 816, 485: 3823, 487: 816, 3824, 876: 5731}, + {822, 822, 50: 822, 464: 822, 466: 822, 472: 822, 822, 480: 822, 822, 487: 3849, 877: 5732}, + {980, 980, 50: 980, 464: 980, 466: 980, 472: 980, 980, 480: 980, 980}, // 3265 - {823, 823, 50: 823, 461: 823, 463: 823, 469: 823, 823, 477: 823, 823, 482: 823, 823, 823, 823, 488: 823, 490: 823, 502: 5709, 504: 823, 823, 924: 5711, 947: 5730}, - {1825, 1825, 50: 1825, 461: 1825, 463: 1825, 469: 1825, 1825, 477: 1825, 1825, 482: 1825, 1825, 1825, 1825, 488: 1825, 490: 1825, 504: 1825, 5731, 1202: 5732}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5742}, - {966, 966, 50: 966, 461: 966, 463: 966, 469: 966, 966, 477: 966, 966, 482: 966, 966, 966, 966, 488: 966, 490: 966, 504: 5734, 1318: 5733}, - {992, 992, 50: 992, 461: 992, 463: 992, 469: 992, 992, 477: 992, 992, 482: 992, 992, 992, 992, 488: 992, 490: 992}, + {239, 239, 50: 239, 464: 239, 466: 239, 472: 239, 239, 480: 239, 239, 485: 239, 239, 239, 239, 491: 239, 2645, 239, 505: 239, 507: 239, 239, 779: 2646, 5736}, + {968, 968, 50: 968, 464: 968, 466: 968, 472: 968, 968, 480: 968, 968, 485: 968, 968, 968, 968, 491: 968, 968, 968, 505: 968}, + {908, 908, 7: 5269, 50: 908, 464: 908, 466: 908, 472: 908, 908, 480: 908, 908, 485: 908, 908, 908, 908, 491: 908, 908, 908, 505: 908, 507: 908, 908}, + {824, 824, 50: 824, 464: 824, 466: 824, 472: 824, 824, 480: 824, 824, 485: 824, 824, 824, 824, 491: 824, 493: 824, 505: 5716, 507: 824, 824, 927: 5718, 950: 5737}, + {1829, 1829, 50: 1829, 464: 1829, 466: 1829, 472: 1829, 1829, 480: 1829, 1829, 485: 1829, 1829, 1829, 1829, 491: 1829, 493: 1829, 507: 1829, 5738, 1205: 5739}, // 3270 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3306, 2681, 2682, 2680, 908: 5737, 1139: 5736, 1319: 5735}, - {965, 965, 7: 5740, 50: 965, 461: 965, 463: 965, 469: 965, 965, 477: 965, 965, 482: 965, 965, 965, 965, 488: 965, 490: 965}, - {964, 964, 7: 964, 50: 964, 461: 964, 463: 964, 469: 964, 964, 477: 964, 964, 482: 964, 964, 964, 964, 488: 964, 490: 964}, - {467: 5738}, - {462: 3307, 1141: 5739}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5749}, + {967, 967, 50: 967, 464: 967, 466: 967, 472: 967, 967, 480: 967, 967, 485: 967, 967, 967, 967, 491: 967, 493: 967, 507: 5741, 1321: 5740}, + {993, 993, 50: 993, 464: 993, 466: 993, 472: 993, 993, 480: 993, 993, 485: 993, 993, 993, 993, 491: 993, 493: 993}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3313, 2685, 2686, 2684, 911: 5744, 1142: 5743, 1322: 5742}, + {966, 966, 7: 5747, 50: 966, 464: 966, 466: 966, 472: 966, 966, 480: 966, 966, 485: 966, 966, 966, 966, 491: 966, 493: 966}, // 3275 - {962, 962, 7: 962, 50: 962, 461: 962, 463: 962, 469: 962, 962, 477: 962, 962, 482: 962, 962, 962, 962, 488: 962, 490: 962}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3306, 2681, 2682, 2680, 908: 5737, 1139: 5741}, - {963, 963, 7: 963, 50: 963, 461: 963, 463: 963, 469: 963, 963, 477: 963, 963, 482: 963, 963, 963, 963, 488: 963, 490: 963}, - {1824, 1824, 50: 1824, 461: 1824, 463: 1824, 469: 1824, 1824, 477: 1824, 1824, 482: 1824, 1824, 1824, 1824, 488: 1824, 490: 1824, 494: 3252, 498: 3250, 3251, 3249, 3247, 504: 1824, 722: 3248, 3246}, - {993, 993, 50: 993, 461: 993, 463: 993, 469: 993, 993, 477: 993, 993, 482: 993, 993, 993, 993, 488: 993, 490: 993, 502: 993}, + {965, 965, 7: 965, 50: 965, 464: 965, 466: 965, 472: 965, 965, 480: 965, 965, 485: 965, 965, 965, 965, 491: 965, 493: 965}, + {470: 5745}, + {465: 3314, 1144: 5746}, + {963, 963, 7: 963, 50: 963, 464: 963, 466: 963, 472: 963, 963, 480: 963, 963, 485: 963, 963, 963, 963, 491: 963, 493: 963}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3313, 2685, 2686, 2684, 911: 5744, 1142: 5748}, // 3280 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 512: 5760, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 5761, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5759, 1027: 5762, 1191: 5763, 1263: 5764}, - {2: 842, 842, 842, 842, 842, 8: 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 51: 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 462: 842, 464: 842, 842, 842, 468: 842, 471: 842, 842, 474: 842, 842, 842, 481: 842, 491: 842, 495: 842, 842, 842, 503: 842, 512: 842, 534: 842, 555: 842, 842, 842, 559: 842, 842, 842, 842, 842, 842, 842, 567: 842, 842, 842, 842, 572: 842, 842, 575: 842, 577: 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 636: 842, 639: 842, 733: 842, 842, 736: 842, 842, 842, 750: 842, 756: 842, 842, 842}, - {2: 841, 841, 841, 841, 841, 8: 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 51: 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 462: 841, 464: 841, 841, 841, 468: 841, 471: 841, 841, 474: 841, 841, 841, 481: 841, 491: 841, 495: 841, 841, 841, 503: 841, 512: 841, 534: 841, 555: 841, 841, 841, 559: 841, 841, 841, 841, 841, 841, 841, 567: 841, 841, 841, 841, 572: 841, 841, 575: 841, 577: 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 636: 841, 639: 841, 733: 841, 841, 736: 841, 841, 841, 750: 841, 756: 841, 841, 841}, - {2: 840, 840, 840, 840, 840, 8: 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 51: 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 462: 840, 464: 840, 840, 840, 468: 840, 471: 840, 840, 474: 840, 840, 840, 481: 840, 491: 840, 495: 840, 840, 840, 503: 840, 512: 840, 534: 840, 555: 840, 840, 840, 559: 840, 840, 840, 840, 840, 840, 840, 567: 840, 840, 840, 840, 572: 840, 840, 575: 840, 577: 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 636: 840, 639: 840, 733: 840, 840, 736: 840, 840, 840, 750: 840, 756: 840, 840, 840}, - {2: 839, 839, 839, 839, 839, 8: 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 51: 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 462: 839, 464: 839, 839, 839, 468: 839, 471: 839, 839, 474: 839, 839, 839, 481: 839, 491: 839, 495: 839, 839, 839, 503: 839, 512: 839, 534: 839, 555: 839, 839, 839, 559: 839, 839, 839, 839, 839, 839, 839, 567: 839, 839, 839, 839, 572: 839, 839, 575: 839, 577: 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 636: 839, 639: 839, 733: 839, 839, 736: 839, 839, 839, 750: 839, 756: 839, 839, 839}, + {964, 964, 7: 964, 50: 964, 464: 964, 466: 964, 472: 964, 964, 480: 964, 964, 485: 964, 964, 964, 964, 491: 964, 493: 964}, + {1828, 1828, 50: 1828, 464: 1828, 466: 1828, 472: 1828, 1828, 480: 1828, 1828, 485: 1828, 1828, 1828, 1828, 491: 1828, 493: 1828, 497: 3259, 501: 3257, 3258, 3256, 3254, 507: 1828, 725: 3255, 3253}, + {994, 994, 50: 994, 464: 994, 466: 994, 472: 994, 994, 480: 994, 994, 485: 994, 994, 994, 994, 491: 994, 493: 994, 505: 994}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 515: 5767, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 5768, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5766, 1030: 5769, 1194: 5770, 1266: 5771}, + {2: 843, 843, 843, 843, 843, 8: 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 51: 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 465: 843, 467: 843, 843, 843, 471: 843, 474: 843, 843, 477: 843, 843, 843, 484: 843, 494: 843, 498: 843, 843, 843, 506: 843, 515: 843, 537: 843, 558: 843, 843, 843, 562: 843, 843, 843, 843, 843, 843, 843, 570: 843, 843, 843, 843, 575: 843, 843, 578: 843, 580: 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 639: 843, 642: 843, 736: 843, 843, 739: 843, 843, 843, 753: 843, 759: 843, 843, 843}, // 3285 - {2: 838, 838, 838, 838, 838, 8: 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 51: 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 462: 838, 464: 838, 838, 838, 468: 838, 471: 838, 838, 474: 838, 838, 838, 481: 838, 491: 838, 495: 838, 838, 838, 503: 838, 512: 838, 534: 838, 555: 838, 838, 838, 559: 838, 838, 838, 838, 838, 838, 838, 567: 838, 838, 838, 838, 572: 838, 838, 575: 838, 577: 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 636: 838, 639: 838, 733: 838, 838, 736: 838, 838, 838, 750: 838, 756: 838, 838, 838}, - {2: 837, 837, 837, 837, 837, 8: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 51: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 462: 837, 464: 837, 837, 837, 468: 837, 471: 837, 837, 474: 837, 837, 837, 481: 837, 491: 837, 495: 837, 837, 837, 503: 837, 512: 837, 534: 837, 555: 837, 837, 837, 559: 837, 837, 837, 837, 837, 837, 837, 567: 837, 837, 837, 837, 572: 837, 837, 575: 837, 577: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 636: 837, 639: 837, 733: 837, 837, 736: 837, 837, 837, 750: 837, 756: 837, 837, 837}, - {2: 836, 836, 836, 836, 836, 8: 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 51: 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 462: 836, 464: 836, 836, 836, 468: 836, 471: 836, 836, 474: 836, 836, 836, 481: 836, 491: 836, 495: 836, 836, 836, 503: 836, 512: 836, 534: 836, 555: 836, 836, 836, 559: 836, 836, 836, 836, 836, 836, 836, 567: 836, 836, 836, 836, 572: 836, 836, 575: 836, 577: 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 636: 836, 639: 836, 733: 836, 836, 736: 836, 836, 836, 750: 836, 756: 836, 836, 836}, - {2: 835, 835, 835, 835, 835, 8: 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 51: 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 462: 835, 464: 835, 835, 835, 468: 835, 471: 835, 835, 474: 835, 835, 835, 481: 835, 491: 835, 495: 835, 835, 835, 503: 835, 512: 835, 534: 835, 555: 835, 835, 835, 559: 835, 835, 835, 835, 835, 835, 835, 567: 835, 835, 835, 835, 572: 835, 835, 575: 835, 577: 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 636: 835, 639: 835, 733: 835, 835, 736: 835, 835, 835, 750: 835, 756: 835, 835, 835}, - {2: 834, 834, 834, 834, 834, 8: 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 51: 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 462: 834, 464: 834, 834, 834, 468: 834, 471: 834, 834, 474: 834, 834, 834, 481: 834, 491: 834, 495: 834, 834, 834, 503: 834, 512: 834, 534: 834, 555: 834, 834, 834, 559: 834, 834, 834, 834, 834, 834, 834, 567: 834, 834, 834, 834, 572: 834, 834, 575: 834, 577: 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 636: 834, 639: 834, 733: 834, 834, 736: 834, 834, 834, 750: 834, 756: 834, 834, 834}, + {2: 842, 842, 842, 842, 842, 8: 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 51: 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 465: 842, 467: 842, 842, 842, 471: 842, 474: 842, 842, 477: 842, 842, 842, 484: 842, 494: 842, 498: 842, 842, 842, 506: 842, 515: 842, 537: 842, 558: 842, 842, 842, 562: 842, 842, 842, 842, 842, 842, 842, 570: 842, 842, 842, 842, 575: 842, 842, 578: 842, 580: 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 639: 842, 642: 842, 736: 842, 842, 739: 842, 842, 842, 753: 842, 759: 842, 842, 842}, + {2: 841, 841, 841, 841, 841, 8: 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 51: 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 465: 841, 467: 841, 841, 841, 471: 841, 474: 841, 841, 477: 841, 841, 841, 484: 841, 494: 841, 498: 841, 841, 841, 506: 841, 515: 841, 537: 841, 558: 841, 841, 841, 562: 841, 841, 841, 841, 841, 841, 841, 570: 841, 841, 841, 841, 575: 841, 841, 578: 841, 580: 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 639: 841, 642: 841, 736: 841, 841, 739: 841, 841, 841, 753: 841, 759: 841, 841, 841}, + {2: 840, 840, 840, 840, 840, 8: 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 51: 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 465: 840, 467: 840, 840, 840, 471: 840, 474: 840, 840, 477: 840, 840, 840, 484: 840, 494: 840, 498: 840, 840, 840, 506: 840, 515: 840, 537: 840, 558: 840, 840, 840, 562: 840, 840, 840, 840, 840, 840, 840, 570: 840, 840, 840, 840, 575: 840, 840, 578: 840, 580: 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 639: 840, 642: 840, 736: 840, 840, 739: 840, 840, 840, 753: 840, 759: 840, 840, 840}, + {2: 839, 839, 839, 839, 839, 8: 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 51: 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 465: 839, 467: 839, 839, 839, 471: 839, 474: 839, 839, 477: 839, 839, 839, 484: 839, 494: 839, 498: 839, 839, 839, 506: 839, 515: 839, 537: 839, 558: 839, 839, 839, 562: 839, 839, 839, 839, 839, 839, 839, 570: 839, 839, 839, 839, 575: 839, 839, 578: 839, 580: 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 639: 839, 642: 839, 736: 839, 839, 739: 839, 839, 839, 753: 839, 759: 839, 839, 839}, + {2: 838, 838, 838, 838, 838, 8: 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 51: 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 465: 838, 467: 838, 838, 838, 471: 838, 474: 838, 838, 477: 838, 838, 838, 484: 838, 494: 838, 498: 838, 838, 838, 506: 838, 515: 838, 537: 838, 558: 838, 838, 838, 562: 838, 838, 838, 838, 838, 838, 838, 570: 838, 838, 838, 838, 575: 838, 838, 578: 838, 580: 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 639: 838, 642: 838, 736: 838, 838, 739: 838, 838, 838, 753: 838, 759: 838, 838, 838}, // 3290 - {2: 832, 832, 832, 832, 832, 8: 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 51: 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 5750, 5756, 5757, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 462: 832, 464: 832, 832, 832, 468: 832, 471: 832, 832, 474: 832, 832, 832, 481: 832, 491: 832, 495: 832, 832, 832, 503: 5753, 512: 832, 534: 832, 555: 832, 832, 832, 559: 832, 832, 832, 832, 832, 832, 832, 567: 832, 832, 832, 832, 572: 832, 832, 575: 832, 577: 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 636: 832, 639: 3452, 733: 3450, 3451, 736: 5204, 5203, 5202, 750: 5199, 756: 5749, 5752, 5748, 770: 5671, 773: 5746, 823: 5747, 852: 5745, 1102: 5758, 5751}, - {2: 830, 830, 830, 830, 830, 8: 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 51: 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 462: 830, 464: 830, 830, 830, 468: 830, 471: 830, 830, 474: 830, 830, 830, 481: 830, 491: 830, 495: 830, 830, 830, 503: 830, 512: 830, 534: 830, 555: 830, 830, 830, 559: 830, 830, 830, 830, 830, 830, 830, 567: 830, 830, 830, 830, 572: 830, 830, 575: 830, 577: 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 636: 830, 639: 830, 733: 830, 830, 736: 830, 830, 830, 750: 830, 756: 830, 830, 830}, - {2: 826, 826, 826, 826, 826, 8: 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 51: 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 462: 826, 464: 826, 826, 826, 468: 826, 471: 826, 826, 474: 826, 826, 826, 481: 826, 491: 826, 495: 826, 826, 826, 503: 826, 512: 826, 534: 826, 555: 826, 826, 826, 559: 826, 826, 826, 826, 826, 826, 826, 567: 826, 826, 826, 826, 572: 826, 826, 575: 826, 577: 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 636: 826, 639: 826, 733: 826, 826, 736: 826, 826, 826, 750: 826, 756: 826, 826, 826}, - {2: 825, 825, 825, 825, 825, 8: 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 51: 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 462: 825, 464: 825, 825, 825, 468: 825, 471: 825, 825, 474: 825, 825, 825, 481: 825, 491: 825, 495: 825, 825, 825, 503: 825, 512: 825, 534: 825, 555: 825, 825, 825, 559: 825, 825, 825, 825, 825, 825, 825, 567: 825, 825, 825, 825, 572: 825, 825, 575: 825, 577: 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 636: 825, 639: 825, 733: 825, 825, 736: 825, 825, 825, 750: 825, 756: 825, 825, 825}, - {2: 831, 831, 831, 831, 831, 8: 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 51: 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 462: 831, 464: 831, 831, 831, 468: 831, 471: 831, 831, 474: 831, 831, 831, 481: 831, 491: 831, 495: 831, 831, 831, 503: 831, 512: 831, 534: 831, 555: 831, 831, 831, 559: 831, 831, 831, 831, 831, 831, 831, 567: 831, 831, 831, 831, 572: 831, 831, 575: 831, 577: 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 636: 831, 639: 831, 733: 831, 831, 736: 831, 831, 831, 750: 831, 756: 831, 831, 831}, + {2: 837, 837, 837, 837, 837, 8: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 51: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 465: 837, 467: 837, 837, 837, 471: 837, 474: 837, 837, 477: 837, 837, 837, 484: 837, 494: 837, 498: 837, 837, 837, 506: 837, 515: 837, 537: 837, 558: 837, 837, 837, 562: 837, 837, 837, 837, 837, 837, 837, 570: 837, 837, 837, 837, 575: 837, 837, 578: 837, 580: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 639: 837, 642: 837, 736: 837, 837, 739: 837, 837, 837, 753: 837, 759: 837, 837, 837}, + {2: 836, 836, 836, 836, 836, 8: 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 51: 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 465: 836, 467: 836, 836, 836, 471: 836, 474: 836, 836, 477: 836, 836, 836, 484: 836, 494: 836, 498: 836, 836, 836, 506: 836, 515: 836, 537: 836, 558: 836, 836, 836, 562: 836, 836, 836, 836, 836, 836, 836, 570: 836, 836, 836, 836, 575: 836, 836, 578: 836, 580: 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 639: 836, 642: 836, 736: 836, 836, 739: 836, 836, 836, 753: 836, 759: 836, 836, 836}, + {2: 835, 835, 835, 835, 835, 8: 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 51: 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 465: 835, 467: 835, 835, 835, 471: 835, 474: 835, 835, 477: 835, 835, 835, 484: 835, 494: 835, 498: 835, 835, 835, 506: 835, 515: 835, 537: 835, 558: 835, 835, 835, 562: 835, 835, 835, 835, 835, 835, 835, 570: 835, 835, 835, 835, 575: 835, 835, 578: 835, 580: 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 639: 835, 642: 835, 736: 835, 835, 739: 835, 835, 835, 753: 835, 759: 835, 835, 835}, + {2: 833, 833, 833, 833, 833, 8: 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 51: 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 5757, 5763, 5764, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 465: 833, 467: 833, 833, 833, 471: 833, 474: 833, 833, 477: 833, 833, 833, 484: 833, 494: 833, 498: 833, 833, 833, 506: 5760, 515: 833, 537: 833, 558: 833, 833, 833, 562: 833, 833, 833, 833, 833, 833, 833, 570: 833, 833, 833, 833, 575: 833, 833, 578: 833, 580: 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 639: 833, 642: 3459, 736: 3457, 3458, 739: 5211, 5210, 5209, 753: 5206, 759: 5756, 5759, 5755, 773: 5678, 776: 5753, 826: 5754, 855: 5752, 1105: 5765, 5758}, + {2: 831, 831, 831, 831, 831, 8: 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 51: 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 465: 831, 467: 831, 831, 831, 471: 831, 474: 831, 831, 477: 831, 831, 831, 484: 831, 494: 831, 498: 831, 831, 831, 506: 831, 515: 831, 537: 831, 558: 831, 831, 831, 562: 831, 831, 831, 831, 831, 831, 831, 570: 831, 831, 831, 831, 575: 831, 831, 578: 831, 580: 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 639: 831, 642: 831, 736: 831, 831, 739: 831, 831, 831, 753: 831, 759: 831, 831, 831}, // 3295 - {1834, 1834, 2917, 2765, 2801, 2919, 2692, 1834, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1834, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 1834, 463: 1834, 5776, 467: 5775, 469: 1834, 1834, 477: 1834, 1834, 482: 1834, 1834, 1834, 1834, 487: 1834, 1834, 1834, 1834, 494: 3252, 498: 3250, 3251, 3249, 3247, 1834, 651: 5774, 2681, 2682, 2680, 722: 3248, 3246, 1188: 5773, 5772}, - {1838, 1838, 7: 1838, 50: 1838, 461: 1838, 463: 1838, 469: 1838, 1838, 477: 1838, 1838, 482: 1838, 1838, 1838, 1838, 487: 1838, 1838, 1838, 1838, 502: 1838}, - {1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 463: 1251, 1251, 1251, 1251, 1251, 469: 1251, 1251, 473: 1251, 1251, 1251, 1251, 1251, 1251, 482: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 494: 1251, 498: 1251, 1251, 1251, 1251, 1251, 510: 1251, 512: 1251, 532: 1251, 536: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 571: 1251, 640: 5767, 643: 1251, 1251}, - {1828, 1828, 7: 1828, 50: 1828, 461: 1828, 463: 1828, 469: 1828, 1828, 477: 1828, 1828, 482: 1828, 1828, 1828, 1828, 487: 1828, 1828, 1828, 1828, 502: 1828}, - {824, 824, 7: 5765, 50: 824, 461: 824, 463: 824, 469: 824, 824, 477: 824, 824, 482: 824, 824, 824, 824, 487: 824, 824, 824, 824, 502: 824}, + {2: 827, 827, 827, 827, 827, 8: 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 51: 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 465: 827, 467: 827, 827, 827, 471: 827, 474: 827, 827, 477: 827, 827, 827, 484: 827, 494: 827, 498: 827, 827, 827, 506: 827, 515: 827, 537: 827, 558: 827, 827, 827, 562: 827, 827, 827, 827, 827, 827, 827, 570: 827, 827, 827, 827, 575: 827, 827, 578: 827, 580: 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 639: 827, 642: 827, 736: 827, 827, 739: 827, 827, 827, 753: 827, 759: 827, 827, 827}, + {2: 826, 826, 826, 826, 826, 8: 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 51: 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 465: 826, 467: 826, 826, 826, 471: 826, 474: 826, 826, 477: 826, 826, 826, 484: 826, 494: 826, 498: 826, 826, 826, 506: 826, 515: 826, 537: 826, 558: 826, 826, 826, 562: 826, 826, 826, 826, 826, 826, 826, 570: 826, 826, 826, 826, 575: 826, 826, 578: 826, 580: 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 639: 826, 642: 826, 736: 826, 826, 739: 826, 826, 826, 753: 826, 759: 826, 826, 826}, + {2: 832, 832, 832, 832, 832, 8: 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 51: 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 465: 832, 467: 832, 832, 832, 471: 832, 474: 832, 832, 477: 832, 832, 832, 484: 832, 494: 832, 498: 832, 832, 832, 506: 832, 515: 832, 537: 832, 558: 832, 832, 832, 562: 832, 832, 832, 832, 832, 832, 832, 570: 832, 832, 832, 832, 575: 832, 832, 578: 832, 580: 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 639: 832, 642: 832, 736: 832, 832, 739: 832, 832, 832, 753: 832, 759: 832, 832, 832}, + {1838, 1838, 2924, 2770, 2806, 2926, 2697, 1838, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1838, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 1838, 466: 1838, 5783, 470: 5782, 472: 1838, 1838, 480: 1838, 1838, 485: 1838, 1838, 1838, 1838, 490: 1838, 1838, 1838, 1838, 497: 3259, 501: 3257, 3258, 3256, 3254, 1838, 655: 5781, 2685, 2686, 2684, 725: 3255, 3253, 1191: 5780, 5779}, + {1842, 1842, 7: 1842, 50: 1842, 464: 1842, 466: 1842, 472: 1842, 1842, 480: 1842, 1842, 485: 1842, 1842, 1842, 1842, 490: 1842, 1842, 1842, 1842, 505: 1842}, // 3300 - {994, 994, 50: 994, 461: 994, 463: 994, 469: 994, 994, 477: 994, 994, 482: 994, 994, 994, 994, 487: 994, 994, 994, 994, 502: 994}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 512: 5760, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 5761, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 5759, 1027: 5766}, - {1827, 1827, 7: 1827, 50: 1827, 461: 1827, 463: 1827, 469: 1827, 1827, 477: 1827, 1827, 482: 1827, 1827, 1827, 1827, 487: 1827, 1827, 1827, 1827, 502: 1827}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 512: 5768, 651: 5769, 2681, 2682, 2680}, - {1837, 1837, 7: 1837, 50: 1837, 461: 1837, 463: 1837, 469: 1837, 1837, 477: 1837, 1837, 482: 1837, 1837, 1837, 1837, 487: 1837, 1837, 1837, 1837, 502: 1837}, + {1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 466: 1252, 1252, 1252, 1252, 1252, 472: 1252, 1252, 476: 1252, 1252, 1252, 1252, 1252, 1252, 485: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 497: 1252, 501: 1252, 1252, 1252, 1252, 1252, 513: 1252, 515: 1252, 535: 1252, 539: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 574: 1252, 643: 5774, 646: 1252, 1252}, + {1832, 1832, 7: 1832, 50: 1832, 464: 1832, 466: 1832, 472: 1832, 1832, 480: 1832, 1832, 485: 1832, 1832, 1832, 1832, 490: 1832, 1832, 1832, 1832, 505: 1832}, + {825, 825, 7: 5772, 50: 825, 464: 825, 466: 825, 472: 825, 825, 480: 825, 825, 485: 825, 825, 825, 825, 490: 825, 825, 825, 825, 505: 825}, + {995, 995, 50: 995, 464: 995, 466: 995, 472: 995, 995, 480: 995, 995, 485: 995, 995, 995, 995, 490: 995, 995, 995, 995, 505: 995}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 515: 5767, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 5768, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 5766, 1030: 5773}, // 3305 - {1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 3894, 1250, 1250, 1250, 1250, 1250, 469: 1250, 1250, 473: 1250, 1250, 1250, 1250, 1250, 1250, 482: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 494: 1250, 498: 1250, 1250, 1250, 1250, 1250, 510: 1250, 512: 1250, 532: 1250, 536: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 571: 1250, 640: 5770, 643: 1250, 1250}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 512: 5771, 651: 3690, 2681, 2682, 2680}, - {1836, 1836, 7: 1836, 50: 1836, 461: 1836, 463: 1836, 469: 1836, 1836, 477: 1836, 1836, 482: 1836, 1836, 1836, 1836, 487: 1836, 1836, 1836, 1836, 502: 1836}, - {1835, 1835, 7: 1835, 50: 1835, 461: 1835, 463: 1835, 469: 1835, 1835, 477: 1835, 1835, 482: 1835, 1835, 1835, 1835, 487: 1835, 1835, 1835, 1835, 502: 1835}, - {1833, 1833, 7: 1833, 50: 1833, 461: 1833, 463: 1833, 469: 1833, 1833, 477: 1833, 1833, 482: 1833, 1833, 1833, 1833, 487: 1833, 1833, 1833, 1833, 502: 1833}, + {1831, 1831, 7: 1831, 50: 1831, 464: 1831, 466: 1831, 472: 1831, 1831, 480: 1831, 1831, 485: 1831, 1831, 1831, 1831, 490: 1831, 1831, 1831, 1831, 505: 1831}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 515: 5775, 655: 5776, 2685, 2686, 2684}, + {1841, 1841, 7: 1841, 50: 1841, 464: 1841, 466: 1841, 472: 1841, 1841, 480: 1841, 1841, 485: 1841, 1841, 1841, 1841, 490: 1841, 1841, 1841, 1841, 505: 1841}, + {1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 3901, 1251, 1251, 1251, 1251, 1251, 472: 1251, 1251, 476: 1251, 1251, 1251, 1251, 1251, 1251, 485: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 497: 1251, 501: 1251, 1251, 1251, 1251, 1251, 513: 1251, 515: 1251, 535: 1251, 539: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 574: 1251, 643: 5777, 646: 1251, 1251}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 515: 5778, 655: 3697, 2685, 2686, 2684}, // 3310 - {1832, 1832, 7: 1832, 50: 1832, 461: 1832, 463: 1832, 469: 1832, 1832, 477: 1832, 1832, 482: 1832, 1832, 1832, 1832, 487: 1832, 1832, 1832, 1832, 502: 1832}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5778, 651: 5777, 2681, 2682, 2680}, - {1830, 1830, 7: 1830, 50: 1830, 461: 1830, 463: 1830, 469: 1830, 1830, 477: 1830, 1830, 482: 1830, 1830, 1830, 1830, 487: 1830, 1830, 1830, 1830, 502: 1830}, - {1831, 1831, 7: 1831, 50: 1831, 461: 1831, 463: 1831, 469: 1831, 1831, 477: 1831, 1831, 482: 1831, 1831, 1831, 1831, 487: 1831, 1831, 1831, 1831, 502: 1831}, - {1829, 1829, 7: 1829, 50: 1829, 461: 1829, 463: 1829, 469: 1829, 1829, 477: 1829, 1829, 482: 1829, 1829, 1829, 1829, 487: 1829, 1829, 1829, 1829, 502: 1829}, + {1840, 1840, 7: 1840, 50: 1840, 464: 1840, 466: 1840, 472: 1840, 1840, 480: 1840, 1840, 485: 1840, 1840, 1840, 1840, 490: 1840, 1840, 1840, 1840, 505: 1840}, + {1839, 1839, 7: 1839, 50: 1839, 464: 1839, 466: 1839, 472: 1839, 1839, 480: 1839, 1839, 485: 1839, 1839, 1839, 1839, 490: 1839, 1839, 1839, 1839, 505: 1839}, + {1837, 1837, 7: 1837, 50: 1837, 464: 1837, 466: 1837, 472: 1837, 1837, 480: 1837, 1837, 485: 1837, 1837, 1837, 1837, 490: 1837, 1837, 1837, 1837, 505: 1837}, + {1836, 1836, 7: 1836, 50: 1836, 464: 1836, 466: 1836, 472: 1836, 1836, 480: 1836, 1836, 485: 1836, 1836, 1836, 1836, 490: 1836, 1836, 1836, 1836, 505: 1836}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5785, 655: 5784, 2685, 2686, 2684}, // 3315 - {995, 995}, - {1005, 1005}, - {70: 5786, 223: 5785}, - {999, 999}, - {847: 5784}, + {1834, 1834, 7: 1834, 50: 1834, 464: 1834, 466: 1834, 472: 1834, 1834, 480: 1834, 1834, 485: 1834, 1834, 1834, 1834, 490: 1834, 1834, 1834, 1834, 505: 1834}, + {1835, 1835, 7: 1835, 50: 1835, 464: 1835, 466: 1835, 472: 1835, 1835, 480: 1835, 1835, 485: 1835, 1835, 1835, 1835, 490: 1835, 1835, 1835, 1835, 505: 1835}, + {1833, 1833, 7: 1833, 50: 1833, 464: 1833, 466: 1833, 472: 1833, 1833, 480: 1833, 1833, 485: 1833, 1833, 1833, 1833, 490: 1833, 1833, 1833, 1833, 505: 1833}, + {996, 996}, + {1006, 1006}, // 3320 - {998, 998}, - {1001, 1001, 70: 5791}, - {223: 5787}, - {1000, 1000, 70: 5789, 847: 5788}, - {1003, 1003}, + {70: 5793, 223: 5792}, + {1000, 1000}, + {850: 5791}, + {999, 999}, + {1002, 1002, 70: 5798}, // 3325 - {847: 5790}, - {1002, 1002}, - {847: 5792}, + {223: 5794}, + {1001, 1001, 70: 5796, 850: 5795}, {1004, 1004}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5794, 2681, 2682, 2680}, + {850: 5797}, + {1003, 1003}, // 3330 - {1009, 1009}, - {1013, 1013, 470: 5796}, - {557: 3255, 698: 5798, 1305: 5797}, - {1012, 1012, 7: 5799}, - {1011, 1011, 7: 1011}, + {850: 5799}, + {1005, 1005}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5801, 2685, 2686, 2684}, + {1010, 1010}, + {1014, 1014, 473: 5803}, // 3335 - {557: 3255, 698: 5800}, - {1010, 1010, 7: 1010}, - {487: 5802}, - {464: 5804, 557: 3255, 698: 5805, 1255: 5803}, - {1016, 1016}, + {560: 3262, 701: 5805, 1308: 5804}, + {1013, 1013, 7: 5806}, + {1012, 1012, 7: 1012}, + {560: 3262, 701: 5807}, + {1011, 1011, 7: 1011}, // 3340 + {490: 5809}, + {467: 5811, 560: 3262, 701: 5812, 1258: 5810}, + {1017, 1017}, + {1016, 1016}, {1015, 1015}, - {1014, 1014}, - {2: 1326, 1326, 1326, 1326, 1326, 8: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 51: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 484: 5807, 1045: 5808}, - {2: 1325, 1325, 1325, 1325, 1325, 8: 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 51: 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5809}, // 3345 - {152: 897, 462: 897, 897, 480: 5266, 491: 897, 493: 897, 558: 897, 634: 897, 846: 5810}, - {152: 5818, 462: 5811, 2512, 491: 5819, 493: 5817, 558: 2510, 634: 2506, 697: 5816, 739: 5814, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5815, 5813, 3784, 959: 5812, 1044: 5820}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 2268, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 2513, 2512, 491: 2511, 558: 2510, 634: 2506, 651: 4045, 2681, 2682, 2680, 697: 5683, 732: 4046, 739: 3785, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 3787, 3786, 3784, 794: 4939, 983: 5832}, - {462: 3801, 825: 5829, 957: 5828}, - {1318, 1318, 461: 1318, 470: 1318}, + {2: 1327, 1327, 1327, 1327, 1327, 8: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 51: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 487: 5814, 1048: 5815}, + {2: 1326, 1326, 1326, 1326, 1326, 8: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 51: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5816}, + {152: 898, 465: 898, 898, 483: 5273, 494: 898, 496: 898, 561: 898, 637: 898, 849: 5817}, + {152: 5825, 465: 5818, 2516, 494: 5826, 496: 5824, 561: 2514, 637: 2510, 700: 5823, 742: 5821, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5822, 5820, 3791, 962: 5819, 1047: 5827}, // 3350 - {1317, 1317, 461: 1317, 469: 790, 1317, 477: 790, 790}, - {1316, 1316, 461: 1316, 470: 1316}, - {1315, 1315, 461: 1315, 469: 789, 1315, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, - {1301, 1301, 2917, 2765, 2801, 2919, 2692, 1301, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 1301, 470: 1301, 651: 4045, 2681, 2682, 2680, 732: 5822, 987: 5823, 1171: 5821}, - {462: 1313}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 2272, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 2517, 2516, 494: 2515, 561: 2514, 637: 2510, 655: 4052, 2685, 2686, 2684, 700: 5690, 735: 4053, 742: 3792, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 3794, 3793, 3791, 797: 4946, 986: 5839}, + {465: 3808, 828: 5836, 960: 5835}, + {1319, 1319, 464: 1319, 473: 1319}, + {1318, 1318, 464: 1318, 472: 791, 1318, 480: 791, 791}, + {1317, 1317, 464: 1317, 473: 1317}, // 3355 - {462: 1312, 564: 3800, 897: 3799, 958: 3798}, - {1296, 1296, 470: 1296}, - {1314, 1314, 7: 5826, 461: 1314, 470: 1314}, - {486: 5824}, - {1300, 1300, 7: 1300, 461: 1300, 470: 1300}, + {1316, 1316, 464: 1316, 472: 790, 1316, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {1302, 1302, 2924, 2770, 2806, 2926, 2697, 1302, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 1302, 473: 1302, 655: 4052, 2685, 2686, 2684, 735: 5829, 990: 5830, 1174: 5828}, + {465: 1314}, + {465: 1313, 567: 3807, 900: 3806, 961: 3805}, + {1297, 1297, 473: 1297}, // 3360 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3807, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3803, 784: 5825}, - {1302, 1302, 7: 1302, 461: 1302, 470: 1302}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 5822, 987: 5827}, - {1299, 1299, 7: 1299, 461: 1299, 470: 1299}, - {1319, 1319, 7: 5830, 461: 1319, 470: 1319}, + {1315, 1315, 7: 5833, 464: 1315, 473: 1315}, + {489: 5831}, + {1301, 1301, 7: 1301, 464: 1301, 473: 1301}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3814, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3810, 787: 5832}, + {1303, 1303, 7: 1303, 464: 1303, 473: 1303}, // 3365 - {1311, 1311, 7: 1311, 461: 1311, 470: 1311}, - {462: 3801, 825: 5831}, - {1310, 1310, 7: 1310, 461: 1310, 470: 1310}, - {50: 5833}, - {152: 5818, 462: 2513, 2512, 491: 5819, 558: 2510, 634: 2506, 697: 5838, 739: 5836, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5837, 5835, 3784, 959: 5834}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 5829, 990: 5834}, + {1300, 1300, 7: 1300, 464: 1300, 473: 1300}, + {1320, 1320, 7: 5837, 464: 1320, 473: 1320}, + {1312, 1312, 7: 1312, 464: 1312, 473: 1312}, + {465: 3808, 828: 5838}, // 3370 - {462: 3801, 825: 5829, 957: 5839}, - {1323, 1323, 461: 1323, 470: 1323}, - {1322, 1322, 461: 1322, 469: 790, 1322, 477: 790, 790}, - {1321, 1321, 461: 1321, 470: 1321}, - {1320, 1320, 461: 1320, 469: 789, 1320, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, + {1311, 1311, 7: 1311, 464: 1311, 473: 1311}, + {50: 5840}, + {152: 5825, 465: 2517, 2516, 494: 5826, 561: 2514, 637: 2510, 700: 5845, 742: 5843, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5844, 5842, 3791, 962: 5841}, + {465: 3808, 828: 5836, 960: 5846}, + {1324, 1324, 464: 1324, 473: 1324}, // 3375 - {1324, 1324, 7: 5830, 461: 1324, 470: 1324}, - {2: 1030, 1030, 1030, 1030, 1030, 8: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 51: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 479: 1030, 484: 1030, 736: 5204, 5203, 5202, 823: 5205, 872: 5841}, - {2: 1816, 1816, 1816, 1816, 1816, 8: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 51: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 479: 4092, 484: 1816, 841: 5842}, - {2: 1326, 1326, 1326, 1326, 1326, 8: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 51: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 484: 5807, 1045: 5843}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5844}, + {1323, 1323, 464: 1323, 472: 791, 1323, 480: 791, 791}, + {1322, 1322, 464: 1322, 473: 1322}, + {1321, 1321, 464: 1321, 472: 790, 1321, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {1325, 1325, 7: 5837, 464: 1325, 473: 1325}, + {2: 1031, 1031, 1031, 1031, 1031, 8: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 51: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 482: 1031, 487: 1031, 739: 5211, 5210, 5209, 826: 5212, 875: 5848}, // 3380 - {152: 897, 462: 897, 897, 480: 5266, 491: 897, 493: 897, 558: 897, 634: 897, 846: 5845}, - {152: 5818, 462: 5811, 2512, 491: 5819, 493: 5817, 558: 2510, 634: 2506, 697: 5816, 739: 5814, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5815, 5813, 3784, 959: 5812, 1044: 5846}, - {1298, 1298, 461: 5848, 470: 1298, 1234: 5847}, - {1327, 1327, 470: 1327}, - {196: 5849}, + {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 482: 4099, 487: 1820, 844: 5849}, + {2: 1327, 1327, 1327, 1327, 1327, 8: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 51: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 487: 5814, 1048: 5850}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5851}, + {152: 898, 465: 898, 898, 483: 5273, 494: 898, 496: 898, 561: 898, 637: 898, 849: 5852}, + {152: 5825, 465: 5818, 2516, 494: 5826, 496: 5824, 561: 2514, 637: 2510, 700: 5823, 742: 5821, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5822, 5820, 3791, 962: 5819, 1047: 5853}, // 3385 - {566: 5850}, - {642: 5851}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 5320, 877: 5321, 910: 5852}, - {1297, 1297, 7: 5323, 470: 1297}, - {1331, 1331, 462: 5861, 640: 1792}, + {1299, 1299, 464: 5855, 473: 1299, 1237: 5854}, + {1328, 1328, 473: 1328}, + {195: 5856}, + {569: 5857}, + {645: 5858}, // 3390 - {1332, 1332}, - {640: 5856}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5857, 2681, 2682, 2680}, - {1330, 1330, 462: 5858}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1879, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3656, 811: 5859}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 5327, 880: 5328, 913: 5859}, + {1298, 1298, 7: 5330, 473: 1298}, + {1332, 1332, 465: 5868, 643: 1796}, + {1333, 1333}, + {643: 5863}, // 3395 - {50: 5860}, - {1328, 1328}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 1879, 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 3494, 766: 3656, 811: 5862}, - {50: 5863}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5864, 2685, 2686, 2684}, + {1331, 1331, 465: 5865}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1883, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3663, 814: 5866}, + {50: 5867}, {1329, 1329}, // 3400 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6015, 2681, 2682, 2680}, - {584, 584, 489: 6012, 510: 6011, 1270: 6010}, - {16: 5998, 99: 5995, 132: 6000, 162: 5999, 189: 5997, 558: 5994, 572: 5996}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 5983, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5984}, - {656, 656, 482: 5978}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 1883, 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 3501, 769: 3663, 814: 5869}, + {50: 5870}, + {1330, 1330}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6024, 2685, 2686, 2684}, + {584, 584, 492: 6021, 513: 6020, 1273: 6019}, // 3405 - {125: 5977}, - {98: 3848, 107: 3847, 110: 5972, 207: 5971, 819: 5973}, - {652, 652}, - {644, 644, 180: 5953, 219: 5954, 229: 5955, 232: 5952, 251: 5957, 261: 5956, 276: 5959, 281: 5958, 482: 644, 644, 488: 644, 639: 5960, 1109: 5951, 1273: 5950, 5949}, - {650, 650}, + {16: 6007, 99: 6004, 132: 6009, 162: 6008, 187: 6006, 561: 6003, 575: 6005}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 5992, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5993}, + {657, 657, 485: 5987}, + {123: 5986}, + {98: 3855, 107: 3854, 110: 5981, 207: 5980, 822: 5982}, // 3410 - {649, 649}, - {586, 586, 254: 5940, 482: 5939, 489: 586, 510: 586}, - {487: 627, 532: 627}, - {487: 626, 532: 626}, - {487: 625, 532: 625}, + {653, 653}, + {645, 645, 178: 5962, 219: 5963, 229: 5964, 232: 5961, 251: 5966, 261: 5965, 276: 5968, 281: 5967, 485: 645, 645, 491: 645, 642: 5969, 1112: 5960, 1276: 5959, 5958}, + {651, 651}, + {650, 650}, + {586, 586, 254: 5949, 485: 5948, 492: 586, 513: 586}, // 3415 - {622, 622, 489: 622, 510: 622}, - {621, 621, 489: 621, 510: 621}, - {620, 620, 489: 620, 510: 620}, - {619, 619, 489: 619, 510: 619}, - {110: 5937}, + {490: 628, 535: 628}, + {490: 627, 535: 627}, + {490: 626, 535: 626}, + {623, 623, 492: 623, 513: 623}, + {622, 622, 492: 622, 513: 622}, // 3420 - {487: 5913, 532: 5914, 791: 5932}, - {98: 574, 107: 574, 200: 5911, 1070: 5926}, - {611, 611, 489: 611, 510: 611}, - {610, 610, 489: 610, 510: 610}, - {125: 5924, 138: 5925, 194: 5923}, + {621, 621, 492: 621, 513: 621}, + {620, 620, 492: 620, 513: 620}, + {110: 5946}, + {490: 5921, 535: 5922, 794: 5941}, + {98: 574, 107: 574, 200: 5919, 1073: 5935}, // 3425 - {606, 606, 489: 606, 510: 606}, - {572, 572, 487: 5913, 489: 572, 510: 572, 532: 5914, 791: 5916, 827: 5922}, - {125: 5921}, - {125: 5920}, - {125: 5919}, + {612, 612, 492: 612, 513: 612}, + {611, 611, 492: 611, 513: 611}, + {123: 5933, 138: 5934, 192: 5932}, + {607, 607, 492: 607, 513: 607}, + {572, 572, 490: 5921, 492: 572, 513: 572, 535: 5922, 794: 5924, 830: 5931}, // 3430 - {125: 5918}, - {572, 572, 487: 5913, 489: 572, 510: 572, 532: 5914, 791: 5916, 827: 5915}, - {599, 599, 489: 599, 510: 599}, - {598, 598, 489: 598, 510: 598}, - {597, 597, 489: 597, 510: 597}, + {123: 5930}, + {123: 5929}, + {123: 5928}, + {123: 5927}, + {123: 5926}, // 3435 - {596, 596, 489: 596, 510: 596}, - {595, 595, 489: 595, 510: 595}, - {594, 594, 489: 594, 510: 594}, - {593, 593, 489: 593, 510: 593}, - {592, 592, 489: 592, 510: 592}, + {572, 572, 490: 5921, 492: 572, 513: 572, 535: 5922, 794: 5924, 830: 5923}, + {599, 599, 492: 599, 513: 599}, + {598, 598, 492: 598, 513: 598}, + {597, 597, 492: 597, 513: 597}, + {596, 596, 492: 596, 513: 596}, // 3440 - {591, 591, 489: 591, 510: 591}, - {125: 5912}, - {589, 589, 489: 589, 510: 589}, - {588, 588, 489: 588, 510: 588}, - {587, 587, 489: 587, 510: 587}, + {595, 595, 492: 595, 513: 595}, + {594, 594, 492: 594, 513: 594}, + {593, 593, 492: 593, 513: 593}, + {592, 592, 492: 592, 513: 592}, + {591, 591, 492: 591, 513: 591}, // 3445 - {125: 580, 138: 580, 194: 580}, - {125: 579, 138: 579, 154: 579, 194: 579}, - {98: 573, 107: 573, 110: 573, 207: 573}, - {590, 590, 489: 590, 510: 590}, - {2: 624, 624, 624, 624, 624, 8: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 51: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624}, + {123: 5920}, + {589, 589, 492: 589, 513: 589}, + {588, 588, 492: 588, 513: 588}, + {587, 587, 492: 587, 513: 587}, + {123: 580, 138: 580, 192: 580}, // 3450 - {2: 623, 623, 623, 623, 623, 8: 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 51: 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623}, - {600, 600, 489: 600, 510: 600}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5197, 2681, 2682, 2680, 801: 5917}, - {571, 571, 489: 571, 510: 571}, - {601, 601, 489: 601, 510: 601}, + {123: 579, 138: 579, 154: 579, 192: 579}, + {98: 573, 107: 573, 110: 573, 207: 573}, + {590, 590, 492: 590, 513: 590}, + {2: 625, 625, 625, 625, 625, 8: 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 51: 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625}, + {2: 624, 624, 624, 624, 624, 8: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 51: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624}, // 3455 - {602, 602, 489: 602, 510: 602}, - {603, 603, 489: 603, 510: 603}, - {604, 604, 489: 604, 510: 604}, - {605, 605, 489: 605, 510: 605}, - {609, 609, 489: 609, 510: 609}, + {600, 600, 492: 600, 513: 600}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5204, 2685, 2686, 2684, 804: 5925}, + {571, 571, 492: 571, 513: 571}, + {601, 601, 492: 601, 513: 601}, + {602, 602, 492: 602, 513: 602}, // 3460 - {608, 608, 489: 608, 510: 608}, - {607, 607, 489: 607, 510: 607}, - {98: 3848, 107: 3847, 819: 5927}, - {487: 5913, 532: 5914, 791: 5929, 1111: 5928}, - {572, 572, 487: 5913, 489: 572, 510: 572, 532: 5914, 791: 5916, 827: 5931}, + {603, 603, 492: 603, 513: 603}, + {604, 604, 492: 604, 513: 604}, + {605, 605, 492: 605, 513: 605}, + {606, 606, 492: 606, 513: 606}, + {610, 610, 492: 610, 513: 610}, // 3465 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5930}, - {570, 570, 487: 570, 489: 570, 510: 570, 532: 570}, - {612, 612, 489: 612, 510: 612}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5933, 2681, 2682, 2680, 725: 5934}, - {1028, 1028, 487: 5913, 489: 1028, 510: 1028, 532: 5914, 640: 3830, 791: 5935}, + {609, 609, 492: 609, 513: 609}, + {608, 608, 492: 608, 513: 608}, + {98: 3855, 107: 3854, 822: 5936}, + {490: 5921, 535: 5922, 794: 5938, 1114: 5937}, + {572, 572, 490: 5921, 492: 572, 513: 572, 535: 5922, 794: 5924, 830: 5940}, // 3470 - {615, 615, 489: 615, 510: 615}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5936, 2681, 2682, 2680}, - {614, 614, 489: 614, 510: 614}, - {572, 572, 487: 5913, 489: 572, 510: 572, 532: 5914, 791: 5916, 827: 5938}, - {617, 617, 489: 617, 510: 617}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5939}, + {570, 570, 490: 570, 492: 570, 513: 570, 535: 570}, + {613, 613, 492: 613, 513: 613}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5942, 2685, 2686, 2684, 728: 5943}, + {1029, 1029, 490: 5921, 492: 1029, 513: 1029, 535: 5922, 643: 3837, 794: 5944}, // 3475 - {558: 5944, 572: 5941, 836: 5943, 1271: 5942}, - {585, 585, 489: 585, 510: 585}, - {2: 2023, 2023, 2023, 2023, 2023, 8: 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 51: 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 468: 2023, 473: 2023, 493: 2023, 495: 2023, 512: 2023, 555: 2023, 635: 2023}, - {648, 648}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5197, 2681, 2682, 2680, 801: 5948}, + {616, 616, 492: 616, 513: 616}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5945, 2685, 2686, 2684}, + {615, 615, 492: 615, 513: 615}, + {572, 572, 490: 5921, 492: 572, 513: 572, 535: 5922, 794: 5924, 830: 5947}, + {618, 618, 492: 618, 513: 618}, // 3480 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 5945}, - {646, 646, 480: 5946}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5947, 2681, 2682, 2680}, - {645, 645}, - {647, 647}, + {561: 5953, 575: 5950, 839: 5952, 1274: 5951}, + {585, 585, 492: 585, 513: 585}, + {2: 2027, 2027, 2027, 2027, 2027, 8: 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 51: 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 471: 2027, 476: 2027, 496: 2027, 498: 2027, 515: 2027, 558: 2027, 638: 2027}, + {649, 649}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5204, 2685, 2686, 2684, 804: 5957}, // 3485 - {631, 631, 482: 5967, 631, 488: 631, 1272: 5966}, - {643, 643, 7: 5964, 482: 643, 643, 488: 643}, - {642, 642, 7: 642, 482: 642, 642, 488: 642}, - {640, 640, 7: 640, 482: 640, 640, 488: 640}, - {639, 639, 7: 639, 482: 639, 639, 488: 639}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 5954}, + {647, 647, 483: 5955}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5956, 2685, 2686, 2684}, + {646, 646}, + {648, 648}, // 3490 - {338: 5963}, - {378: 5962}, - {327: 5961}, - {635, 635, 7: 635, 482: 635, 635, 488: 635}, - {634, 634, 7: 634, 482: 634, 634, 488: 634}, + {632, 632, 485: 5976, 632, 491: 632, 1275: 5975}, + {644, 644, 7: 5973, 485: 644, 644, 491: 644}, + {643, 643, 7: 643, 485: 643, 643, 491: 643}, + {641, 641, 7: 641, 485: 641, 641, 491: 641}, + {640, 640, 7: 640, 485: 640, 640, 491: 640}, // 3495 - {633, 633, 7: 633, 482: 633, 633, 488: 633}, - {632, 632, 7: 632, 482: 632, 632, 488: 632}, - {636, 636, 7: 636, 482: 636, 636, 488: 636}, - {637, 637, 7: 637, 482: 637, 637, 488: 637}, - {638, 638, 7: 638, 482: 638, 638, 488: 638}, + {341: 5972}, + {381: 5971}, + {330: 5970}, + {636, 636, 7: 636, 485: 636, 636, 491: 636}, + {635, 635, 7: 635, 485: 635, 635, 491: 635}, // 3500 - {180: 5953, 219: 5954, 229: 5955, 232: 5952, 251: 5957, 261: 5956, 276: 5959, 281: 5958, 639: 5960, 1109: 5965}, - {641, 641, 7: 641, 482: 641, 641, 488: 641}, - {844, 844, 483: 2647, 488: 2648, 755: 2649, 814: 5970}, - {143: 5968}, - {497: 2655, 721: 3955, 752: 5969}, + {634, 634, 7: 634, 485: 634, 634, 491: 634}, + {633, 633, 7: 633, 485: 633, 633, 491: 633}, + {637, 637, 7: 637, 485: 637, 637, 491: 637}, + {638, 638, 7: 638, 485: 638, 638, 491: 638}, + {639, 639, 7: 639, 485: 639, 639, 491: 639}, // 3505 - {630, 630, 483: 630, 488: 630}, - {651, 651}, - {653, 653}, - {572, 572, 487: 5913, 489: 572, 510: 572, 532: 5914, 791: 5916, 827: 5976}, - {487: 5913, 532: 5914, 791: 5929, 1111: 5974}, + {178: 5962, 219: 5963, 229: 5964, 232: 5961, 251: 5966, 261: 5965, 276: 5968, 281: 5967, 642: 5969, 1112: 5974}, + {642, 642, 7: 642, 485: 642, 642, 491: 642}, + {845, 845, 486: 2651, 491: 2652, 758: 2653, 817: 5979}, + {143: 5977}, + {500: 2659, 724: 3962, 755: 5978}, // 3510 - {572, 572, 487: 5913, 489: 572, 510: 572, 532: 5914, 791: 5916, 827: 5975}, - {613, 613, 489: 613, 510: 613}, - {618, 618, 489: 618, 510: 618}, + {631, 631, 486: 631, 491: 631}, + {652, 652}, {654, 654}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5979}, + {572, 572, 490: 5921, 492: 572, 513: 572, 535: 5922, 794: 5924, 830: 5985}, + {490: 5921, 535: 5922, 794: 5938, 1114: 5983}, // 3515 - {629, 629, 470: 5981, 1306: 5980}, + {572, 572, 490: 5921, 492: 572, 513: 572, 535: 5922, 794: 5924, 830: 5984}, + {614, 614, 492: 614, 513: 614}, + {619, 619, 492: 619, 513: 619}, {655, 655}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 5532, 5530, 848: 5982}, - {628, 628, 7: 5533}, - {572, 572, 86: 1696, 157: 1696, 480: 1696, 487: 5913, 489: 572, 510: 572, 532: 5914, 637: 1696, 640: 1696, 791: 5916, 827: 5993}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5988}, // 3520 - {86: 897, 157: 5986, 480: 5266, 637: 897, 846: 5985}, - {86: 5987, 637: 5988}, - {658, 658}, - {239, 239, 489: 2641, 776: 2642, 5992}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5989, 2681, 2682, 2680}, + {630, 630, 473: 5990, 1309: 5989}, + {656, 656}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 5539, 5537, 851: 5991}, + {629, 629, 7: 5540}, + {572, 572, 86: 1699, 157: 1699, 483: 1699, 490: 5921, 492: 572, 513: 572, 535: 5922, 640: 1699, 643: 1699, 794: 5924, 830: 6002}, // 3525 - {86: 5990}, - {239, 239, 489: 2641, 776: 2642, 5991}, - {657, 657}, + {86: 898, 157: 5995, 483: 5273, 640: 898, 849: 5994}, + {86: 5996, 640: 5997}, {659, 659}, - {616, 616, 489: 616, 510: 616}, + {239, 239, 492: 2645, 779: 2646, 6001}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5998, 2685, 2686, 2684}, // 3530 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6009}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6008}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 6006}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6005}, - {158: 6003}, - // 3535 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 6002}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6001, 2681, 2682, 2680}, + {86: 5999}, + {239, 239, 492: 2645, 779: 2646, 6000}, + {658, 658}, {660, 660}, - {661, 661}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4869, 2681, 2682, 2680, 871: 6004}, + {617, 617, 492: 617, 513: 617}, + // 3535 + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6018}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6017}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 6015}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6014}, + {158: 6012}, // 3540 + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 6011}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6010, 2685, 2686, 2684}, + {661, 661}, {662, 662}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4876, 2685, 2686, 2684, 874: 6013}, + // 3545 {663, 663}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5197, 2681, 2682, 2680, 801: 6007}, {664, 664}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5204, 2685, 2686, 2684, 804: 6016}, {665, 665}, - // 3545 {666, 666}, - {667, 667}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 3255, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 6014, 3160, 3241, 3159, 3156}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 2758, 2706, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 2787, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 2685, 2701, 2844, 2935, 2792, 2719, 2736, 2863, 2946, 2779, 2748, 2857, 2858, 2853, 2813, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 2794, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 2798, 2679, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 2717, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 2783, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 2784, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 2852, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 2670, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 2800, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 2742, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 2671, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3054, 2796, 3055, 3056, 2695, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3069, 3070, 3120, 3119, 2972, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 2834, 2851, 2973, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3087, 3088, 3089, 2847, 3042, 3099, 3100, 3110, 3095, 3096, 3097, 3128, 2795, 462: 3167, 464: 3147, 3165, 2674, 468: 3175, 471: 3180, 3184, 474: 3163, 3164, 3202, 481: 3138, 491: 3176, 495: 3200, 3183, 3142, 534: 3171, 555: 3178, 3201, 2672, 559: 3185, 3137, 3139, 3141, 3140, 3168, 3145, 567: 3158, 3170, 3146, 3179, 572: 3177, 3169, 575: 3174, 577: 3243, 3181, 3190, 3191, 3192, 3144, 3161, 3162, 3216, 3217, 3218, 3219, 3220, 3172, 3221, 3198, 3203, 3213, 3214, 3207, 3222, 3223, 3224, 3208, 3226, 3227, 3209, 3225, 3204, 3212, 3210, 3196, 3228, 3229, 3173, 3233, 3186, 3187, 3189, 3232, 3238, 3237, 3239, 3236, 3240, 3235, 3234, 3231, 3182, 3230, 3188, 3193, 3194, 636: 2675, 651: 3151, 2681, 2682, 2680, 697: 3166, 3242, 3152, 3157, 3143, 3215, 3155, 3153, 3154, 3195, 3206, 3205, 3199, 3197, 3211, 3150, 3160, 3241, 3159, 3156, 2678, 2677, 2676, 6013}, - {582, 582, 494: 3252, 498: 3250, 3251, 3249, 3247, 722: 3248, 3246}, // 3550 - {583, 583, 473: 3256, 571: 3257}, - {1915, 1915, 201: 6017, 558: 1915, 1237: 6016}, - {548, 548, 558: 6019, 951: 6018}, - {1914, 1914, 558: 1914}, - {1920, 1920}, + {667, 667}, + {668, 668}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 3262, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 6023, 3167, 3248, 3166, 3163}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 2763, 2711, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 2792, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 2689, 2706, 2851, 2942, 2797, 2724, 2741, 2870, 2953, 2784, 2753, 2864, 2865, 2860, 2818, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 2799, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 2803, 2683, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 2722, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 2788, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 2789, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 2859, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 2674, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 2805, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 2747, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 2675, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3061, 2801, 3062, 3063, 2700, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3076, 3077, 3127, 3126, 2979, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 2841, 2858, 2980, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3094, 3095, 3096, 2854, 3049, 3106, 3107, 3117, 3102, 3103, 3104, 3135, 2800, 465: 3174, 467: 3154, 3172, 2678, 471: 3182, 474: 3187, 3191, 477: 3170, 3171, 3209, 484: 3145, 494: 3183, 498: 3207, 3190, 3149, 537: 3178, 558: 3185, 3208, 2676, 562: 3192, 3144, 3146, 3148, 3147, 3175, 3152, 570: 3165, 3177, 3153, 3186, 575: 3184, 3176, 578: 3181, 580: 3250, 3188, 3197, 3198, 3199, 3151, 3168, 3169, 3223, 3224, 3225, 3226, 3227, 3179, 3228, 3205, 3210, 3220, 3221, 3214, 3229, 3230, 3231, 3215, 3233, 3234, 3216, 3232, 3211, 3219, 3217, 3203, 3235, 3236, 3180, 3240, 3193, 3194, 3196, 3239, 3245, 3244, 3246, 3243, 3247, 3242, 3241, 3238, 3189, 3237, 3195, 3200, 3201, 639: 2679, 655: 3158, 2685, 2686, 2684, 700: 3173, 3249, 3159, 3164, 3150, 3222, 3162, 3160, 3161, 3202, 3213, 3212, 3206, 3204, 3218, 3157, 3167, 3248, 3166, 3163, 2682, 2681, 2680, 6022}, + {582, 582, 497: 3259, 501: 3257, 3258, 3256, 3254, 725: 3255, 3253}, // 3555 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 6020}, - {547, 547, 7: 3828}, - {2: 1917, 1917, 1917, 1917, 1917, 8: 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 51: 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 555: 6023, 1204: 6022}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6026, 2681, 2682, 2680}, - {465: 3991, 3990, 796: 6024}, + {583, 583, 476: 3263, 574: 3264}, + {1919, 1919, 201: 6026, 561: 1919, 1240: 6025}, + {548, 548, 561: 6028, 954: 6027}, + {1918, 1918, 561: 1918}, + {1924, 1924}, // 3560 - {187: 6025}, - {2: 1916, 1916, 1916, 1916, 1916, 8: 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 51: 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916}, - {1923, 1923}, - {2: 1919, 1919, 1919, 1919, 1919, 8: 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 51: 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 555: 6029, 1205: 6028}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6031, 2681, 2682, 2680}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 6029}, + {547, 547, 7: 3835}, + {2: 1921, 1921, 1921, 1921, 1921, 8: 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 51: 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 558: 6032, 1207: 6031}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6035, 2685, 2686, 2684}, + {468: 3998, 3997, 799: 6033}, // 3565 - {187: 6030}, - {2: 1918, 1918, 1918, 1918, 1918, 8: 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 51: 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918}, - {1924, 1924}, - {497: 2655, 721: 6033}, - {1926, 1926}, + {185: 6034}, + {2: 1920, 1920, 1920, 1920, 1920, 8: 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 51: 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920}, + {1927, 1927}, + {2: 1923, 1923, 1923, 1923, 1923, 8: 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 51: 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 558: 6038, 1208: 6037}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6040, 2685, 2686, 2684}, // 3570 - {487: 6043}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 512: 6038, 651: 5197, 2681, 2682, 2680, 801: 6040, 1180: 6039}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 6037}, - {7: 3828, 487: 1973, 638: 1973}, - {487: 1975, 638: 1975}, + {185: 6039}, + {2: 1922, 1922, 1922, 1922, 1922, 8: 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 51: 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922}, + {1928, 1928}, + {500: 2659, 724: 6042}, + {1930, 1930}, // 3575 - {7: 6041, 487: 1974, 638: 1974}, - {7: 1972, 487: 1972, 638: 1972}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5197, 2681, 2682, 2680, 801: 6042}, - {7: 1971, 487: 1971, 638: 1971}, - {464: 6044}, + {490: 6052}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 515: 6047, 655: 5204, 2685, 2686, 2684, 804: 6049, 1183: 6048}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 6046}, + {7: 3835, 490: 1977, 641: 1977}, + {490: 1979, 641: 1979}, // 3580 - {1970, 1970, 15: 1970, 47: 1970, 49: 1970, 51: 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 461: 1970, 641: 1970, 883: 6045}, - {1976, 1976, 15: 6072, 47: 6048, 49: 6068, 51: 6061, 6051, 6047, 6055, 6059, 6071, 6054, 6060, 6058, 6056, 6069, 6062, 6050, 6070, 6049, 6052, 6053, 6057, 461: 6063, 641: 6073, 879: 6065, 6064, 6067, 6046, 884: 6066}, - {1969, 1969, 15: 1969, 47: 1969, 49: 1969, 51: 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 461: 1969, 641: 1969}, - {486: 1968, 497: 1968}, - {486: 1967, 497: 1967}, + {7: 6050, 490: 1978, 641: 1978}, + {7: 1976, 490: 1976, 641: 1976}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5204, 2685, 2686, 2684, 804: 6051}, + {7: 1975, 490: 1975, 641: 1975}, + {467: 6053}, // 3585 - {486: 1966, 497: 1966, 560: 1966, 1966}, - {486: 1965, 497: 1965, 560: 1965, 1965}, - {486: 1964, 497: 1964, 560: 1964, 1964}, - {486: 1963, 497: 1963, 560: 1963, 1963}, - {486: 1962, 497: 1962, 560: 1962, 1962}, + {1974, 1974, 15: 1974, 47: 1974, 49: 1974, 51: 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 464: 1974, 644: 1974, 886: 6054}, + {1980, 1980, 15: 6081, 47: 6057, 49: 6077, 51: 6070, 6060, 6056, 6064, 6068, 6080, 6063, 6069, 6067, 6065, 6078, 6071, 6059, 6079, 6058, 6061, 6062, 6066, 464: 6072, 644: 6082, 882: 6074, 6073, 6076, 6055, 887: 6075}, + {1973, 1973, 15: 1973, 47: 1973, 49: 1973, 51: 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 464: 1973, 644: 1973}, + {489: 1972, 500: 1972}, + {489: 1971, 500: 1971}, // 3590 - {486: 1961, 497: 1961, 560: 1961, 1961}, - {486: 1960, 497: 1960, 560: 1960, 1960}, - {486: 1959, 497: 1959, 560: 1959, 1959}, - {464: 1958, 486: 1958}, - {464: 1957, 486: 1957}, + {489: 1970, 500: 1970, 563: 1970, 1970}, + {489: 1969, 500: 1969, 563: 1969, 1969}, + {489: 1968, 500: 1968, 563: 1968, 1968}, + {489: 1967, 500: 1967, 563: 1967, 1967}, + {489: 1966, 500: 1966, 563: 1966, 1966}, // 3595 - {464: 1956, 486: 1956}, - {464: 1955, 486: 1955}, - {2: 1954, 1954, 1954, 1954, 1954, 8: 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 51: 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 464: 1954, 479: 1954, 486: 1954, 496: 1954}, - {2: 1953, 1953, 1953, 1953, 1953, 8: 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 51: 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 464: 1953, 479: 1953, 486: 1953, 496: 1953}, - {196: 6113}, + {489: 1965, 500: 1965, 563: 1965, 1965}, + {489: 1964, 500: 1964, 563: 1964, 1964}, + {489: 1963, 500: 1963, 563: 1963, 1963}, + {467: 1962, 489: 1962}, + {467: 1961, 489: 1961}, // 3600 - {486: 4179, 497: 2002, 724: 6111}, - {486: 4179, 497: 2002, 560: 2002, 2002, 724: 6109}, - {464: 2002, 486: 4179, 724: 6107}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 479: 2002, 486: 4179, 496: 2002, 724: 6102}, - {464: 2002, 486: 4179, 497: 2002, 724: 6097}, + {467: 1960, 489: 1960}, + {467: 1959, 489: 1959}, + {2: 1958, 1958, 1958, 1958, 1958, 8: 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 51: 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 467: 1958, 482: 1958, 489: 1958, 499: 1958}, + {2: 1957, 1957, 1957, 1957, 1957, 8: 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 51: 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 467: 1957, 482: 1957, 489: 1957, 499: 1957}, + {195: 6122}, // 3605 - {464: 2002, 486: 4179, 497: 2002, 724: 6094}, - {486: 4179, 497: 2002, 724: 6089}, - {98: 2002, 107: 2002, 486: 4179, 497: 2002, 724: 6086}, - {181: 2002, 2002, 185: 2002, 486: 4179, 497: 2002, 560: 2002, 2002, 724: 6083}, - {181: 2002, 2002, 185: 2002, 486: 4179, 497: 2002, 560: 2002, 2002, 724: 6074}, + {489: 4186, 500: 2006, 727: 6120}, + {489: 4186, 500: 2006, 563: 2006, 2006, 727: 6118}, + {467: 2006, 489: 4186, 727: 6116}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 482: 2006, 489: 4186, 499: 2006, 727: 6111}, + {467: 2006, 489: 4186, 500: 2006, 727: 6106}, // 3610 - {181: 6080, 6081, 185: 6082, 497: 2655, 560: 6078, 6079, 721: 6077, 912: 6075, 1073: 6076}, - {1937, 1937, 15: 1937, 47: 1937, 49: 1937, 51: 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 461: 1937, 641: 1937}, - {1936, 1936, 15: 1936, 47: 1936, 49: 1936, 51: 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 461: 1936, 641: 1936}, - {1932, 1932, 15: 1932, 47: 1932, 49: 1932, 51: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 461: 1932, 641: 1932}, - {1931, 1931, 15: 1931, 47: 1931, 49: 1931, 51: 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 461: 1931, 641: 1931}, + {467: 2006, 489: 4186, 500: 2006, 727: 6103}, + {489: 4186, 500: 2006, 727: 6098}, + {98: 2006, 107: 2006, 489: 4186, 500: 2006, 727: 6095}, + {179: 2006, 2006, 183: 2006, 489: 4186, 500: 2006, 563: 2006, 2006, 727: 6092}, + {179: 2006, 2006, 183: 2006, 489: 4186, 500: 2006, 563: 2006, 2006, 727: 6083}, // 3615 - {1930, 1930, 15: 1930, 47: 1930, 49: 1930, 51: 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 461: 1930, 641: 1930}, - {1929, 1929, 15: 1929, 47: 1929, 49: 1929, 51: 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 461: 1929, 641: 1929}, - {1928, 1928, 15: 1928, 47: 1928, 49: 1928, 51: 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 461: 1928, 641: 1928}, - {1927, 1927, 15: 1927, 47: 1927, 49: 1927, 51: 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 461: 1927, 641: 1927}, - {181: 6080, 6081, 185: 6082, 497: 2655, 560: 6078, 6079, 721: 6077, 912: 6084, 1073: 6085}, + {179: 6089, 6090, 183: 6091, 500: 2659, 563: 6087, 6088, 724: 6086, 915: 6084, 1076: 6085}, + {1941, 1941, 15: 1941, 47: 1941, 49: 1941, 51: 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 464: 1941, 644: 1941}, + {1940, 1940, 15: 1940, 47: 1940, 49: 1940, 51: 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 464: 1940, 644: 1940}, + {1936, 1936, 15: 1936, 47: 1936, 49: 1936, 51: 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 464: 1936, 644: 1936}, + {1935, 1935, 15: 1935, 47: 1935, 49: 1935, 51: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 464: 1935, 644: 1935}, // 3620 - {1939, 1939, 15: 1939, 47: 1939, 49: 1939, 51: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 461: 1939, 641: 1939}, - {1938, 1938, 15: 1938, 47: 1938, 49: 1938, 51: 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 461: 1938, 641: 1938}, - {98: 3848, 107: 3847, 497: 2655, 721: 2654, 731: 6088, 819: 6087}, - {1941, 1941, 15: 1941, 47: 1941, 49: 1941, 51: 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 461: 1941, 641: 1941}, - {1940, 1940, 15: 1940, 47: 1940, 49: 1940, 51: 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 461: 1940, 641: 1940}, + {1934, 1934, 15: 1934, 47: 1934, 49: 1934, 51: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 464: 1934, 644: 1934}, + {1933, 1933, 15: 1933, 47: 1933, 49: 1933, 51: 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 464: 1933, 644: 1933}, + {1932, 1932, 15: 1932, 47: 1932, 49: 1932, 51: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 464: 1932, 644: 1932}, + {1931, 1931, 15: 1931, 47: 1931, 49: 1931, 51: 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 464: 1931, 644: 1931}, + {179: 6089, 6090, 183: 6091, 500: 2659, 563: 6087, 6088, 724: 6086, 915: 6093, 1076: 6094}, // 3625 - {497: 2655, 721: 2654, 731: 6090}, - {202: 6091}, - {545: 6092}, - {108: 6093}, - {1942, 1942, 15: 1942, 47: 1942, 49: 1942, 51: 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 461: 1942, 641: 1942}, + {1943, 1943, 15: 1943, 47: 1943, 49: 1943, 51: 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 464: 1943, 644: 1943}, + {1942, 1942, 15: 1942, 47: 1942, 49: 1942, 51: 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 464: 1942, 644: 1942}, + {98: 3855, 107: 3854, 500: 2659, 724: 2658, 734: 6097, 822: 6096}, + {1945, 1945, 15: 1945, 47: 1945, 49: 1945, 51: 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 464: 1945, 644: 1945}, + {1944, 1944, 15: 1944, 47: 1944, 49: 1944, 51: 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 464: 1944, 644: 1944}, // 3630 - {464: 6095, 497: 2655, 721: 2654, 731: 6096}, - {1944, 1944, 15: 1944, 47: 1944, 49: 1944, 51: 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 461: 1944, 641: 1944}, - {1943, 1943, 15: 1943, 47: 1943, 49: 1943, 51: 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 461: 1943, 641: 1943}, - {464: 6099, 497: 2655, 721: 2654, 731: 6098}, - {1945, 1945, 15: 1945, 47: 1945, 49: 1945, 51: 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 105: 3370, 3366, 108: 3363, 3378, 111: 3365, 3362, 3364, 3368, 3369, 3374, 3373, 3372, 3376, 3377, 3371, 3375, 3367, 461: 1945, 641: 1945, 792: 6100}, + {500: 2659, 724: 2658, 734: 6099}, + {202: 6100}, + {548: 6101}, + {108: 6102}, + {1946, 1946, 15: 1946, 47: 1946, 49: 1946, 51: 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 464: 1946, 644: 1946}, // 3635 - {1946, 1946, 15: 1946, 47: 1946, 49: 1946, 51: 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 461: 1946, 641: 1946}, - {296: 6101}, - {1947, 1947, 15: 1947, 47: 1947, 49: 1947, 51: 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 461: 1947, 641: 1947}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 479: 6105, 496: 6106, 651: 3397, 2681, 2682, 2680, 726: 6104, 1287: 6103}, - {1948, 1948, 15: 1948, 47: 1948, 49: 1948, 51: 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 461: 1948, 641: 1948}, + {467: 6104, 500: 2659, 724: 2658, 734: 6105}, + {1948, 1948, 15: 1948, 47: 1948, 49: 1948, 51: 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 464: 1948, 644: 1948}, + {1947, 1947, 15: 1947, 47: 1947, 49: 1947, 51: 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 464: 1947, 644: 1947}, + {467: 6108, 500: 2659, 724: 2658, 734: 6107}, + {1949, 1949, 15: 1949, 47: 1949, 49: 1949, 51: 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 105: 3377, 3373, 108: 3370, 3385, 111: 3372, 3369, 3371, 3375, 3376, 3381, 3380, 3379, 3383, 3384, 3378, 3382, 124: 3374, 464: 1949, 644: 1949, 795: 6109}, // 3640 - {248, 248, 15: 248, 47: 248, 49: 248, 51: 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 461: 248, 641: 248}, - {247, 247, 15: 247, 47: 247, 49: 247, 51: 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 461: 247, 641: 247}, - {246, 246, 15: 246, 47: 246, 49: 246, 51: 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 461: 246, 641: 246}, - {464: 6108}, - {1949, 1949, 15: 1949, 47: 1949, 49: 1949, 51: 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 461: 1949, 641: 1949}, + {1950, 1950, 15: 1950, 47: 1950, 49: 1950, 51: 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 464: 1950, 644: 1950}, + {296: 6110}, + {1951, 1951, 15: 1951, 47: 1951, 49: 1951, 51: 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 464: 1951, 644: 1951}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 482: 6114, 499: 6115, 655: 3404, 2685, 2686, 2684, 729: 6113, 1290: 6112}, + {1952, 1952, 15: 1952, 47: 1952, 49: 1952, 51: 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 464: 1952, 644: 1952}, // 3645 - {497: 2655, 560: 6078, 6079, 721: 6077, 912: 6110}, - {1950, 1950, 15: 1950, 47: 1950, 49: 1950, 51: 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 461: 1950, 641: 1950}, - {497: 2655, 721: 2654, 731: 6112}, - {1951, 1951, 15: 1951, 47: 1951, 49: 1951, 51: 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 461: 1951, 641: 1951}, - {2: 1952, 1952, 1952, 1952, 1952, 8: 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 51: 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 464: 1952, 479: 1952, 486: 1952, 496: 1952}, + {248, 248, 15: 248, 47: 248, 49: 248, 51: 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 464: 248, 644: 248}, + {247, 247, 15: 247, 47: 247, 49: 247, 51: 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 464: 247, 644: 247}, + {246, 246, 15: 246, 47: 246, 49: 246, 51: 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 464: 246, 644: 246}, + {467: 6117}, + {1953, 1953, 15: 1953, 47: 1953, 49: 1953, 51: 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 464: 1953, 644: 1953}, // 3650 - {638: 6115}, - {464: 6116}, - {1970, 1970, 15: 1970, 47: 1970, 49: 1970, 51: 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 461: 1970, 641: 1970, 883: 6117}, - {1977, 1977, 15: 6072, 47: 6048, 49: 6068, 51: 6061, 6051, 6047, 6055, 6059, 6071, 6054, 6060, 6058, 6056, 6069, 6062, 6050, 6070, 6049, 6052, 6053, 6057, 461: 6063, 641: 6073, 879: 6065, 6064, 6067, 6046, 884: 6066}, - {1992, 1992, 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 6143}, + {500: 2659, 563: 6087, 6088, 724: 6086, 915: 6119}, + {1954, 1954, 15: 1954, 47: 1954, 49: 1954, 51: 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 464: 1954, 644: 1954}, + {500: 2659, 724: 2658, 734: 6121}, + {1955, 1955, 15: 1955, 47: 1955, 49: 1955, 51: 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 464: 1955, 644: 1955}, + {2: 1956, 1956, 1956, 1956, 1956, 8: 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 51: 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 467: 1956, 482: 1956, 489: 1956, 499: 1956}, // 3655 - {1990, 1990}, - {26: 6141}, - {1729, 1729, 1729, 1729, 1729, 1729, 1729, 8: 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 51: 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 486: 6124, 640: 1729}, - {462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 650: 2627, 697: 2628, 730: 2480, 739: 2629, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 2635, 2634, 2483, 760: 2610, 762: 2481, 2632, 2633, 2631, 779: 2482, 783: 2630, 808: 2636, 838: 6123}, - {1984, 1984}, + {641: 6124}, + {467: 6125}, + {1974, 1974, 15: 1974, 47: 1974, 49: 1974, 51: 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 464: 1974, 644: 1974, 886: 6126}, + {1981, 1981, 15: 6081, 47: 6057, 49: 6077, 51: 6070, 6060, 6056, 6064, 6068, 6080, 6063, 6069, 6067, 6065, 6078, 6071, 6059, 6079, 6058, 6061, 6062, 6066, 464: 6072, 644: 6082, 882: 6074, 6073, 6076, 6055, 887: 6075}, + {1996, 1996, 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 6152}, // 3660 - {177: 6128, 302: 6131, 318: 6130, 388: 6127, 393: 6132, 464: 6125, 564: 6129, 1185: 6126}, - {462: 2513, 2512, 482: 6137, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 650: 2627, 697: 2628, 730: 2480, 739: 2629, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 2635, 2634, 2483, 760: 2610, 762: 2481, 2632, 2633, 2631, 779: 2482, 783: 2630, 808: 2636, 838: 6138}, - {462: 2513, 2512, 482: 6133, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 650: 2627, 697: 2628, 730: 2480, 739: 2629, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 2635, 2634, 2483, 760: 2610, 762: 2481, 2632, 2633, 2631, 779: 2482, 783: 2630, 808: 2636, 838: 6134}, - {462: 1983, 1983, 482: 1983, 491: 1983, 496: 1983, 556: 1983, 558: 1983, 634: 1983, 642: 1983, 650: 1983, 730: 1983}, - {462: 1982, 1982, 482: 1982, 491: 1982, 496: 1982, 556: 1982, 558: 1982, 634: 1982, 642: 1982, 650: 1982, 730: 1982}, + {1994, 1994}, + {26: 6150}, + {1732, 1732, 1732, 1732, 1732, 1732, 1732, 8: 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 51: 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 489: 6133, 643: 1732}, + {465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 653: 2631, 700: 2632, 733: 2484, 742: 2633, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 2639, 2638, 2487, 763: 2614, 765: 2485, 2636, 2637, 2635, 782: 2486, 786: 2634, 811: 2640, 841: 6132}, + {1988, 1988}, // 3665 - {462: 1981, 1981, 482: 1981, 491: 1981, 496: 1981, 556: 1981, 558: 1981, 634: 1981, 642: 1981, 650: 1981, 730: 1981}, - {462: 1980, 1980, 482: 1980, 491: 1980, 496: 1980, 556: 1980, 558: 1980, 634: 1980, 642: 1980, 650: 1980, 730: 1980}, - {462: 1979, 1979, 482: 1979, 491: 1979, 496: 1979, 556: 1979, 558: 1979, 634: 1979, 642: 1979, 650: 1979, 730: 1979}, - {462: 1978, 1978, 482: 1978, 491: 1978, 496: 1978, 556: 1978, 558: 1978, 634: 1978, 642: 1978, 650: 1978, 730: 1978}, - {26: 6135}, + {175: 6137, 303: 6140, 320: 6139, 391: 6136, 396: 6141, 467: 6134, 567: 6138, 1188: 6135}, + {465: 2517, 2516, 485: 6146, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 653: 2631, 700: 2632, 733: 2484, 742: 2633, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 2639, 2638, 2487, 763: 2614, 765: 2485, 2636, 2637, 2635, 782: 2486, 786: 2634, 811: 2640, 841: 6147}, + {465: 2517, 2516, 485: 6142, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 653: 2631, 700: 2632, 733: 2484, 742: 2633, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 2639, 2638, 2487, 763: 2614, 765: 2485, 2636, 2637, 2635, 782: 2486, 786: 2634, 811: 2640, 841: 6143}, + {465: 1987, 1987, 485: 1987, 494: 1987, 499: 1987, 559: 1987, 561: 1987, 637: 1987, 645: 1987, 653: 1987, 733: 1987}, + {465: 1986, 1986, 485: 1986, 494: 1986, 499: 1986, 559: 1986, 561: 1986, 637: 1986, 645: 1986, 653: 1986, 733: 1986}, // 3670 - {1985, 1985}, - {497: 2655, 721: 6136}, - {1986, 1986}, - {26: 6139}, - {1987, 1987}, + {465: 1985, 1985, 485: 1985, 494: 1985, 499: 1985, 559: 1985, 561: 1985, 637: 1985, 645: 1985, 653: 1985, 733: 1985}, + {465: 1984, 1984, 485: 1984, 494: 1984, 499: 1984, 559: 1984, 561: 1984, 637: 1984, 645: 1984, 653: 1984, 733: 1984}, + {465: 1983, 1983, 485: 1983, 494: 1983, 499: 1983, 559: 1983, 561: 1983, 637: 1983, 645: 1983, 653: 1983, 733: 1983}, + {465: 1982, 1982, 485: 1982, 494: 1982, 499: 1982, 559: 1982, 561: 1982, 637: 1982, 645: 1982, 653: 1982, 733: 1982}, + {26: 6144}, // 3675 - {497: 2655, 721: 6140}, - {1988, 1988}, - {497: 2655, 721: 6142}, {1989, 1989}, + {500: 2659, 724: 6145}, + {1990, 1990}, + {26: 6148}, {1991, 1991}, // 3680 - {1999, 1999}, - {486: 6167}, - {71: 2474, 145: 2476, 151: 2502, 153: 2473, 381: 6163, 462: 2513, 2512, 491: 2511, 493: 6149, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 6147, 730: 2480, 739: 6148, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 6155, 6154, 2483, 760: 2610, 762: 2481, 6152, 6153, 6151, 779: 2482, 783: 6150, 795: 6161, 830: 6157, 834: 6158, 845: 6156, 849: 6159, 6160, 905: 6162}, - {451, 451, 469: 789, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, - {453, 453, 469: 790, 477: 790, 790}, + {500: 2659, 724: 6149}, + {1992, 1992}, + {500: 2659, 724: 6151}, + {1993, 1993}, + {1995, 1995}, // 3685 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 5494, 5489, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 5492, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 5491, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 5496, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 5490, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 5497, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 5493, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 495: 3741, 557: 5504, 577: 5503, 635: 3739, 651: 5501, 2681, 2682, 2680, 759: 5505, 816: 5502, 960: 5506, 1137: 5499}, + {2003, 2003}, + {489: 6176}, + {71: 2478, 145: 2480, 151: 2506, 153: 2477, 384: 6172, 465: 2517, 2516, 494: 2515, 496: 6158, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 6156, 733: 2484, 742: 6157, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 6164, 6163, 2487, 763: 2614, 765: 2485, 6161, 6162, 6160, 782: 2486, 786: 6159, 798: 6170, 833: 6166, 837: 6167, 848: 6165, 852: 6168, 6169, 908: 6171}, + {451, 451, 472: 790, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {453, 453, 472: 791, 480: 791, 791}, + // 3690 + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 5501, 5496, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 5499, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 5498, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 5503, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 5497, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 5504, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 5500, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 498: 3748, 560: 5511, 580: 5510, 638: 3746, 655: 5508, 2685, 2686, 2684, 762: 5512, 819: 5509, 963: 5513, 1140: 5506}, {458, 458}, {457, 457}, {456, 456}, {455, 455}, - // 3690 + // 3695 {454, 454}, {452, 452}, {450, 450}, {449, 449}, {448, 448}, - // 3695 + // 3700 {447, 447}, {446, 446}, - {21: 5001}, - {1997, 1997}, - {486: 6164}, - // 3700 - {464: 6165}, - {71: 2474, 145: 2476, 151: 2502, 153: 2473, 462: 2513, 2512, 491: 2511, 493: 6149, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 6147, 730: 2480, 739: 6148, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 6155, 6154, 2483, 760: 2610, 762: 2481, 6152, 6153, 6151, 779: 2482, 783: 6150, 795: 6161, 830: 6157, 834: 6158, 845: 6156, 849: 6159, 6160, 905: 6166}, - {1996, 1996}, - {464: 6168}, - {71: 2474, 145: 2476, 151: 2502, 153: 2473, 462: 2513, 2512, 491: 2511, 493: 6149, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 6147, 730: 2480, 739: 6148, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 6155, 6154, 2483, 760: 2610, 762: 2481, 6152, 6153, 6151, 779: 2482, 783: 6150, 795: 6161, 830: 6157, 834: 6158, 845: 6156, 849: 6159, 6160, 905: 6169}, + {21: 5008}, + {2001, 2001}, + {489: 6173}, // 3705 - {1998, 1998}, - {2025, 2025}, - {2024, 2024}, - {2: 1030, 1030, 1030, 1030, 1030, 8: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 51: 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 479: 1030, 487: 1030, 736: 5204, 5203, 5202, 823: 5205, 872: 6173}, - {2: 1018, 1018, 1018, 1018, 1018, 8: 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 51: 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 5568, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 479: 1018, 487: 1018, 1088: 6174}, + {467: 6174}, + {71: 2478, 145: 2480, 151: 2506, 153: 2477, 465: 2517, 2516, 494: 2515, 496: 6158, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 6156, 733: 2484, 742: 6157, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 6164, 6163, 2487, 763: 2614, 765: 2485, 6161, 6162, 6160, 782: 2486, 786: 6159, 798: 6170, 833: 6166, 837: 6167, 848: 6165, 852: 6168, 6169, 908: 6175}, + {2000, 2000}, + {467: 6177}, + {71: 2478, 145: 2480, 151: 2506, 153: 2477, 465: 2517, 2516, 494: 2515, 496: 6158, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 6156, 733: 2484, 742: 6157, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 6164, 6163, 2487, 763: 2614, 765: 2485, 6161, 6162, 6160, 782: 2486, 786: 6159, 798: 6170, 833: 6166, 837: 6167, 848: 6165, 852: 6168, 6169, 908: 6178}, // 3710 - {2: 1816, 1816, 1816, 1816, 1816, 8: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 51: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 479: 4092, 487: 1816, 841: 6175}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 487: 6176, 651: 5572, 2681, 2682, 2680, 902: 5573, 949: 5571}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6178, 2681, 2682, 2680, 725: 5585, 902: 5573, 949: 6177}, - {7: 5581, 470: 6181}, - {1028, 1028, 1028, 1028, 1028, 1028, 1028, 1020, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 51: 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 467: 1028, 470: 1020, 479: 1028, 1028, 483: 1028, 489: 1028, 1028, 492: 1028, 514: 1028, 640: 6179, 892: 5574}, - // 3715 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 512: 5577, 651: 6180, 2681, 2682, 2680}, - {1027, 1027, 1027, 1027, 1027, 1027, 1027, 1020, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 51: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 467: 1027, 470: 1020, 479: 1027, 1027, 483: 1027, 489: 1027, 1027, 492: 1027, 514: 1027, 640: 5579, 892: 5578}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 5216, 568: 5211, 651: 3825, 2681, 2682, 2680, 697: 5215, 725: 5214, 785: 5213, 788: 5212, 5218, 837: 5208, 875: 6182}, - {239, 239, 7: 5262, 489: 2641, 776: 2642, 6183}, + {2002, 2002}, + {2029, 2029}, {2028, 2028}, + {2: 1031, 1031, 1031, 1031, 1031, 8: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 51: 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 482: 1031, 490: 1031, 739: 5211, 5210, 5209, 826: 5212, 875: 6182}, + {2: 1019, 1019, 1019, 1019, 1019, 8: 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 51: 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 5575, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 482: 1019, 490: 1019, 1091: 6183}, + // 3715 + {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 482: 4099, 490: 1820, 844: 6184}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 490: 6185, 655: 5579, 2685, 2686, 2684, 905: 5580, 952: 5578}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6187, 2685, 2686, 2684, 728: 5592, 905: 5580, 952: 6186}, + {7: 5588, 473: 6190}, + {1029, 1029, 1029, 1029, 1029, 1029, 1029, 1021, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 51: 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 470: 1029, 473: 1021, 482: 1029, 1029, 486: 1029, 492: 1029, 1029, 495: 1029, 517: 1029, 643: 6188, 895: 5581}, // 3720 - {2031, 2031, 7: 3496}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6243, 2681, 2682, 2680}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 6241}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 6232}, - {110: 5340, 558: 5339, 1127: 6228}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 515: 5584, 655: 6189, 2685, 2686, 2684}, + {1028, 1028, 1028, 1028, 1028, 1028, 1028, 1021, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 51: 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 470: 1028, 473: 1021, 482: 1028, 1028, 486: 1028, 492: 1028, 1028, 495: 1028, 517: 1028, 643: 5586, 895: 5585}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 5223, 571: 5218, 655: 3832, 2685, 2686, 2684, 700: 5222, 728: 5221, 788: 5220, 791: 5219, 5225, 840: 5215, 878: 6191}, + {239, 239, 7: 5269, 492: 2645, 779: 2646, 6192}, + {2032, 2032}, // 3725 - {154: 580, 160: 5394}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 555: 6223, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 6222}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 555: 6219, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5099, 853: 6218}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 555: 6215, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 5532, 5530, 848: 6214}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6210}, + {2035, 2035, 7: 3503}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6252, 2685, 2686, 2684}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 6250}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 6241}, + {110: 5347, 561: 5346, 1130: 6237}, // 3730 - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 6208}, - {154: 6203}, - {158: 6200}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 6198}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 6199}, + {154: 580, 160: 5401}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 558: 6232, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 6231}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 558: 6228, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5106, 856: 6227}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 558: 6224, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 5539, 5537, 851: 6223}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6219}, // 3735 - {26, 26, 7: 3828}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 6201}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4869, 2681, 2682, 2680, 871: 6202}, - {53, 53}, - {482: 6204}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 6217}, + {154: 6212}, + {158: 6209}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 6207}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 6208}, // 3740 - {462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 5553, 730: 5551, 739: 5554, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5556, 5555, 5552, 760: 2610, 762: 5558, 5559, 5560, 5557, 831: 6205}, - {171, 171, 470: 6206}, - {462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 5553, 730: 5551, 739: 5554, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5556, 5555, 5552, 760: 2610, 762: 5558, 5559, 5560, 5557, 831: 6207}, - {170, 170}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6209, 2681, 2682, 2680}, + {26, 26, 7: 3835}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 6210}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4876, 2685, 2686, 2684, 874: 6211}, + {53, 53}, + {485: 6213}, // 3745 - {1921, 1921}, - {2010, 2010, 156: 6212, 480: 6211}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4633, 2681, 2682, 2680, 775: 6213}, - {2008, 2008}, - {2009, 2009, 7: 4634}, + {465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 5560, 733: 5558, 742: 5561, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5563, 5562, 5559, 763: 2614, 765: 5565, 5566, 5567, 5564, 834: 6214}, + {171, 171, 473: 6215}, + {465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 5560, 733: 5558, 742: 5561, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5563, 5562, 5559, 763: 2614, 765: 5565, 5566, 5567, 5564, 834: 6216}, + {170, 170}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6218, 2685, 2686, 2684}, // 3750 - {2012, 2012, 7: 5533}, - {573: 6216}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 5532, 5530, 848: 6217}, - {2011, 2011, 7: 5533}, - {2014, 2014, 7: 5101}, + {1925, 1925}, + {2014, 2014, 156: 6221, 483: 6220}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4640, 2685, 2686, 2684, 778: 6222}, + {2012, 2012}, + {2013, 2013, 7: 4641}, // 3755 - {573: 6220}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5099, 853: 6221}, - {2013, 2013, 7: 5101}, - {2007, 2007, 7: 3828, 658: 4685, 660: 4684, 896: 6227}, - {573: 6224}, + {2016, 2016, 7: 5540}, + {576: 6225}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 5539, 5537, 851: 6226}, + {2015, 2015, 7: 5540}, + {2018, 2018, 7: 5108}, // 3760 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 6225}, - {2007, 2007, 7: 3828, 658: 4685, 660: 4684, 896: 6226}, - {2015, 2015}, - {2016, 2016}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 6229}, + {576: 6229}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5106, 856: 6230}, + {2017, 2017, 7: 5108}, + {2011, 2011, 7: 3835, 661: 4692, 663: 4691, 899: 6236}, + {576: 6233}, // 3765 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 3826, 782: 6230}, - {2007, 2007, 7: 3828, 658: 4685, 660: 4684, 896: 6231}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 6234}, + {2011, 2011, 7: 3835, 661: 4692, 663: 4691, 899: 6235}, + {2019, 2019}, {2020, 2020}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6233, 2681, 2682, 2680}, - {461: 6234}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 6238}, // 3770 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6235}, - {2150, 2150, 81: 4133, 485: 4134, 855: 6237, 868: 6236, 1043: 6238}, - {2149, 2149, 81: 4133, 855: 6240}, - {2148, 2148, 485: 4134, 868: 6239}, - {2021, 2021}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 3833, 785: 6239}, + {2011, 2011, 7: 3835, 661: 4692, 663: 4691, 899: 6240}, + {2024, 2024}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6242, 2685, 2686, 2684}, + {464: 6243}, // 3775 - {2146, 2146}, - {2147, 2147}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5197, 2681, 2682, 2680, 801: 6242}, - {2022, 2022}, - {2158, 2158}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6244}, + {2154, 2154, 81: 4140, 488: 4141, 858: 6246, 871: 6245, 1046: 6247}, + {2153, 2153, 81: 4140, 858: 6249}, + {2152, 2152, 488: 4141, 871: 6248}, + {2025, 2025}, // 3780 - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 6465}, - {637: 6453}, - {637: 2144}, - {637: 2143}, - {637: 2142}, + {2150, 2150}, + {2151, 2151}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5204, 2685, 2686, 2684, 804: 6251}, + {2026, 2026}, + {2162, 2162}, // 3785 - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 6430}, - {16: 6351, 81: 6350, 99: 2048, 139: 2048, 656: 2048, 1309: 6349}, - {496: 6348}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 6336}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 464: 1818, 555: 4709, 559: 1818, 771: 6304}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 6474}, + {640: 6462}, + {640: 2148}, + {640: 2147}, + {640: 2146}, // 3790 - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 464: 1818, 555: 4709, 771: 6298}, - {154: 6293}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 6257}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6258}, - {49, 49, 4: 49, 49, 49, 13: 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 70: 6266, 6263, 6269, 6270, 6271, 6264, 6262, 6272, 6268, 6265, 468: 49, 49, 473: 49, 492: 49, 495: 49, 635: 49, 637: 49, 645: 6267, 898: 6261, 1175: 6259, 1266: 6260}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 6439}, + {16: 6360, 81: 6359, 99: 2052, 139: 2052, 659: 2052, 1312: 6358}, + {499: 6357}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 6345}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 467: 1822, 558: 4716, 562: 1822, 774: 6313}, // 3795 - {387, 387, 4: 4139, 4141, 391, 13: 4158, 2121, 4156, 4097, 4160, 4147, 4176, 4140, 4143, 4142, 4145, 4146, 4148, 4155, 391, 4166, 4167, 4153, 4154, 4159, 4161, 4173, 4172, 4178, 4174, 4171, 4164, 4169, 4170, 4163, 4165, 4168, 4157, 468: 4138, 4175, 473: 2121, 492: 4852, 495: 2121, 635: 2121, 637: 4144, 767: 4149, 778: 4151, 798: 4150, 820: 4152, 824: 4162, 828: 4177, 904: 5416, 999: 6292}, - {48, 48, 4: 48, 48, 48, 13: 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 70: 6266, 6263, 6269, 6270, 6271, 6264, 6262, 6272, 6268, 6265, 468: 48, 48, 473: 48, 492: 48, 495: 48, 635: 48, 637: 48, 645: 6267, 898: 6291}, - {47, 47, 4: 47, 47, 47, 13: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 70: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 468: 47, 47, 473: 47, 492: 47, 495: 47, 635: 47, 637: 47, 645: 47}, - {474: 2002, 2002, 486: 4179, 497: 2002, 647: 6288, 724: 6287}, - {463: 6284, 474: 2002, 2002, 486: 4179, 497: 2002, 724: 6283}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 467: 1822, 558: 4716, 774: 6307}, + {154: 6302}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 6266}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6267}, + {49, 49, 4: 49, 49, 49, 13: 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 70: 6275, 6272, 6278, 6279, 6280, 6273, 6271, 6281, 6277, 6274, 471: 49, 49, 476: 49, 495: 49, 498: 49, 638: 49, 640: 49, 648: 6276, 901: 6270, 1178: 6268, 1269: 6269}, // 3800 - {474: 2002, 2002, 486: 4179, 497: 2002, 724: 6281}, - {40, 40, 4: 40, 40, 40, 13: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 70: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 468: 40, 40, 473: 40, 492: 40, 495: 40, 635: 40, 637: 40, 645: 40}, - {72: 6279, 74: 6280, 6277, 645: 6278}, - {474: 2002, 2002, 486: 4179, 497: 2002, 724: 6275}, - {37, 37, 4: 37, 37, 37, 13: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 70: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 468: 37, 37, 473: 37, 492: 37, 495: 37, 635: 37, 637: 37, 645: 37}, + {387, 387, 4: 4146, 4148, 391, 13: 4165, 2125, 4163, 4104, 4167, 4154, 4183, 4147, 4150, 4149, 4152, 4153, 4155, 4162, 391, 4173, 4174, 4160, 4161, 4166, 4168, 4180, 4179, 4185, 4181, 4178, 4171, 4176, 4177, 4170, 4172, 4175, 4164, 471: 4145, 4182, 476: 2125, 495: 4859, 498: 2125, 638: 2125, 640: 4151, 770: 4156, 781: 4158, 801: 4157, 823: 4159, 827: 4169, 831: 4184, 907: 5423, 1002: 6301}, + {48, 48, 4: 48, 48, 48, 13: 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 70: 6275, 6272, 6278, 6279, 6280, 6273, 6271, 6281, 6277, 6274, 471: 48, 48, 476: 48, 495: 48, 498: 48, 638: 48, 640: 48, 648: 6276, 901: 6300}, + {47, 47, 4: 47, 47, 47, 13: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 70: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 471: 47, 47, 476: 47, 495: 47, 498: 47, 638: 47, 640: 47, 648: 47}, + {477: 2006, 2006, 489: 4186, 500: 2006, 650: 6297, 727: 6296}, + {466: 6293, 477: 2006, 2006, 489: 4186, 500: 2006, 727: 6292}, // 3805 - {474: 2002, 2002, 486: 4179, 497: 2002, 724: 6273}, - {34, 34, 4: 34, 34, 34, 13: 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 70: 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 468: 34, 34, 473: 34, 492: 34, 495: 34, 635: 34, 637: 34, 645: 34}, - {32, 32, 4: 32, 32, 32, 13: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 468: 32, 32, 473: 32, 492: 32, 495: 32, 635: 32, 637: 32, 645: 32}, - {31, 31, 4: 31, 31, 31, 13: 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 70: 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 468: 31, 31, 473: 31, 492: 31, 495: 31, 635: 31, 637: 31, 645: 31}, - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6274}, + {477: 2006, 2006, 489: 4186, 500: 2006, 727: 6290}, + {40, 40, 4: 40, 40, 40, 13: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 70: 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 471: 40, 40, 476: 40, 495: 40, 498: 40, 638: 40, 640: 40, 648: 40}, + {72: 6288, 74: 6289, 6286, 648: 6287}, + {477: 2006, 2006, 489: 4186, 500: 2006, 727: 6284}, + {37, 37, 4: 37, 37, 37, 13: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 70: 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 471: 37, 37, 476: 37, 495: 37, 498: 37, 638: 37, 640: 37, 648: 37}, // 3810 - {35, 35, 4: 35, 35, 35, 13: 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 70: 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 468: 35, 35, 473: 35, 492: 35, 495: 35, 635: 35, 637: 35, 645: 35}, - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6276}, - {38, 38, 4: 38, 38, 38, 13: 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 70: 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 468: 38, 38, 473: 38, 492: 38, 495: 38, 635: 38, 637: 38, 645: 38}, - {39, 39, 4: 39, 39, 39, 13: 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 70: 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 468: 39, 39, 473: 39, 492: 39, 495: 39, 635: 39, 637: 39, 645: 39}, - {36, 36, 4: 36, 36, 36, 13: 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70: 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 468: 36, 36, 473: 36, 492: 36, 495: 36, 635: 36, 637: 36, 645: 36}, + {477: 2006, 2006, 489: 4186, 500: 2006, 727: 6282}, + {34, 34, 4: 34, 34, 34, 13: 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 70: 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 471: 34, 34, 476: 34, 495: 34, 498: 34, 638: 34, 640: 34, 648: 34}, + {32, 32, 4: 32, 32, 32, 13: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 471: 32, 32, 476: 32, 495: 32, 498: 32, 638: 32, 640: 32, 648: 32}, + {31, 31, 4: 31, 31, 31, 13: 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 70: 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 471: 31, 31, 476: 31, 495: 31, 498: 31, 638: 31, 640: 31, 648: 31}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6283}, // 3815 - {33, 33, 4: 33, 33, 33, 13: 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 70: 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 468: 33, 33, 473: 33, 492: 33, 495: 33, 635: 33, 637: 33, 645: 33}, - {30, 30, 4: 30, 30, 30, 13: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 70: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 468: 30, 30, 473: 30, 492: 30, 495: 30, 635: 30, 637: 30, 645: 30}, - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6282}, - {41, 41, 4: 41, 41, 41, 13: 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 70: 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 468: 41, 41, 473: 41, 492: 41, 495: 41, 635: 41, 637: 41, 645: 41}, - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6286}, + {35, 35, 4: 35, 35, 35, 13: 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 70: 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 471: 35, 35, 476: 35, 495: 35, 498: 35, 638: 35, 640: 35, 648: 35}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6285}, + {38, 38, 4: 38, 38, 38, 13: 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 70: 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 471: 38, 38, 476: 38, 495: 38, 498: 38, 638: 38, 640: 38, 648: 38}, + {39, 39, 4: 39, 39, 39, 13: 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 70: 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 471: 39, 39, 476: 39, 495: 39, 498: 39, 638: 39, 640: 39, 648: 39}, + {36, 36, 4: 36, 36, 36, 13: 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 70: 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 471: 36, 36, 476: 36, 495: 36, 498: 36, 638: 36, 640: 36, 648: 36}, // 3820 - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6285}, - {42, 42, 4: 42, 42, 42, 13: 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 70: 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 468: 42, 42, 473: 42, 492: 42, 495: 42, 635: 42, 637: 42, 645: 42}, - {43, 43, 4: 43, 43, 43, 13: 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 70: 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 468: 43, 43, 473: 43, 492: 43, 495: 43, 635: 43, 637: 43, 645: 43}, - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6290}, - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6289}, + {33, 33, 4: 33, 33, 33, 13: 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 70: 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 471: 33, 33, 476: 33, 495: 33, 498: 33, 638: 33, 640: 33, 648: 33}, + {30, 30, 4: 30, 30, 30, 13: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 70: 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 471: 30, 30, 476: 30, 495: 30, 498: 30, 638: 30, 640: 30, 648: 30}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6291}, + {41, 41, 4: 41, 41, 41, 13: 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 70: 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 471: 41, 41, 476: 41, 495: 41, 498: 41, 638: 41, 640: 41, 648: 41}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6295}, // 3825 - {44, 44, 4: 44, 44, 44, 13: 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 70: 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 468: 44, 44, 473: 44, 492: 44, 495: 44, 635: 44, 637: 44, 645: 44}, - {45, 45, 4: 45, 45, 45, 13: 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 70: 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 468: 45, 45, 473: 45, 492: 45, 495: 45, 635: 45, 637: 45, 645: 45}, - {46, 46, 4: 46, 46, 46, 13: 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 70: 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 468: 46, 46, 473: 46, 492: 46, 495: 46, 635: 46, 637: 46, 645: 46}, - {50, 50}, - {482: 6294}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6294}, + {42, 42, 4: 42, 42, 42, 13: 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 70: 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 471: 42, 42, 476: 42, 495: 42, 498: 42, 638: 42, 640: 42, 648: 42}, + {43, 43, 4: 43, 43, 43, 13: 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 70: 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 471: 43, 43, 476: 43, 495: 43, 498: 43, 638: 43, 640: 43, 648: 43}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6299}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6298}, // 3830 - {462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 5553, 730: 5551, 739: 5554, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5556, 5555, 5552, 760: 2610, 762: 5558, 5559, 5560, 5557, 831: 6295}, - {470: 6296}, - {462: 2513, 2512, 491: 2511, 496: 2497, 556: 2496, 558: 2510, 634: 2506, 642: 2611, 697: 5553, 730: 5551, 739: 5554, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 5556, 5555, 5552, 760: 2610, 762: 5558, 5559, 5560, 5557, 831: 6297}, - {172, 172}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 6300, 5530, 1101: 6301, 1261: 6299}, + {44, 44, 4: 44, 44, 44, 13: 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 70: 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 471: 44, 44, 476: 44, 495: 44, 498: 44, 638: 44, 640: 44, 648: 44}, + {45, 45, 4: 45, 45, 45, 13: 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 70: 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 471: 45, 45, 476: 45, 495: 45, 498: 45, 638: 45, 640: 45, 648: 45}, + {46, 46, 4: 46, 46, 46, 13: 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 70: 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 471: 46, 46, 476: 46, 495: 46, 498: 46, 638: 46, 640: 46, 648: 46}, + {50, 50}, + {485: 6303}, // 3835 - {234, 234, 7: 6302}, + {465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 5560, 733: 5558, 742: 5561, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5563, 5562, 5559, 763: 2614, 765: 5565, 5566, 5567, 5564, 834: 6304}, + {473: 6305}, + {465: 2517, 2516, 494: 2515, 499: 2501, 559: 2500, 561: 2514, 637: 2510, 645: 2615, 700: 5560, 733: 5558, 742: 5561, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 5563, 5562, 5559, 763: 2614, 765: 5565, 5566, 5567, 5564, 834: 6306}, + {172, 172}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 6309, 5537, 1104: 6310, 1264: 6308}, + // 3840 + {234, 234, 7: 6311}, {183, 183, 7: 183}, {182, 182, 7: 182}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 5524, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 5529, 651: 3397, 2681, 2682, 2680, 726: 5052, 787: 5531, 806: 6300, 5530, 1101: 6303}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 5531, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 5536, 655: 3404, 2685, 2686, 2684, 729: 5059, 790: 5538, 809: 6309, 5537, 1104: 6312}, {181, 181, 7: 181}, - // 3840 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5115, 876: 5116, 907: 6305}, - {217, 217, 7: 5118, 13: 217, 46: 217, 463: 217, 649: 5162, 942: 5161, 6306}, - {225, 225, 13: 225, 46: 225, 463: 6308, 990: 6307}, - {204, 204, 13: 6325, 46: 6323, 935: 6324, 6322, 1081: 6321, 6320}, - {126: 6313, 6311, 6312, 6314, 989: 6310, 1173: 6309}, // 3845 - {224, 224, 13: 224, 46: 224, 126: 6313, 6311, 6312, 6314, 989: 6319}, - {223, 223, 13: 223, 46: 223, 126: 223, 223, 223, 223}, - {497: 2655, 721: 3955, 752: 6318}, - {497: 2655, 721: 3955, 752: 6317}, - {497: 2655, 721: 3955, 752: 6316}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5122, 879: 5123, 910: 6314}, + {217, 217, 7: 5125, 13: 217, 46: 217, 466: 217, 652: 5169, 945: 5168, 6315}, + {225, 225, 13: 225, 46: 225, 466: 6317, 993: 6316}, + {204, 204, 13: 6334, 46: 6332, 938: 6333, 6331, 1084: 6330, 6329}, + {126: 6322, 6320, 6321, 6323, 992: 6319, 1176: 6318}, // 3850 - {497: 2655, 721: 3955, 752: 6315}, + {224, 224, 13: 224, 46: 224, 126: 6322, 6320, 6321, 6323, 992: 6328}, + {223, 223, 13: 223, 46: 223, 126: 223, 223, 223, 223}, + {500: 2659, 724: 3962, 755: 6327}, + {500: 2659, 724: 3962, 755: 6326}, + {500: 2659, 724: 3962, 755: 6325}, + // 3855 + {500: 2659, 724: 3962, 755: 6324}, {218, 218, 13: 218, 46: 218, 126: 218, 218, 218, 218}, {219, 219, 13: 219, 46: 219, 126: 219, 219, 219, 219}, {220, 220, 13: 220, 46: 220, 126: 220, 220, 220, 220}, {221, 221, 13: 221, 46: 221, 126: 221, 221, 221, 221}, - // 3855 + // 3860 {222, 222, 13: 222, 46: 222, 126: 222, 222, 222, 222}, {235, 235}, - {203, 203, 13: 6325, 46: 6323, 935: 6324, 6335}, + {203, 203, 13: 6334, 46: 6332, 938: 6333, 6344}, {202, 202, 13: 202, 46: 202}, - {485: 6334, 955: 6333}, - // 3860 - {198, 198, 13: 198, 46: 198, 204: 6329, 468: 6330, 570: 6328}, - {324: 6326}, - {193, 193, 13: 193, 46: 193, 204: 193, 468: 193, 570: 193, 1165: 6327}, - {194, 194, 13: 194, 46: 194, 204: 194, 468: 194, 570: 194}, - {497: 2655, 721: 3955, 752: 6331}, + {488: 6343, 958: 6342}, // 3865 + {198, 198, 13: 198, 46: 198, 204: 6338, 471: 6339, 573: 6337}, + {327: 6335}, + {193, 193, 13: 193, 46: 193, 204: 193, 471: 193, 573: 193, 1168: 6336}, + {194, 194, 13: 194, 46: 194, 204: 194, 471: 194, 573: 194}, + {500: 2659, 724: 3962, 755: 6340}, + // 3870 {196, 196, 13: 196, 46: 196}, {195, 195, 13: 195, 46: 195}, - {106: 6332}, + {106: 6341}, {197, 197, 13: 197, 46: 197}, {200, 200, 13: 200, 46: 200}, - // 3870 + // 3875 {199, 199, 13: 199, 46: 199}, {201, 201, 13: 201, 46: 201}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6337, 2681, 2682, 2680}, - {487: 6338}, - {464: 6339}, - // 3875 - {1913, 1913, 15: 1913, 47: 1913, 49: 1913, 51: 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 137: 6342, 461: 1913, 496: 6341, 641: 1913, 1023: 6340}, - {1970, 1970, 15: 1970, 47: 1970, 49: 1970, 51: 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 461: 1970, 641: 1970, 883: 6347}, - {1912, 1912, 15: 1912, 47: 1912, 49: 1912, 51: 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 461: 1912, 641: 1912}, - {196: 6345, 377: 6346, 631: 6344, 639: 6343}, - {1911, 1911, 15: 1911, 47: 1911, 49: 1911, 51: 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 461: 1911, 641: 1911}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6346, 2685, 2686, 2684}, + {490: 6347}, + {467: 6348}, // 3880 - {1910, 1910, 15: 1910, 47: 1910, 49: 1910, 51: 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 461: 1910, 641: 1910}, - {1909, 1909, 15: 1909, 47: 1909, 49: 1909, 51: 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 461: 1909, 641: 1909}, - {1908, 1908, 15: 1908, 47: 1908, 49: 1908, 51: 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 461: 1908, 641: 1908}, - {1925, 1925, 15: 6072, 47: 6048, 49: 6068, 51: 6061, 6051, 6047, 6055, 6059, 6071, 6054, 6060, 6058, 6056, 6069, 6062, 6050, 6070, 6049, 6052, 6053, 6057, 461: 6063, 641: 6073, 879: 6065, 6064, 6067, 6046, 884: 6066}, - {16: 2049, 81: 2049, 99: 2049, 139: 2049, 656: 2049}, + {1917, 1917, 15: 1917, 47: 1917, 49: 1917, 51: 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 137: 6351, 464: 1917, 499: 6350, 644: 1917, 1026: 6349}, + {1974, 1974, 15: 1974, 47: 1974, 49: 1974, 51: 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 464: 1974, 644: 1974, 886: 6356}, + {1916, 1916, 15: 1916, 47: 1916, 49: 1916, 51: 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 464: 1916, 644: 1916}, + {195: 6354, 380: 6355, 634: 6353, 642: 6352}, + {1915, 1915, 15: 1915, 47: 1915, 49: 1915, 51: 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 464: 1915, 644: 1915}, // 3885 - {99: 2044, 139: 6398, 656: 2044, 1311: 6397}, - {486: 6393}, - {158: 6352}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 6353}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4869, 2681, 2682, 2680, 871: 6354}, + {1914, 1914, 15: 1914, 47: 1914, 49: 1914, 51: 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 464: 1914, 644: 1914}, + {1913, 1913, 15: 1913, 47: 1913, 49: 1913, 51: 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 464: 1913, 644: 1913}, + {1912, 1912, 15: 1912, 47: 1912, 49: 1912, 51: 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 464: 1912, 644: 1912}, + {1929, 1929, 15: 6081, 47: 6057, 49: 6077, 51: 6070, 6060, 6056, 6064, 6068, 6080, 6063, 6069, 6067, 6065, 6078, 6071, 6059, 6079, 6058, 6061, 6062, 6066, 464: 6072, 644: 6082, 882: 6074, 6073, 6076, 6055, 887: 6075}, + {16: 2053, 81: 2053, 99: 2053, 139: 2053, 659: 2053}, // 3890 - {86: 6358, 88: 6363, 6365, 6359, 6364, 6367, 6361, 6357, 6362, 6366, 6360, 859: 6355, 1083: 6356}, - {2459, 2459, 7: 2459, 86: 2459, 88: 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459}, - {52, 52, 7: 6391, 86: 6358, 88: 6363, 6365, 6359, 6364, 6367, 6361, 6357, 6362, 6366, 6360, 859: 6390}, - {464: 2002, 486: 4179, 724: 6388}, - {464: 2002, 486: 4179, 724: 6386}, + {99: 2048, 139: 6407, 659: 2048, 1314: 6406}, + {489: 6402}, + {158: 6361}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 6362}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4876, 2685, 2686, 2684, 874: 6363}, // 3895 - {486: 4179, 497: 2002, 724: 6384}, - {486: 4179, 497: 2002, 724: 6382}, - {486: 4179, 497: 2002, 724: 6380}, - {464: 2002, 486: 4179, 724: 6378}, - {464: 2002, 486: 4179, 724: 6376}, + {86: 6367, 88: 6372, 6374, 6368, 6373, 6376, 6370, 6366, 6371, 6375, 6369, 862: 6364, 1086: 6365}, + {2463, 2463, 7: 2463, 86: 2463, 88: 2463, 2463, 2463, 2463, 2463, 2463, 2463, 2463, 2463, 2463}, + {52, 52, 7: 6400, 86: 6367, 88: 6372, 6374, 6368, 6373, 6376, 6370, 6366, 6371, 6375, 6369, 862: 6399}, + {467: 2006, 489: 4186, 727: 6397}, + {467: 2006, 489: 4186, 727: 6395}, // 3900 - {464: 2002, 486: 4179, 724: 6374}, - {464: 2002, 486: 4179, 724: 6372}, - {464: 2002, 486: 4179, 724: 6370}, - {464: 2002, 486: 4179, 724: 6368}, - {464: 6369}, + {489: 4186, 500: 2006, 727: 6393}, + {489: 4186, 500: 2006, 727: 6391}, + {489: 4186, 500: 2006, 727: 6389}, + {467: 2006, 489: 4186, 727: 6387}, + {467: 2006, 489: 4186, 727: 6385}, // 3905 - {2446, 2446, 7: 2446, 86: 2446, 88: 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446}, - {464: 6371}, - {2447, 2447, 7: 2447, 86: 2447, 88: 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447, 2447}, - {464: 6373}, - {2448, 2448, 7: 2448, 86: 2448, 88: 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448, 2448}, + {467: 2006, 489: 4186, 727: 6383}, + {467: 2006, 489: 4186, 727: 6381}, + {467: 2006, 489: 4186, 727: 6379}, + {467: 2006, 489: 4186, 727: 6377}, + {467: 6378}, // 3910 - {464: 6375}, - {2449, 2449, 7: 2449, 86: 2449, 88: 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449}, - {464: 6377}, {2450, 2450, 7: 2450, 86: 2450, 88: 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450}, - {464: 6379}, - // 3915 + {467: 6380}, {2451, 2451, 7: 2451, 86: 2451, 88: 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451}, - {497: 2655, 721: 2654, 731: 6381}, + {467: 6382}, {2452, 2452, 7: 2452, 86: 2452, 88: 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452}, - {497: 2655, 721: 2654, 731: 6383}, + // 3915 + {467: 6384}, {2453, 2453, 7: 2453, 86: 2453, 88: 2453, 2453, 2453, 2453, 2453, 2453, 2453, 2453, 2453, 2453}, - // 3920 - {497: 2655, 721: 2654, 731: 6385}, + {467: 6386}, {2454, 2454, 7: 2454, 86: 2454, 88: 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454}, - {464: 6387}, + {467: 6388}, + // 3920 {2455, 2455, 7: 2455, 86: 2455, 88: 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455, 2455}, - {464: 6389}, - // 3925 + {500: 2659, 724: 2658, 734: 6390}, {2456, 2456, 7: 2456, 86: 2456, 88: 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456}, - {2458, 2458, 7: 2458, 86: 2458, 88: 2458, 2458, 2458, 2458, 2458, 2458, 2458, 2458, 2458, 2458}, - {86: 6358, 88: 6363, 6365, 6359, 6364, 6367, 6361, 6357, 6362, 6366, 6360, 859: 6392}, + {500: 2659, 724: 2658, 734: 6392}, {2457, 2457, 7: 2457, 86: 2457, 88: 2457, 2457, 2457, 2457, 2457, 2457, 2457, 2457, 2457, 2457}, - {346: 6395, 383: 6396, 392: 6394}, + // 3925 + {500: 2659, 724: 2658, 734: 6394}, + {2458, 2458, 7: 2458, 86: 2458, 88: 2458, 2458, 2458, 2458, 2458, 2458, 2458, 2458, 2458, 2458}, + {467: 6396}, + {2459, 2459, 7: 2459, 86: 2459, 88: 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459}, + {467: 6398}, // 3930 - {99: 2047, 139: 2047, 656: 2047}, - {99: 2046, 139: 2046, 656: 2046}, - {99: 2045, 139: 2045, 656: 2045}, - {99: 2042, 656: 6402, 1314: 6401}, - {486: 6399}, + {2460, 2460, 7: 2460, 86: 2460, 88: 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460}, + {2462, 2462, 7: 2462, 86: 2462, 88: 2462, 2462, 2462, 2462, 2462, 2462, 2462, 2462, 2462, 2462}, + {86: 6367, 88: 6372, 6374, 6368, 6373, 6376, 6370, 6366, 6371, 6375, 6369, 862: 6401}, + {2461, 2461, 7: 2461, 86: 2461, 88: 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461, 2461}, + {349: 6404, 386: 6405, 395: 6403}, // 3935 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 6400}, - {99: 2043, 656: 2043}, - {99: 6406}, - {370: 6403}, - {139: 6404, 337: 6405}, + {99: 2051, 139: 2051, 659: 2051}, + {99: 2050, 139: 2050, 659: 2050}, + {99: 2049, 139: 2049, 659: 2049}, + {99: 2046, 659: 6411, 1317: 6410}, + {489: 6408}, // 3940 - {99: 2041}, - {99: 2040}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6408, 1313: 6407}, - {462: 6410, 467: 2038, 1312: 6409}, - {462: 2039, 467: 2039}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 6409}, + {99: 2047, 659: 2047}, + {99: 6415}, + {373: 6412}, + {139: 6413, 340: 6414}, // 3945 - {467: 6416}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6412, 2681, 2682, 2680, 1167: 6411}, - {7: 6414, 50: 6413}, - {7: 2036, 50: 2036}, - {467: 2037}, + {99: 2045}, + {99: 2044}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6417, 1316: 6416}, + {465: 6419, 470: 2042, 1315: 6418}, + {465: 2043, 470: 2043}, // 3950 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6415, 2681, 2682, 2680}, - {7: 2035, 50: 2035}, - {462: 2513, 2512, 491: 2511, 558: 2510, 634: 2506, 697: 6420, 739: 6418, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 6419, 6417, 3784, 1177: 6421}, - {2057, 2057, 463: 2057}, - {2056, 2056, 463: 2056, 469: 790, 477: 790, 790}, + {470: 6425}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6421, 2685, 2686, 2684, 1170: 6420}, + {7: 6423, 50: 6422}, + {7: 2040, 50: 2040}, + {470: 2041}, // 3955 - {2055, 2055, 463: 2055}, - {2054, 2054, 463: 2054, 469: 789, 477: 789, 789, 483: 2647, 488: 2648, 490: 2644, 754: 3795, 3796}, - {2034, 2034, 463: 6423, 1310: 6422}, - {2051, 2051}, - {136: 6425, 306: 6424}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6424, 2685, 2686, 2684}, + {7: 2039, 50: 2039}, + {465: 2517, 2516, 494: 2515, 561: 2514, 637: 2510, 700: 6429, 742: 6427, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 6428, 6426, 3791, 1180: 6430}, + {2061, 2061, 466: 2061}, + {2060, 2060, 466: 2060, 472: 791, 480: 791, 791}, // 3960 - {574: 6428}, - {574: 6426}, - {891: 6427}, - {2032, 2032}, - {891: 6429}, + {2059, 2059, 466: 2059}, + {2058, 2058, 466: 2058, 472: 790, 480: 790, 790, 486: 2651, 491: 2652, 493: 2648, 757: 3802, 3803}, + {2038, 2038, 466: 6432, 1313: 6431}, + {2055, 2055}, + {136: 6434, 307: 6433}, // 3965 - {2033, 2033}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5197, 2681, 2682, 2680, 801: 6431}, - {2130, 2130, 14: 2121, 16: 2121, 19: 2121, 468: 4138, 473: 2121, 493: 6435, 495: 2121, 635: 2121, 767: 6434, 778: 6433, 835: 6437, 917: 6436, 1178: 6432}, - {2139, 2139}, - {14: 3740, 16: 4097, 19: 6445, 473: 6444, 495: 3741, 635: 3739, 759: 6443, 767: 6446}, + {577: 6437}, + {577: 6435}, + {894: 6436}, + {2036, 2036}, + {894: 6438}, // 3970 - {2132, 2132, 14: 2132, 16: 2132, 19: 2132, 468: 2132, 473: 2132, 493: 2132, 495: 2132, 635: 2132}, - {282: 6439}, - {2129, 2129, 14: 2121, 16: 2121, 19: 2121, 468: 4138, 473: 2121, 493: 6435, 495: 2121, 635: 2121, 767: 6434, 778: 6433, 835: 6438}, - {2128, 2128, 14: 2128, 16: 2128, 19: 2128, 468: 2128, 473: 2128, 493: 2128, 495: 2128, 635: 2128}, - {2127, 2127, 14: 2127, 16: 2127, 19: 2127, 468: 2127, 473: 2127, 493: 2127, 495: 2127, 635: 2127}, + {2037, 2037}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5204, 2685, 2686, 2684, 804: 6440}, + {2134, 2134, 14: 2125, 16: 2125, 19: 2125, 471: 4145, 476: 2125, 496: 6444, 498: 2125, 638: 2125, 770: 6443, 781: 6442, 838: 6446, 920: 6445, 1181: 6441}, + {2143, 2143}, + {14: 3747, 16: 4104, 19: 6454, 476: 6453, 498: 3748, 638: 3746, 762: 6452, 770: 6455}, // 3975 - {267: 6440}, - {497: 2655, 721: 2654, 731: 6441}, - {2432, 2432, 14: 2432, 16: 2432, 19: 2432, 178: 4845, 468: 2432, 473: 2432, 493: 2432, 495: 2432, 635: 2432, 1056: 6442}, - {2131, 2131, 14: 2131, 16: 2131, 19: 2131, 468: 2131, 473: 2131, 493: 2131, 495: 2131, 635: 2131}, - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 486: 4179, 534: 2002, 724: 6451}, + {2136, 2136, 14: 2136, 16: 2136, 19: 2136, 471: 2136, 476: 2136, 496: 2136, 498: 2136, 638: 2136}, + {282: 6448}, + {2133, 2133, 14: 2125, 16: 2125, 19: 2125, 471: 4145, 476: 2125, 496: 6444, 498: 2125, 638: 2125, 770: 6443, 781: 6442, 838: 6447}, + {2132, 2132, 14: 2132, 16: 2132, 19: 2132, 471: 2132, 476: 2132, 496: 2132, 498: 2132, 638: 2132}, + {2131, 2131, 14: 2131, 16: 2131, 19: 2131, 471: 2131, 476: 2131, 496: 2131, 498: 2131, 638: 2131}, // 3980 - {2: 2002, 2002, 2002, 2002, 2002, 8: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 51: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 464: 2002, 486: 4179, 534: 2002, 724: 6449}, - {464: 2002, 486: 4179, 724: 6447}, - {2133, 2133, 14: 2133, 16: 2133, 19: 2133, 468: 2133, 473: 2133, 493: 2133, 495: 2133, 635: 2133}, - {464: 4197, 1021: 6448}, - {2134, 2134, 14: 2134, 16: 2134, 19: 2134, 468: 2134, 473: 2134, 493: 2134, 495: 2134, 635: 2134}, + {267: 6449}, + {500: 2659, 724: 2658, 734: 6450}, + {2436, 2436, 14: 2436, 16: 2436, 19: 2436, 176: 4852, 471: 2436, 476: 2436, 496: 2436, 498: 2436, 638: 2436, 1059: 6451}, + {2135, 2135, 14: 2135, 16: 2135, 19: 2135, 471: 2135, 476: 2135, 496: 2135, 498: 2135, 638: 2135}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 489: 4186, 537: 2006, 727: 6460}, // 3985 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3395, 651: 3397, 2681, 2682, 2680, 726: 3394, 857: 6450}, - {2135, 2135, 14: 2135, 16: 2135, 19: 2135, 468: 2135, 473: 2135, 493: 2135, 495: 2135, 635: 2135}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 534: 3665, 651: 3397, 2681, 2682, 2680, 726: 3664, 793: 6452}, - {2136, 2136, 14: 2136, 16: 2136, 19: 2136, 468: 2136, 473: 2136, 493: 2136, 495: 2136, 635: 2136}, - {2: 1818, 1818, 1818, 1818, 1818, 8: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 51: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 555: 4709, 771: 6454}, + {2: 2006, 2006, 2006, 2006, 2006, 8: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 51: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 467: 2006, 489: 4186, 537: 2006, 727: 6458}, + {467: 2006, 489: 4186, 727: 6456}, + {2137, 2137, 14: 2137, 16: 2137, 19: 2137, 471: 2137, 476: 2137, 496: 2137, 498: 2137, 638: 2137}, + {467: 4204, 1024: 6457}, + {2138, 2138, 14: 2138, 16: 2138, 19: 2138, 471: 2138, 476: 2138, 496: 2138, 498: 2138, 638: 2138}, // 3990 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6455, 2681, 2682, 2680}, - {82: 4742, 461: 1801, 470: 4741, 844: 6457, 1211: 6456}, - {461: 6458}, - {461: 1800}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6459}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3402, 655: 3404, 2685, 2686, 2684, 729: 3401, 860: 6459}, + {2139, 2139, 14: 2139, 16: 2139, 19: 2139, 471: 2139, 476: 2139, 496: 2139, 498: 2139, 638: 2139}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 537: 3672, 655: 3404, 2685, 2686, 2684, 729: 3671, 796: 6461}, + {2140, 2140, 14: 2140, 16: 2140, 19: 2140, 471: 2140, 476: 2140, 496: 2140, 498: 2140, 638: 2140}, + {2: 1822, 1822, 1822, 1822, 1822, 8: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 51: 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 558: 4716, 774: 6463}, // 3995 - {462: 6460}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 462: 4515, 651: 4045, 2681, 2682, 2680, 732: 4514, 812: 4513, 821: 6461}, - {7: 4524, 50: 6462}, - {1812, 1812, 4: 1812, 17: 1812, 81: 1812, 1812, 1812, 1812, 1812, 87: 1812, 463: 1812, 470: 1812, 485: 1812, 865: 6463}, - {2150, 2150, 4: 4738, 17: 4735, 81: 4133, 4742, 4602, 4327, 4603, 87: 4326, 463: 4737, 470: 4741, 485: 4134, 842: 4739, 844: 4736, 854: 4740, 6237, 864: 4734, 868: 6236, 1043: 6464}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6464, 2685, 2686, 2684}, + {82: 4749, 464: 1805, 473: 4748, 847: 6466, 1214: 6465}, + {464: 6467}, + {464: 1804}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6468}, // 4000 - {2157, 2157}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6466, 2681, 2682, 2680}, - {462: 6467}, - {222: 4771, 231: 4773, 234: 4772, 1119: 6468}, - {50: 6469}, + {465: 6469}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 465: 4522, 655: 4052, 2685, 2686, 2684, 735: 4521, 815: 4520, 824: 6470}, + {7: 4531, 50: 6471}, + {1816, 1816, 4: 1816, 17: 1816, 81: 1816, 1816, 1816, 1816, 1816, 87: 1816, 466: 1816, 473: 1816, 488: 1816, 868: 6472}, + {2154, 2154, 4: 4745, 17: 4742, 81: 4140, 4749, 4609, 4334, 4610, 87: 4333, 466: 4744, 473: 4748, 488: 4141, 845: 4746, 847: 4743, 857: 4747, 6246, 867: 4741, 871: 6245, 1046: 6473}, // 4005 - {461: 6470}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6471}, - {462: 6472}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4045, 2681, 2682, 2680, 732: 4046, 794: 6473}, - {7: 4048, 50: 6474}, + {2161, 2161}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6475, 2685, 2686, 2684}, + {465: 6476}, + {222: 4778, 231: 4780, 234: 4779, 1122: 6477}, + {50: 6478}, // 4010 - {2159, 2159}, - {2253, 2253}, - {2278, 2278}, - {2284, 2284, 463: 6479, 659: 6478}, - {150: 6486, 675: 6485}, + {464: 6479}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6480}, + {465: 6481}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4052, 2685, 2686, 2684, 735: 4053, 797: 6482}, + {7: 4055, 50: 6483}, // 4015 - {307: 6481, 315: 6480}, - {49: 6484}, - {314: 6482}, - {150: 6483}, - {2281, 2281}, - // 4020 + {2163, 2163}, + {2257, 2257}, {2282, 2282}, - {2283, 2283}, - {2280, 2280, 661: 5272, 909: 6487}, - {2279, 2279}, - {2286, 2286}, - // 4025 + {2288, 2288, 466: 6488, 662: 6487}, + {150: 6495, 678: 6494}, + // 4020 + {308: 6490, 316: 6489}, + {49: 6493}, + {315: 6491}, + {150: 6492}, {2285, 2285}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6503, 782: 6502}, - {558: 6492}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6493}, - {480: 6495, 637: 6494}, + // 4025 + {2286, 2286}, + {2287, 2287}, + {2284, 2284, 664: 5279, 912: 6496}, + {2283, 2283}, + {2290, 2290}, // 4030 - {883, 883, 2917, 2765, 2801, 2919, 2692, 883, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 463: 883, 576: 4891, 651: 4890, 2681, 2682, 2680, 843: 6500}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4633, 2681, 2682, 2680, 775: 6496}, - {7: 4634, 637: 6497}, - {883, 883, 2917, 2765, 2801, 2919, 2692, 883, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 463: 883, 576: 4891, 651: 4890, 2681, 2682, 2680, 843: 6498}, - {2302, 2302, 7: 4893, 463: 4874, 790: 6499}, + {2289, 2289}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6512, 785: 6511}, + {561: 6501}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6502}, + {483: 6504, 640: 6503}, // 4035 - {2310, 2310}, - {2302, 2302, 7: 4893, 463: 4874, 790: 6501}, - {2313, 2313}, - {2305, 2305, 7: 3828, 159: 6523, 463: 2305, 639: 6522, 963: 6533}, - {1026, 1026, 7: 1026, 98: 6508, 159: 1026, 463: 1026, 480: 6505, 637: 6504, 639: 1026, 642: 6506, 657: 6507}, + {884, 884, 2924, 2770, 2806, 2926, 2697, 884, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 466: 884, 579: 4898, 655: 4897, 2685, 2686, 2684, 846: 6509}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4640, 2685, 2686, 2684, 778: 6505}, + {7: 4641, 640: 6506}, + {884, 884, 2924, 2770, 2806, 2926, 2697, 884, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 466: 884, 579: 4898, 655: 4897, 2685, 2686, 2684, 846: 6507}, + {2306, 2306, 7: 4900, 466: 4881, 793: 6508}, // 4040 - {883, 883, 2917, 2765, 2801, 2919, 2692, 883, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 463: 883, 576: 4891, 651: 4890, 2681, 2682, 2680, 843: 6531}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4633, 2681, 2682, 2680, 775: 6518}, - {246: 6514}, - {246: 6511}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5693, 2681, 2682, 2680, 862: 6509}, + {2314, 2314}, + {2306, 2306, 7: 4900, 466: 4881, 793: 6510}, + {2317, 2317}, + {2309, 2309, 7: 3835, 159: 6532, 466: 2309, 642: 6531, 966: 6542}, + {1027, 1027, 7: 1027, 98: 6517, 159: 1027, 466: 1027, 483: 6514, 640: 6513, 642: 1027, 645: 6515, 660: 6516}, // 4045 - {2302, 2302, 7: 5695, 463: 4874, 790: 6510}, - {2307, 2307}, - {461: 6512}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5693, 2681, 2682, 2680, 862: 6513}, - {2308, 2308, 7: 5695}, + {884, 884, 2924, 2770, 2806, 2926, 2697, 884, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 466: 884, 579: 4898, 655: 4897, 2685, 2686, 2684, 846: 6540}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4640, 2685, 2686, 2684, 778: 6527}, + {246: 6523}, + {246: 6520}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5700, 2685, 2686, 2684, 865: 6518}, // 4050 - {461: 6515}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5693, 2681, 2682, 2680, 862: 6516}, - {2302, 2302, 7: 5695, 463: 4874, 790: 6517}, - {2309, 2309}, - {2305, 2305, 7: 4634, 98: 6521, 159: 6523, 463: 2305, 637: 6520, 639: 6522, 963: 6519}, + {2306, 2306, 7: 5702, 466: 4881, 793: 6519}, + {2311, 2311}, + {464: 6521}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5700, 2685, 2686, 2684, 865: 6522}, + {2312, 2312, 7: 5702}, // 4055 - {2302, 2302, 463: 4874, 790: 6530}, - {883, 883, 2917, 2765, 2801, 2919, 2692, 883, 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 463: 883, 576: 4891, 651: 4890, 2681, 2682, 2680, 843: 6528}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 5693, 2681, 2682, 2680, 862: 6526}, - {98: 6525}, - {98: 6524}, + {464: 6524}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5700, 2685, 2686, 2684, 865: 6525}, + {2306, 2306, 7: 5702, 466: 4881, 793: 6526}, + {2313, 2313}, + {2309, 2309, 7: 4641, 98: 6530, 159: 6532, 466: 2309, 640: 6529, 642: 6531, 966: 6528}, // 4060 - {2303, 2303, 463: 2303}, - {2304, 2304, 463: 2304}, - {2302, 2302, 7: 5695, 463: 4874, 790: 6527}, - {2306, 2306}, - {2302, 2302, 7: 4893, 463: 4874, 790: 6529}, + {2306, 2306, 466: 4881, 793: 6539}, + {884, 884, 2924, 2770, 2806, 2926, 2697, 884, 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 466: 884, 579: 4898, 655: 4897, 2685, 2686, 2684, 846: 6537}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 5700, 2685, 2686, 2684, 865: 6535}, + {98: 6534}, + {98: 6533}, // 4065 - {2311, 2311}, - {2312, 2312}, - {2302, 2302, 7: 4893, 463: 4874, 790: 6532}, - {2314, 2314}, - {2302, 2302, 463: 4874, 790: 6534}, + {2307, 2307, 466: 2307}, + {2308, 2308, 466: 2308}, + {2306, 2306, 7: 5702, 466: 4881, 793: 6536}, + {2310, 2310}, + {2306, 2306, 7: 4900, 466: 4881, 793: 6538}, // 4070 {2315, 2315}, - {558: 6540}, - {482: 6538}, - {558: 2317}, - {480: 6539, 558: 2318}, + {2316, 2316}, + {2306, 2306, 7: 4900, 466: 4881, 793: 6541}, + {2318, 2318}, + {2306, 2306, 466: 4881, 793: 6543}, // 4075 - {558: 2316}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6541}, - {480: 5266, 544: 897, 637: 897, 647: 897, 846: 6542}, - {544: 6545, 637: 6544, 647: 6546, 1114: 6543}, - {2323, 2323}, + {2319, 2319}, + {561: 6549}, + {485: 6547}, + {561: 2321}, + {483: 6548, 561: 2322}, // 4080 - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6553, 2681, 2682, 2680}, - {462: 3801, 825: 6548}, - {462: 3801, 825: 5829, 957: 6547}, - {2320, 2320, 7: 5830}, - {494: 6549}, + {561: 2320}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6550}, + {483: 5273, 547: 898, 640: 898, 650: 898, 849: 6551}, + {547: 6554, 640: 6553, 650: 6555, 1117: 6552}, + {2327, 2327}, // 4085 - {462: 3801, 825: 6550}, - {86: 6551}, - {497: 2655, 721: 3955, 752: 6552}, - {2321, 2321}, - {544: 6545, 647: 6546, 1114: 6554}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6562, 2685, 2686, 2684}, + {465: 3808, 828: 6557}, + {465: 3808, 828: 5836, 960: 6556}, + {2324, 2324, 7: 5837}, + {497: 6558}, // 4090 - {2322, 2322}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6556}, - {2325, 2325, 638: 6558, 1194: 6557}, - {2326, 2326}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6559, 2681, 2682, 2680}, + {465: 3808, 828: 6559}, + {86: 6560}, + {500: 2659, 724: 3962, 755: 6561}, + {2325, 2325}, + {547: 6554, 650: 6555, 1117: 6563}, // 4095 - {2324, 2324}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 647: 6561, 651: 3825, 2681, 2682, 2680, 725: 6562}, - {252: 6564}, - {2328, 2328, 497: 2655, 721: 3955, 752: 6563}, - {2327, 2327}, + {2326, 2326}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6565}, + {2329, 2329, 641: 6567, 1197: 6566}, + {2330, 2330}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6568, 2685, 2686, 2684}, // 4100 - {497: 2655, 721: 3955, 752: 6565}, - {2329, 2329}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6577, 1129: 6576, 1299: 6575}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 6570, 1134: 6569, 1304: 6568}, - {2333, 2333, 7: 6573}, + {2328, 2328}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 650: 6570, 655: 3832, 2685, 2686, 2684, 728: 6571}, + {252: 6573}, + {2332, 2332, 500: 2659, 724: 3962, 755: 6572}, + {2331, 2331}, // 4105 - {2332, 2332, 7: 2332}, - {638: 6571}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 6572}, - {2330, 2330, 7: 2330}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 6570, 1134: 6574}, + {500: 2659, 724: 3962, 755: 6574}, + {2333, 2333}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6586, 1132: 6585, 1302: 6584}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 6579, 1137: 6578, 1307: 6577}, + {2337, 2337, 7: 6582}, // 4110 - {2331, 2331, 7: 2331}, - {2337, 2337, 7: 6580}, {2336, 2336, 7: 2336}, - {638: 6578}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6579}, - // 4115 + {641: 6580}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 6581}, {2334, 2334, 7: 2334}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6577, 1129: 6581}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 6579, 1137: 6583}, + // 4115 {2335, 2335, 7: 2335}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 2121, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 468: 4138, 473: 2121, 493: 6435, 495: 2121, 635: 2121, 651: 5197, 2681, 2682, 2680, 767: 6434, 778: 6433, 801: 6631, 835: 6437, 917: 6632}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 6621, 2681, 2682, 2680}, + {2341, 2341, 7: 6589}, + {2340, 2340, 7: 2340}, + {641: 6587}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6588}, // 4120 - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 464: 1820, 555: 4349, 559: 1820, 768: 6610}, - {266: 6604, 1213: 6603}, - {158: 6599}, - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 6588}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 3825, 2681, 2682, 2680, 725: 6589}, + {2338, 2338, 7: 2338}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6586, 1132: 6590}, + {2339, 2339, 7: 2339}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 2125, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 471: 4145, 476: 2125, 496: 6444, 498: 2125, 638: 2125, 655: 5204, 2685, 2686, 2684, 770: 6443, 781: 6442, 804: 6640, 838: 6446, 920: 6641}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 6630, 2685, 2686, 2684}, // 4125 - {70: 6266, 6263, 6269, 6270, 6271, 6264, 6262, 6272, 6268, 6265, 6593, 645: 6267, 898: 6592, 969: 6591, 1147: 6590}, - {25, 25, 70: 6266, 6263, 6269, 6270, 6271, 6264, 6262, 6272, 6268, 6265, 6593, 645: 6267, 898: 6592, 969: 6598}, - {24, 24, 70: 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 645: 24}, - {22, 22, 70: 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 645: 22}, - {21, 21, 70: 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 463: 6595, 474: 2002, 2002, 486: 4179, 497: 2002, 645: 21, 724: 6594}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 467: 1824, 558: 4356, 562: 1824, 771: 6619}, + {266: 6613, 1216: 6612}, + {158: 6608}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 6597}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 3832, 2685, 2686, 2684, 728: 6598}, // 4130 - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6597}, - {474: 3959, 3958, 497: 2655, 721: 3955, 752: 3957, 799: 6596}, - {19, 19, 70: 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 645: 19}, - {20, 20, 70: 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 645: 20}, - {23, 23, 70: 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 645: 23}, + {70: 6275, 6272, 6278, 6279, 6280, 6273, 6271, 6281, 6277, 6274, 6602, 648: 6276, 901: 6601, 972: 6600, 1150: 6599}, + {25, 25, 70: 6275, 6272, 6278, 6279, 6280, 6273, 6271, 6281, 6277, 6274, 6602, 648: 6276, 901: 6601, 972: 6607}, + {24, 24, 70: 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 648: 24}, + {22, 22, 70: 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 648: 22}, + {21, 21, 70: 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 466: 6604, 477: 2006, 2006, 489: 4186, 500: 2006, 648: 21, 727: 6603}, // 4135 - {2: 1820, 1820, 1820, 1820, 1820, 8: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 51: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 555: 4349, 768: 6600}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 3285, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 651: 4869, 2681, 2682, 2680, 871: 6601}, - {86: 6358, 88: 6363, 6365, 6359, 6364, 6367, 6361, 6357, 6362, 6366, 6360, 859: 6355, 1083: 6602}, - {51, 51, 7: 6391, 86: 6358, 88: 6363, 6365, 6359, 6364, 6367, 6361, 6357, 6362, 6366, 6360, 859: 6390}, - {231, 231}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6606}, + {477: 3966, 3965, 500: 2659, 724: 3962, 755: 3964, 802: 6605}, + {19, 19, 70: 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 648: 19}, + {20, 20, 70: 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 648: 20}, + {23, 23, 70: 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 648: 23}, // 4140 - {386: 6605}, - {230, 230, 70: 6606}, - {151: 6607}, - {461: 6608}, - {198: 6609}, + {2: 1824, 1824, 1824, 1824, 1824, 8: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 51: 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 558: 4356, 771: 6609}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 3292, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 655: 4876, 2685, 2686, 2684, 874: 6610}, + {86: 6367, 88: 6372, 6374, 6368, 6373, 6376, 6370, 6366, 6371, 6375, 6369, 862: 6364, 1086: 6611}, + {51, 51, 7: 6400, 86: 6367, 88: 6372, 6374, 6368, 6373, 6376, 6370, 6366, 6371, 6375, 6369, 862: 6399}, + {231, 231}, // 4145 - {229, 229}, - {2: 2917, 2765, 2801, 2919, 2692, 8: 2738, 2693, 2824, 2936, 2929, 3278, 3273, 2804, 3080, 2806, 2780, 2724, 2727, 2716, 2749, 2808, 2809, 2913, 2803, 2937, 3039, 3038, 2691, 2802, 2805, 2816, 2756, 2760, 2812, 2922, 2771, 2850, 2689, 2690, 2849, 2921, 2688, 2934, 2894, 3005, 2770, 2773, 51: 2988, 2985, 2977, 2989, 2992, 2993, 2990, 2994, 2995, 2991, 2984, 2996, 2979, 2980, 2983, 2986, 2987, 2997, 3281, 2836, 2774, 2964, 2963, 2965, 2960, 2959, 2966, 2961, 2962, 2766, 2879, 2949, 3012, 2947, 3013, 3051, 2948, 3130, 3134, 3123, 3133, 3135, 3126, 3131, 3132, 3136, 3129, 2707, 2839, 2778, 3271, 2701, 2844, 2935, 3282, 3275, 2736, 3294, 2946, 2779, 3277, 3292, 3293, 3291, 3287, 2938, 2939, 2940, 2941, 2942, 2943, 2945, 3283, 2864, 2775, 2868, 2869, 2870, 2871, 2860, 2888, 2931, 2890, 2709, 2889, 2751, 3010, 2841, 2880, 2746, 2799, 2955, 2861, 2820, 2710, 2715, 2726, 2741, 2950, 2823, 2768, 2790, 2696, 2840, 2725, 2745, 3111, 2999, 3084, 2876, 2788, 6611, 3270, 2755, 3082, 2759, 2767, 2789, 3000, 2700, 2718, 3274, 2832, 2833, 2739, 2817, 2818, 2953, 2969, 2897, 3006, 3007, 2971, 2835, 3008, 2927, 3079, 3033, 2967, 2769, 2867, 3279, 2925, 2827, 2686, 2722, 2723, 2730, 2740, 2743, 2731, 2978, 2793, 2892, 3081, 2859, 2830, 2887, 2930, 2819, 3034, 2777, 3044, 3280, 2926, 3015, 2975, 2837, 2898, 2699, 3016, 3019, 2705, 3001, 3020, 3290, 2711, 2712, 2900, 3062, 3022, 2896, 2720, 3024, 2909, 2933, 2920, 2721, 3026, 2928, 2734, 2958, 3118, 2744, 2747, 2910, 2956, 3071, 2951, 3072, 2904, 3028, 3027, 2954, 3011, 2842, 3295, 3029, 3030, 2846, 2902, 3031, 3009, 2763, 2764, 2875, 2952, 2981, 2877, 3085, 3032, 2923, 2924, 2865, 2772, 2906, 3047, 3035, 2687, 3094, 2905, 3045, 3101, 3102, 3103, 3104, 3106, 3105, 3107, 3108, 3046, 2785, 2683, 2684, 2957, 2974, 2694, 2976, 3002, 2697, 2698, 3060, 3017, 3018, 2702, 2886, 2703, 2704, 2873, 3286, 3021, 2821, 2708, 2713, 2714, 3023, 3025, 3066, 3067, 2728, 2729, 2843, 2733, 2893, 3112, 2735, 2903, 3276, 2838, 2814, 3041, 2911, 2932, 2895, 2829, 3073, 2881, 2899, 2944, 2752, 2750, 2826, 2912, 2807, 2968, 2882, 2810, 2811, 3296, 2845, 2754, 2776, 3048, 3113, 2757, 2915, 2918, 2970, 3004, 3049, 3014, 2855, 2856, 2862, 3077, 3052, 3078, 3053, 2982, 2885, 2825, 2916, 2874, 3040, 3037, 3036, 3086, 2901, 3003, 2914, 3098, 3043, 2883, 2781, 2782, 3121, 3109, 2907, 2786, 2815, 2822, 2884, 3127, 2791, 3050, 2891, 3299, 2796, 3055, 3056, 3272, 3057, 3058, 3059, 3114, 3061, 3063, 3064, 3065, 2732, 2878, 3115, 2848, 3068, 2737, 3122, 3300, 3070, 3305, 3304, 3297, 3124, 3125, 3075, 3074, 2753, 3076, 3083, 2854, 2761, 2762, 2998, 2872, 3288, 3289, 3298, 2866, 2797, 2908, 2828, 2831, 3116, 3090, 3091, 3092, 3093, 3117, 3301, 3088, 3089, 2847, 3042, 3302, 3303, 3110, 3095, 3096, 3097, 3128, 3284, 464: 3396, 559: 5098, 651: 3397, 2681, 2682, 2680, 726: 5097, 761: 5115, 876: 5116, 907: 6612}, - {1673, 1673, 7: 1673, 13: 1673, 46: 1673, 141: 1673, 462: 6616, 1673, 557: 1673, 649: 1673, 655: 1673}, - {217, 217, 7: 5118, 13: 217, 46: 217, 463: 217, 649: 5162, 942: 5161, 6613}, - {225, 225, 13: 225, 46: 225, 463: 6308, 990: 6614}, + {389: 6614}, + {230, 230, 70: 6615}, + {151: 6616}, + {464: 6617}, + {198: 6618}, // 4150 - {204, 204, 13: 6325, 46: 6323, 935: 6324, 6322, 1081: 6321, 6615}, - {233, 233}, - {50: 6617}, - {141: 6618}, - {647: 6619}, + {229, 229}, + {2: 2924, 2770, 2806, 2926, 2697, 8: 2743, 2698, 2829, 2943, 2936, 3285, 3280, 2809, 3087, 2811, 2785, 2729, 2732, 2721, 2754, 2813, 2814, 2920, 2808, 2944, 3046, 3045, 2696, 2807, 2810, 2821, 2761, 2765, 2817, 2929, 2776, 2857, 2694, 2695, 2856, 2928, 2693, 2941, 2901, 3012, 2775, 2778, 51: 2995, 2992, 2984, 2996, 2999, 3000, 2997, 3001, 3002, 2998, 2991, 3003, 2986, 2987, 2990, 2993, 2994, 3004, 3288, 2843, 2779, 2971, 2970, 2972, 2967, 2966, 2973, 2968, 2969, 2771, 2886, 2956, 3019, 2954, 3020, 3058, 2955, 3137, 3141, 3130, 3140, 3142, 3133, 3138, 3139, 3143, 3136, 2712, 2846, 2783, 3278, 2706, 2851, 2942, 3289, 3282, 2741, 3301, 2953, 2784, 3284, 3299, 3300, 3298, 3294, 2945, 2946, 2947, 2948, 2949, 2950, 2952, 2780, 3290, 2871, 2875, 2876, 2877, 2878, 2867, 2895, 2938, 2897, 2714, 2896, 2756, 3017, 2848, 2887, 2751, 2804, 2962, 2868, 2825, 2715, 2720, 2731, 2746, 2957, 2828, 2773, 2795, 2701, 2847, 2730, 2750, 3118, 3006, 3091, 2883, 2793, 6620, 3277, 2760, 3089, 2764, 2772, 2794, 3007, 2705, 2723, 3281, 2744, 2822, 2823, 2960, 2976, 2904, 3013, 3014, 2978, 2842, 3015, 2934, 3086, 3040, 2974, 2774, 2874, 3286, 2932, 2832, 2690, 2837, 2727, 2728, 2839, 2735, 2745, 2748, 2736, 2985, 2798, 2899, 3088, 2866, 2835, 2894, 2937, 2824, 3041, 2782, 3051, 3287, 2933, 3022, 2982, 2844, 2905, 2704, 3023, 3026, 2710, 3008, 3027, 3297, 2716, 2717, 2907, 3069, 3029, 2903, 2725, 3031, 2916, 2940, 2927, 2726, 3033, 2935, 2739, 2965, 3125, 2749, 2752, 2917, 2963, 3078, 2958, 3079, 2911, 3035, 3034, 2961, 3018, 2849, 3302, 3036, 3037, 2853, 2909, 3038, 3016, 2768, 2769, 2882, 2959, 2988, 2884, 3092, 3039, 2930, 2931, 2872, 2777, 2913, 3054, 3042, 2692, 3101, 2912, 3052, 3108, 3109, 3110, 3111, 3113, 3112, 3114, 3115, 3053, 2790, 2687, 2688, 2964, 2981, 2699, 2983, 3009, 2691, 2702, 2703, 3067, 3024, 3025, 2707, 2893, 2708, 2709, 2880, 3293, 3028, 2826, 2713, 2718, 2719, 3030, 3032, 2838, 3073, 3074, 2840, 2733, 2734, 2850, 2738, 2900, 3119, 2740, 2910, 3283, 2845, 2819, 3048, 2918, 2939, 2902, 2834, 3080, 2888, 2906, 2951, 2757, 2755, 2831, 2919, 2812, 2975, 2889, 2815, 2816, 3303, 2852, 2759, 2781, 3055, 3120, 2762, 2922, 2925, 2977, 3011, 3056, 3021, 2862, 2863, 2869, 3084, 3059, 3085, 3060, 2989, 2892, 2830, 2923, 2881, 3047, 3044, 3043, 3093, 2908, 3010, 2921, 3105, 3050, 2890, 2786, 2787, 3128, 3116, 2914, 2791, 2820, 2827, 2891, 3134, 2796, 3057, 2898, 3306, 2801, 3062, 3063, 3279, 3064, 3065, 3066, 3121, 3068, 3070, 3071, 3072, 2737, 2885, 3122, 2855, 3075, 2742, 3129, 3307, 3077, 3312, 3311, 3304, 3131, 3132, 3082, 3081, 2758, 3083, 3090, 2861, 2766, 2767, 3005, 2879, 3295, 3296, 3305, 2873, 2802, 2915, 2833, 2836, 3123, 3097, 3098, 3099, 3100, 3124, 3308, 3095, 3096, 2854, 3049, 3309, 3310, 3117, 3102, 3103, 3104, 3135, 3291, 467: 3403, 562: 5105, 655: 3404, 2685, 2686, 2684, 729: 5104, 764: 5122, 879: 5123, 910: 6621}, + {1676, 1676, 7: 1676, 13: 1676, 46: 1676, 141: 1676, 465: 6625, 1676, 560: 1676, 652: 1676, 654: 1676}, + {217, 217, 7: 5125, 13: 217, 46: 217, 466: 217, 652: 5169, 945: 5168, 6622}, + {225, 225, 13: 225, 46: 225, 466: 6317, 993: 6623}, // 4155 - {464: 5131, 878: 6620}, - {232, 232}, - {1913, 1913, 15: 1913, 47: 1913, 49: 1913, 51: 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 137: 6342, 461: 1913, 496: 6341, 641: 1913, 1023: 6622}, - {1970, 1970, 15: 1970, 47: 1970, 49: 1970, 51: 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 461: 1970, 641: 1970, 883: 6623}, - {1907, 1907, 15: 6072, 47: 6048, 49: 6068, 51: 6061, 6051, 6047, 6055, 6059, 6071, 6054, 6060, 6058, 6056, 6069, 6062, 6050, 6070, 6049, 6052, 6053, 6057, 6625, 461: 6063, 641: 6073, 879: 6065, 6064, 6067, 6046, 884: 6066, 1207: 6624}, + {204, 204, 13: 6334, 46: 6332, 938: 6333, 6331, 1084: 6330, 6624}, + {233, 233}, + {50: 6626}, + {141: 6627}, + {650: 6628}, // 4160 - {1922, 1922}, - {201: 6627, 639: 6626}, - {548, 548, 558: 6019, 951: 6629}, - {548, 548, 558: 6019, 951: 6628}, - {1905, 1905}, + {467: 5138, 881: 6629}, + {232, 232}, + {1917, 1917, 15: 1917, 47: 1917, 49: 1917, 51: 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 137: 6351, 464: 1917, 499: 6350, 644: 1917, 1026: 6631}, + {1974, 1974, 15: 1974, 47: 1974, 49: 1974, 51: 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 464: 1974, 644: 1974, 886: 6632}, + {1911, 1911, 15: 6081, 47: 6057, 49: 6077, 51: 6070, 6060, 6056, 6064, 6068, 6080, 6063, 6069, 6067, 6065, 6078, 6071, 6059, 6079, 6058, 6061, 6062, 6066, 6634, 464: 6072, 644: 6082, 882: 6074, 6073, 6076, 6055, 887: 6075, 1210: 6633}, // 4165 - {1906, 1906}, - {14: 1389, 16: 1389, 19: 1389, 158: 4862, 468: 1389, 473: 1389, 493: 1389, 495: 1389, 635: 1389}, - {14: 2121, 16: 2121, 19: 2121, 468: 4138, 473: 2121, 493: 6435, 495: 2121, 635: 2121, 767: 6434, 778: 6433, 835: 6437, 917: 6633}, - {2140, 2140, 14: 2121, 16: 2121, 19: 2121, 468: 4138, 473: 2121, 493: 6435, 495: 2121, 635: 2121, 767: 6434, 778: 6433, 835: 6438}, - {2141, 2141, 14: 2121, 16: 2121, 19: 2121, 468: 4138, 473: 2121, 493: 6435, 495: 2121, 635: 2121, 767: 6434, 778: 6433, 835: 6438}, + {1926, 1926}, + {201: 6636, 642: 6635}, + {548, 548, 561: 6028, 954: 6638}, + {548, 548, 561: 6028, 954: 6637}, + {1909, 1909}, // 4170 - {2000, 2000, 47: 2493, 69: 2609, 71: 2474, 80: 2504, 145: 2476, 151: 2502, 153: 2473, 166: 2498, 199: 2523, 205: 2621, 208: 2469, 216: 2522, 2489, 2475, 233: 2501, 238: 2479, 241: 2499, 243: 2470, 245: 2505, 263: 2491, 268: 2490, 275: 2503, 277: 2471, 280: 2492, 292: 2484, 462: 2513, 2512, 485: 2617, 491: 2511, 493: 2521, 496: 2497, 514: 2612, 518: 2487, 556: 2496, 558: 2510, 634: 2506, 637: 2620, 641: 2472, 2611, 650: 2467, 657: 2478, 662: 2477, 667: 2520, 674: 2468, 697: 2517, 730: 2480, 739: 2519, 2507, 2508, 2509, 2518, 2516, 2515, 2514, 2590, 2589, 2483, 760: 2610, 762: 2481, 2573, 2584, 2601, 779: 2482, 783: 2539, 795: 2615, 808: 2527, 830: 2534, 834: 2537, 840: 2613, 845: 2576, 849: 2581, 2591, 2494, 916: 2546, 920: 2485, 955: 2616, 962: 2525, 964: 2526, 2529, 2530, 968: 2532, 970: 2531, 972: 2528, 974: 2533, 2535, 2536, 978: 2495, 2572, 981: 2542, 991: 2550, 2543, 2544, 2545, 2551, 2549, 2552, 2553, 1000: 2548, 2547, 1003: 2538, 2500, 2486, 2554, 2566, 2555, 2556, 2557, 2559, 2563, 2560, 2564, 2565, 2558, 2562, 2561, 1020: 2524, 1024: 2540, 2541, 2488, 1030: 2568, 2567, 1034: 2570, 2571, 2569, 1039: 2607, 2574, 1047: 2619, 2618, 2575, 1054: 2577, 1057: 2604, 1084: 2578, 2579, 1087: 2580, 1089: 2585, 1092: 2582, 2583, 1095: 2606, 2586, 2614, 2588, 2587, 1104: 2592, 1106: 2594, 2593, 2597, 1110: 2598, 1112: 2605, 1115: 2595, 6635, 1120: 2596, 1131: 2599, 2600, 2603, 1135: 2602}, + {1910, 1910}, + {14: 1390, 16: 1390, 19: 1390, 158: 4869, 471: 1390, 476: 1390, 496: 1390, 498: 1390, 638: 1390}, + {14: 2125, 16: 2125, 19: 2125, 471: 4145, 476: 2125, 496: 6444, 498: 2125, 638: 2125, 770: 6443, 781: 6442, 838: 6446, 920: 6642}, + {2144, 2144, 14: 2125, 16: 2125, 19: 2125, 471: 4145, 476: 2125, 496: 6444, 498: 2125, 638: 2125, 770: 6443, 781: 6442, 838: 6447}, + {2145, 2145, 14: 2125, 16: 2125, 19: 2125, 471: 4145, 476: 2125, 496: 6444, 498: 2125, 638: 2125, 770: 6443, 781: 6442, 838: 6447}, + // 4175 + {2004, 2004, 47: 2497, 69: 2613, 71: 2478, 80: 2508, 145: 2480, 151: 2506, 153: 2477, 166: 2502, 199: 2527, 205: 2625, 208: 2473, 216: 2526, 2493, 2479, 233: 2505, 238: 2483, 241: 2503, 243: 2474, 245: 2509, 263: 2495, 268: 2494, 275: 2507, 277: 2475, 280: 2496, 292: 2488, 465: 2517, 2516, 488: 2621, 494: 2515, 496: 2525, 499: 2501, 517: 2616, 521: 2491, 559: 2500, 561: 2514, 637: 2510, 640: 2624, 644: 2476, 2615, 653: 2471, 660: 2482, 665: 2481, 670: 2524, 677: 2472, 700: 2521, 733: 2484, 742: 2523, 2511, 2512, 2513, 2522, 2520, 2519, 2518, 2594, 2593, 2487, 763: 2614, 765: 2485, 2577, 2588, 2605, 782: 2486, 786: 2543, 798: 2619, 811: 2531, 833: 2538, 837: 2541, 843: 2617, 848: 2580, 852: 2585, 2595, 2498, 919: 2550, 923: 2489, 958: 2620, 965: 2529, 967: 2530, 2533, 2534, 971: 2536, 973: 2535, 975: 2532, 977: 2537, 2539, 2540, 981: 2499, 2576, 984: 2546, 994: 2554, 2547, 2548, 2549, 2555, 2553, 2556, 2557, 1003: 2552, 2551, 1006: 2542, 2504, 2490, 2558, 2570, 2559, 2560, 2561, 2563, 2567, 2564, 2568, 2569, 2562, 2566, 2565, 1023: 2528, 1027: 2544, 2545, 2492, 1033: 2572, 2571, 1037: 2574, 2575, 2573, 1042: 2611, 2578, 1050: 2623, 2622, 2579, 1057: 2581, 1060: 2608, 1087: 2582, 2583, 1090: 2584, 1092: 2589, 1095: 2586, 2587, 1098: 2610, 2590, 2618, 2592, 2591, 1107: 2596, 1109: 2598, 2597, 2601, 1113: 2602, 1115: 2609, 1118: 2599, 6644, 1123: 2600, 1134: 2603, 2604, 2607, 1138: 2606}, {435, 435}, } ) @@ -11068,7 +11087,7 @@ func yylex1(yylex yyLexer, lval *yySymType) (n int) { } func yyParse(yylex yyLexer, parser *Parser) int { - const yyError = 1336 + const yyError = 1339 yyEx, _ := yylex.(yyLexerEx) var yyn int @@ -12924,11 +12943,11 @@ yynewstate: } case 303: { - parser.yyVAL.item = ast.BindingStatusTypeEnable + parser.yyVAL.item = ast.BindingStatusTypeEnabled } case 304: { - parser.yyVAL.item = ast.BindingStatusTypeDisable + parser.yyVAL.item = ast.BindingStatusTypeDisabled } case 305: { @@ -14795,13 +14814,13 @@ yynewstate: { parser.yyVAL.item = ast.IndexVisibilityInvisible } - case 1132: + case 1135: { parser.yyVAL.statement = &ast.CallStmt{ Procedure: yyS[yypt-0].expr.(*ast.FuncCallExpr), } } - case 1133: + case 1136: { parser.yyVAL.expr = &ast.FuncCallExpr{ Tp: ast.FuncCallExprTypeGeneric, @@ -14809,7 +14828,7 @@ yynewstate: Args: []ast.ExprNode{}, } } - case 1134: + case 1137: { parser.yyVAL.expr = &ast.FuncCallExpr{ Tp: ast.FuncCallExprTypeGeneric, @@ -14818,7 +14837,7 @@ yynewstate: Args: []ast.ExprNode{}, } } - case 1135: + case 1138: { parser.yyVAL.expr = &ast.FuncCallExpr{ Tp: ast.FuncCallExprTypeGeneric, @@ -14826,7 +14845,7 @@ yynewstate: Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 1136: + case 1139: { parser.yyVAL.expr = &ast.FuncCallExpr{ Tp: ast.FuncCallExprTypeGeneric, @@ -14835,7 +14854,7 @@ yynewstate: Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 1137: + case 1140: { x := yyS[yypt-1].item.(*ast.InsertStmt) x.Priority = yyS[yypt-6].item.(mysql.PriorityEnum) @@ -14852,26 +14871,26 @@ yynewstate: x.PartitionNames = yyS[yypt-2].item.([]model.CIStr) parser.yyVAL.statement = x } - case 1140: + case 1143: { parser.yyVAL.item = &ast.InsertStmt{ Columns: yyS[yypt-3].item.([]*ast.ColumnName), Lists: yyS[yypt-0].item.([][]ast.ExprNode), } } - case 1141: + case 1144: { parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1142: + case 1145: { parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1143: + case 1146: { parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1144: + case 1147: { var sel ast.ResultSetNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -14884,23 +14903,23 @@ yynewstate: } parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: sel} } - case 1145: + case 1148: { parser.yyVAL.item = &ast.InsertStmt{Lists: yyS[yypt-0].item.([][]ast.ExprNode)} } - case 1146: + case 1149: { parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1147: + case 1150: { parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1148: + case 1151: { parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1149: + case 1152: { var sel ast.ResultSetNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -14913,66 +14932,66 @@ yynewstate: } parser.yyVAL.item = &ast.InsertStmt{Select: sel} } - case 1150: + case 1153: { parser.yyVAL.item = &ast.InsertStmt{Setlist: yyS[yypt-0].item.([]*ast.Assignment)} } - case 1153: + case 1156: { parser.yyVAL.item = [][]ast.ExprNode{yyS[yypt-0].item.([]ast.ExprNode)} } - case 1154: + case 1157: { parser.yyVAL.item = append(yyS[yypt-2].item.([][]ast.ExprNode), yyS[yypt-0].item.([]ast.ExprNode)) } - case 1155: + case 1158: { parser.yyVAL.item = yyS[yypt-1].item } - case 1156: + case 1159: { parser.yyVAL.item = []ast.ExprNode{} } - case 1158: + case 1161: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) } - case 1159: + case 1162: { parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} } - case 1161: + case 1164: { parser.yyVAL.expr = &ast.DefaultExpr{} } - case 1162: + case 1165: { parser.yyVAL.item = &ast.Assignment{ Column: yyS[yypt-2].item.(*ast.ColumnName), Expr: yyS[yypt-0].expr, } } - case 1163: + case 1166: { parser.yyVAL.item = []*ast.Assignment{} } - case 1164: + case 1167: { parser.yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)} } - case 1165: + case 1168: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.Assignment), yyS[yypt-0].item.(*ast.Assignment)) } - case 1166: + case 1169: { parser.yyVAL.item = nil } - case 1167: + case 1170: { parser.yyVAL.item = yyS[yypt-0].item } - case 1168: + case 1171: { x := yyS[yypt-0].item.(*ast.InsertStmt) x.IsReplace = true @@ -14982,31 +15001,31 @@ yynewstate: x.PartitionNames = yyS[yypt-1].item.([]model.CIStr) parser.yyVAL.statement = x } - case 1169: + case 1172: { parser.yyVAL.expr = ast.NewValueExpr(false, parser.charset, parser.collation) } - case 1170: + case 1173: { parser.yyVAL.expr = ast.NewValueExpr(nil, parser.charset, parser.collation) } - case 1171: + case 1174: { parser.yyVAL.expr = ast.NewValueExpr(true, parser.charset, parser.collation) } - case 1172: + case 1175: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1173: + case 1176: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1174: + case 1177: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1176: + case 1179: { // See https://dev.mysql.com/doc/refman/5.7/en/charset-literal.html co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident) @@ -15023,15 +15042,15 @@ yynewstate: } parser.yyVAL.expr = expr } - case 1177: + case 1180: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1178: + case 1181: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1179: + case 1182: { co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident) if err != nil { @@ -15047,7 +15066,7 @@ yynewstate: } parser.yyVAL.expr = expr } - case 1180: + case 1183: { co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident) if err != nil { @@ -15063,12 +15082,12 @@ yynewstate: } parser.yyVAL.expr = expr } - case 1181: + case 1184: { expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation) parser.yyVAL.expr = expr } - case 1182: + case 1185: { valExpr := yyS[yypt-1].expr.(ast.ValueExpr) strLit := valExpr.GetString() @@ -15081,31 +15100,31 @@ yynewstate: } parser.yyVAL.expr = expr } - case 1183: + case 1186: { parser.yyVAL.item = []*ast.AlterOrderItem{yyS[yypt-0].item.(*ast.AlterOrderItem)} } - case 1184: + case 1187: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.AlterOrderItem), yyS[yypt-0].item.(*ast.AlterOrderItem)) } - case 1185: + case 1188: { parser.yyVAL.item = &ast.AlterOrderItem{Column: yyS[yypt-1].item.(*ast.ColumnName), Desc: yyS[yypt-0].item.(bool)} } - case 1186: + case 1189: { parser.yyVAL.item = &ast.OrderByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} } - case 1187: + case 1190: { parser.yyVAL.item = []*ast.ByItem{yyS[yypt-0].item.(*ast.ByItem)} } - case 1188: + case 1191: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ByItem), yyS[yypt-0].item.(*ast.ByItem)) } - case 1189: + case 1192: { expr := yyS[yypt-0].expr valueExpr, ok := expr.(ast.ValueExpr) @@ -15117,7 +15136,7 @@ yynewstate: } parser.yyVAL.item = &ast.ByItem{Expr: expr, NullOrder: true} } - case 1190: + case 1193: { expr := yyS[yypt-1].expr valueExpr, ok := expr.(ast.ValueExpr) @@ -15129,55 +15148,55 @@ yynewstate: } parser.yyVAL.item = &ast.ByItem{Expr: expr, Desc: yyS[yypt-0].item.(bool)} } - case 1191: + case 1194: { parser.yyVAL.item = false } - case 1192: + case 1195: { parser.yyVAL.item = true } - case 1193: + case 1196: { parser.yyVAL.item = false // ASC by default } - case 1194: + case 1197: { parser.yyVAL.item = false } - case 1195: + case 1198: { parser.yyVAL.item = true } - case 1196: + case 1199: { parser.yyVAL.item = nil } - case 1198: + case 1201: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Or, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1199: + case 1202: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.And, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1200: + case 1203: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LeftShift, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1201: + case 1204: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.RightShift, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1202: + case 1205: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Plus, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1203: + case 1206: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Minus, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1204: + case 1207: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr("DATE_ADD"), @@ -15188,7 +15207,7 @@ yynewstate: }, } } - case 1205: + case 1208: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr("DATE_SUB"), @@ -15199,44 +15218,44 @@ yynewstate: }, } } - case 1206: + case 1209: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mul, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1207: + case 1210: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Div, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1208: + case 1211: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1209: + case 1212: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.IntDiv, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1210: + case 1213: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1211: + case 1214: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Xor, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1213: + case 1216: { parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ Name: model.NewCIStr(yyS[yypt-0].ident), }} } - case 1214: + case 1217: { parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ Table: model.NewCIStr(yyS[yypt-2].ident), Name: model.NewCIStr(yyS[yypt-0].ident), }} } - case 1215: + case 1218: { parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ Schema: model.NewCIStr(yyS[yypt-4].ident), @@ -15244,39 +15263,39 @@ yynewstate: Name: model.NewCIStr(yyS[yypt-0].ident), }} } - case 1220: + case 1223: { parser.yyVAL.expr = &ast.SetCollationExpr{Expr: yyS[yypt-2].expr, Collate: yyS[yypt-0].ident} } - case 1223: + case 1226: { parser.yyVAL.expr = ast.NewParamMarkerExpr(yyS[yypt].offset) } - case 1226: + case 1229: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not2, V: yyS[yypt-0].expr} } - case 1227: + case 1230: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.BitNeg, V: yyS[yypt-0].expr} } - case 1228: + case 1231: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Minus, V: yyS[yypt-0].expr} } - case 1229: + case 1232: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Plus, V: yyS[yypt-0].expr} } - case 1230: + case 1233: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.Concat), Args: []ast.ExprNode{yyS[yypt-2].expr, yyS[yypt-0].expr}} } - case 1231: + case 1234: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not2, V: yyS[yypt-0].expr} } - case 1233: + case 1236: { startOffset := parser.startOffset(&yyS[yypt-1]) endOffset := parser.endOffset(&yyS[yypt]) @@ -15284,23 +15303,23 @@ yynewstate: expr.SetText(parser.lexer.client, parser.src[startOffset:endOffset]) parser.yyVAL.expr = &ast.ParenthesesExpr{Expr: expr} } - case 1234: + case 1237: { values := append(yyS[yypt-3].item.([]ast.ExprNode), yyS[yypt-1].expr) parser.yyVAL.expr = &ast.RowExpr{Values: values} } - case 1235: + case 1238: { values := append(yyS[yypt-3].item.([]ast.ExprNode), yyS[yypt-1].expr) parser.yyVAL.expr = &ast.RowExpr{Values: values} } - case 1236: + case 1239: { sq := yyS[yypt-0].expr.(*ast.SubqueryExpr) sq.Exists = true parser.yyVAL.expr = &ast.ExistsSubqueryExpr{Sel: sq} } - case 1237: + case 1240: { /* * ODBC escape syntax. @@ -15324,7 +15343,7 @@ yynewstate: parser.yyVAL.expr = yyS[yypt-1].expr } } - case 1238: + case 1241: { // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#operator_binary x := types.NewFieldType(mysql.TypeString) @@ -15337,7 +15356,7 @@ yynewstate: FunctionType: ast.CastBinaryOperator, } } - case 1239: + case 1242: { /* See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast */ tp := yyS[yypt-1].item.(*types.FieldType) @@ -15357,7 +15376,7 @@ yynewstate: ExplicitCharSet: explicitCharset, } } - case 1240: + case 1243: { x := &ast.CaseExpr{WhenClauses: yyS[yypt-2].item.([]*ast.WhenClause)} if yyS[yypt-3].expr != nil { @@ -15368,7 +15387,7 @@ yynewstate: } parser.yyVAL.expr = x } - case 1241: + case 1244: { // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert tp := yyS[yypt-1].item.(*types.FieldType) @@ -15388,7 +15407,7 @@ yynewstate: ExplicitCharSet: explicitCharset, } } - case 1242: + case 1245: { // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert charset1 := ast.NewValueExpr(yyS[yypt-1].ident, "", "") @@ -15397,62 +15416,62 @@ yynewstate: Args: []ast.ExprNode{yyS[yypt-3].expr, charset1}, } } - case 1243: + case 1246: { parser.yyVAL.expr = &ast.DefaultExpr{Name: yyS[yypt-1].expr.(*ast.ColumnNameExpr).Name} } - case 1244: + case 1247: { parser.yyVAL.expr = &ast.ValuesExpr{Column: yyS[yypt-1].expr.(*ast.ColumnNameExpr)} } - case 1245: + case 1248: { expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation) parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{yyS[yypt-2].expr, expr}} } - case 1246: + case 1249: { expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation) extract := &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{yyS[yypt-2].expr, expr}} parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONUnquote), Args: []ast.ExprNode{extract}} } - case 1249: + case 1252: { parser.yyVAL.item = false } - case 1250: + case 1253: { parser.yyVAL.item = true } - case 1251: + case 1254: { parser.yyVAL.item = false } - case 1253: + case 1256: { parser.yyVAL.item = true } - case 1256: + case 1259: { parser.yyVAL.item = true } - case 1298: + case 1301: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1299: + case 1302: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1300: + case 1303: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-1].ident)} } - case 1301: + case 1304: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-2].ident)} } - case 1302: + case 1305: { args := []ast.ExprNode{} if yyS[yypt-0].item != nil { @@ -15460,7 +15479,7 @@ yynewstate: } parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-1].ident), Args: args} } - case 1303: + case 1306: { nilVal := ast.NewValueExpr(nil, parser.charset, parser.collation) args := yyS[yypt-1].item.([]ast.ExprNode) @@ -15469,7 +15488,7 @@ yynewstate: Args: append(args, nilVal), } } - case 1304: + case 1307: { charset1 := ast.NewValueExpr(yyS[yypt-1].ident, "", "") args := yyS[yypt-3].item.([]ast.ExprNode) @@ -15478,42 +15497,42 @@ yynewstate: Args: append(args, charset1), } } - case 1305: + case 1308: { expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "") parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.DateLiteral), Args: []ast.ExprNode{expr}} } - case 1306: + case 1309: { expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "") parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.TimeLiteral), Args: []ast.ExprNode{expr}} } - case 1307: + case 1310: { expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "") parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.TimestampLiteral), Args: []ast.ExprNode{expr}} } - case 1308: + case 1311: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.InsertFunc), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1309: + case 1312: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-3].expr, R: yyS[yypt-1].expr} } - case 1310: + case 1313: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.PasswordFunc), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1311: + case 1314: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1312: + case 1315: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1313: + case 1316: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), @@ -15524,7 +15543,7 @@ yynewstate: }, } } - case 1314: + case 1317: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), @@ -15535,7 +15554,7 @@ yynewstate: }, } } - case 1315: + case 1318: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), @@ -15546,7 +15565,7 @@ yynewstate: }, } } - case 1316: + case 1319: { timeUnit := &ast.TimeUnitExpr{Unit: yyS[yypt-3].item.(ast.TimeUnitType)} parser.yyVAL.expr = &ast.FuncCallExpr{ @@ -15554,7 +15573,7 @@ yynewstate: Args: []ast.ExprNode{timeUnit, yyS[yypt-1].expr}, } } - case 1317: + case 1320: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), @@ -15564,67 +15583,67 @@ yynewstate: }, } } - case 1318: + case 1321: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}} } - case 1319: + case 1322: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1320: + case 1323: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1321: + case 1324: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1322: + case 1325: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1323: + case 1326: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{&ast.TimeUnitExpr{Unit: yyS[yypt-5].item.(ast.TimeUnitType)}, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1324: + case 1327: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{&ast.TimeUnitExpr{Unit: yyS[yypt-5].item.(ast.TimeUnitType)}, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1325: + case 1328: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-3].ident), Args: []ast.ExprNode{yyS[yypt-1].expr}, } } - case 1326: + case 1329: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-1].expr, yyS[yypt-3].expr}, } } - case 1327: + case 1330: { spaceVal := ast.NewValueExpr(" ", parser.charset, parser.collation) direction := &ast.TrimDirectionExpr{Direction: yyS[yypt-3].item.(ast.TrimDirectionType)} @@ -15633,7 +15652,7 @@ yynewstate: Args: []ast.ExprNode{yyS[yypt-1].expr, spaceVal, direction}, } } - case 1328: + case 1331: { direction := &ast.TrimDirectionExpr{Direction: yyS[yypt-4].item.(ast.TrimDirectionType)} parser.yyVAL.expr = &ast.FuncCallExpr{ @@ -15641,63 +15660,63 @@ yynewstate: Args: []ast.ExprNode{yyS[yypt-1].expr, yyS[yypt-3].expr, direction}, } } - case 1329: + case 1332: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-3].ident), Args: []ast.ExprNode{yyS[yypt-1].expr}, } } - case 1330: + case 1333: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-6].ident), Args: []ast.ExprNode{yyS[yypt-4].expr, ast.NewValueExpr("CHAR", parser.charset, parser.collation), ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}, } } - case 1331: + case 1334: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-6].ident), Args: []ast.ExprNode{yyS[yypt-4].expr, ast.NewValueExpr("BINARY", parser.charset, parser.collation), ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}, } } - case 1333: + case 1336: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1334: + case 1337: { parser.yyVAL.item = ast.GetFormatSelectorDate } - case 1335: + case 1338: { parser.yyVAL.item = ast.GetFormatSelectorDatetime } - case 1336: + case 1339: { parser.yyVAL.item = ast.GetFormatSelectorTime } - case 1337: + case 1340: { parser.yyVAL.item = ast.GetFormatSelectorDatetime } - case 1342: + case 1345: { parser.yyVAL.item = ast.TrimBoth } - case 1343: + case 1346: { parser.yyVAL.item = ast.TrimLeading } - case 1344: + case 1347: { parser.yyVAL.item = ast.TrimTrailing } - case 1345: + case 1348: { objNameExpr := &ast.TableNameExpr{ Name: yyS[yypt-1].item.(*ast.TableName), @@ -15707,7 +15726,7 @@ yynewstate: Args: []ast.ExprNode{objNameExpr}, } } - case 1346: + case 1349: { objNameExpr := &ast.TableNameExpr{ Name: yyS[yypt-3].item.(*ast.TableName), @@ -15718,7 +15737,7 @@ yynewstate: Args: []ast.ExprNode{objNameExpr, valueExpr}, } } - case 1348: + case 1351: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15726,15 +15745,15 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1349: + case 1352: { parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: false} } - case 1350: + case 1353: { parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1351: + case 1354: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15742,7 +15761,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1352: + case 1355: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15750,7 +15769,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1353: + case 1356: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15758,7 +15777,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1354: + case 1357: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15766,7 +15785,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1355: + case 1358: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15774,7 +15793,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1356: + case 1359: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15782,11 +15801,11 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1357: + case 1360: { parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: true} } - case 1358: + case 1361: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15794,7 +15813,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1359: + case 1362: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15802,7 +15821,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1360: + case 1363: { args := []ast.ExprNode{ast.NewValueExpr(1, parser.charset, parser.collation)} if yyS[yypt-0].item != nil { @@ -15811,7 +15830,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: args} } } - case 1361: + case 1364: { args := yyS[yypt-4].item.([]ast.ExprNode) args = append(args, yyS[yypt-2].item.(ast.ExprNode)) @@ -15825,7 +15844,7 @@ yynewstate: parser.yyVAL.expr = agg } } - case 1362: + case 1365: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15833,7 +15852,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1363: + case 1366: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15841,7 +15860,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1364: + case 1367: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15849,7 +15868,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1365: + case 1368: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: ast.AggFuncStddevPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15857,7 +15876,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: ast.AggFuncStddevPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1366: + case 1369: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15865,7 +15884,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1367: + case 1370: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: ast.AggFuncVarPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15873,11 +15892,11 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: ast.AggFuncVarPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1368: + case 1371: { parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } - case 1369: + case 1372: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15885,7 +15904,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1370: + case 1373: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15893,7 +15912,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1371: + case 1374: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-6].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15901,7 +15920,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-6].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}} } } - case 1372: + case 1375: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15909,7 +15928,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}} } } - case 1373: + case 1376: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15917,7 +15936,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}} } } - case 1374: + case 1377: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -15925,22 +15944,22 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}} } } - case 1375: + case 1378: { parser.yyVAL.item = ast.NewValueExpr(",", "", "") } - case 1376: + case 1379: { parser.yyVAL.item = ast.NewValueExpr(yyS[yypt-0].ident, "", "") } - case 1377: + case 1380: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 1378: + case 1381: { var tp ast.FuncCallExprType if isInTokenMap(yyS[yypt-3].ident) { @@ -15955,159 +15974,159 @@ yynewstate: Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 1379: + case 1382: { parser.yyVAL.item = nil } - case 1380: + case 1383: { parser.yyVAL.item = nil } - case 1381: + case 1384: { expr := ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation) parser.yyVAL.item = expr } - case 1383: + case 1386: { parser.yyVAL.item = ast.TimeUnitSecondMicrosecond } - case 1384: + case 1387: { parser.yyVAL.item = ast.TimeUnitMinuteMicrosecond } - case 1385: + case 1388: { parser.yyVAL.item = ast.TimeUnitMinuteSecond } - case 1386: + case 1389: { parser.yyVAL.item = ast.TimeUnitHourMicrosecond } - case 1387: + case 1390: { parser.yyVAL.item = ast.TimeUnitHourSecond } - case 1388: + case 1391: { parser.yyVAL.item = ast.TimeUnitHourMinute } - case 1389: + case 1392: { parser.yyVAL.item = ast.TimeUnitDayMicrosecond } - case 1390: + case 1393: { parser.yyVAL.item = ast.TimeUnitDaySecond } - case 1391: + case 1394: { parser.yyVAL.item = ast.TimeUnitDayMinute } - case 1392: + case 1395: { parser.yyVAL.item = ast.TimeUnitDayHour } - case 1393: + case 1396: { parser.yyVAL.item = ast.TimeUnitYearMonth } - case 1394: + case 1397: { parser.yyVAL.item = ast.TimeUnitMicrosecond } - case 1395: + case 1398: { parser.yyVAL.item = ast.TimeUnitSecond } - case 1396: + case 1399: { parser.yyVAL.item = ast.TimeUnitMinute } - case 1397: + case 1400: { parser.yyVAL.item = ast.TimeUnitHour } - case 1398: + case 1401: { parser.yyVAL.item = ast.TimeUnitDay } - case 1399: + case 1402: { parser.yyVAL.item = ast.TimeUnitWeek } - case 1400: + case 1403: { parser.yyVAL.item = ast.TimeUnitMonth } - case 1401: + case 1404: { parser.yyVAL.item = ast.TimeUnitQuarter } - case 1402: + case 1405: { parser.yyVAL.item = ast.TimeUnitYear } - case 1403: + case 1406: { parser.yyVAL.item = ast.TimeUnitSecond } - case 1404: + case 1407: { parser.yyVAL.item = ast.TimeUnitMinute } - case 1405: + case 1408: { parser.yyVAL.item = ast.TimeUnitHour } - case 1406: + case 1409: { parser.yyVAL.item = ast.TimeUnitDay } - case 1407: + case 1410: { parser.yyVAL.item = ast.TimeUnitWeek } - case 1408: + case 1411: { parser.yyVAL.item = ast.TimeUnitMonth } - case 1409: + case 1412: { parser.yyVAL.item = ast.TimeUnitQuarter } - case 1410: + case 1413: { parser.yyVAL.item = ast.TimeUnitYear } - case 1411: + case 1414: { parser.yyVAL.expr = nil } - case 1413: + case 1416: { parser.yyVAL.item = []*ast.WhenClause{yyS[yypt-0].item.(*ast.WhenClause)} } - case 1414: + case 1417: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.WhenClause), yyS[yypt-0].item.(*ast.WhenClause)) } - case 1415: + case 1418: { parser.yyVAL.item = &ast.WhenClause{ Expr: yyS[yypt-2].expr, Result: yyS[yypt-0].expr, } } - case 1416: + case 1419: { parser.yyVAL.item = nil } - case 1417: + case 1420: { parser.yyVAL.item = yyS[yypt-0].expr } - case 1418: + case 1421: { x := types.NewFieldType(mysql.TypeVarString) x.Flen = yyS[yypt-0].item.(int) // TODO: Flen should be the flen of expression @@ -16119,7 +16138,7 @@ yynewstate: x.Flag |= mysql.BinaryFlag parser.yyVAL.item = x } - case 1419: + case 1422: { x := types.NewFieldType(mysql.TypeVarString) x.Flen = yyS[yypt-1].item.(int) // TODO: Flen should be the flen of expression @@ -16142,7 +16161,7 @@ yynewstate: } parser.yyVAL.item = x } - case 1420: + case 1423: { x := types.NewFieldType(mysql.TypeDate) x.Charset = charset.CharsetBin @@ -16150,7 +16169,7 @@ yynewstate: x.Flag |= mysql.BinaryFlag parser.yyVAL.item = x } - case 1421: + case 1424: { x := types.NewFieldType(mysql.TypeYear) x.Charset = charset.CharsetBin @@ -16158,7 +16177,7 @@ yynewstate: x.Flag |= mysql.BinaryFlag parser.yyVAL.item = x } - case 1422: + case 1425: { x := types.NewFieldType(mysql.TypeDatetime) x.Flen, _ = mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDatetime) @@ -16171,7 +16190,7 @@ yynewstate: x.Flag |= mysql.BinaryFlag parser.yyVAL.item = x } - case 1423: + case 1426: { fopt := yyS[yypt-0].item.(*ast.FloatOpt) x := types.NewFieldType(mysql.TypeNewDecimal) @@ -16182,7 +16201,7 @@ yynewstate: x.Flag |= mysql.BinaryFlag parser.yyVAL.item = x } - case 1424: + case 1427: { x := types.NewFieldType(mysql.TypeDuration) x.Flen, _ = mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDuration) @@ -16195,7 +16214,7 @@ yynewstate: x.Flag |= mysql.BinaryFlag parser.yyVAL.item = x } - case 1425: + case 1428: { x := types.NewFieldType(mysql.TypeLonglong) x.Charset = charset.CharsetBin @@ -16203,7 +16222,7 @@ yynewstate: x.Flag |= mysql.BinaryFlag parser.yyVAL.item = x } - case 1426: + case 1429: { x := types.NewFieldType(mysql.TypeLonglong) x.Flag |= mysql.UnsignedFlag | mysql.BinaryFlag @@ -16211,7 +16230,7 @@ yynewstate: x.Collate = charset.CollationBin parser.yyVAL.item = x } - case 1427: + case 1430: { x := types.NewFieldType(mysql.TypeJSON) x.Flag |= mysql.BinaryFlag | (mysql.ParseToJSONFlag) @@ -16219,7 +16238,7 @@ yynewstate: x.Collate = mysql.DefaultCollationName parser.yyVAL.item = x } - case 1428: + case 1431: { x := types.NewFieldType(mysql.TypeDouble) x.Flen, x.Decimal = mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDouble) @@ -16228,7 +16247,7 @@ yynewstate: x.Collate = charset.CollationBin parser.yyVAL.item = x } - case 1429: + case 1432: { x := types.NewFieldType(mysql.TypeFloat) fopt := yyS[yypt-0].item.(*ast.FloatOpt) @@ -16243,7 +16262,7 @@ yynewstate: x.Collate = charset.CollationBin parser.yyVAL.item = x } - case 1430: + case 1433: { var x *types.FieldType if parser.lexer.GetSQLMode().HasRealAsFloatMode() { @@ -16257,65 +16276,65 @@ yynewstate: x.Collate = charset.CollationBin parser.yyVAL.item = x } - case 1431: + case 1434: { parser.yyVAL.item = mysql.LowPriority } - case 1432: + case 1435: { parser.yyVAL.item = mysql.HighPriority } - case 1433: + case 1436: { parser.yyVAL.item = mysql.DelayedPriority } - case 1434: + case 1437: { parser.yyVAL.item = mysql.NoPriority } - case 1436: + case 1439: { parser.yyVAL.item = &ast.TableName{Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 1437: + case 1440: { parser.yyVAL.item = &ast.TableName{Schema: model.NewCIStr(yyS[yypt-2].ident), Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 1438: + case 1441: { tbl := []*ast.TableName{yyS[yypt-0].item.(*ast.TableName)} parser.yyVAL.item = tbl } - case 1439: + case 1442: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableName), yyS[yypt-0].item.(*ast.TableName)) } - case 1440: + case 1443: { parser.yyVAL.item = &ast.TableName{Name: model.NewCIStr(yyS[yypt-1].ident)} } - case 1441: + case 1444: { parser.yyVAL.item = &ast.TableName{Schema: model.NewCIStr(yyS[yypt-3].ident), Name: model.NewCIStr(yyS[yypt-1].ident)} } - case 1442: + case 1445: { tbl := []*ast.TableName{yyS[yypt-0].item.(*ast.TableName)} parser.yyVAL.item = tbl } - case 1443: + case 1446: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableName), yyS[yypt-0].item.(*ast.TableName)) } - case 1446: + case 1449: { parser.yyVAL.item = false } - case 1447: + case 1450: { parser.yyVAL.item = true } - case 1448: + case 1451: { var sqlText string var sqlVar *ast.VariableExpr @@ -16331,86 +16350,86 @@ yynewstate: SQLVar: sqlVar, } } - case 1449: + case 1452: { parser.yyVAL.item = yyS[yypt-0].ident } - case 1450: + case 1453: { parser.yyVAL.item = yyS[yypt-0].expr } - case 1451: + case 1454: { parser.yyVAL.statement = &ast.ExecuteStmt{Name: yyS[yypt-0].ident} } - case 1452: + case 1455: { parser.yyVAL.statement = &ast.ExecuteStmt{ Name: yyS[yypt-2].ident, UsingVars: yyS[yypt-0].item.([]ast.ExprNode), } } - case 1453: + case 1456: { parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} } - case 1454: + case 1457: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) } - case 1455: + case 1458: { parser.yyVAL.statement = &ast.DeallocateStmt{Name: yyS[yypt-0].ident} } - case 1458: + case 1461: { parser.yyVAL.statement = &ast.RollbackStmt{} } - case 1459: + case 1462: { parser.yyVAL.statement = &ast.RollbackStmt{CompletionType: yyS[yypt-0].item.(ast.CompletionType)} } - case 1460: + case 1463: { parser.yyVAL.item = ast.CompletionTypeChain } - case 1461: + case 1464: { parser.yyVAL.item = ast.CompletionTypeRelease } - case 1462: + case 1465: { parser.yyVAL.item = ast.CompletionTypeDefault } - case 1463: + case 1466: { parser.yyVAL.item = ast.CompletionTypeChain } - case 1464: + case 1467: { parser.yyVAL.item = ast.CompletionTypeDefault } - case 1465: + case 1468: { parser.yyVAL.item = ast.CompletionTypeRelease } - case 1466: + case 1469: { parser.yyVAL.item = ast.CompletionTypeDefault } - case 1467: + case 1470: { parser.yyVAL.statement = &ast.ShutdownStmt{} } - case 1468: + case 1471: { parser.yyVAL.statement = &ast.RestartStmt{} } - case 1469: + case 1472: { parser.yyVAL.statement = &ast.HelpStmt{Topic: yyS[yypt-0].ident} } - case 1470: + case 1473: { st := &ast.SelectStmt{ SelectStmtOpts: yyS[yypt-1].item.(*ast.SelectStmtOpts), @@ -16423,7 +16442,7 @@ yynewstate: } parser.yyVAL.item = st } - case 1471: + case 1474: { st := yyS[yypt-2].item.(*ast.SelectStmt) lastField := st.Fields.Fields[len(st.Fields.Fields)-1] @@ -16435,7 +16454,7 @@ yynewstate: st.Where = yyS[yypt-0].item.(ast.ExprNode) } } - case 1472: + case 1475: { st := yyS[yypt-6].item.(*ast.SelectStmt) st.From = yyS[yypt-4].item.(*ast.TableRefsClause) @@ -16458,11 +16477,11 @@ yynewstate: } parser.yyVAL.item = st } - case 1473: + case 1476: { parser.yyVAL.item = nil } - case 1474: + case 1477: { var repSeed ast.ExprNode if yyS[yypt-0].expr != nil { @@ -16475,7 +16494,7 @@ yynewstate: RepeatableSeed: repSeed, } } - case 1475: + case 1478: { var repSeed ast.ExprNode if yyS[yypt-0].expr != nil { @@ -16486,43 +16505,43 @@ yynewstate: RepeatableSeed: repSeed, } } - case 1476: + case 1479: { parser.yyVAL.item = ast.SampleMethodTypeNone } - case 1477: + case 1480: { parser.yyVAL.item = ast.SampleMethodTypeSystem } - case 1478: + case 1481: { parser.yyVAL.item = ast.SampleMethodTypeBernoulli } - case 1479: + case 1482: { parser.yyVAL.item = ast.SampleMethodTypeTiDBRegion } - case 1480: + case 1483: { parser.yyVAL.item = ast.SampleClauseUnitTypeDefault } - case 1481: + case 1484: { parser.yyVAL.item = ast.SampleClauseUnitTypeRow } - case 1482: + case 1485: { parser.yyVAL.item = ast.SampleClauseUnitTypePercent } - case 1483: + case 1486: { parser.yyVAL.expr = nil } - case 1484: + case 1487: { parser.yyVAL.expr = yyS[yypt-1].expr } - case 1485: + case 1488: { st := yyS[yypt-6].item.(*ast.SelectStmt) if yyS[yypt-1].item != nil { @@ -16569,7 +16588,7 @@ yynewstate: } parser.yyVAL.statement = st } - case 1486: + case 1489: { st := yyS[yypt-5].item.(*ast.SelectStmt) if yyS[yypt-4].item != nil { @@ -16589,7 +16608,7 @@ yynewstate: } parser.yyVAL.statement = st } - case 1487: + case 1490: { st := yyS[yypt-4].item.(*ast.SelectStmt) if yyS[yypt-1].item != nil { @@ -16606,7 +16625,7 @@ yynewstate: } parser.yyVAL.statement = st } - case 1488: + case 1491: { st := &ast.SelectStmt{ Kind: ast.SelectStmtKindTable, @@ -16628,7 +16647,7 @@ yynewstate: } parser.yyVAL.statement = st } - case 1489: + case 1492: { st := &ast.SelectStmt{ Kind: ast.SelectStmtKindValues, @@ -16649,13 +16668,13 @@ yynewstate: } parser.yyVAL.statement = st } - case 1490: + case 1493: { sel := yyS[yypt-0].statement.(*ast.SelectStmt) sel.With = yyS[yypt-1].item.(*ast.WithClause) parser.yyVAL.statement = sel } - case 1491: + case 1494: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -16671,30 +16690,30 @@ yynewstate: } parser.yyVAL.statement = sel } - case 1492: + case 1495: { parser.yyVAL.item = yyS[yypt-0].item } - case 1493: + case 1496: { ws := yyS[yypt-0].item.(*ast.WithClause) ws.IsRecursive = true parser.yyVAL.item = ws } - case 1494: + case 1497: { ws := yyS[yypt-2].item.(*ast.WithClause) ws.CTEs = append(ws.CTEs, yyS[yypt-0].item.(*ast.CommonTableExpression)) parser.yyVAL.item = ws } - case 1495: + case 1498: { ws := &ast.WithClause{} ws.CTEs = make([]*ast.CommonTableExpression, 0, 4) ws.CTEs = append(ws.CTEs, yyS[yypt-0].item.(*ast.CommonTableExpression)) parser.yyVAL.item = ws } - case 1496: + case 1499: { cte := &ast.CommonTableExpression{} cte.Name = model.NewCIStr(yyS[yypt-3].ident) @@ -16702,37 +16721,37 @@ yynewstate: cte.Query = yyS[yypt-0].expr.(*ast.SubqueryExpr) parser.yyVAL.item = cte } - case 1498: + case 1501: { parser.yyVAL.item = nil } - case 1499: + case 1502: { parser.yyVAL.item = yyS[yypt-0].item.([]ast.WindowSpec) } - case 1500: + case 1503: { parser.yyVAL.item = []ast.WindowSpec{yyS[yypt-0].item.(ast.WindowSpec)} } - case 1501: + case 1504: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.WindowSpec), yyS[yypt-0].item.(ast.WindowSpec)) } - case 1502: + case 1505: { var spec = yyS[yypt-0].item.(ast.WindowSpec) spec.Name = yyS[yypt-2].item.(model.CIStr) parser.yyVAL.item = spec } - case 1503: + case 1506: { parser.yyVAL.item = model.NewCIStr(yyS[yypt-0].ident) } - case 1504: + case 1507: { parser.yyVAL.item = yyS[yypt-1].item.(ast.WindowSpec) } - case 1505: + case 1508: { spec := ast.WindowSpec{Ref: yyS[yypt-3].item.(model.CIStr)} if yyS[yypt-2].item != nil { @@ -16746,138 +16765,138 @@ yynewstate: } parser.yyVAL.item = spec } - case 1506: + case 1509: { parser.yyVAL.item = model.CIStr{} } - case 1508: + case 1511: { parser.yyVAL.item = nil } - case 1509: + case 1512: { parser.yyVAL.item = &ast.PartitionByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} } - case 1510: + case 1513: { parser.yyVAL.item = nil } - case 1511: + case 1514: { parser.yyVAL.item = &ast.OrderByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} } - case 1512: + case 1515: { parser.yyVAL.item = nil } - case 1513: + case 1516: { parser.yyVAL.item = &ast.FrameClause{ Type: yyS[yypt-1].item.(ast.FrameType), Extent: yyS[yypt-0].item.(ast.FrameExtent), } } - case 1514: + case 1517: { parser.yyVAL.item = ast.FrameType(ast.Rows) } - case 1515: + case 1518: { parser.yyVAL.item = ast.FrameType(ast.Ranges) } - case 1516: + case 1519: { parser.yyVAL.item = ast.FrameType(ast.Groups) } - case 1517: + case 1520: { parser.yyVAL.item = ast.FrameExtent{ Start: yyS[yypt-0].item.(ast.FrameBound), End: ast.FrameBound{Type: ast.CurrentRow}, } } - case 1519: + case 1522: { parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, UnBounded: true} } - case 1520: + case 1523: { parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)} } - case 1521: + case 1524: { parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: ast.NewParamMarkerExpr(yyS[yypt].offset)} } - case 1522: + case 1525: { parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: yyS[yypt-2].expr, Unit: yyS[yypt-1].item.(ast.TimeUnitType)} } - case 1523: + case 1526: { parser.yyVAL.item = ast.FrameBound{Type: ast.CurrentRow} } - case 1524: + case 1527: { parser.yyVAL.item = ast.FrameExtent{Start: yyS[yypt-2].item.(ast.FrameBound), End: yyS[yypt-0].item.(ast.FrameBound)} } - case 1526: + case 1529: { parser.yyVAL.item = ast.FrameBound{Type: ast.Following, UnBounded: true} } - case 1527: + case 1530: { parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)} } - case 1528: + case 1531: { parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: ast.NewParamMarkerExpr(yyS[yypt].offset)} } - case 1529: + case 1532: { parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: yyS[yypt-2].expr, Unit: yyS[yypt-1].item.(ast.TimeUnitType)} } - case 1530: + case 1533: { parser.yyVAL.item = nil } - case 1531: + case 1534: { spec := yyS[yypt-0].item.(ast.WindowSpec) parser.yyVAL.item = &spec } - case 1532: + case 1535: { parser.yyVAL.item = yyS[yypt-0].item.(ast.WindowSpec) } - case 1533: + case 1536: { parser.yyVAL.item = ast.WindowSpec{Name: yyS[yypt-0].item.(model.CIStr), OnlyAlias: true} } - case 1535: + case 1538: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1536: + case 1539: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1537: + case 1540: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1538: + case 1541: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1539: + case 1542: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1540: + case 1543: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1541: + case 1544: { args := []ast.ExprNode{yyS[yypt-4].expr} if yyS[yypt-3].item != nil { @@ -16885,7 +16904,7 @@ yynewstate: } parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-6].ident, Args: args, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1542: + case 1545: { args := []ast.ExprNode{yyS[yypt-4].expr} if yyS[yypt-3].item != nil { @@ -16893,23 +16912,23 @@ yynewstate: } parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-6].ident, Args: args, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1543: + case 1546: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-3].expr}, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1544: + case 1547: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-3].expr}, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1545: + case 1548: { parser.yyVAL.expr = &ast.WindowFuncExpr{F: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-6].expr, yyS[yypt-4].expr}, FromLast: yyS[yypt-2].item.(bool), IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1546: + case 1549: { parser.yyVAL.item = nil } - case 1547: + case 1550: { args := []ast.ExprNode{ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)} if yyS[yypt-0].item != nil { @@ -16917,7 +16936,7 @@ yynewstate: } parser.yyVAL.item = args } - case 1548: + case 1551: { args := []ast.ExprNode{ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)} if yyS[yypt-0].item != nil { @@ -16925,43 +16944,43 @@ yynewstate: } parser.yyVAL.item = args } - case 1549: + case 1552: { parser.yyVAL.item = nil } - case 1550: + case 1553: { parser.yyVAL.item = yyS[yypt-0].expr } - case 1551: + case 1554: { parser.yyVAL.item = false } - case 1552: + case 1555: { parser.yyVAL.item = false } - case 1553: + case 1556: { parser.yyVAL.item = true } - case 1554: + case 1557: { parser.yyVAL.item = false } - case 1555: + case 1558: { parser.yyVAL.item = false } - case 1556: + case 1559: { parser.yyVAL.item = true } - case 1557: + case 1560: { parser.yyVAL.item = &ast.TableRefsClause{TableRefs: yyS[yypt-0].item.(*ast.Join)} } - case 1558: + case 1561: { if j, ok := yyS[yypt-0].item.(*ast.Join); ok { // if $1 is Join, use it directly @@ -16970,12 +16989,12 @@ yynewstate: parser.yyVAL.item = &ast.Join{Left: yyS[yypt-0].item.(ast.ResultSetNode), Right: nil} } } - case 1559: + case 1562: { /* from a, b is default cross join */ parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: ast.CrossJoin} } - case 1561: + case 1564: { /* * ODBC escape syntax for outer join is { OJ join_table } @@ -16983,7 +17002,7 @@ yynewstate: */ parser.yyVAL.item = yyS[yypt-1].item } - case 1564: + case 1567: { tn := yyS[yypt-5].item.(*ast.TableName) tn.PartitionNames = yyS[yypt-4].item.([]model.CIStr) @@ -16996,66 +17015,66 @@ yynewstate: } parser.yyVAL.item = &ast.TableSource{Source: tn, AsName: yyS[yypt-3].item.(model.CIStr)} } - case 1565: + case 1568: { resultNode := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query parser.yyVAL.item = &ast.TableSource{Source: resultNode, AsName: yyS[yypt-0].item.(model.CIStr)} } - case 1566: + case 1569: { j := yyS[yypt-1].item.(*ast.Join) j.ExplicitParens = true parser.yyVAL.item = yyS[yypt-1].item } - case 1567: + case 1570: { parser.yyVAL.item = []model.CIStr{} } - case 1568: + case 1571: { parser.yyVAL.item = yyS[yypt-1].item } - case 1569: + case 1572: { parser.yyVAL.item = model.CIStr{} } - case 1571: + case 1574: { parser.yyVAL.item = model.NewCIStr(yyS[yypt-0].ident) } - case 1572: + case 1575: { parser.yyVAL.item = model.NewCIStr(yyS[yypt-0].ident) } - case 1573: + case 1576: { parser.yyVAL.item = ast.HintUse } - case 1574: + case 1577: { parser.yyVAL.item = ast.HintIgnore } - case 1575: + case 1578: { parser.yyVAL.item = ast.HintForce } - case 1576: + case 1579: { parser.yyVAL.item = ast.HintForScan } - case 1577: + case 1580: { parser.yyVAL.item = ast.HintForJoin } - case 1578: + case 1581: { parser.yyVAL.item = ast.HintForOrderBy } - case 1579: + case 1582: { parser.yyVAL.item = ast.HintForGroupBy } - case 1580: + case 1583: { parser.yyVAL.item = &ast.IndexHint{ IndexNames: yyS[yypt-1].item.([]model.CIStr), @@ -17063,134 +17082,134 @@ yynewstate: HintScope: yyS[yypt-3].item.(ast.IndexHintScope), } } - case 1581: + case 1584: { var nameList []model.CIStr parser.yyVAL.item = nameList } - case 1582: + case 1585: { parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} } - case 1583: + case 1586: { parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) } - case 1584: + case 1587: { parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} } - case 1585: + case 1588: { parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) } - case 1586: + case 1589: { parser.yyVAL.item = []*ast.IndexHint{yyS[yypt-0].item.(*ast.IndexHint)} } - case 1587: + case 1590: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.IndexHint), yyS[yypt-0].item.(*ast.IndexHint)) } - case 1588: + case 1591: { parser.yyVAL.item = []*ast.IndexHint{} } - case 1590: + case 1593: { parser.yyVAL.item = ast.NewCrossJoin(yyS[yypt-2].item.(ast.ResultSetNode), yyS[yypt-0].item.(ast.ResultSetNode)) } - case 1591: + case 1594: { on := &ast.OnCondition{Expr: yyS[yypt-0].expr} parser.yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: ast.CrossJoin, On: on} } - case 1592: + case 1595: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), Tp: ast.CrossJoin, Using: yyS[yypt-1].item.([]*ast.ColumnName)} } - case 1593: + case 1596: { on := &ast.OnCondition{Expr: yyS[yypt-0].expr} parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: yyS[yypt-5].item.(ast.JoinType), On: on} } - case 1594: + case 1597: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-8].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), Tp: yyS[yypt-7].item.(ast.JoinType), Using: yyS[yypt-1].item.([]*ast.ColumnName)} } - case 1595: + case 1598: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-3].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), NaturalJoin: true} } - case 1596: + case 1599: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-5].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: yyS[yypt-3].item.(ast.JoinType), NaturalJoin: true} } - case 1597: + case 1600: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), StraightJoin: true} } - case 1598: + case 1601: { on := &ast.OnCondition{Expr: yyS[yypt-0].expr} parser.yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), StraightJoin: true, On: on} } - case 1599: + case 1602: { parser.yyVAL.item = ast.LeftJoin } - case 1600: + case 1603: { parser.yyVAL.item = ast.RightJoin } - case 1606: + case 1609: { parser.yyVAL.item = nil } - case 1607: + case 1610: { parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(ast.ValueExpr)} } - case 1608: + case 1611: { parser.yyVAL.item = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1609: + case 1612: { parser.yyVAL.item = ast.NewParamMarkerExpr(yyS[yypt].offset) } - case 1614: + case 1617: { parser.yyVAL.item = ast.NewValueExpr(uint64(1), parser.charset, parser.collation) } - case 1616: + case 1619: { parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(ast.ExprNode)} } - case 1617: + case 1620: { parser.yyVAL.item = &ast.Limit{Offset: yyS[yypt-2].item.(ast.ExprNode), Count: yyS[yypt-0].item.(ast.ExprNode)} } - case 1618: + case 1621: { parser.yyVAL.item = &ast.Limit{Offset: yyS[yypt-0].item.(ast.ExprNode), Count: yyS[yypt-2].item.(ast.ExprNode)} } - case 1619: + case 1622: { parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-2].item.(ast.ExprNode)} } - case 1620: + case 1623: { parser.yyVAL.item = nil } - case 1622: + case 1625: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.TableHints = yyS[yypt-0].item.([]*ast.TableOptimizerHint) parser.yyVAL.item = opt } - case 1623: + case 1626: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true @@ -17202,61 +17221,61 @@ yynewstate: } parser.yyVAL.item = opt } - case 1624: + case 1627: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.Priority = yyS[yypt-0].item.(mysql.PriorityEnum) parser.yyVAL.item = opt } - case 1625: + case 1628: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.SQLSmallResult = true parser.yyVAL.item = opt } - case 1626: + case 1629: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.SQLBigResult = true parser.yyVAL.item = opt } - case 1627: + case 1630: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.SQLBufferResult = true parser.yyVAL.item = opt } - case 1628: + case 1631: { opt := &ast.SelectStmtOpts{} opt.SQLCache = yyS[yypt-0].item.(bool) parser.yyVAL.item = opt } - case 1629: + case 1632: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.CalcFoundRows = true parser.yyVAL.item = opt } - case 1630: + case 1633: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.StraightJoin = true parser.yyVAL.item = opt } - case 1631: + case 1634: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true parser.yyVAL.item = opt } - case 1633: + case 1636: { opts := yyS[yypt-1].item.(*ast.SelectStmtOpts) opt := yyS[yypt-0].item.(*ast.SelectStmtOpts) @@ -17301,7 +17320,7 @@ yynewstate: parser.yyVAL.item = opts } - case 1635: + case 1638: { hints, warns := parser.parseHint(yyS[yypt-0].ident) for _, w := range warns { @@ -17310,31 +17329,31 @@ yynewstate: } parser.yyVAL.item = hints } - case 1636: + case 1639: { parser.yyVAL.item = nil } - case 1638: + case 1641: { parser.yyVAL.item = true } - case 1639: + case 1642: { parser.yyVAL.item = false } - case 1640: + case 1643: { parser.yyVAL.item = &ast.FieldList{Fields: yyS[yypt-0].item.([]*ast.SelectField)} } - case 1641: + case 1644: { parser.yyVAL.item = nil } - case 1643: + case 1646: { parser.yyVAL.item = nil } - case 1644: + case 1647: { x := &ast.SelectIntoOption{ Tp: ast.SelectIntoOutfile, @@ -17349,7 +17368,7 @@ yynewstate: parser.yyVAL.item = x } - case 1645: + case 1648: { rs := yyS[yypt-1].statement.(*ast.SelectStmt) endOffset := parser.endOffset(&yyS[yypt]) @@ -17359,14 +17378,14 @@ yynewstate: rs.SetText(parser.lexer.client, src[yyS[yypt-1].offset:yyS[yypt].offset]) parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs} } - case 1646: + case 1649: { rs := yyS[yypt-1].statement.(*ast.SetOprStmt) src := parser.src rs.SetText(parser.lexer.client, src[yyS[yypt-1].offset:yyS[yypt].offset]) parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs} } - case 1647: + case 1650: { rs := yyS[yypt-1].statement.(*ast.SelectStmt) endOffset := parser.endOffset(&yyS[yypt]) @@ -17376,7 +17395,7 @@ yynewstate: rs.SetText(parser.lexer.client, src[yyS[yypt-1].offset:yyS[yypt].offset]) parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs} } - case 1648: + case 1651: { subQuery := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query isRecursive := true @@ -17399,32 +17418,32 @@ yynewstate: parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs} } } - case 1649: + case 1652: { parser.yyVAL.item = nil } - case 1650: + case 1653: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForUpdate, Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1651: + case 1654: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForShare, Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1652: + case 1655: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForUpdateNoWait, Tables: yyS[yypt-1].item.([]*ast.TableName), } } - case 1653: + case 1656: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForUpdateWaitN, @@ -17432,55 +17451,55 @@ yynewstate: Tables: yyS[yypt-2].item.([]*ast.TableName), } } - case 1654: + case 1657: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForShareNoWait, Tables: yyS[yypt-1].item.([]*ast.TableName), } } - case 1655: + case 1658: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForUpdateSkipLocked, Tables: yyS[yypt-2].item.([]*ast.TableName), } } - case 1656: + case 1659: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForShareSkipLocked, Tables: yyS[yypt-2].item.([]*ast.TableName), } } - case 1657: + case 1660: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForShare, Tables: []*ast.TableName{}, } } - case 1658: + case 1661: { parser.yyVAL.item = []*ast.TableName{} } - case 1659: + case 1662: { parser.yyVAL.item = yyS[yypt-0].item.([]*ast.TableName) } - case 1662: + case 1665: { setOpr := yyS[yypt-0].statement.(*ast.SetOprStmt) setOpr.With = yyS[yypt-1].item.(*ast.WithClause) parser.yyVAL.statement = setOpr } - case 1663: + case 1666: { setOpr := yyS[yypt-0].statement.(*ast.SetOprStmt) setOpr.With = yyS[yypt-1].item.(*ast.WithClause) parser.yyVAL.statement = setOpr } - case 1664: + case 1667: { setOprList1 := yyS[yypt-2].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -17497,7 +17516,7 @@ yynewstate: setOpr.SelectList.Selects = append(setOpr.SelectList.Selects, st) parser.yyVAL.statement = setOpr } - case 1665: + case 1668: { setOprList1 := yyS[yypt-2].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -17520,7 +17539,7 @@ yynewstate: setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}} parser.yyVAL.statement = setOpr } - case 1666: + case 1669: { setOprList1 := yyS[yypt-3].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -17544,7 +17563,7 @@ yynewstate: setOpr.OrderBy = yyS[yypt-0].item.(*ast.OrderByClause) parser.yyVAL.statement = setOpr } - case 1667: + case 1670: { setOprList1 := yyS[yypt-3].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -17568,7 +17587,7 @@ yynewstate: setOpr.Limit = yyS[yypt-0].item.(*ast.Limit) parser.yyVAL.statement = setOpr } - case 1668: + case 1671: { setOprList1 := yyS[yypt-4].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -17593,7 +17612,7 @@ yynewstate: setOpr.Limit = yyS[yypt-0].item.(*ast.Limit) parser.yyVAL.statement = setOpr } - case 1669: + case 1672: { var setOprList []ast.Node var with *ast.WithClause @@ -17609,7 +17628,7 @@ yynewstate: setOpr.OrderBy = yyS[yypt-0].item.(*ast.OrderByClause) parser.yyVAL.statement = setOpr } - case 1670: + case 1673: { var setOprList []ast.Node var with *ast.WithClause @@ -17625,7 +17644,7 @@ yynewstate: setOpr.Limit = yyS[yypt-0].item.(*ast.Limit) parser.yyVAL.statement = setOpr } - case 1671: + case 1674: { var setOprList []ast.Node var with *ast.WithClause @@ -17642,7 +17661,7 @@ yynewstate: setOpr.Limit = yyS[yypt-0].item.(*ast.Limit) parser.yyVAL.statement = setOpr } - case 1673: + case 1676: { setOprList1 := yyS[yypt-2].item.([]ast.Node) setOprList2 := yyS[yypt-0].item.([]ast.Node) @@ -17658,11 +17677,11 @@ yynewstate: } parser.yyVAL.item = append(setOprList1, setOprList2...) } - case 1674: + case 1677: { parser.yyVAL.item = []ast.Node{yyS[yypt-0].statement.(*ast.SelectStmt)} } - case 1675: + case 1678: { var setOprList []ast.Node switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -17673,7 +17692,7 @@ yynewstate: } parser.yyVAL.item = setOprList } - case 1676: + case 1679: { var tp ast.SetOprType tp = ast.Union @@ -17682,7 +17701,7 @@ yynewstate: } parser.yyVAL.item = &tp } - case 1677: + case 1680: { var tp ast.SetOprType tp = ast.Except @@ -17691,7 +17710,7 @@ yynewstate: } parser.yyVAL.item = &tp } - case 1678: + case 1681: { var tp ast.SetOprType tp = ast.Intersect @@ -17700,7 +17719,7 @@ yynewstate: } parser.yyVAL.item = &tp } - case 1680: + case 1683: { parser.yyVAL.statement = &ast.ChangeStmt{ NodeType: ast.PumpType, @@ -17708,7 +17727,7 @@ yynewstate: NodeID: yyS[yypt-0].ident, } } - case 1681: + case 1684: { parser.yyVAL.statement = &ast.ChangeStmt{ NodeType: ast.DrainerType, @@ -17716,19 +17735,19 @@ yynewstate: NodeID: yyS[yypt-0].ident, } } - case 1682: + case 1685: { parser.yyVAL.statement = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)} } - case 1683: + case 1686: { parser.yyVAL.statement = &ast.SetPwdStmt{Password: yyS[yypt-0].ident} } - case 1684: + case 1687: { parser.yyVAL.statement = &ast.SetPwdStmt{User: yyS[yypt-2].item.(*auth.UserIdentity), Password: yyS[yypt-0].ident} } - case 1685: + case 1688: { vars := yyS[yypt-0].item.([]*ast.VariableAssignment) for _, v := range vars { @@ -17736,11 +17755,11 @@ yynewstate: } parser.yyVAL.statement = &ast.SetStmt{Variables: vars} } - case 1686: + case 1689: { parser.yyVAL.statement = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)} } - case 1687: + case 1690: { assigns := yyS[yypt-0].item.([]*ast.VariableAssignment) for i := 0; i < len(assigns); i++ { @@ -17751,19 +17770,19 @@ yynewstate: } parser.yyVAL.statement = &ast.SetStmt{Variables: assigns} } - case 1688: + case 1691: { parser.yyVAL.statement = &ast.SetConfigStmt{Type: strings.ToLower(yyS[yypt-3].ident), Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr} } - case 1689: + case 1692: { parser.yyVAL.statement = &ast.SetConfigStmt{Instance: yyS[yypt-3].ident, Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr} } - case 1690: + case 1693: { parser.yyVAL.statement = yyS[yypt-0].item.(*ast.SetRoleStmt) } - case 1691: + case 1694: { tmp := yyS[yypt-2].item.(*ast.SetRoleStmt) parser.yyVAL.statement = &ast.SetDefaultRoleStmt{ @@ -17772,27 +17791,27 @@ yynewstate: UserList: yyS[yypt-0].item.([]*auth.UserIdentity), } } - case 1692: + case 1695: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleNone, RoleList: nil} } - case 1693: + case 1696: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleAll, RoleList: nil} } - case 1694: + case 1697: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleRegular, RoleList: yyS[yypt-0].item.([]*auth.RoleIdentity)} } - case 1695: + case 1698: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleAllExcept, RoleList: yyS[yypt-0].item.([]*auth.RoleIdentity)} } - case 1697: + case 1700: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleDefault, RoleList: nil} } - case 1698: + case 1701: { if yyS[yypt-0].item != nil { parser.yyVAL.item = yyS[yypt-0].item @@ -17800,7 +17819,7 @@ yynewstate: parser.yyVAL.item = []*ast.VariableAssignment{} } } - case 1699: + case 1702: { if yyS[yypt-0].item != nil { varAssigns := yyS[yypt-0].item.([]*ast.VariableAssignment) @@ -17809,28 +17828,28 @@ yynewstate: parser.yyVAL.item = yyS[yypt-2].item } } - case 1700: + case 1703: { varAssigns := []*ast.VariableAssignment{} expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation) varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_isolation", Value: expr, IsSystem: true}) parser.yyVAL.item = varAssigns } - case 1701: + case 1704: { varAssigns := []*ast.VariableAssignment{} expr := ast.NewValueExpr("0", parser.charset, parser.collation) varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true}) parser.yyVAL.item = varAssigns } - case 1702: + case 1705: { varAssigns := []*ast.VariableAssignment{} expr := ast.NewValueExpr("1", parser.charset, parser.collation) varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true}) parser.yyVAL.item = varAssigns } - case 1703: + case 1706: { varAssigns := []*ast.VariableAssignment{} asof := yyS[yypt-0].item.(*ast.AsOfClause) @@ -17839,59 +17858,59 @@ yynewstate: } parser.yyVAL.item = varAssigns } - case 1704: + case 1707: { parser.yyVAL.ident = ast.RepeatableRead } - case 1705: + case 1708: { parser.yyVAL.ident = ast.ReadCommitted } - case 1706: + case 1709: { parser.yyVAL.ident = ast.ReadUncommitted } - case 1707: + case 1710: { parser.yyVAL.ident = ast.Serializable } - case 1708: + case 1711: { parser.yyVAL.expr = ast.NewValueExpr("ON", parser.charset, parser.collation) } - case 1709: + case 1712: { parser.yyVAL.expr = ast.NewValueExpr("BINARY", parser.charset, parser.collation) } - case 1714: + case 1717: { parser.yyVAL.ident = yyS[yypt-2].ident + "." + yyS[yypt-0].ident } - case 1716: + case 1719: { parser.yyVAL.ident = yyS[yypt-2].ident + "." + yyS[yypt-0].ident } - case 1717: + case 1720: { parser.yyVAL.ident = yyS[yypt-2].ident + "-" + yyS[yypt-0].ident } - case 1718: + case 1721: { parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} } - case 1719: + case 1722: { parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsGlobal: true, IsSystem: true} } - case 1720: + case 1723: { parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} } - case 1721: + case 1724: { parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} } - case 1722: + case 1725: { v := strings.ToLower(yyS[yypt-2].ident) var isGlobal bool @@ -17907,27 +17926,27 @@ yynewstate: } parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr, IsGlobal: isGlobal, IsSystem: true} } - case 1723: + case 1726: { v := yyS[yypt-2].ident v = strings.TrimPrefix(v, "@") parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr} } - case 1724: + case 1727: { parser.yyVAL.item = &ast.VariableAssignment{ Name: ast.SetNames, Value: ast.NewValueExpr(yyS[yypt-0].ident, "", ""), } } - case 1725: + case 1728: { parser.yyVAL.item = &ast.VariableAssignment{ Name: ast.SetNames, Value: ast.NewValueExpr(yyS[yypt-2].ident, "", ""), } } - case 1726: + case 1729: { parser.yyVAL.item = &ast.VariableAssignment{ Name: ast.SetNames, @@ -17935,24 +17954,24 @@ yynewstate: ExtendValue: ast.NewValueExpr(yyS[yypt-0].ident, "", ""), } } - case 1727: + case 1730: { v := &ast.DefaultExpr{} parser.yyVAL.item = &ast.VariableAssignment{Name: ast.SetNames, Value: v} } - case 1728: + case 1731: { parser.yyVAL.item = &ast.VariableAssignment{Name: ast.SetCharset, Value: yyS[yypt-0].expr} } - case 1729: + case 1732: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].ident, "", "") } - case 1730: + case 1733: { parser.yyVAL.expr = &ast.DefaultExpr{} } - case 1731: + case 1734: { // Validate input charset name to keep the same behavior as parser of MySQL. cs, err := charset.GetCharsetInfo(yyS[yypt-0].ident) @@ -17964,11 +17983,11 @@ yynewstate: // to keep lower case of input for generated column restore. parser.yyVAL.ident = cs.Name } - case 1732: + case 1735: { parser.yyVAL.ident = charset.CharsetBin } - case 1733: + case 1736: { info, err := charset.GetCollationByName(yyS[yypt-0].ident) if err != nil { @@ -17977,19 +17996,19 @@ yynewstate: } parser.yyVAL.ident = info.Name } - case 1734: + case 1737: { parser.yyVAL.ident = charset.CollationBin } - case 1735: + case 1738: { parser.yyVAL.item = []*ast.VariableAssignment{yyS[yypt-0].item.(*ast.VariableAssignment)} } - case 1736: + case 1739: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.VariableAssignment), yyS[yypt-0].item.(*ast.VariableAssignment)) } - case 1739: + case 1742: { v := strings.ToLower(yyS[yypt-0].ident) var isGlobal bool @@ -18006,77 +18025,77 @@ yynewstate: } parser.yyVAL.expr = &ast.VariableExpr{Name: v, IsGlobal: isGlobal, IsSystem: true, ExplicitScope: explicitScope} } - case 1740: + case 1743: { v := yyS[yypt-0].ident v = strings.TrimPrefix(v, "@") parser.yyVAL.expr = &ast.VariableExpr{Name: v, IsGlobal: false, IsSystem: false} } - case 1741: + case 1744: { parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-0].ident, Hostname: "%"} } - case 1742: + case 1745: { parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-2].ident, Hostname: yyS[yypt-0].ident} } - case 1743: + case 1746: { parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-1].ident, Hostname: strings.TrimPrefix(yyS[yypt-0].ident, "@")} } - case 1744: + case 1747: { parser.yyVAL.item = &auth.UserIdentity{CurrentUser: true} } - case 1745: + case 1748: { parser.yyVAL.item = []*auth.UserIdentity{yyS[yypt-0].item.(*auth.UserIdentity)} } - case 1746: + case 1749: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*auth.UserIdentity), yyS[yypt-0].item.(*auth.UserIdentity)) } - case 1748: + case 1751: { parser.yyVAL.ident = yyS[yypt-1].ident } - case 1752: + case 1755: { parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-2].ident, Hostname: yyS[yypt-0].ident} } - case 1753: + case 1756: { parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-1].ident, Hostname: strings.TrimPrefix(yyS[yypt-0].ident, "@")} } - case 1754: + case 1757: { parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-0].ident, Hostname: "%"} } - case 1755: + case 1758: { parser.yyVAL.item = yyS[yypt-0].item } - case 1756: + case 1759: { parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-0].ident, Hostname: "%"} } - case 1757: + case 1760: { parser.yyVAL.item = yyS[yypt-0].item } - case 1758: + case 1761: { parser.yyVAL.item = []*auth.RoleIdentity{yyS[yypt-0].item.(*auth.RoleIdentity)} } - case 1759: + case 1762: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*auth.RoleIdentity), yyS[yypt-0].item.(*auth.RoleIdentity)) } - case 1760: + case 1763: { parser.yyVAL.statement = &ast.AdminStmt{Tp: ast.AdminShowDDL} } - case 1761: + case 1764: { stmt := &ast.AdminStmt{Tp: ast.AdminShowDDLJobs} if yyS[yypt-0].item != nil { @@ -18084,7 +18103,7 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 1762: + case 1765: { stmt := &ast.AdminStmt{ Tp: ast.AdminShowDDLJobs, @@ -18095,21 +18114,21 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 1763: + case 1766: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminShowNextRowID, Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)}, } } - case 1764: + case 1767: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCheckTable, Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1765: + case 1768: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCheckIndex, @@ -18117,7 +18136,7 @@ yynewstate: Index: string(yyS[yypt-0].ident), } } - case 1766: + case 1769: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminRecoverIndex, @@ -18125,7 +18144,7 @@ yynewstate: Index: string(yyS[yypt-0].ident), } } - case 1767: + case 1770: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCleanupIndex, @@ -18133,7 +18152,7 @@ yynewstate: Index: string(yyS[yypt-0].ident), } } - case 1768: + case 1771: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCheckIndexRange, @@ -18142,136 +18161,136 @@ yynewstate: HandleRanges: yyS[yypt-0].item.([]ast.HandleRange), } } - case 1769: + case 1772: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminChecksumTable, Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1770: + case 1773: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCancelDDLJobs, JobIDs: yyS[yypt-0].item.([]int64), } } - case 1771: + case 1774: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminShowDDLJobQueries, JobIDs: yyS[yypt-0].item.([]int64), } } - case 1772: + case 1775: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminShowSlow, ShowSlow: yyS[yypt-0].item.(*ast.ShowSlow), } } - case 1773: + case 1776: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadExprPushdownBlacklist, } } - case 1774: + case 1777: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadOptRuleBlacklist, } } - case 1775: + case 1778: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminPluginEnable, Plugins: yyS[yypt-0].item.([]string), } } - case 1776: + case 1779: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminPluginDisable, Plugins: yyS[yypt-0].item.([]string), } } - case 1777: + case 1780: { parser.yyVAL.statement = &ast.CleanupTableLockStmt{ Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1778: + case 1781: { parser.yyVAL.statement = &ast.RepairTableStmt{ Table: yyS[yypt-1].item.(*ast.TableName), CreateStmt: yyS[yypt-0].statement.(*ast.CreateTableStmt), } } - case 1779: + case 1782: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminFlushBindings, } } - case 1780: + case 1783: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCaptureBindings, } } - case 1781: + case 1784: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminEvolveBindings, } } - case 1782: + case 1785: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadBindings, } } - case 1783: + case 1786: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadStatistics, } } - case 1784: + case 1787: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadStatistics, } } - case 1785: + case 1788: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminShowTelemetry, } } - case 1786: + case 1789: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminResetTelemetryID, } } - case 1787: + case 1790: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminFlushPlanCache, StatementScope: yyS[yypt-1].item.(ast.StatementScope), } } - case 1788: + case 1791: { parser.yyVAL.item = &ast.ShowSlow{ Tp: ast.ShowSlowRecent, Count: getUint64FromNUM(yyS[yypt-0].item), } } - case 1789: + case 1792: { parser.yyVAL.item = &ast.ShowSlow{ Tp: ast.ShowSlowTop, @@ -18279,7 +18298,7 @@ yynewstate: Count: getUint64FromNUM(yyS[yypt-0].item), } } - case 1790: + case 1793: { parser.yyVAL.item = &ast.ShowSlow{ Tp: ast.ShowSlowTop, @@ -18287,7 +18306,7 @@ yynewstate: Count: getUint64FromNUM(yyS[yypt-0].item), } } - case 1791: + case 1794: { parser.yyVAL.item = &ast.ShowSlow{ Tp: ast.ShowSlowTop, @@ -18295,27 +18314,27 @@ yynewstate: Count: getUint64FromNUM(yyS[yypt-0].item), } } - case 1792: + case 1795: { parser.yyVAL.item = []ast.HandleRange{yyS[yypt-0].item.(ast.HandleRange)} } - case 1793: + case 1796: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.HandleRange), yyS[yypt-0].item.(ast.HandleRange)) } - case 1794: + case 1797: { parser.yyVAL.item = ast.HandleRange{Begin: yyS[yypt-3].item.(int64), End: yyS[yypt-1].item.(int64)} } - case 1795: + case 1798: { parser.yyVAL.item = []int64{yyS[yypt-0].item.(int64)} } - case 1796: + case 1799: { parser.yyVAL.item = append(yyS[yypt-2].item.([]int64), yyS[yypt-0].item.(int64)) } - case 1797: + case 1800: { stmt := yyS[yypt-1].item.(*ast.ShowStmt) if yyS[yypt-0].item != nil { @@ -18327,21 +18346,21 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 1798: + case 1801: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateTable, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 1799: + case 1802: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateView, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 1800: + case 1803: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateDatabase, @@ -18349,21 +18368,21 @@ yynewstate: DBName: yyS[yypt-0].ident, } } - case 1801: + case 1804: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateSequence, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 1802: + case 1805: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreatePlacementPolicy, DBName: yyS[yypt-0].ident, } } - case 1803: + case 1806: { // See https://dev.mysql.com/doc/refman/5.7/en/show-create-user.html parser.yyVAL.statement = &ast.ShowStmt{ @@ -18371,14 +18390,14 @@ yynewstate: User: yyS[yypt-0].item.(*auth.UserIdentity), } } - case 1804: + case 1807: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateImport, DBName: yyS[yypt-0].ident, // we reuse DBName of ShowStmt } } - case 1805: + case 1808: { stmt := &ast.ShowStmt{ Tp: ast.ShowRegions, @@ -18390,14 +18409,14 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 1806: + case 1809: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowTableNextRowId, Table: yyS[yypt-1].item.(*ast.TableName), } } - case 1807: + case 1810: { stmt := &ast.ShowStmt{ Tp: ast.ShowRegions, @@ -18410,12 +18429,12 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 1808: + case 1811: { // See https://dev.mysql.com/doc/refman/5.7/en/show-grants.html parser.yyVAL.statement = &ast.ShowStmt{Tp: ast.ShowGrants} } - case 1809: + case 1812: { // See https://dev.mysql.com/doc/refman/5.7/en/show-grants.html if yyS[yypt-0].item != nil { @@ -18432,26 +18451,26 @@ yynewstate: } } } - case 1810: + case 1813: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowMasterStatus, } } - case 1811: + case 1814: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowProcessList, Full: yyS[yypt-1].item.(bool), } } - case 1812: + case 1815: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowProfiles, } } - case 1813: + case 1816: { v := &ast.ShowStmt{ Tp: ast.ShowProfile, @@ -18467,37 +18486,37 @@ yynewstate: } parser.yyVAL.statement = v } - case 1814: + case 1817: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowPrivileges, } } - case 1815: + case 1818: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowBuiltins, } } - case 1816: + case 1819: { parser.yyVAL.statement = yyS[yypt-0].item.(*ast.ShowStmt) } - case 1817: + case 1820: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPlacementForDatabase, DBName: yyS[yypt-0].ident, } } - case 1818: + case 1821: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPlacementForTable, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 1819: + case 1822: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPlacementForPartition, @@ -18505,90 +18524,90 @@ yynewstate: Partition: model.NewCIStr(yyS[yypt-0].ident), } } - case 1820: + case 1823: { parser.yyVAL.item = nil } - case 1822: + case 1825: { parser.yyVAL.item = []int{yyS[yypt-0].item.(int)} } - case 1823: + case 1826: { l := yyS[yypt-2].item.([]int) l = append(l, yyS[yypt-0].item.(int)) parser.yyVAL.item = l } - case 1824: + case 1827: { parser.yyVAL.item = ast.ProfileTypeCPU } - case 1825: + case 1828: { parser.yyVAL.item = ast.ProfileTypeMemory } - case 1826: + case 1829: { parser.yyVAL.item = ast.ProfileTypeBlockIo } - case 1827: + case 1830: { parser.yyVAL.item = ast.ProfileTypeContextSwitch } - case 1828: + case 1831: { parser.yyVAL.item = ast.ProfileTypePageFaults } - case 1829: + case 1832: { parser.yyVAL.item = ast.ProfileTypeIpc } - case 1830: + case 1833: { parser.yyVAL.item = ast.ProfileTypeSwaps } - case 1831: + case 1834: { parser.yyVAL.item = ast.ProfileTypeSource } - case 1832: + case 1835: { parser.yyVAL.item = ast.ProfileTypeAll } - case 1833: + case 1836: { parser.yyVAL.item = nil } - case 1834: + case 1837: { v := yyS[yypt-0].item.(int64) parser.yyVAL.item = &v } - case 1835: + case 1838: { parser.yyVAL.item = nil } - case 1836: + case 1839: { parser.yyVAL.item = yyS[yypt-0].item.([]*auth.RoleIdentity) } - case 1842: + case 1845: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowEngines} } - case 1843: + case 1846: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowDatabases} } - case 1844: + case 1847: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowConfig} } - case 1845: + case 1848: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowCharset} } - case 1846: + case 1849: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowTables, @@ -18596,28 +18615,28 @@ yynewstate: Full: yyS[yypt-2].item.(bool), } } - case 1847: + case 1850: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowOpenTables, DBName: yyS[yypt-0].ident, } } - case 1848: + case 1851: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowTableStatus, DBName: yyS[yypt-0].ident, } } - case 1849: + case 1852: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowIndex, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 1850: + case 1853: { show := &ast.ShowStmt{ Tp: ast.ShowIndex, @@ -18625,7 +18644,7 @@ yynewstate: } parser.yyVAL.item = show } - case 1851: + case 1854: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowColumns, @@ -18634,7 +18653,7 @@ yynewstate: Full: yyS[yypt-3].item.(bool), } } - case 1852: + case 1855: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowColumns, @@ -18644,67 +18663,73 @@ yynewstate: Extended: true, } } - case 1853: + case 1856: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowWarnings} } - case 1854: + case 1857: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowErrors} } - case 1855: + case 1858: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowVariables, GlobalScope: yyS[yypt-1].item.(bool), } } - case 1856: + case 1859: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowStatus, GlobalScope: yyS[yypt-1].item.(bool), } } - case 1857: + case 1860: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowBindings, GlobalScope: yyS[yypt-1].item.(bool), } } - case 1858: + case 1861: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowCollation, } } - case 1859: + case 1862: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowTriggers, DBName: yyS[yypt-0].ident, } } - case 1860: + case 1863: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowBindingCacheStatus, + } + } + case 1864: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowProcedureStatus, } } - case 1861: + case 1865: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPumpStatus, } } - case 1862: + case 1866: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowDrainerStatus, } } - case 1863: + case 1867: { // This statement is similar to SHOW PROCEDURE STATUS but for stored functions. // See http://dev.mysql.com/doc/refman/5.7/en/show-function-status.html @@ -18714,185 +18739,185 @@ yynewstate: Tp: ast.ShowProcedureStatus, } } - case 1864: + case 1868: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowEvents, DBName: yyS[yypt-0].ident, } } - case 1865: + case 1869: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPlugins, } } - case 1866: + case 1870: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsExtended} } - case 1867: + case 1871: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsMeta} } - case 1868: + case 1872: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsHistograms} } - case 1869: + case 1873: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsTopN} } - case 1870: + case 1874: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsBuckets} } - case 1871: + case 1875: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsHealthy} } - case 1872: + case 1876: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowHistogramsInFlight} } - case 1873: + case 1877: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowColumnStatsUsage} } - case 1874: + case 1878: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowAnalyzeStatus} } - case 1875: + case 1879: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowBackups} } - case 1876: + case 1880: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowRestores} } - case 1877: + case 1881: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowImports} } - case 1878: + case 1882: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowPlacement} } - case 1879: + case 1883: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowPlacementLabels} } - case 1880: + case 1884: { parser.yyVAL.item = nil } - case 1881: + case 1885: { parser.yyVAL.item = &ast.PatternLikeExpr{ Pattern: yyS[yypt-0].expr, Escape: '\\', } } - case 1882: + case 1886: { parser.yyVAL.item = yyS[yypt-0].expr } - case 1883: + case 1887: { parser.yyVAL.item = false } - case 1884: + case 1888: { parser.yyVAL.item = true } - case 1885: + case 1889: { parser.yyVAL.item = false } - case 1886: + case 1890: { parser.yyVAL.item = ast.StatementScopeSession } - case 1887: + case 1891: { parser.yyVAL.item = ast.StatementScopeGlobal } - case 1888: + case 1892: { parser.yyVAL.item = ast.StatementScopeInstance } - case 1889: + case 1893: { parser.yyVAL.item = ast.StatementScopeSession } - case 1890: + case 1894: { parser.yyVAL.item = false } - case 1891: + case 1895: { parser.yyVAL.item = true } - case 1892: + case 1896: { parser.yyVAL.ident = "" } - case 1893: + case 1897: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 1894: + case 1898: { parser.yyVAL.item = yyS[yypt-0].item.(*ast.TableName) } - case 1895: + case 1899: { tmp := yyS[yypt-0].item.(*ast.FlushStmt) tmp.NoWriteToBinLog = yyS[yypt-1].item.(bool) parser.yyVAL.statement = tmp } - case 1896: + case 1900: { parser.yyVAL.item = []string{yyS[yypt-0].ident} } - case 1897: + case 1901: { parser.yyVAL.item = append(yyS[yypt-2].item.([]string), yyS[yypt-0].ident) } - case 1898: + case 1902: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushPrivileges, } } - case 1899: + case 1903: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushStatus, } } - case 1900: + case 1904: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushTiDBPlugin, Plugins: yyS[yypt-0].item.([]string), } } - case 1901: + case 1905: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushHosts, } } - case 1902: + case 1906: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushLogs, LogType: yyS[yypt-1].item.(ast.LogType), } } - case 1903: + case 1907: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushTables, @@ -18900,69 +18925,69 @@ yynewstate: ReadLock: yyS[yypt-0].item.(bool), } } - case 1904: + case 1908: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushClientErrorsSummary, } } - case 1905: + case 1909: { parser.yyVAL.item = ast.LogTypeDefault } - case 1906: + case 1910: { parser.yyVAL.item = ast.LogTypeBinary } - case 1907: + case 1911: { parser.yyVAL.item = ast.LogTypeEngine } - case 1908: + case 1912: { parser.yyVAL.item = ast.LogTypeError } - case 1909: + case 1913: { parser.yyVAL.item = ast.LogTypeGeneral } - case 1910: + case 1914: { parser.yyVAL.item = ast.LogTypeSlow } - case 1911: + case 1915: { parser.yyVAL.item = false } - case 1912: + case 1916: { parser.yyVAL.item = true } - case 1913: + case 1917: { parser.yyVAL.item = true } - case 1914: + case 1918: { parser.yyVAL.item = []*ast.TableName{} } - case 1916: + case 1920: { parser.yyVAL.item = []*ast.TableName{} } - case 1917: + case 1921: { parser.yyVAL.item = yyS[yypt-0].item } - case 1918: + case 1922: { parser.yyVAL.item = false } - case 1919: + case 1923: { parser.yyVAL.item = true } - case 1988: + case 1992: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -18975,7 +19000,7 @@ yynewstate: } parser.yyVAL.statement = sel } - case 2013: + case 2017: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -18988,7 +19013,7 @@ yynewstate: } parser.yyVAL.statement = sel } - case 2026: + case 2030: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -19001,7 +19026,7 @@ yynewstate: } parser.yyVAL.statement = sel } - case 2028: + case 2032: { if yyS[yypt-0].statement != nil { s := yyS[yypt-0].statement @@ -19011,7 +19036,7 @@ yynewstate: parser.result = append(parser.result, s) } } - case 2029: + case 2033: { if yyS[yypt-0].statement != nil { s := yyS[yypt-0].statement @@ -19021,7 +19046,7 @@ yynewstate: parser.result = append(parser.result, s) } } - case 2030: + case 2034: { cst := yyS[yypt-0].item.(*ast.Constraint) if yyS[yypt-1].item != nil { @@ -19029,7 +19054,7 @@ yynewstate: } parser.yyVAL.item = cst } - case 2035: + case 2039: { if yyS[yypt-0].item != nil { parser.yyVAL.item = []interface{}{yyS[yypt-0].item.(interface{})} @@ -19037,7 +19062,7 @@ yynewstate: parser.yyVAL.item = []interface{}{} } } - case 2036: + case 2040: { if yyS[yypt-0].item != nil { parser.yyVAL.item = append(yyS[yypt-2].item.([]interface{}), yyS[yypt-0].item) @@ -19045,7 +19070,7 @@ yynewstate: parser.yyVAL.item = yyS[yypt-2].item } } - case 2037: + case 2041: { var columnDefs []*ast.ColumnDef var constraints []*ast.Constraint @@ -19054,7 +19079,7 @@ yynewstate: Constraints: constraints, } } - case 2038: + case 2042: { tes := yyS[yypt-1].item.([]interface{}) var columnDefs []*ast.ColumnDef @@ -19072,69 +19097,69 @@ yynewstate: Constraints: constraints, } } - case 2040: + case 2044: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCharset, StrValue: yyS[yypt-0].ident, UintValue: ast.TableOptionCharsetWithoutConvertTo} } - case 2041: + case 2045: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: yyS[yypt-0].ident, UintValue: ast.TableOptionCharsetWithoutConvertTo} } - case 2042: + case 2046: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoIncrement, UintValue: yyS[yypt-0].item.(uint64), BoolValue: yyS[yypt-3].item.(bool)} } - case 2043: + case 2047: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoIdCache, UintValue: yyS[yypt-0].item.(uint64)} } - case 2044: + case 2048: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoRandomBase, UintValue: yyS[yypt-0].item.(uint64), BoolValue: yyS[yypt-3].item.(bool)} } - case 2045: + case 2049: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAvgRowLength, UintValue: yyS[yypt-0].item.(uint64)} } - case 2046: + case 2050: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionConnection, StrValue: yyS[yypt-0].ident} } - case 2047: + case 2051: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCheckSum, UintValue: yyS[yypt-0].item.(uint64)} } - case 2048: + case 2052: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTableCheckSum, UintValue: yyS[yypt-0].item.(uint64)} } - case 2049: + case 2053: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPassword, StrValue: yyS[yypt-0].ident} } - case 2050: + case 2054: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCompression, StrValue: yyS[yypt-0].ident} } - case 2051: + case 2055: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionKeyBlockSize, UintValue: yyS[yypt-0].item.(uint64)} } - case 2052: + case 2056: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionDelayKeyWrite, UintValue: yyS[yypt-0].item.(uint64)} } - case 2053: + case 2057: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionRowFormat, UintValue: yyS[yypt-0].item.(uint64)} } - case 2054: + case 2058: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsPersistent} } - case 2055: + case 2059: { n := yyS[yypt-0].item.(uint64) if n != 0 && n != 1 { @@ -19145,13 +19170,13 @@ yynewstate: yylex.AppendError(yylex.Errorf("The STATS_AUTO_RECALC is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 2056: + case 2060: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsAutoRecalc, Default: true} yylex.AppendError(yylex.Errorf("The STATS_AUTO_RECALC is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 2057: + case 2061: { // Parse it but will ignore it. // In MySQL, STATS_SAMPLE_PAGES=N(Where 0 1 { @@ -20856,7 +20881,7 @@ yynewstate: OptEnclosed: true, } } - case 2378: + case 2382: { str := yyS[yypt-0].ident if str != "\\" && len(str) > 1 { @@ -20868,7 +20893,7 @@ yynewstate: Value: str, } } - case 2379: + case 2383: { str := yyS[yypt-0].ident if str != "\\" && len(str) > 1 { @@ -20880,118 +20905,118 @@ yynewstate: Value: str, } } - case 2381: + case 2385: { parser.yyVAL.ident = yyS[yypt-0].item.(ast.BinaryLiteral).ToString() } - case 2382: + case 2386: { parser.yyVAL.ident = yyS[yypt-0].item.(ast.BinaryLiteral).ToString() } - case 2383: + case 2387: { parser.yyVAL.item = &ast.LinesClause{Terminated: "\n"} } - case 2384: + case 2388: { parser.yyVAL.item = &ast.LinesClause{Starting: yyS[yypt-1].ident, Terminated: yyS[yypt-0].ident} } - case 2385: + case 2389: { parser.yyVAL.ident = "" } - case 2386: + case 2390: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 2387: + case 2391: { parser.yyVAL.ident = "\n" } - case 2388: + case 2392: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 2389: + case 2393: { parser.yyVAL.item = nil } - case 2390: + case 2394: { parser.yyVAL.item = yyS[yypt-0].item } - case 2391: + case 2395: { l := yyS[yypt-2].item.([]*ast.Assignment) parser.yyVAL.item = append(l, yyS[yypt-0].item.(*ast.Assignment)) } - case 2392: + case 2396: { parser.yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)} } - case 2393: + case 2397: { parser.yyVAL.item = &ast.Assignment{ Column: yyS[yypt-2].expr.(*ast.ColumnNameExpr).Name, Expr: yyS[yypt-0].expr, } } - case 2394: + case 2398: { parser.yyVAL.statement = &ast.UnlockTablesStmt{} } - case 2395: + case 2399: { parser.yyVAL.statement = &ast.LockTablesStmt{ TableLocks: yyS[yypt-0].item.([]ast.TableLock), } } - case 2398: + case 2402: { parser.yyVAL.item = ast.TableLock{ Table: yyS[yypt-1].item.(*ast.TableName), Type: yyS[yypt-0].item.(model.TableLockType), } } - case 2399: + case 2403: { parser.yyVAL.item = model.TableLockRead } - case 2400: + case 2404: { parser.yyVAL.item = model.TableLockReadLocal } - case 2401: + case 2405: { parser.yyVAL.item = model.TableLockWrite } - case 2402: + case 2406: { parser.yyVAL.item = model.TableLockWriteLocal } - case 2403: + case 2407: { parser.yyVAL.item = []ast.TableLock{yyS[yypt-0].item.(ast.TableLock)} } - case 2404: + case 2408: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.TableLock), yyS[yypt-0].item.(ast.TableLock)) } - case 2405: + case 2409: { parser.yyVAL.statement = &ast.KillStmt{ ConnectionID: getUint64FromNUM(yyS[yypt-0].item), TiDBExtension: yyS[yypt-1].item.(bool), } } - case 2406: + case 2410: { parser.yyVAL.statement = &ast.KillStmt{ ConnectionID: getUint64FromNUM(yyS[yypt-0].item), TiDBExtension: yyS[yypt-2].item.(bool), } } - case 2407: + case 2411: { parser.yyVAL.statement = &ast.KillStmt{ ConnectionID: getUint64FromNUM(yyS[yypt-0].item), @@ -20999,28 +21024,28 @@ yynewstate: TiDBExtension: yyS[yypt-2].item.(bool), } } - case 2408: + case 2412: { parser.yyVAL.item = false } - case 2409: + case 2413: { parser.yyVAL.item = true } - case 2410: + case 2414: { parser.yyVAL.statement = &ast.LoadStatsStmt{ Path: yyS[yypt-0].ident, } } - case 2411: + case 2415: { parser.yyVAL.statement = &ast.DropPlacementPolicyStmt{ IfExists: yyS[yypt-1].item.(bool), PolicyName: model.NewCIStr(yyS[yypt-0].ident), } } - case 2412: + case 2416: { parser.yyVAL.statement = &ast.CreatePlacementPolicyStmt{ OrReplace: yyS[yypt-5].item.(bool), @@ -21029,7 +21054,7 @@ yynewstate: PlacementOptions: yyS[yypt-0].item.([]*ast.PlacementOption), } } - case 2413: + case 2417: { parser.yyVAL.statement = &ast.AlterPlacementPolicyStmt{ IfExists: yyS[yypt-2].item.(bool), @@ -21037,7 +21062,7 @@ yynewstate: PlacementOptions: yyS[yypt-0].item.([]*ast.PlacementOption), } } - case 2414: + case 2418: { parser.yyVAL.statement = &ast.CreateSequenceStmt{ IfNotExists: yyS[yypt-3].item.(bool), @@ -21046,87 +21071,87 @@ yynewstate: TblOptions: yyS[yypt-0].item.([]*ast.TableOption), } } - case 2415: + case 2419: { parser.yyVAL.item = []*ast.SequenceOption{} } - case 2417: + case 2421: { parser.yyVAL.item = []*ast.SequenceOption{yyS[yypt-0].item.(*ast.SequenceOption)} } - case 2418: + case 2422: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.SequenceOption), yyS[yypt-0].item.(*ast.SequenceOption)) } - case 2419: + case 2423: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceOptionIncrementBy, IntValue: yyS[yypt-0].item.(int64)} } - case 2420: + case 2424: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceOptionIncrementBy, IntValue: yyS[yypt-0].item.(int64)} } - case 2421: + case 2425: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceStartWith, IntValue: yyS[yypt-0].item.(int64)} } - case 2422: + case 2426: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceStartWith, IntValue: yyS[yypt-0].item.(int64)} } - case 2423: + case 2427: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceMinValue, IntValue: yyS[yypt-0].item.(int64)} } - case 2424: + case 2428: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMinValue} } - case 2425: + case 2429: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMinValue} } - case 2426: + case 2430: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceMaxValue, IntValue: yyS[yypt-0].item.(int64)} } - case 2427: + case 2431: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMaxValue} } - case 2428: + case 2432: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMaxValue} } - case 2429: + case 2433: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceCache, IntValue: yyS[yypt-0].item.(int64)} } - case 2430: + case 2434: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCache} } - case 2431: + case 2435: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCache} } - case 2432: + case 2436: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceCycle} } - case 2433: + case 2437: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCycle} } - case 2434: + case 2438: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCycle} } - case 2436: + case 2440: { parser.yyVAL.item = yyS[yypt-0].item } - case 2437: + case 2441: { unsigned_num := getUint64FromNUM(yyS[yypt-0].item) if unsigned_num > 9223372036854775808 { @@ -21139,14 +21164,14 @@ yynewstate: parser.yyVAL.item = -int64(unsigned_num) } } - case 2438: + case 2442: { parser.yyVAL.statement = &ast.DropSequenceStmt{ IfExists: yyS[yypt-1].item.(bool), Sequences: yyS[yypt-0].item.([]*ast.TableName), } } - case 2439: + case 2443: { parser.yyVAL.statement = &ast.AlterSequenceStmt{ IfExists: yyS[yypt-2].item.(bool), @@ -21154,27 +21179,27 @@ yynewstate: SeqOptions: yyS[yypt-0].item.([]*ast.SequenceOption), } } - case 2440: + case 2444: { parser.yyVAL.item = []*ast.SequenceOption{yyS[yypt-0].item.(*ast.SequenceOption)} } - case 2441: + case 2445: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.SequenceOption), yyS[yypt-0].item.(*ast.SequenceOption)) } - case 2443: + case 2447: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestart} } - case 2444: + case 2448: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestartWith, IntValue: yyS[yypt-0].item.(int64)} } - case 2445: + case 2449: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestartWith, IntValue: yyS[yypt-0].item.(int64)} } - case 2446: + case 2450: { x := &ast.IndexAdviseStmt{ Path: yyS[yypt-3].ident, @@ -21191,42 +21216,42 @@ yynewstate: } parser.yyVAL.statement = x } - case 2447: + case 2451: { parser.yyVAL.item = uint64(ast.UnspecifiedSize) } - case 2448: + case 2452: { parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item) } - case 2449: + case 2453: { parser.yyVAL.item = nil } - case 2450: + case 2454: { parser.yyVAL.item = &ast.MaxIndexNumClause{ PerTable: yyS[yypt-1].item.(uint64), PerDB: yyS[yypt-0].item.(uint64), } } - case 2451: + case 2455: { parser.yyVAL.item = uint64(ast.UnspecifiedSize) } - case 2452: + case 2456: { parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item) } - case 2453: + case 2457: { parser.yyVAL.item = uint64(ast.UnspecifiedSize) } - case 2454: + case 2458: { parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item) } - case 2455: + case 2459: { // Parse it but will ignore it switch yyS[yypt-0].ident { @@ -21241,19 +21266,19 @@ yynewstate: } parser.yyVAL.ident = yyS[yypt-0].ident } - case 2456: + case 2460: { parser.yyVAL.item = append([]*ast.RowExpr{}, yyS[yypt-0].item.(*ast.RowExpr)) } - case 2457: + case 2461: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.RowExpr), yyS[yypt-0].item.(*ast.RowExpr)) } - case 2458: + case 2462: { parser.yyVAL.item = &ast.RowExpr{Values: yyS[yypt-0].item.([]ast.ExprNode)} } - case 2459: + case 2463: { x := &ast.PlanReplayerStmt{ Stmt: yyS[yypt-0].statement, @@ -21269,7 +21294,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2460: + case 2464: { x := &ast.PlanReplayerStmt{ Stmt: yyS[yypt-0].statement, @@ -21285,7 +21310,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2461: + case 2465: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -21305,7 +21330,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2462: + case 2466: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -21325,7 +21350,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2463: + case 2467: { x := &ast.PlanReplayerStmt{ Stmt: nil, diff --git a/parser/parser.y b/parser/parser.y index 4407c10eb8d85..14304bf200bf7 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -314,6 +314,7 @@ import ( begin "BEGIN" bernoulli "BERNOULLI" binding "BINDING" + bindingCache "BINDING_CACHE" bindings "BINDINGS" binlog "BINLOG" bitType "BIT" @@ -370,12 +371,14 @@ import ( delayKeyWrite "DELAY_KEY_WRITE" directory "DIRECTORY" disable "DISABLE" + disabled "DISABLED" discard "DISCARD" disk "DISK" do "DO" duplicate "DUPLICATE" dynamic "DYNAMIC" enable "ENABLE" + enabled "ENABLED" encryption "ENCRYPTION" end "END" enforced "ENFORCED" @@ -3418,13 +3421,13 @@ StatsType: } BindingStatusType: - "ENABLE" + "ENABLED" { - $$ = ast.BindingStatusTypeEnable + $$ = ast.BindingStatusTypeEnabled } -| "DISABLE" +| "DISABLED" { - $$ = ast.BindingStatusTypeDisable + $$ = ast.BindingStatusTypeDisabled } CreateStatisticsStmt: @@ -5745,6 +5748,7 @@ UnReservedKeyword: | "ADVISE" | "ASCII" | "ATTRIBUTES" +| "BINDING_CACHE" | "STATS_OPTIONS" | "STATS_SAMPLE_RATE" | "STATS_COL_CHOICE" @@ -5891,7 +5895,9 @@ UnReservedKeyword: | "PROCESSLIST" | "SQL_NO_CACHE" | "DISABLE" +| "DISABLED" | "ENABLE" +| "ENABLED" | "REVERSE" | "PRIVILEGES" | "NO" @@ -10631,6 +10637,12 @@ ShowTargetFilterable: DBName: $2, } } +| "BINDING_CACHE" "STATUS" + { + $$ = &ast.ShowStmt{ + Tp: ast.ShowBindingCacheStatus, + } + } | "PROCEDURE" "STATUS" { $$ = &ast.ShowStmt{ diff --git a/parser/parser_test.go b/parser/parser_test.go index 86747b5259958..b9a8d5e0f9e5b 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -1134,6 +1134,8 @@ func TestDBAStmt(t *testing.T) { // for show pump/drainer status. {"show pump status", true, "SHOW PUMP STATUS"}, {"show drainer status", true, "SHOW DRAINER STATUS"}, + // for show binding_cache status + {"show binding_cache status", true, "SHOW BINDING_CACHE STATUS"}, {"show analyze status", true, "SHOW ANALYZE STATUS"}, {"show analyze status where table_name = 't'", true, "SHOW ANALYZE STATUS WHERE `table_name`=_UTF8MB4't'"}, {"show analyze status where table_name like '%'", true, "SHOW ANALYZE STATUS WHERE `table_name` LIKE _UTF8MB4'%'"}, @@ -2400,6 +2402,7 @@ func TestDDL(t *testing.T) { {`create table testTableCompression (c VARCHAR(15000)) compression="ZLIB";`, true, "CREATE TABLE `testTableCompression` (`c` VARCHAR(15000)) COMPRESSION = 'ZLIB'"}, {`create table t1 (c1 int) compression="zlib";`, true, "CREATE TABLE `t1` (`c1` INT) COMPRESSION = 'zlib'"}, {`create table t1 (c1 int) collate=binary;`, true, "CREATE TABLE `t1` (`c1` INT) DEFAULT COLLATE = BINARY"}, + {`create table t1 (c1 int) collate=utf8mb4_0900_as_cs;`, true, "CREATE TABLE `t1` (`c1` INT) DEFAULT COLLATE = UTF8MB4_0900_AS_CS"}, {`create table t1 (c1 int) default charset=binary collate=binary;`, true, "CREATE TABLE `t1` (`c1` INT) DEFAULT CHARACTER SET = BINARY DEFAULT COLLATE = BINARY"}, // for table option `UNION` @@ -3810,12 +3813,12 @@ func TestOptimizerHints(t *testing.T) { require.Equal(t, "t4", hints[1].Tables[1].TableName.L) // TEST BROADCAST_JOIN - stmt, _, err = p.Parse("select /*+ BROADCAST_JOIN(t1, T2), broadcast_join(t3, t4), BROADCAST_JOIN_LOCAL(t2) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") + stmt, _, err = p.Parse("select /*+ BROADCAST_JOIN(t1, T2), broadcast_join(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") require.NoError(t, err) selectStmt = stmt[0].(*ast.SelectStmt) hints = selectStmt.TableHints - require.Len(t, hints, 3) + require.Len(t, hints, 2) require.Equal(t, "broadcast_join", hints[0].HintName.L) require.Len(t, hints[0].Tables, 2) require.Equal(t, "t1", hints[0].Tables[0].TableName.L) @@ -3826,10 +3829,6 @@ func TestOptimizerHints(t *testing.T) { require.Equal(t, "t3", hints[1].Tables[0].TableName.L) require.Equal(t, "t4", hints[1].Tables[1].TableName.L) - require.Equal(t, "broadcast_join_local", hints[2].HintName.L) - require.Len(t, hints[2].Tables, 1) - require.Equal(t, "t2", hints[2].Tables[0].TableName.L) - // Test TIDB_INLJ stmt, _, err = p.Parse("select /*+ TIDB_INLJ(t1, T2), tidb_inlj(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") require.NoError(t, err) @@ -4873,10 +4872,10 @@ func TestBinding(t *testing.T) { {"drop session binding for select * from t using select * from t use index(a)", true, "DROP SESSION BINDING FOR SELECT * FROM `t` USING SELECT * FROM `t` USE INDEX (`a`)"}, {"show global bindings", true, "SHOW GLOBAL BINDINGS"}, {"show session bindings", true, "SHOW SESSION BINDINGS"}, - {"set binding enable for select * from t", true, "SET BINDING ENABLE FOR SELECT * FROM `t`"}, - {"set binding enable for select * from t using select * from t use index(a)", true, "SET BINDING ENABLE FOR SELECT * FROM `t` USING SELECT * FROM `t` USE INDEX (`a`)"}, - {"set binding disable for select * from t", true, "SET BINDING DISABLE FOR SELECT * FROM `t`"}, - {"set binding disable for select * from t using select * from t use index(a)", true, "SET BINDING DISABLE FOR SELECT * FROM `t` USING SELECT * FROM `t` USE INDEX (`a`)"}, + {"set binding enabled for select * from t", true, "SET BINDING ENABLED FOR SELECT * FROM `t`"}, + {"set binding enabled for select * from t using select * from t use index(a)", true, "SET BINDING ENABLED FOR SELECT * FROM `t` USING SELECT * FROM `t` USE INDEX (`a`)"}, + {"set binding disabled for select * from t", true, "SET BINDING DISABLED FOR SELECT * FROM `t`"}, + {"set binding disabled for select * from t using select * from t use index(a)", true, "SET BINDING DISABLED FOR SELECT * FROM `t` USING SELECT * FROM `t` USE INDEX (`a`)"}, {"create global binding for select * from t union all select * from t using select * from t use index(a) union all select * from t use index(a)", true, "CREATE GLOBAL BINDING FOR SELECT * FROM `t` UNION ALL SELECT * FROM `t` USING SELECT * FROM `t` USE INDEX (`a`) UNION ALL SELECT * FROM `t` USE INDEX (`a`)"}, {"create session binding for select * from t union all select * from t using select * from t use index(a) union all select * from t use index(a)", true, "CREATE SESSION BINDING FOR SELECT * FROM `t` UNION ALL SELECT * FROM `t` USING SELECT * FROM `t` USE INDEX (`a`) UNION ALL SELECT * FROM `t` USE INDEX (`a`)"}, {"drop global binding for select * from t union all select * from t using select * from t use index(a) union all select * from t use index(a)", true, "DROP GLOBAL BINDING FOR SELECT * FROM `t` UNION ALL SELECT * FROM `t` USING SELECT * FROM `t` USE INDEX (`a`) UNION ALL SELECT * FROM `t` USE INDEX (`a`)"}, diff --git a/planner/cascades/main_test.go b/planner/cascades/main_test.go index 1951bb916a2c6..ba181fa64df76 100644 --- a/planner/cascades/main_test.go +++ b/planner/cascades/main_test.go @@ -47,6 +47,7 @@ func TestMain(m *testing.M) { testDataMap.GenerateOutputIfNeeded() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/planner/cascades/transformation_rules.go b/planner/cascades/transformation_rules.go index 8cddc669be271..18f2e00d73c94 100644 --- a/planner/cascades/transformation_rules.go +++ b/planner/cascades/transformation_rules.go @@ -310,8 +310,8 @@ type PushSelDownTiKVSingleGather struct { // NewRulePushSelDownTiKVSingleGather creates a new Transformation PushSelDownTiKVSingleGather. // The pattern of this rule is `Selection -> TiKVSingleGather -> Any`. func NewRulePushSelDownTiKVSingleGather() Transformation { - any := memo.NewPattern(memo.OperandAny, memo.EngineTiKVOrTiFlash) - tg := memo.BuildPattern(memo.OperandTiKVSingleGather, memo.EngineTiDBOnly, any) + any1 := memo.NewPattern(memo.OperandAny, memo.EngineTiKVOrTiFlash) + tg := memo.BuildPattern(memo.OperandTiKVSingleGather, memo.EngineTiDBOnly, any1) p := memo.BuildPattern(memo.OperandSelection, memo.EngineTiDBOnly, tg) rule := &PushSelDownTiKVSingleGather{} diff --git a/planner/core/cache.go b/planner/core/cache.go index 0d01f2bb98f73..145caa8499fd0 100644 --- a/planner/core/cache.go +++ b/planner/core/cache.go @@ -73,7 +73,7 @@ func PreparedPlanCacheEnabled() bool { type planCacheKey struct { database string connID uint64 - pstmtID uint32 + stmtText string schemaVersion int64 sqlMode mysql.SQLMode timezoneOffset int @@ -95,7 +95,7 @@ func (key *planCacheKey) Hash() []byte { } key.hash = append(key.hash, dbBytes...) key.hash = codec.EncodeInt(key.hash, int64(key.connID)) - key.hash = codec.EncodeInt(key.hash, int64(key.pstmtID)) + key.hash = append(key.hash, hack.Slice(key.stmtText)...) key.hash = codec.EncodeInt(key.hash, key.schemaVersion) key.hash = codec.EncodeInt(key.hash, int64(key.sqlMode)) key.hash = codec.EncodeInt(key.hash, int64(key.timezoneOffset)) @@ -115,12 +115,12 @@ func (key *planCacheKey) Hash() []byte { // SetPstmtIDSchemaVersion implements PstmtCacheKeyMutator interface to change pstmtID and schemaVersion of cacheKey. // so we can reuse Key instead of new every time. -func SetPstmtIDSchemaVersion(key kvcache.Key, pstmtID uint32, schemaVersion int64, isolationReadEngines map[kv.StoreType]struct{}) { +func SetPstmtIDSchemaVersion(key kvcache.Key, stmtText string, schemaVersion int64, isolationReadEngines map[kv.StoreType]struct{}) { psStmtKey, isPsStmtKey := key.(*planCacheKey) if !isPsStmtKey { return } - psStmtKey.pstmtID = pstmtID + psStmtKey.stmtText = stmtText psStmtKey.schemaVersion = schemaVersion psStmtKey.isolationReadEngines = make(map[kv.StoreType]struct{}) for k, v := range isolationReadEngines { @@ -130,15 +130,21 @@ func SetPstmtIDSchemaVersion(key kvcache.Key, pstmtID uint32, schemaVersion int6 } // NewPlanCacheKey creates a new planCacheKey object. -func NewPlanCacheKey(sessionVars *variable.SessionVars, pstmtID uint32, schemaVersion int64) kvcache.Key { +func NewPlanCacheKey(sessionVars *variable.SessionVars, stmtText, stmtDB string, schemaVersion int64) (kvcache.Key, error) { + if stmtText == "" { + return nil, errors.New("no statement text") + } + if stmtDB == "" { + stmtDB = sessionVars.CurrentDB + } timezoneOffset := 0 if sessionVars.TimeZone != nil { _, timezoneOffset = time.Now().In(sessionVars.TimeZone).Zone() } key := &planCacheKey{ - database: sessionVars.CurrentDB, + database: stmtDB, connID: sessionVars.ConnectionID, - pstmtID: pstmtID, + stmtText: stmtText, schemaVersion: schemaVersion, sqlMode: sessionVars.SQLMode, timezoneOffset: timezoneOffset, @@ -148,15 +154,16 @@ func NewPlanCacheKey(sessionVars *variable.SessionVars, pstmtID uint32, schemaVe for k, v := range sessionVars.IsolationReadEngines { key.isolationReadEngines[k] = v } - return key + return key, nil } // FieldSlice is the slice of the types.FieldType type FieldSlice []types.FieldType -// Equal compares FieldSlice with []*types.FieldType -// Currently this is only used in plan cache to invalidate cache when types of variables are different. -func (s FieldSlice) Equal(tps []*types.FieldType) bool { +// CheckTypesCompatibility4PC compares FieldSlice with []*types.FieldType +// Currently this is only used in plan cache to check whether the types of parameters are compatible. +// If the types of parameters are compatible, we can use the cached plan. +func (s FieldSlice) CheckTypesCompatibility4PC(tps []*types.FieldType) bool { if len(s) != len(tps) { return false } @@ -172,6 +179,12 @@ func (s FieldSlice) Equal(tps []*types.FieldType) bool { (s[i].EvalType() == types.ETInt && mysql.HasUnsignedFlag(s[i].Flag) != mysql.HasUnsignedFlag(tps[i].Flag)) { return false } + // When the type is decimal, we should compare the Flen and Decimal. + // We can only use the plan when both Flen and Decimal should less equal than the cached one. + // We assume here that there is no correctness problem when the precision of the parameters is less than the precision of the parameters in the cache. + if tpEqual && s[i].Tp == mysql.TypeNewDecimal && !(s[i].Flen >= tps[i].Flen && s[i].Decimal >= tps[i].Decimal) { + return false + } } return true } @@ -207,6 +220,7 @@ func NewPlanCacheValue(plan Plan, names []*types.FieldName, srcMap map[*model.Ta // CachedPrepareStmt store prepared ast from PrepareExec and other related fields type CachedPrepareStmt struct { PreparedAst *ast.Prepared + StmtDB string // which DB the statement will be processed over VisitInfos []visitInfo ColumnInfos interface{} Executor interface{} @@ -218,6 +232,13 @@ type CachedPrepareStmt struct { SnapshotTSEvaluator func(sessionctx.Context) (uint64, error) NormalizedSQL4PC string SQLDigest4PC string + + // the different between NormalizedSQL, NormalizedSQL4PC and StmtText: + // for the query `select * from t where a>1 and b ? and `b` < ? --> constants are normalized to '?', + // NormalizedSQL4PC: select * from `test` . `t` where `a` > ? and `b` < ? --> schema name is added, + // StmtText: select * from t where a>1 and b just format the original query; + StmtText string } // GetPreparedStmt extract the prepared statement from the execute statement. diff --git a/planner/core/cache_test.go b/planner/core/cache_test.go index 3527fa9d7ecb2..8cb4a406dada7 100644 --- a/planner/core/cache_test.go +++ b/planner/core/cache_test.go @@ -28,6 +28,17 @@ func TestCacheKey(t *testing.T) { ctx.GetSessionVars().SQLMode = mysql.ModeNone ctx.GetSessionVars().TimeZone = time.UTC ctx.GetSessionVars().ConnectionID = 0 - key := NewPlanCacheKey(ctx.GetSessionVars(), 1, 1) - require.Equal(t, []byte{0x74, 0x65, 0x73, 0x74, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x74, 0x69, 0x64, 0x62, 0x74, 0x69, 0x6b, 0x76, 0x74, 0x69, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, key.Hash()) + key, err := NewPlanCacheKey(ctx.GetSessionVars(), "", "test", 1) + if err.Error() != "no statement text" { + t.Fail() // no statement text + } + key, err = NewPlanCacheKey(ctx.GetSessionVars(), "select 1", "", 1) + if err != nil { + t.Fail() // schema can be nil + } + key, err = NewPlanCacheKey(ctx.GetSessionVars(), "select 1", "test", 1) + if err != nil { + t.Fail() + } + require.Equal(t, []byte{0x74, 0x65, 0x73, 0x74, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x31, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x74, 0x69, 0x64, 0x62, 0x74, 0x69, 0x6b, 0x76, 0x74, 0x69, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, key.Hash()) } diff --git a/planner/core/cacheable_checker.go b/planner/core/cacheable_checker.go index ace4e45a3e074..3caec678692fb 100644 --- a/planner/core/cacheable_checker.go +++ b/planner/core/cacheable_checker.go @@ -129,9 +129,13 @@ func (checker *cacheableChecker) Enter(in ast.Node) (out ast.Node, skipChildren case *ast.TableName: if checker.schema != nil { if checker.isPartitionTable(node) { - if checker.sctx != nil && checker.sctx.GetSessionVars().UseDynamicPartitionPrune() { - return in, false // dynamic-mode for partition tables can use plan-cache - } + // Temporary disable prepared plan cache until https://github.com/pingcap/tidb/issues/33031 + // is fixed and additional tests with dynamic partition prune mode has been added. + /* + if checker.sctx != nil && checker.sctx.GetSessionVars().UseDynamicPartitionPrune() { + return in, false // dynamic-mode for partition tables can use plan-cache + } + */ checker.cacheable = false return in, true } diff --git a/planner/core/cbo_test.go b/planner/core/cbo_test.go index cdcffdb0addd0..a0aa419b95b86 100644 --- a/planner/core/cbo_test.go +++ b/planner/core/cbo_test.go @@ -326,12 +326,12 @@ func TestAnalyze(t *testing.T) { testKit.MustExec("create view v as select * from t") _, err := testKit.Exec("analyze table v") - require.EqualError(t, err, "analyze view v is not supported now.") + require.EqualError(t, err, "analyze view v is not supported now") testKit.MustExec("drop view v") testKit.MustExec("create sequence seq") _, err = testKit.Exec("analyze table seq") - require.EqualError(t, err, "analyze sequence seq is not supported now.") + require.EqualError(t, err, "analyze sequence seq is not supported now") testKit.MustExec("drop sequence seq") var input, output []string diff --git a/planner/core/common_plans.go b/planner/core/common_plans.go index 059710367bdcc..5784937d47f20 100644 --- a/planner/core/common_plans.go +++ b/planner/core/common_plans.go @@ -405,9 +405,9 @@ func GetBindSQL4PlanCache(sctx sessionctx.Context, preparedStmt *CachedPrepareSt sessionHandle := sctx.Value(bindinfo.SessionBindInfoKeyType).(*bindinfo.SessionHandle) bindRecord := sessionHandle.GetBindRecord(preparedStmt.SQLDigest4PC, preparedStmt.NormalizedSQL4PC, "") if bindRecord != nil { - usingBinding := bindRecord.FindUsingBinding() - if usingBinding != nil { - return usingBinding.BindSQL + enabledBinding := bindRecord.FindEnabledBinding() + if enabledBinding != nil { + return enabledBinding.BindSQL } } globalHandle := domain.GetDomain(sctx).BindHandle() @@ -416,15 +416,15 @@ func GetBindSQL4PlanCache(sctx sessionctx.Context, preparedStmt *CachedPrepareSt } bindRecord = globalHandle.GetBindRecord(preparedStmt.SQLDigest4PC, preparedStmt.NormalizedSQL4PC, "") if bindRecord != nil { - usingBinding := bindRecord.FindUsingBinding() - if usingBinding != nil { - return usingBinding.BindSQL + enabledBinding := bindRecord.FindEnabledBinding() + if enabledBinding != nil { + return enabledBinding.BindSQL } } return "" } -func (e *Execute) getPhysicalPlan(ctx context.Context, sctx sessionctx.Context, is infoschema.InfoSchema, preparedStmt *CachedPrepareStmt) error { +func (e *Execute) getPhysicalPlan(ctx context.Context, sctx sessionctx.Context, is infoschema.InfoSchema, preparedStmt *CachedPrepareStmt) (err error) { var cacheKey kvcache.Key sessVars := sctx.GetSessionVars() stmtCtx := sessVars.StmtCtx @@ -434,7 +434,9 @@ func (e *Execute) getPhysicalPlan(ctx context.Context, sctx sessionctx.Context, var bindSQL string if prepared.UseCache { bindSQL = GetBindSQL4PlanCache(sctx, preparedStmt) - cacheKey = NewPlanCacheKey(sctx.GetSessionVars(), e.ExecID, prepared.SchemaVersion) + if cacheKey, err = NewPlanCacheKey(sctx.GetSessionVars(), preparedStmt.StmtText, preparedStmt.StmtDB, prepared.SchemaVersion); err != nil { + return err + } } tps := make([]*types.FieldType, len(e.UsingVars)) varsNum := len(e.UsingVars) @@ -452,7 +454,7 @@ func (e *Execute) getPhysicalPlan(ctx context.Context, sctx sessionctx.Context, // so you don't need to consider whether prepared.useCache is enabled. plan := prepared.CachedPlan.(Plan) names := prepared.CachedNames.(types.NameSlice) - err := e.rebuildRange(plan) + err := e.RebuildPlan(plan) if err != nil { logutil.BgLogger().Debug("rebuild range failed", zap.Error(err)) goto REBUILD @@ -485,7 +487,7 @@ func (e *Execute) getPhysicalPlan(ctx context.Context, sctx sessionctx.Context, sctx.PreparedPlanCache().Delete(cacheKey) break } - if !cachedVal.UserVarTypes.Equal(tps) { + if !cachedVal.UserVarTypes.CheckTypesCompatibility4PC(tps) { continue } planValid := true @@ -499,7 +501,7 @@ func (e *Execute) getPhysicalPlan(ctx context.Context, sctx sessionctx.Context, } } if planValid { - err := e.rebuildRange(cachedVal.Plan) + err := e.RebuildPlan(cachedVal.Plan) if err != nil { logutil.BgLogger().Debug("rebuild range failed", zap.Error(err)) goto REBUILD @@ -551,7 +553,9 @@ REBUILD: // rebuild key to exclude kv.TiFlash when stmt is not read only if _, isolationReadContainTiFlash := sessVars.IsolationReadEngines[kv.TiFlash]; isolationReadContainTiFlash && !IsReadOnly(stmt, sessVars) { delete(sessVars.IsolationReadEngines, kv.TiFlash) - cacheKey = NewPlanCacheKey(sessVars, e.ExecID, prepared.SchemaVersion) + if cacheKey, err = NewPlanCacheKey(sessVars, preparedStmt.StmtText, preparedStmt.StmtDB, prepared.SchemaVersion); err != nil { + return err + } sessVars.IsolationReadEngines[kv.TiFlash] = struct{}{} } cached := NewPlanCacheValue(p, names, stmtCtx.TblInfo2UnionScan, tps, sessVars.StmtCtx.BindSQL) @@ -560,7 +564,7 @@ REBUILD: if cacheVals, exists := sctx.PreparedPlanCache().Get(cacheKey); exists { hitVal := false for i, cacheVal := range cacheVals.([]*PlanCacheValue) { - if cacheVal.UserVarTypes.Equal(tps) { + if cacheVal.UserVarTypes.CheckTypesCompatibility4PC(tps) { hitVal = true cacheVals.([]*PlanCacheValue)[i] = cached break @@ -625,6 +629,14 @@ func (e *Execute) tryCachePointPlan(ctx context.Context, sctx sessionctx.Context return err } +// RebuildPlan will rebuild this plan under current user parameters. +func (e *Execute) RebuildPlan(p Plan) error { + sc := p.SCtx().GetSessionVars().StmtCtx + sc.InPreparedPlanBuilding = true + defer func() { sc.InPreparedPlanBuilding = false }() + return e.rebuildRange(p) +} + func (e *Execute) rebuildRange(p Plan) error { sctx := p.SCtx() sc := p.SCtx().GetSessionVars().StmtCtx @@ -951,6 +963,8 @@ const ( OpEvolveBindings // OpReloadBindings is used to reload plan binding. OpReloadBindings + // OpSetBindingStatus is used to set binding status. + OpSetBindingStatus ) // SQLBindPlan represents a plan for SQL bind. @@ -965,6 +979,7 @@ type SQLBindPlan struct { Db string Charset string Collation string + NewStatus string } // Simple represents a simple statement plan which doesn't need any optimization. @@ -1372,19 +1387,14 @@ func (e *Explain) explainPlanInRowFormat(p Plan, taskType, driverSide, indent st switch x := p.(type) { case *PhysicalTableReader: - var storeType string switch x.StoreType { case kv.TiKV, kv.TiFlash, kv.TiDB: // expected do nothing default: return errors.Errorf("the store type %v is unknown", x.StoreType) } - storeType = x.StoreType.Name() - taskName := "cop" - if x.BatchCop { - taskName = "batchCop" - } - err = e.explainPlanInRowFormat(x.tablePlan, taskName+"["+storeType+"]", "", childIndent, true) + taskName := x.ReadReqType.Name() + "[" + x.StoreType.Name() + "]" + err = e.explainPlanInRowFormat(x.tablePlan, taskName, "", childIndent, true) case *PhysicalIndexReader: err = e.explainPlanInRowFormat(x.indexPlan, "cop[tikv]", "", childIndent, true) case *PhysicalIndexLookUpReader: diff --git a/planner/core/enforce_mpp_test.go b/planner/core/enforce_mpp_test.go index 8cc599d075d28..fbefb32e815a1 100644 --- a/planner/core/enforce_mpp_test.go +++ b/planner/core/enforce_mpp_test.go @@ -15,6 +15,8 @@ package core_test import ( + "fmt" + "strconv" "strings" "testing" @@ -47,6 +49,43 @@ func TestSetVariables(t *testing.T) { require.NoError(t, err) } +func TestRowSizeInMPP(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a varchar(10), b varchar(20), c varchar(256))") + tk.MustExec("insert into t values (space(10), space(20), space(256))") + tk.MustExec("analyze table t") + + // Create virtual tiflash replica info. + dom := domain.GetDomain(tk.Session()) + is := dom.InfoSchema() + db, exists := is.SchemaByName(model.NewCIStr("test")) + require.True(t, exists) + for _, tblInfo := range db.Tables { + if tblInfo.Name.L == "t" { + tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ + Count: 1, + Available: true, + } + } + } + + tk.MustExec(`set @@tidb_opt_tiflash_concurrency_factor=1`) + tk.MustExec(`set @@tidb_allow_mpp=1`) + tk.MustExec(`set @@tidb_enforce_mpp=1`) + var costs [3]float64 + for i, col := range []string{"a", "b", "c"} { + rs := tk.MustQuery(fmt.Sprintf(`explain format='verbose' select %v from t`, col)).Rows() + cost, err := strconv.ParseFloat(rs[0][2].(string), 64) + require.NoError(t, err) + costs[i] = cost + } + require.True(t, costs[0] < costs[1] && costs[1] < costs[2]) // rowSize can affect the final cost +} + func TestEnforceMPP(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index 3fe30d6b52c50..4ce4a590e08bd 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -52,7 +52,6 @@ func (p *LogicalUnionScan) exhaustPhysicalPlans(prop *property.PhysicalProperty) us := PhysicalUnionScan{ Conditions: p.conditions, HandleCols: p.handleCols, - CacheTable: p.cacheTable, }.Init(p.ctx, p.stats, p.blockOffset, childProp) return []PhysicalPlan{us}, true, nil } @@ -288,14 +287,16 @@ func (p *LogicalJoin) getEnforcedMergeJoin(prop *property.PhysicalProperty, sche return nil } for _, item := range prop.SortItems { - isExist := false + isExist, hasLeftColInProp, hasRightColInProp := false, false, false for joinKeyPos := 0; joinKeyPos < len(leftJoinKeys); joinKeyPos++ { var key *expression.Column if item.Col.Equal(p.ctx, leftJoinKeys[joinKeyPos]) { key = leftJoinKeys[joinKeyPos] + hasLeftColInProp = true } if item.Col.Equal(p.ctx, rightJoinKeys[joinKeyPos]) { key = rightJoinKeys[joinKeyPos] + hasRightColInProp = true } if key == nil { continue @@ -315,6 +316,13 @@ func (p *LogicalJoin) getEnforcedMergeJoin(prop *property.PhysicalProperty, sche if !isExist { return nil } + // If the output wants the order of the inner side. We should reject it since we might add null-extend rows of that side. + if p.JoinType == LeftOuterJoin && hasRightColInProp { + return nil + } + if p.JoinType == RightOuterJoin && hasLeftColInProp { + return nil + } } // Generate the enforced sort merge join leftKeys := getNewJoinKeysByOffsets(leftJoinKeys, offsets) @@ -988,6 +996,7 @@ func (p *LogicalJoin) constructInnerTableScanTask( Columns: ds.TblCols, ColumnNames: ds.names, } + ts.PartitionInfo = copTask.partitionInfo selStats := ts.stats.Scale(selectivity) ts.addPushedDownSelection(copTask, selStats) t := copTask.convertToRootTask(ds.ctx) @@ -1802,12 +1811,6 @@ func (p *LogicalJoin) exhaustPhysicalPlans(prop *property.PhysicalProperty) ([]P mppJoins := p.tryToGetMppHashJoin(prop, false) joins = append(joins, mppJoins...) } - } else if p.ctx.GetSessionVars().AllowBCJ && canPushToTiFlash { - broadCastJoins := p.tryToGetBroadCastJoin(prop) - if (p.preferJoinType & preferBCJoin) > 0 { - return broadCastJoins, true, nil - } - joins = append(joins, broadCastJoins...) } if prop.IsFlashProp() { return joins, true, nil @@ -2014,99 +2017,6 @@ func choosePartitionKeys(keys []*property.MPPPartitionColumn, matches []int) []* return newKeys } -func (p *LogicalJoin) tryToGetBroadCastJoin(prop *property.PhysicalProperty) []PhysicalPlan { - if !prop.IsEmpty() { - return nil - } - if prop.TaskTp != property.RootTaskType && !prop.IsFlashProp() { - return nil - } - if !canExprsInJoinPushdown(p, kv.TiFlash) { - return nil - } - - // Disable broadcast join on partition table for TiFlash. - for _, child := range p.children { - if ds, isDataSource := child.(*DataSource); isDataSource { - if ds.tableInfo.GetPartitionInfo() != nil { - return nil - } - } - } - - if (p.JoinType != InnerJoin && p.JoinType != LeftOuterJoin && p.JoinType != RightOuterJoin && p.JoinType != SemiJoin && p.JoinType != AntiSemiJoin) || len(p.EqualConditions) == 0 { - return nil - } - - // for left/semi/anti-semi join the global idx must be 1, and for right join the global idx must be 0 - if hasPrefer, idx := p.getPreferredBCJLocalIndex(); hasPrefer { - if (idx == 0 && p.JoinType == RightOuterJoin) || (idx == 1 && (p.JoinType == LeftOuterJoin || p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin)) { - return nil - } - return p.tryToGetBroadCastJoinByPreferGlobalIdx(prop, 1-idx) - } - if p.JoinType == InnerJoin { - results := p.tryToGetBroadCastJoinByPreferGlobalIdx(prop, 0) - results = append(results, p.tryToGetBroadCastJoinByPreferGlobalIdx(prop, 1)...) - return results - } else if p.JoinType == LeftOuterJoin || p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin { - return p.tryToGetBroadCastJoinByPreferGlobalIdx(prop, 1) - } - return p.tryToGetBroadCastJoinByPreferGlobalIdx(prop, 0) -} - -func (p *LogicalJoin) tryToGetBroadCastJoinByPreferGlobalIdx(prop *property.PhysicalProperty, preferredGlobalIndex int) []PhysicalPlan { - lkeys, rkeys, _, _ := p.GetJoinKeys() - baseJoin := basePhysicalJoin{ - JoinType: p.JoinType, - LeftConditions: p.LeftConditions, - RightConditions: p.RightConditions, - OtherConditions: p.OtherConditions, - DefaultValues: p.DefaultValues, - LeftJoinKeys: lkeys, - RightJoinKeys: rkeys, - } - - preferredBuildIndex := 0 - if p.children[0].statsInfo().Count() > p.children[1].statsInfo().Count() { - preferredBuildIndex = 1 - } - if p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin { - preferredBuildIndex = 1 - } - // TiFlash does not support Right out join with other conditions, if the join - // has other conditions, need to set the build side to make sure it will be - // executed as left join in TiFlash(In TiFlash the build side is always the right side) - if len(p.OtherConditions) != 0 { - if p.JoinType == RightOuterJoin { - preferredBuildIndex = 0 - } else if p.JoinType == LeftOuterJoin { - preferredBuildIndex = 1 - } - } - baseJoin.InnerChildIdx = preferredBuildIndex - childrenReqProps := make([]*property.PhysicalProperty, 2) - childrenReqProps[preferredGlobalIndex] = &property.PhysicalProperty{TaskTp: property.CopTiFlashGlobalReadTaskType, ExpectedCnt: math.MaxFloat64} - if prop.TaskTp == property.CopTiFlashGlobalReadTaskType { - childrenReqProps[1-preferredGlobalIndex] = &property.PhysicalProperty{TaskTp: property.CopTiFlashGlobalReadTaskType, ExpectedCnt: math.MaxFloat64} - } else { - childrenReqProps[1-preferredGlobalIndex] = &property.PhysicalProperty{TaskTp: property.CopTiFlashLocalReadTaskType, ExpectedCnt: math.MaxFloat64} - } - if prop.ExpectedCnt < p.stats.RowCount { - expCntScale := prop.ExpectedCnt / p.stats.RowCount - childrenReqProps[1-baseJoin.InnerChildIdx].ExpectedCnt = p.children[1-baseJoin.InnerChildIdx].statsInfo().RowCount * expCntScale - } - - join := PhysicalHashJoin{ - basePhysicalJoin: baseJoin, - Concurrency: uint(p.ctx.GetSessionVars().CopTiFlashConcurrencyFactor), - EqualConditions: p.EqualConditions, - storeTp: kv.TiFlash, - globalChildIndex: preferredGlobalIndex, - }.Init(p.ctx, p.stats.ScaleByExpectCnt(prop.ExpectedCnt), p.blockOffset, childrenReqProps...) - return []PhysicalPlan{join} -} - // TryToGetChildProp will check if this sort property can be pushed or not. // When a sort column will be replaced by scalar function, we refuse it. // When a sort column will be replaced by a constant, we just remove it. @@ -2504,11 +2414,8 @@ func (la *LogicalAggregation) getStreamAggs(prop *property.PhysicalProperty) []P } else if !la.aggHints.preferAggToCop { taskTypes = append(taskTypes, property.RootTaskType) } - if !la.canPushToCop(kv.TiKV) { + if !la.canPushToCop(kv.TiKV) && !la.canPushToCop(kv.TiFlash) { taskTypes = []property.TaskType{property.RootTaskType} - if la.canPushToCop(kv.TiFlash) { - taskTypes = append(taskTypes, property.CopTiFlashLocalReadTaskType) - } } for _, taskTp := range taskTypes { copiedChildProperty := new(property.PhysicalProperty) @@ -2628,9 +2535,6 @@ func (la *LogicalAggregation) getHashAggs(prop *property.PhysicalProperty) []Phy } hashAggs := make([]PhysicalPlan, 0, len(prop.GetAllPossibleChildTaskTypes())) taskTypes := []property.TaskType{property.CopSingleReadTaskType, property.CopDoubleReadTaskType} - if la.ctx.GetSessionVars().AllowBCJ { - taskTypes = append(taskTypes, property.CopTiFlashLocalReadTaskType) - } canPushDownToTiFlash := la.canPushToCop(kv.TiFlash) canPushDownToMPP := canPushDownToTiFlash && la.ctx.GetSessionVars().IsMPPAllowed() && la.checkCanPushDownToMPP() if la.HasDistinct() { @@ -2641,11 +2545,8 @@ func (la *LogicalAggregation) getHashAggs(prop *property.PhysicalProperty) []Phy } else if !la.aggHints.preferAggToCop { taskTypes = append(taskTypes, property.RootTaskType) } - if !la.canPushToCop(kv.TiKV) { + if !la.canPushToCop(kv.TiKV) && !canPushDownToTiFlash { taskTypes = []property.TaskType{property.RootTaskType} - if canPushDownToTiFlash { - taskTypes = append(taskTypes, property.CopTiFlashLocalReadTaskType) - } } if canPushDownToMPP { taskTypes = append(taskTypes, property.MppTaskType) @@ -2757,10 +2658,9 @@ func (p *LogicalLock) exhaustPhysicalPlans(prop *property.PhysicalProperty) ([]P } childProp := prop.CloneEssentialFields() lock := PhysicalLock{ - Lock: p.Lock, - TblID2Handle: p.tblID2Handle, - PartitionedTable: p.partitionedTable, - ExtraPIDInfo: p.extraPIDInfo, + Lock: p.Lock, + TblID2Handle: p.tblID2Handle, + TblID2PhysTblIDCol: p.tblID2PhysTblIDCol, }.Init(p.ctx, p.stats.ScaleByExpectCnt(prop.ExpectedCnt), childProp) return []PhysicalPlan{lock}, true, nil } diff --git a/planner/core/explain.go b/planner/core/explain.go index 0c68326b00a01..3f70804c055d5 100644 --- a/planner/core/explain.go +++ b/planner/core/explain.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" @@ -289,8 +290,8 @@ func (p *PhysicalTableScan) OperatorInfo(normalized bool) string { if p.stats.StatsVersion == statistics.PseudoVersion && !normalized { buffer.WriteString(", stats:pseudo") } - if p.IsGlobalRead { - buffer.WriteString(", global read") + if p.StoreType == kv.TiFlash && p.Table.GetPartitionInfo() != nil && p.IsMPPOrBatchCop && p.ctx.GetSessionVars().UseDynamicPartitionPrune() { + buffer.WriteString(", PartitionTableScan:true") } return buffer.String() } diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index 475bc4cb60245..427a0633aa9ba 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -37,7 +37,6 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/telemetry" "github.com/pingcap/tidb/types" driver "github.com/pingcap/tidb/types/parser_driver" "github.com/pingcap/tidb/util/chunk" @@ -514,7 +513,7 @@ func (er *expressionRewriter) handleCompareSubquery(ctx context.Context, v *ast. lexpr := er.ctxStack[len(er.ctxStack)-1] subq, ok := v.R.(*ast.SubqueryExpr) if !ok { - er.err = errors.Errorf("Unknown compare type %T.", v.R) + er.err = errors.Errorf("Unknown compare type %T", v.R) return v, true } np, err := er.buildSubquery(ctx, subq) @@ -797,7 +796,7 @@ func (er *expressionRewriter) handleExistSubquery(ctx context.Context, v *ast.Ex defer resetCTECheckForSubQuery(ci) subq, ok := v.Sel.(*ast.SubqueryExpr) if !ok { - er.err = errors.Errorf("Unknown exists type %T.", v.Sel) + er.err = errors.Errorf("Unknown exists type %T", v.Sel) return v, true } np, err := er.buildSubquery(ctx, subq) @@ -871,7 +870,7 @@ func (er *expressionRewriter) handleInSubquery(ctx context.Context, v *ast.Patte lexpr := er.ctxStack[len(er.ctxStack)-1] subq, ok := v.Sel.(*ast.SubqueryExpr) if !ok { - er.err = errors.Errorf("Unknown compare type %T.", v.Sel) + er.err = errors.Errorf("Unknown compare type %T", v.Sel) return v, true } np, err := er.buildSubquery(ctx, subq) @@ -1225,7 +1224,7 @@ func (er *expressionRewriter) newFunction(funcName string, retType *types.FieldT return } if scalarFunc, ok := ret.(*expression.ScalarFunction); ok { - telemetry.BuiltinFunctionsUsage(er.b.ctx.GetBuiltinFunctionUsage()).Inc(scalarFunc.Function.PbCode().String()) + er.b.ctx.BuiltinFunctionUsageInc(scalarFunc.Function.PbCode().String()) } return } @@ -1292,7 +1291,7 @@ func (er *expressionRewriter) rewriteVariable(v *ast.VariableExpr) { er.b.visitInfo = appendDynamicVisitInfo(er.b.visitInfo, "RESTRICTED_VARIABLES_ADMIN", false, err) } if v.ExplicitScope && !sysVar.HasNoneScope() { - if v.IsGlobal && !sysVar.HasGlobalScope() { + if v.IsGlobal && !(sysVar.HasGlobalScope() || sysVar.HasInstanceScope()) { er.err = variable.ErrIncorrectScope.GenWithStackByArgs(name, "SESSION") return } @@ -2043,9 +2042,10 @@ func hasCurrentDatetimeDefault(col *table.Column) bool { } func decodeKeyFromString(ctx sessionctx.Context, s string) string { + sc := ctx.GetSessionVars().StmtCtx key, err := hex.DecodeString(s) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("invalid record/index key: %X", key)) + sc.AppendWarning(errors.Errorf("invalid key: %X", key)) return s } // Auto decode byte if needed. @@ -2055,39 +2055,44 @@ func decodeKeyFromString(ctx sessionctx.Context, s string) string { } tableID := tablecodec.DecodeTableID(key) if tableID == 0 { - ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("invalid record/index key: %X", key)) + sc.AppendWarning(errors.Errorf("invalid key: %X", key)) return s } dm := domain.GetDomain(ctx) if dm == nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("domain not found when decoding record/index key: %X", key)) + sc.AppendWarning(errors.Errorf("domain not found when decoding key: %X", key)) return s } - tbl, _ := dm.InfoSchema().TableByID(tableID) + is := dm.InfoSchema() + if is == nil { + sc.AppendWarning(errors.Errorf("infoschema not found when decoding key: %X", key)) + return s + } + tbl, _ := is.TableByID(tableID) loc := ctx.GetSessionVars().Location() if tablecodec.IsRecordKey(key) { ret, err := decodeRecordKey(key, tableID, tbl, loc) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(err) + sc.AppendWarning(err) return s } return ret } else if tablecodec.IsIndexKey(key) { ret, err := decodeIndexKey(key, tableID, tbl, loc) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(err) + sc.AppendWarning(err) return s } return ret } else if tablecodec.IsTableKey(key) { - ret, err := decodeTableKey(key, tableID, tbl, loc) + ret, err := decodeTableKey(key, tableID) if err != nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(err) + sc.AppendWarning(err) return s } return ret } - ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("invalid record/index key: %X", key)) + sc.AppendWarning(errors.Errorf("invalid key: %X", key)) return s } @@ -2100,7 +2105,7 @@ func decodeRecordKey(key []byte, tableID int64, tbl table.Table, loc *time.Locat ret := make(map[string]interface{}) ret["table_id"] = strconv.FormatInt(tableID, 10) // When the clustered index is enabled, we should show the PK name. - if tbl.Meta().HasClusteredIndex() { + if tbl != nil && tbl.Meta().HasClusteredIndex() { ret[tbl.Meta().GetPkName().String()] = handle.IntValue() } else { ret["_tidb_rowid"] = handle.IntValue() @@ -2235,7 +2240,7 @@ func decodeIndexKey(key []byte, tableID int64, tbl table.Table, loc *time.Locati return string(retStr), nil } -func decodeTableKey(key []byte, tableID int64, tbl table.Table, loc *time.Location) (string, error) { +func decodeTableKey(key []byte, tableID int64) (string, error) { ret := map[string]int64{"table_id": tableID} retStr, err := json.Marshal(ret) if err != nil { diff --git a/planner/core/find_best_task.go b/planner/core/find_best_task.go index 35cce8abfda3b..813765e86d723 100644 --- a/planner/core/find_best_task.go +++ b/planner/core/find_best_task.go @@ -197,7 +197,7 @@ func (p *baseLogicalPlan) rebuildChildTasks(childTasks *[]task, pp PhysicalPlan, return errors.Errorf("PlanCounterTp planCounter is not handled") } if childTask != nil && childTask.invalid() { - return errors.Errorf("The current plan is invalid, please skip this plan.") + return errors.Errorf("The current plan is invalid, please skip this plan") } *childTasks = append(*childTasks, childTask) } @@ -496,12 +496,12 @@ func compareIndexBack(lhs, rhs *candidatePath) (int, bool) { // If `x` is not worse than `y` at all factors, // and there exists one factor that `x` is better than `y`, then `x` is better than `y`. func compareCandidates(lhs, rhs *candidatePath) int { - accessResult, comparable := util.CompareCol2Len(lhs.accessCondsColMap, rhs.accessCondsColMap) - if !comparable { + accessResult, comparable1 := util.CompareCol2Len(lhs.accessCondsColMap, rhs.accessCondsColMap) + if !comparable1 { return 0 } - scanResult, comparable := compareIndexBack(lhs, rhs) - if !comparable { + scanResult, comparable2 := compareIndexBack(lhs, rhs) + if !comparable2 { return 0 } matchResult := compareBool(lhs.isMatchProp, rhs.isMatchProp) @@ -605,21 +605,7 @@ func (ds *DataSource) skylinePruning(prop *property.PhysicalProperty) []*candida } var currentCandidate *candidatePath if path.IsTablePath() { - if path.StoreType == kv.TiFlash { - if path.IsTiFlashGlobalRead && prop.TaskTp == property.CopTiFlashGlobalReadTaskType { - currentCandidate = ds.getTableCandidate(path, prop) - } - if !path.IsTiFlashGlobalRead && prop.TaskTp != property.CopTiFlashGlobalReadTaskType { - currentCandidate = ds.getTableCandidate(path, prop) - } - } else { - if !path.IsTiFlashGlobalRead && !prop.IsFlashProp() { - currentCandidate = ds.getTableCandidate(path, prop) - } - } - if currentCandidate == nil { - continue - } + currentCandidate = ds.getTableCandidate(path, prop) } else { if len(path.AccessConds) > 0 || !prop.IsEmpty() || path.Forced || path.IsSingleScan { // We will use index to generate physical plan if any of the following conditions is satisfied: @@ -725,6 +711,10 @@ func (ds *DataSource) getPruningInfo(candidates []*candidatePath, prop *property func (ds *DataSource) isPointGetConvertableSchema() bool { for _, col := range ds.Columns { + if col.Name.L == model.ExtraHandleName.L { + continue + } + // Only handle tables that all columns are public. if col.State != model.StatePublic { return false @@ -2106,7 +2096,6 @@ func (ds *DataSource) getOriginalPhysicalTableScan(prop *property.PhysicalProper Ranges: path.Ranges, AccessCondition: path.AccessConds, StoreType: path.StoreType, - IsGlobalRead: path.IsTiFlashGlobalRead, }.Init(ds.ctx, ds.blockOffset) ts.filterCondition = make([]expression.Expression, len(path.TableFilters)) copy(ts.filterCondition, path.TableFilters) @@ -2156,9 +2145,6 @@ func (ds *DataSource) getOriginalPhysicalTableScan(prop *property.PhysicalProper } sessVars := ds.ctx.GetSessionVars() cost := rowCount * rowSize * sessVars.GetScanFactor(ds.tableInfo) - if ts.IsGlobalRead { - cost += rowCount * sessVars.GetNetworkFactor(ds.tableInfo) * rowSize - } if isMatchProp { ts.Desc = prop.SortItems[0].Desc if prop.SortItems[0].Desc && prop.ExpectedCnt >= smallScanThreshold { diff --git a/planner/core/fragment.go b/planner/core/fragment.go index 837032e19619e..ff013fa241e78 100644 --- a/planner/core/fragment.go +++ b/planner/core/fragment.go @@ -16,6 +16,7 @@ package core import ( "context" + "sort" "time" "github.com/pingcap/errors" @@ -28,6 +29,7 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/ranger" "github.com/pingcap/tipb/go-tipb" "go.uber.org/zap" ) @@ -127,7 +129,7 @@ func (f *Fragment) init(p PhysicalPlan) error { f.TableScan = x case *PhysicalExchangeReceiver: // TODO: after we support partial merge, we should check whether all the target exchangeReceiver is same. - f.singleton = x.children[0].(*PhysicalExchangeSender).ExchangeType == tipb.ExchangeType_PassThrough + f.singleton = f.singleton || x.children[0].(*PhysicalExchangeSender).ExchangeType == tipb.ExchangeType_PassThrough f.ExchangeReceivers = append(f.ExchangeReceivers, x) case *PhysicalUnionAll: return errors.New("unexpected union all detected") @@ -248,6 +250,11 @@ func (e *mppTaskGenerator) generateMPPTasksForFragment(f *Fragment) (tasks []*kv } if f.TableScan != nil { tasks, err = e.constructMPPTasksImpl(context.Background(), f.TableScan) + if err == nil && len(tasks) == 0 { + err = errors.New( + "In mpp mode, the number of tasks for table scan should not be zero. " + + "Please set tidb_allow_mpp = 0, and then rerun sql.") + } } else { childrenTasks := make([]*kv.MPPTask, 0) for _, r := range f.ExchangeReceivers { @@ -312,42 +319,26 @@ func (e *mppTaskGenerator) constructMPPTasksImpl(ctx context.Context, ts *Physic } } + var req *kv.MPPBuildTasksRequest + var allPartitionsIDs []int64 + var err error splitedRanges, _ := distsql.SplitRangesAcrossInt64Boundary(ts.Ranges, false, false, ts.Table.IsCommonHandle) if ts.Table.GetPartitionInfo() != nil { tmp, _ := e.is.TableByID(ts.Table.ID) tbl := tmp.(table.PartitionedTable) - partitions, err := partitionPruning(e.ctx, tbl, ts.PartitionInfo.PruningConds, ts.PartitionInfo.PartitionNames, ts.PartitionInfo.Columns, ts.PartitionInfo.ColumnNames) + var partitions []table.PhysicalTable + partitions, err = partitionPruning(e.ctx, tbl, ts.PartitionInfo.PruningConds, ts.PartitionInfo.PartitionNames, ts.PartitionInfo.Columns, ts.PartitionInfo.ColumnNames) if err != nil { return nil, errors.Trace(err) } - var ret []*kv.MPPTask - for _, p := range partitions { - pid := p.GetPhysicalID() - meta := p.Meta() - kvRanges, err := distsql.TableHandleRangesToKVRanges(e.ctx.GetSessionVars().StmtCtx, []int64{pid}, meta != nil && ts.Table.IsCommonHandle, splitedRanges, nil) - if err != nil { - return nil, errors.Trace(err) - } - tasks, err := e.constructMPPTasksForSinglePartitionTable(ctx, kvRanges, pid) - if err != nil { - return nil, errors.Trace(err) - } - ret = append(ret, tasks...) - } - return ret, nil + req, allPartitionsIDs, err = e.constructMPPBuildTaskReqForPartitionedTable(ts, splitedRanges, partitions) + } else { + req, err = e.constructMPPBuildTaskForNonPartitionTable(ts, splitedRanges) } - - kvRanges, err := distsql.TableHandleRangesToKVRanges(e.ctx.GetSessionVars().StmtCtx, []int64{ts.Table.ID}, ts.Table.IsCommonHandle, splitedRanges, nil) if err != nil { return nil, errors.Trace(err) } - return e.constructMPPTasksForSinglePartitionTable(ctx, kvRanges, ts.Table.ID) -} -func (e *mppTaskGenerator) constructMPPTasksForSinglePartitionTable(ctx context.Context, kvRanges []kv.KeyRange, tableID int64) ([]*kv.MPPTask, error) { - req := &kv.MPPBuildTasksRequest{ - KeyRanges: kvRanges, - } ttl, err := time.ParseDuration(e.ctx.GetSessionVars().MPPStoreFailTTL) if err != nil { logutil.BgLogger().Warn("MPP store fail ttl is invalid", zap.Error(err)) @@ -357,9 +348,40 @@ func (e *mppTaskGenerator) constructMPPTasksForSinglePartitionTable(ctx context. if err != nil { return nil, errors.Trace(err) } + tasks := make([]*kv.MPPTask, 0, len(metas)) for _, meta := range metas { - tasks = append(tasks, &kv.MPPTask{Meta: meta, ID: e.ctx.GetSessionVars().AllocMPPTaskID(e.startTS), StartTs: e.startTS, TableID: tableID}) + task := &kv.MPPTask{Meta: meta, ID: e.ctx.GetSessionVars().AllocMPPTaskID(e.startTS), StartTs: e.startTS, TableID: ts.Table.ID, PartitionTableIDs: allPartitionsIDs} + tasks = append(tasks, task) } return tasks, nil } + +func (e *mppTaskGenerator) constructMPPBuildTaskReqForPartitionedTable(ts *PhysicalTableScan, splitedRanges []*ranger.Range, partitions []table.PhysicalTable) (*kv.MPPBuildTasksRequest, []int64, error) { + sort.Slice(partitions, func(i, j int) bool { + return partitions[i].GetPhysicalID() < partitions[j].GetPhysicalID() + }) + partitionIDAndRanges := make([]kv.PartitionIDAndRanges, len(partitions)) + allPartitionsIDs := make([]int64, len(partitions)) + // Get region info for each partition + for i, p := range partitions { + pid := p.GetPhysicalID() + meta := p.Meta() + kvRanges, err := distsql.TableHandleRangesToKVRanges(e.ctx.GetSessionVars().StmtCtx, []int64{pid}, meta != nil && ts.Table.IsCommonHandle, splitedRanges, nil) + if err != nil { + return nil, nil, errors.Trace(err) + } + partitionIDAndRanges[i].ID = pid + partitionIDAndRanges[i].KeyRanges = kvRanges + allPartitionsIDs[i] = pid + } + return &kv.MPPBuildTasksRequest{PartitionIDAndRanges: partitionIDAndRanges}, allPartitionsIDs, nil +} + +func (e *mppTaskGenerator) constructMPPBuildTaskForNonPartitionTable(ts *PhysicalTableScan, splitedRanges []*ranger.Range) (*kv.MPPBuildTasksRequest, error) { + kvRanges, err := distsql.TableHandleRangesToKVRanges(e.ctx.GetSessionVars().StmtCtx, []int64{ts.Table.ID}, ts.Table.IsCommonHandle, splitedRanges, nil) + if err != nil { + return nil, errors.Trace(err) + } + return &kv.MPPBuildTasksRequest{KeyRanges: kvRanges}, nil +} diff --git a/planner/core/fragment_test.go b/planner/core/fragment_test.go new file mode 100644 index 0000000000000..fa8ec9e99763c --- /dev/null +++ b/planner/core/fragment_test.go @@ -0,0 +1,53 @@ +// Copyright 2020 PingCAP, Inc. +// +// 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 core + +import ( + "github.com/pingcap/tipb/go-tipb" + "github.com/stretchr/testify/require" + + "testing" +) + +func TestFragmentInitSingleton(t *testing.T) { + r1, r2 := &PhysicalExchangeReceiver{}, &PhysicalExchangeReceiver{} + r1.SetChildren(&PhysicalExchangeSender{ExchangeType: tipb.ExchangeType_PassThrough}) + r2.SetChildren(&PhysicalExchangeSender{ExchangeType: tipb.ExchangeType_Broadcast}) + p := &PhysicalHashJoin{} + + f := &Fragment{} + p.SetChildren(r1, r1) + err := f.init(p) + require.NoError(t, err) + require.Equal(t, f.singleton, true) + + f = &Fragment{} + p.SetChildren(r1, r2) + err = f.init(p) + require.NoError(t, err) + require.Equal(t, f.singleton, true) + + f = &Fragment{} + p.SetChildren(r2, r1) + err = f.init(p) + require.NoError(t, err) + require.Equal(t, f.singleton, true) + + f = &Fragment{} + p.SetChildren(r2, r2) + err = f.init(p) + require.NoError(t, err) + require.Equal(t, f.singleton, false) +} diff --git a/planner/core/handle_cols.go b/planner/core/handle_cols.go index 48d6ab2444edd..ad59247a3b69a 100644 --- a/planner/core/handle_cols.go +++ b/planner/core/handle_cols.go @@ -239,15 +239,9 @@ func (ib *IntHandleCols) NumCols() int { // Compare implements the kv.HandleCols interface. func (ib *IntHandleCols) Compare(a, b []types.Datum, ctors []collate.Collator) (int, error) { - aInt := a[ib.col.Index].GetInt64() - bInt := b[ib.col.Index].GetInt64() - if aInt == bInt { - return 0, nil - } - if aInt < bInt { - return -1, nil - } - return 1, nil + aVal := &a[ib.col.Index] + bVal := &b[ib.col.Index] + return aVal.Compare(nil, bVal, ctors[ib.col.Index]) } // GetFieldsTypes implements the kv.HandleCols interface. diff --git a/planner/core/hints.go b/planner/core/hints.go index 04cc356f06af5..b4ad15042ef43 100644 --- a/planner/core/hints.go +++ b/planner/core/hints.go @@ -49,11 +49,6 @@ func getTableName(tblName model.CIStr, asName *model.CIStr) model.CIStr { } func extractTableAsName(p PhysicalPlan) (*model.CIStr, *model.CIStr) { - _, isProj := p.(*PhysicalProjection) - _, isUnionScan := p.(*PhysicalUnionScan) - if isProj || isUnionScan { - return extractTableAsName(p.Children()[0]) - } if len(p.Children()) > 1 { return nil, nil } @@ -76,6 +71,8 @@ func extractTableAsName(p PhysicalPlan) (*model.CIStr, *model.CIStr) { return &is.DBName, is.TableAsName } return &is.DBName, &is.Table.Name + case *PhysicalSort, *PhysicalSelection, *PhysicalUnionScan, *PhysicalProjection: + return extractTableAsName(p.Children()[0]) } return nil, nil } diff --git a/planner/core/initialize.go b/planner/core/initialize.go index 5a32d0294e952..9b1a4bf858c6c 100644 --- a/planner/core/initialize.go +++ b/planner/core/initialize.go @@ -414,13 +414,23 @@ func (p PhysicalIndexMergeReader) Init(ctx sessionctx.Context, offset int) *Phys return &p } -// Init initializes PhysicalTableReader. -func (p PhysicalTableReader) Init(ctx sessionctx.Context, offset int) *PhysicalTableReader { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeTableReader, &p, offset) - if p.tablePlan != nil { - p.TablePlans = flattenPushDownPlan(p.tablePlan) - p.schema = p.tablePlan.Schema() - if p.StoreType == kv.TiFlash && p.GetTableScan() != nil && !p.GetTableScan().KeepOrder { +func (p *PhysicalTableReader) adjustReadReqType(ctx sessionctx.Context) { + if p.StoreType == kv.TiFlash { + _, ok := p.tablePlan.(*PhysicalExchangeSender) + if ok { + p.ReadReqType = MPP + return + } + tableScans := p.GetTableScans() + // When PhysicalTableReader's store type is tiflash, has table scan + // and all table scans contained are not keepOrder, try to use batch cop. + if len(tableScans) > 0 { + for _, tableScan := range tableScans { + if tableScan.KeepOrder { + return + } + } + // When allow batch cop is 1, only agg / topN uses batch cop. // When allow batch cop is 2, every query uses batch cop. switch ctx.GetSessionVars().AllowBatchCop { @@ -428,14 +438,30 @@ func (p PhysicalTableReader) Init(ctx sessionctx.Context, offset int) *PhysicalT for _, plan := range p.TablePlans { switch plan.(type) { case *PhysicalHashAgg, *PhysicalStreamAgg, *PhysicalTopN: - p.BatchCop = true + p.ReadReqType = BatchCop + return } } case 2: - p.BatchCop = true + p.ReadReqType = BatchCop } } } +} + +// Init initializes PhysicalTableReader. +func (p PhysicalTableReader) Init(ctx sessionctx.Context, offset int) *PhysicalTableReader { + p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeTableReader, &p, offset) + p.ReadReqType = Cop + if p.tablePlan == nil { + return &p + } + p.TablePlans = flattenPushDownPlan(p.tablePlan) + p.schema = p.tablePlan.Schema() + p.adjustReadReqType(ctx) + if p.ReadReqType == BatchCop || p.ReadReqType == MPP { + setMppOrBatchCopForTableScan(p.tablePlan) + } return &p } diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 9a22c6ba2ce55..9f4b88c0c2134 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -19,8 +19,10 @@ import ( "fmt" "strings" "testing" + "time" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" @@ -73,6 +75,21 @@ func TestShowSubquery(t *testing.T) { )) } +func TestJoinOperatorRightAssociative(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int)") + tk.MustExec("insert into t values(1,10),(2,20)") + // make sure this join won't rewrite as left-associative join like (t0 join t1) join t2 when explicit parent existed. + // mysql will detect the t0.a is out of it's join parent scope and errors like ERROR 1054 (42S22): Unknown column 't0.a' in 'on clause' + err := tk.ExecToErr("select t1.* from t t0 cross join (t t1 join t t2 on 100=t0.a);") + require.Error(t, err) + require.EqualError(t, err, "[planner:1054]Unknown column 't0.a' in 'on clause'") +} + func TestPpdWithSetVar(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -855,6 +872,7 @@ func TestMPPJoinWithCanNotFoundColumnInSchemaColumnsError(t *testing.T) { func TestJoinNotSupportedByTiFlash(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists table_1") @@ -862,6 +880,9 @@ func TestJoinNotSupportedByTiFlash(t *testing.T) { tk.MustExec("insert into table_1 values(1,b'1','2020-01-01 00:00:00'),(2,b'0','2020-01-01 00:00:00')") tk.MustExec("analyze table table_1") + tk.MustExec("insert into mysql.expr_pushdown_blacklist values('dayofmonth', 'tiflash', '');") + tk.MustExec("admin reload expr_pushdown_blacklist;") + // Create virtual tiflash replica info. dom := domain.GetDomain(tk.Session()) is := dom.InfoSchema() @@ -905,22 +926,6 @@ func TestJoinNotSupportedByTiFlash(t *testing.T) { res := tk.MustQuery(tt) res.Check(testkit.Rows(output[i].Plan...)) } - - tk.MustExec("set @@session.tidb_allow_mpp = 0") - tk.MustExec("set @@session.tidb_isolation_read_engines = 'tiflash'") - tk.MustExec("set @@session.tidb_allow_batch_cop = 1") - tk.MustExec("set @@session.tidb_opt_broadcast_join = 1") - // make cbo force choose broadcast join since sql hint does not work for semi/anti-semi join - tk.MustExec("set @@session.tidb_opt_cpu_factor=10000000;") - integrationSuiteData.GetTestCases(t, &input, &output) - for i, tt := range input { - testdata.OnRecord(func() { - output[i].SQL = tt - output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) - }) - res := tk.MustQuery(tt) - res.Check(testkit.Rows(output[i].Plan...)) - } } func TestMPPWithHashExchangeUnderNewCollation(t *testing.T) { @@ -953,7 +958,6 @@ func TestMPPWithHashExchangeUnderNewCollation(t *testing.T) { tk.MustExec("set @@session.tidb_isolation_read_engines = 'tiflash'") tk.MustExec("set @@session.tidb_allow_mpp = 1") - tk.MustExec("set @@session.tidb_opt_broadcast_join = 0") tk.MustExec("set @@session.tidb_broadcast_join_threshold_count = 0") tk.MustExec("set @@session.tidb_broadcast_join_threshold_size = 0") tk.MustExec("set @@session.tidb_hash_exchange_with_new_collation = 1") @@ -1741,6 +1745,14 @@ func TestIndexHintWarning(t *testing.T) { require.EqualError(t, warns[j].Err, output[i].Warnings[j]) } } + //Test view with index hint should result error + tk.MustExec("drop table if exists t1") + tk.MustExec("drop view if exists v1") + tk.MustExec("CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2))") + tk.MustExec("INSERT INTO t1 VALUES (1,1), (2,2), (3,3)") + tk.MustExec("CREATE VIEW v1 AS SELECT c1, c2 FROM t1") + err := tk.ExecToErr("SELECT * FROM v1 USE INDEX (PRIMARY) WHERE c1=2") + require.True(t, terror.ErrorEqual(err, core.ErrKeyDoesNotExist)) } func TestIssue15546(t *testing.T) { @@ -2696,6 +2708,248 @@ func TestBitColumnPushDown(t *testing.T) { sql = "select a from t1 where cast(a as char)='A'" tk.MustQuery(sql).Check(testkit.Rows("A")) tk.MustQuery(fmt.Sprintf("explain analyze %s", sql)).CheckAt([]int{0, 3, 6}, rows) + + tk.MustExec("insert into mysql.expr_pushdown_blacklist values('bit', 'tikv','');") + tk.MustExec("admin reload expr_pushdown_blacklist;") + rows = [][]interface{}{ + {"Selection_5", "root", `eq(cast(test.t1.a, var_string(1)), "A")`}, + {"└─TableReader_7", "root", "data:TableFullScan_6"}, + {" └─TableFullScan_6", "cop[tikv]", "keep order:false, stats:pseudo"}, + } + sql = "select a from t1 where cast(a as char)='A'" + tk.MustQuery(sql).Check(testkit.Rows("A")) + tk.MustQuery(fmt.Sprintf("explain analyze %s", sql)).CheckAt([]int{0, 3, 6}, rows) + + tk.MustExec("delete from mysql.expr_pushdown_blacklist where name='bit'") + tk.MustExec("admin reload expr_pushdown_blacklist;") + sql = "select a from t1 where ascii(a)=65" + tk.MustQuery(sql).Check(testkit.Rows("A")) + rows = [][]interface{}{ + {"TableReader_7", "root", "data:Selection_6"}, + {"└─Selection_6", "cop[tikv]", "eq(ascii(cast(test.t1.a, var_string(1))), 65)"}, + {" └─TableFullScan_5", "cop[tikv]", "keep order:false, stats:pseudo"}, + } + tk.MustQuery(fmt.Sprintf("explain analyze %s", sql)).CheckAt([]int{0, 3, 6}, rows) + + // test collation + tk.MustExec("update mysql.tidb set VARIABLE_VALUE='True' where VARIABLE_NAME='new_collation_enabled'") + tk.MustQuery("SELECT VARIABLE_VALUE FROM mysql.tidb WHERE VARIABLE_NAME='new_collation_enabled';").Check( + testkit.Rows("True")) + tk.MustExec("create table t3 (a bit(8));") + tk.MustExec("insert into t3 values (65)") + tk.MustExec("SET NAMES utf8mb4 COLLATE utf8mb4_bin") + tk.MustQuery("select a from t3 where cast(a as char) = 'a'").Check(testkit.Rows()) + tk.MustExec("SET NAMES utf8mb4 COLLATE utf8mb4_general_ci") + tk.MustQuery("select a from t3 where cast(a as char) = 'a'").Check(testkit.Rows("A")) +} + +func TestSysdatePushDown(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(id int signed, id2 int unsigned, c varchar(11), d datetime, b double, e bit(10))") + tk.MustExec("insert into t(id, id2, c, d) values (-1, 1, 'abc', '2021-12-12')") + rows := [][]interface{}{ + {"TableReader_7", "root", "data:Selection_6"}, + {"└─Selection_6", "cop[tikv]", "gt(test.t.d, sysdate())"}, + {" └─TableFullScan_5", "cop[tikv]", "keep order:false, stats:pseudo"}, + } + tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where d > sysdate()"). + CheckAt([]int{0, 3, 6}, rows) + // assert sysdate isn't now after set global tidb_sysdate_is_now in the same session + tk.MustExec("set global tidb_sysdate_is_now='1'") + tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where d > sysdate()"). + CheckAt([]int{0, 3, 6}, rows) + + // assert sysdate is now after set global tidb_sysdate_is_now in the new session + tk = testkit.NewTestKit(t, store) + tk.MustExec("use test") + now := time.Now() + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/expression/injectNow", fmt.Sprintf(`return(%d)`, now.Unix()))) + rows[1][2] = fmt.Sprintf("gt(test.t.d, %v)", now.Format("2006-01-02 15:04:05")) + tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where d > sysdate()"). + CheckAt([]int{0, 3, 6}, rows) + failpoint.Disable("github.com/pingcap/tidb/expression/injectNow") + + // assert sysdate isn't now after set session tidb_sysdate_is_now false in the same session + tk.MustExec("set tidb_sysdate_is_now='0'") + rows[1][2] = "gt(test.t.d, sysdate())" + tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where d > sysdate()"). + CheckAt([]int{0, 3, 6}, rows) +} + +func TestTimeScalarFunctionPushDownResult(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(col1 datetime, col2 datetime, y int(8), m int(8), d int(8)) CHARSET=utf8 COLLATE=utf8_general_ci;") + tk.MustExec("insert into t values ('2022-03-24 01:02:03.040506', '9999-12-31 23:59:59', 9999, 12, 31);") + testcases := []struct { + sql string + function string + }{ + { + sql: "select now(), now() from t where sysdate()-now()<2;", + function: "sysdate", + }, + { + sql: "select col1, to_days(col1) from t where to_days(col1)=to_days('2022-03-24 01:02:03.040506');", + function: "to_days", + }, + { + sql: "select col1, hour(col1) from t where hour(col1)=hour('2022-03-24 01:02:03.040506');", + function: "hour", + }, + { + sql: "select col1, month(col1) from t where month(col1)=month('2022-03-24 01:02:03.040506');", + function: "month", + }, + { + sql: "select col1, minute(col1) from t where minute(col1)=minute('2022-03-24 01:02:03.040506');", + function: "minute", + }, + { + function: "second", + sql: "select col1, second(col1) from t where second(col1)=second('2022-03-24 01:02:03.040506');", + }, + { + function: "microsecond", + sql: "select col1, microsecond(col1) from t where microsecond(col1)=microsecond('2022-03-24 01:02:03.040506');", + }, + { + function: "dayName", + sql: "select col1, dayName(col1) from t where dayName(col1)=dayName('2022-03-24 01:02:03.040506');", + }, + { + function: "dayOfMonth", + sql: "select col1, dayOfMonth(col1) from t where dayOfMonth(col1)=dayOfMonth('2022-03-24 01:02:03.040506');", + }, + { + function: "dayOfWeek", + sql: "select col1, dayOfWeek(col1) from t where dayOfWeek(col1)=dayOfWeek('2022-03-24 01:02:03.040506');", + }, + { + function: "dayOfYear", + sql: "select col1, dayOfYear(col1) from t where dayOfYear(col1)=dayOfYear('2022-03-24 01:02:03.040506');", + }, + { + function: "Date", + sql: "select col1, Date(col1) from t where Date(col1)=Date('2022-03-24 01:02:03.040506');", + }, + { + function: "Week", + sql: "select col1, Week(col1) from t where Week(col1)=Week('2022-03-24 01:02:03.040506');", + }, + { + function: "to_seconds", + sql: "select col1, to_seconds(col1) from t where to_seconds(col1)=to_seconds('2022-03-24 01:02:03.040506');", + }, + { + function: "time_to_sec", + sql: "select col1, time_to_sec (col1) from t where time_to_sec(col1)=time_to_sec('2022-03-24 01:02:03.040506');", + }, + { + function: "DateDiff", + sql: "select col1, DateDiff(col1, col2) from t where DateDiff(col1, col2)=DateDiff('2022-03-24 01:02:03.040506', '9999-12-31 23:59:59');", + }, + { + function: "MonthName", + sql: "select col1, MonthName(col1) from t where MonthName(col1)=MonthName('2022-03-24 01:02:03.040506');", + }, + { + function: "MakeDate", + sql: "select col1, MakeDate(9999, 31) from t where MakeDate(y, d)=MakeDate(9999, 31);", + }, + { + function: "MakeTime", + sql: "select col1, MakeTime(12, 12, 31) from t where MakeTime(m, m, d)=MakeTime(12, 12, 31);", + }, + } + tk.MustExec("delete from mysql.expr_pushdown_blacklist where name != 'date_add'") + tk.MustExec("admin reload expr_pushdown_blacklist;") + for _, testcase := range testcases { + r1 := tk.MustQuery(testcase.sql).Rows() + tk.MustExec(fmt.Sprintf("insert into mysql.expr_pushdown_blacklist(name) values('%s');", testcase.function)) + tk.MustExec("admin reload expr_pushdown_blacklist;") + r2 := tk.MustQuery(testcase.sql).Rows() + require.EqualValues(t, r2, r1, testcase.sql) + } + tk.MustExec("delete from mysql.expr_pushdown_blacklist where name != 'date_add'") + tk.MustExec("admin reload expr_pushdown_blacklist;") +} + +func TestNumberFunctionPushDown(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a int signed, b int unsigned,c double)") + tk.MustExec("insert into t values (-1,61,4.4)") + testcases := []struct { + sql string + function string + }{ + { + sql: "select a, mod(a,2) from t where mod(-1,2)=mod(a,2);", + function: "mod", + }, + { + sql: "select b, mod(b,2) from t where mod(61,2)=mod(b,2);", + function: "mod", + }, + { + sql: "select b,unhex(b) from t where unhex(61) = unhex(b)", + function: "unhex", + }, + { + sql: "select b, oct(b) from t where oct(61) = oct(b)", + function: "oct", + }, + { + sql: "select c, sin(c) from t where sin(4.4) = sin(c)", + function: "sin", + }, + { + sql: "select c, asin(c) from t where asin(4.4) = asin(c)", + function: "asin", + }, + { + sql: "select c, cos(c) from t where cos(4.4) = cos(c)", + function: "cos", + }, + { + sql: "select c, acos(c) from t where acos(4.4) = acos(c)", + function: "acos", + }, + { + sql: "select b,atan(b) from t where atan(61)=atan(b)", + function: "atan", + }, + { + sql: "select b, atan2(b, c) from t where atan2(61,4.4)=atan2(b,c)", + function: "atan2", + }, + { + sql: "select b,cot(b) from t where cot(61)=cot(b)", + function: "cot", + }, + { + sql: "select c from t where pi() < c", + function: "pi", + }, + } + for _, testcase := range testcases { + tk.MustExec("delete from mysql.expr_pushdown_blacklist where name != 'date_add'") + tk.MustExec("admin reload expr_pushdown_blacklist;") + r1 := tk.MustQuery(testcase.sql).Rows() + tk.MustExec(fmt.Sprintf("insert into mysql.expr_pushdown_blacklist(name) values('%s');", testcase.function)) + tk.MustExec("admin reload expr_pushdown_blacklist;") + r2 := tk.MustQuery(testcase.sql).Rows() + require.EqualValues(t, r2, r1, testcase.sql) + } } func TestScalarFunctionPushDown(t *testing.T) { @@ -2713,10 +2967,6 @@ func TestScalarFunctionPushDown(t *testing.T) { tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where right(c,1);"). CheckAt([]int{0, 3, 6}, rows) - rows[1][2] = "left(test.t.c, 1)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where left(c,1);"). - CheckAt([]int{0, 3, 6}, rows) - rows[1][2] = "mod(test.t.id, test.t.id)" tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where mod(id, id);"). CheckAt([]int{0, 3, 6}, rows) @@ -2746,10 +2996,6 @@ func TestScalarFunctionPushDown(t *testing.T) { tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where acos(id);"). CheckAt([]int{0, 3, 6}, rows) - rows[1][2] = "tan(cast(test.t.id, double BINARY))" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where tan(id);"). - CheckAt([]int{0, 3, 6}, rows) - rows[1][2] = "atan(cast(test.t.id, double BINARY))" tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where atan(id);"). CheckAt([]int{0, 3, 6}, rows) @@ -2814,70 +3060,6 @@ func TestScalarFunctionPushDown(t *testing.T) { //tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where truncate(id,0)"). // CheckAt([]int{0, 3, 6}, rows) - rows[1][2] = "bin(test.t.id)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where bin(id)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "unhex(test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where unhex(c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "locate(test.t.c, test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where locate(c,c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "ord(test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where ord(c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "lpad(test.t.c, 1, test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where lpad(c,1,c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "rpad(test.t.c, 1, test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where rpad(c,1,c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "trim(test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where trim(c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "from_base64(test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where from_base64(c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "to_base64(test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where to_base64(c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "make_set(1, test.t.c, test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where make_set(1,c,c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "substring_index(test.t.c, test.t.c, 1)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where substring_index(c,c,1)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "instr(test.t.c, test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where instr(c,c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "quote(test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where quote(c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "oct(test.t.id)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where oct(id)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "find_in_set(test.t.c, test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where find_in_set(c,c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "repeat(test.t.c, 2)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where repeat(c,2)"). - CheckAt([]int{0, 3, 6}, rows) - rows[1][2] = "round(test.t.b)" tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where round(b)"). CheckAt([]int{0, 3, 6}, rows) @@ -2890,10 +3072,6 @@ func TestScalarFunctionPushDown(t *testing.T) { tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where week(d)"). CheckAt([]int{0, 3, 6}, rows) - rows[1][2] = "yearweek(test.t.d)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where yearweek(d)"). - CheckAt([]int{0, 3, 6}, rows) - rows[1][2] = "to_seconds(test.t.d)" tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where to_seconds(d)"). CheckAt([]int{0, 3, 6}, rows) @@ -2909,26 +3087,6 @@ func TestScalarFunctionPushDown(t *testing.T) { rows[1][2] = "ascii(cast(test.t.e, var_string(2)))" tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where ascii(e);"). CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "lower(test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where lower(c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "upper(test.t.c)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where upper(c)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "insert_func(test.t.c, 1, 1, \"c\")" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where insert_func(c, 1, 1,'c')"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "greatest(test.t.id, 1)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where greatest(id, 1)"). - CheckAt([]int{0, 3, 6}, rows) - - rows[1][2] = "least(test.t.id, 1)" - tk.MustQuery("explain analyze select /*+read_from_storage(tikv[t])*/ * from t where least(id, 1)"). - CheckAt([]int{0, 3, 6}, rows) } func TestDistinctScalarFunctionPushDown(t *testing.T) { @@ -3301,7 +3459,7 @@ func TestIssue14481(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int default null, b int default null, c int default null)") plan := tk.MustQuery("explain format = 'brief' select * from t where a = 1 and a = 2") - plan.Check(testkit.Rows("TableDual 8000.00 root rows:0")) + plan.Check(testkit.Rows("TableDual 0.00 root rows:0")) tk.MustExec("drop table t") } @@ -3952,8 +4110,6 @@ func TestPushDownProjectionForTiFlash(t *testing.T) { } } - tk.MustExec("set @@tidb_opt_broadcast_join=1;") - var input []string var output []struct { SQL string @@ -3994,7 +4150,7 @@ func TestPushDownProjectionForMPP(t *testing.T) { } } - tk.MustExec("set @@tidb_allow_mpp=1; set @@tidb_opt_broadcast_join=0; set @@tidb_enforce_mpp=1;") + tk.MustExec("set @@tidb_allow_mpp=1; set @@tidb_enforce_mpp=1;") var input []string var output []struct { @@ -4129,7 +4285,7 @@ func TestPushDownAggForMPP(t *testing.T) { } } - tk.MustExec(" set @@tidb_allow_mpp=1; set @@tidb_opt_broadcast_join=0; set @@tidb_broadcast_join_threshold_count = 1; set @@tidb_broadcast_join_threshold_size=1;") + tk.MustExec(" set @@tidb_allow_mpp=1; set @@tidb_broadcast_join_threshold_count = 1; set @@tidb_broadcast_join_threshold_size=1;") var input []string var output []struct { @@ -4664,7 +4820,7 @@ func TestIncrementalAnalyzeStatsVer2(t *testing.T) { require.Len(t, warns, 3) require.EqualError(t, warns[0].Err, "The version 2 would collect all statistics not only the selected indexes") require.EqualError(t, warns[1].Err, "The version 2 stats would ignore the INCREMENTAL keyword and do full sampling") - require.EqualError(t, warns[2].Err, "Analyze use auto adjusted sample rate 1.000000 for table test.t.") + require.EqualError(t, warns[2].Err, "Analyze use auto adjusted sample rate 1.000000 for table test.t") rows = tk.MustQuery(fmt.Sprintf("select distinct_count from mysql.stats_histograms where table_id = %d and is_index = 1", tblID)).Rows() require.Len(t, rows, 1) require.Equal(t, "6", rows[0][0]) @@ -5009,7 +5165,7 @@ func TestIssue29834(t *testing.T) { tk.MustQuery("SELECT/*+ INL_JOIN(t1, t2), nth_plan(1) */ t2.* FROM IDT_MC21814 t1 LEFT JOIN IDT_MC21814 t2 ON t1.col1 = t2.col1 WHERE t2.col2 BETWEEN 2593 AND 1971 AND t1.col1 IN (2155, 1901, 1967);").Check(testkit.Rows()) tk.MustQuery("SELECT/*+ INL_JOIN(t1, t2), nth_plan(2) */ t2.* FROM IDT_MC21814 t1 LEFT JOIN IDT_MC21814 t2 ON t1.col1 = t2.col1 WHERE t2.col2 BETWEEN 2593 AND 1971 AND t1.col1 IN (2155, 1901, 1967);").Check(testkit.Rows()) // Only can generate one index join plan. Because the index join inner child can not be tableDual. - tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1105 The parameter of nth_plan() is out of range.")) + tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1105 The parameter of nth_plan() is out of range")) } func TestIssue29221(t *testing.T) { @@ -5567,7 +5723,7 @@ func TestRejectSortForMPP(t *testing.T) { } } - tk.MustExec("set @@tidb_allow_mpp=1; set @@tidb_opt_broadcast_join=0; set @@tidb_enforce_mpp=1;") + tk.MustExec("set @@tidb_allow_mpp=1; set @@tidb_enforce_mpp=1;") var input []string var output []struct { @@ -6038,9 +6194,10 @@ func TestAggPushToCopForCachedTable(t *testing.T) { tk.MustQuery("explain format = 'brief' select /*+AGG_TO_COP()*/ count(*) from t32157 ignore index(primary) where process_code = 'GDEP0071'").Check(testkit.Rows( "StreamAgg 1.00 root funcs:count(1)->Column#8]\n" + - "[└─TableReader 10.00 root data:Selection]\n" + - "[ └─Selection 10.00 cop[tikv] eq(test.t32157.process_code, \"GDEP0071\")]\n" + - "[ └─TableFullScan 10000.00 cop[tikv] table:t32157 keep order:false, stats:pseudo")) + "[└─UnionScan 10.00 root eq(test.t32157.process_code, \"GDEP0071\")]\n" + + "[ └─TableReader 10.00 root data:Selection]\n" + + "[ └─Selection 10.00 cop[tikv] eq(test.t32157.process_code, \"GDEP0071\")]\n" + + "[ └─TableFullScan 10000.00 cop[tikv] table:t32157 keep order:false, stats:pseudo")) var readFromCacheNoPanic bool for i := 0; i < 10; i++ { @@ -6091,3 +6248,208 @@ func TestIssue31240(t *testing.T) { } tk.MustExec("drop table if exists t31240") } + +func TestIssue32632(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("CREATE TABLE `partsupp` (" + + " `PS_PARTKEY` bigint(20) NOT NULL," + + "`PS_SUPPKEY` bigint(20) NOT NULL," + + "`PS_AVAILQTY` bigint(20) NOT NULL," + + "`PS_SUPPLYCOST` decimal(15,2) NOT NULL," + + "`PS_COMMENT` varchar(199) NOT NULL," + + "PRIMARY KEY (`PS_PARTKEY`,`PS_SUPPKEY`) /*T![clustered_index] NONCLUSTERED */)") + tk.MustExec("CREATE TABLE `supplier` (" + + "`S_SUPPKEY` bigint(20) NOT NULL," + + "`S_NAME` char(25) NOT NULL," + + "`S_ADDRESS` varchar(40) NOT NULL," + + "`S_NATIONKEY` bigint(20) NOT NULL," + + "`S_PHONE` char(15) NOT NULL," + + "`S_ACCTBAL` decimal(15,2) NOT NULL," + + "`S_COMMENT` varchar(101) NOT NULL," + + "PRIMARY KEY (`S_SUPPKEY`) /*T![clustered_index] CLUSTERED */)") + tk.MustExec("analyze table partsupp;") + tk.MustExec("analyze table supplier;") + tk.MustExec("set @@tidb_enforce_mpp = 1") + + tbl1, err := dom.InfoSchema().TableByName(model.CIStr{O: "test", L: "test"}, model.CIStr{O: "partsupp", L: "partsupp"}) + require.NoError(t, err) + tbl2, err := dom.InfoSchema().TableByName(model.CIStr{O: "test", L: "test"}, model.CIStr{O: "supplier", L: "supplier"}) + require.NoError(t, err) + // Set the hacked TiFlash replica for explain tests. + tbl1.Meta().TiFlashReplica = &model.TiFlashReplicaInfo{Count: 1, Available: true} + tbl2.Meta().TiFlashReplica = &model.TiFlashReplicaInfo{Count: 1, Available: true} + + h := dom.StatsHandle() + statsTbl1 := h.GetTableStats(tbl1.Meta()) + statsTbl1.Count = 800000 + statsTbl2 := h.GetTableStats(tbl2.Meta()) + statsTbl2.Count = 10000 + var input []string + var output []struct { + SQL string + Plan []string + } + integrationSuiteData := core.GetIntegrationSuiteData() + integrationSuiteData.GetTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + }) + tk.MustQuery(tt).Check(testkit.Rows(output[i].Plan...)) + } + tk.MustExec("drop table if exists partsupp") + tk.MustExec("drop table if exists supplier") +} + +func TestTiFlashPartitionTableScan(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@tidb_partition_prune_mode = 'dynamic'") + tk.MustExec("set @@tidb_isolation_read_engines = 'tiflash'") + tk.MustExec("set @@tidb_enforce_mpp = on") + tk.MustExec("set @@tidb_allow_batch_cop = 2") + tk.MustExec("drop table if exists rp_t;") + tk.MustExec("drop table if exists hp_t;") + tk.MustExec("create table rp_t(a int) partition by RANGE (a) (PARTITION p0 VALUES LESS THAN (6),PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (16), PARTITION p3 VALUES LESS THAN (21));") + tk.MustExec("create table hp_t(a int) partition by hash(a) partitions 4;") + tbl1, err := dom.InfoSchema().TableByName(model.CIStr{O: "test", L: "test"}, model.CIStr{O: "rp_t", L: "rp_t"}) + require.NoError(t, err) + tbl2, err := dom.InfoSchema().TableByName(model.CIStr{O: "test", L: "test"}, model.CIStr{O: "hp_t", L: "hp_t"}) + require.NoError(t, err) + // Set the hacked TiFlash replica for explain tests. + tbl1.Meta().TiFlashReplica = &model.TiFlashReplicaInfo{Count: 1, Available: true} + tbl2.Meta().TiFlashReplica = &model.TiFlashReplicaInfo{Count: 1, Available: true} + var input []string + var output []struct { + SQL string + Plan []string + } + integrationSuiteData := core.GetIntegrationSuiteData() + integrationSuiteData.GetTestCases(t, &input, &output) + for i, tt := range input { + testdata.OnRecord(func() { + output[i].SQL = tt + output[i].Plan = testdata.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) + }) + tk.MustQuery(tt).Check(testkit.Rows(output[i].Plan...)) + } + tk.MustExec("drop table rp_t;") + tk.MustExec("drop table hp_t;") +} + +func TestIssue33175(t *testing.T) { + store, _, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + tk.MustExec("create table t (id bigint(45) unsigned not null, c varchar(20), primary key(id));") + tk.MustExec("insert into t values (9734095886065816707, 'a'), (10353107668348738101, 'b'), (0, 'c');") + tk.MustExec("begin") + tk.MustExec("insert into t values (33, 'd');") + tk.MustQuery("select max(id) from t;").Check(testkit.Rows("10353107668348738101")) + tk.MustExec("rollback") + + tk.MustExec("alter table t cache") + for { + tk.MustQuery("select max(id) from t;").Check(testkit.Rows("10353107668348738101")) + if tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache { + break + } + } + + // // With subquery, like the original issue case. + for { + tk.MustQuery("select * from t where id > (select max(id) from t where t.id > 0);").Check(testkit.Rows()) + if tk.Session().GetSessionVars().StmtCtx.ReadFromTableCache { + break + } + } + + // Test order by desc / asc. + tk.MustQuery("select id from t order by id desc;").Check(testkit.Rows( + "10353107668348738101", + "9734095886065816707", + "0")) + + tk.MustQuery("select id from t order by id asc;").Check(testkit.Rows( + "0", + "9734095886065816707", + "10353107668348738101")) + + tk.MustExec("alter table t nocache") + tk.MustExec("drop table t") + + // Cover more code that use union scan + // TableReader/IndexReader/IndexLookup + for idx, q := range []string{ + "create temporary table t (id bigint unsigned, c int default null, index(id))", + "create temporary table t (id bigint unsigned primary key)", + } { + tk.MustExec(q) + tk.MustExec("insert into t(id) values (1), (3), (9734095886065816707), (9734095886065816708)") + tk.MustQuery("select min(id) from t").Check(testkit.Rows("1")) + tk.MustQuery("select max(id) from t").Check(testkit.Rows("9734095886065816708")) + tk.MustQuery("select id from t order by id asc").Check(testkit.Rows( + "1", "3", "9734095886065816707", "9734095886065816708")) + tk.MustQuery("select id from t order by id desc").Check(testkit.Rows( + "9734095886065816708", "9734095886065816707", "3", "1")) + if idx == 0 { + tk.MustQuery("select * from t order by id asc").Check(testkit.Rows( + "1 ", + "3 ", + "9734095886065816707 ", + "9734095886065816708 ")) + tk.MustQuery("select * from t order by id desc").Check(testkit.Rows( + "9734095886065816708 ", + "9734095886065816707 ", + "3 ", + "1 ")) + } + tk.MustExec("drop table t") + } + + // More and more test + tk.MustExec("create global temporary table `tmp1` (id bigint unsigned primary key) on commit delete rows;") + tk.MustExec("begin") + tk.MustExec("insert into tmp1 values (0),(1),(2),(65536),(9734095886065816707),(9734095886065816708);") + tk.MustQuery("select * from tmp1 where id <= 65534 or (id > 65535 and id < 9734095886065816700) or id >= 9734095886065816707 order by id desc;").Check(testkit.Rows( + "9734095886065816708", "9734095886065816707", "65536", "2", "1", "0")) + + tk.MustQuery("select * from tmp1 where id <= 65534 or (id > 65535 and id < 9734095886065816700) or id >= 9734095886065816707 order by id asc;").Check(testkit.Rows( + "0", "1", "2", "65536", "9734095886065816707", "9734095886065816708")) + + tk.MustExec("create global temporary table `tmp2` (id bigint primary key) on commit delete rows;") + tk.MustExec("begin") + tk.MustExec("insert into tmp2 values(-2),(-1),(0),(1),(2);") + tk.MustQuery("select * from tmp2 where id <= -1 or id > 0 order by id desc;").Check(testkit.Rows("2", "1", "-1", "-2")) + tk.MustQuery("select * from tmp2 where id <= -1 or id > 0 order by id asc;").Check(testkit.Rows("-2", "-1", "1", "2")) +} + +func TestIssue33042(t *testing.T) { + store, _, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("create table t1(id int primary key, col1 int)") + tk.MustExec("create table t2(id int primary key, col1 int)") + tk.MustQuery("explain format='brief' SELECT /*+ merge_join(t1, t2)*/ * FROM (t1 LEFT JOIN t2 ON t1.col1=t2.id) order by t2.id;").Check( + testkit.Rows( + "Sort 12500.00 root test.t2.id", + "└─MergeJoin 12500.00 root left outer join, left key:test.t1.col1, right key:test.t2.id", + " ├─TableReader(Build) 10000.00 root data:TableFullScan", + " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo", + " └─Sort(Probe) 10000.00 root test.t1.col1", + " └─TableReader 10000.00 root data:TableFullScan", + " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", + ), + ) +} diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index a73759eb09961..2a8aaa26b3a60 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -27,7 +27,6 @@ import ( "github.com/cznic/mathutil" "github.com/pingcap/errors" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" @@ -41,6 +40,7 @@ import ( "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/parser/opcode" "github.com/pingcap/tidb/parser/terror" + fd "github.com/pingcap/tidb/planner/funcdep" "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/planner/util" "github.com/pingcap/tidb/privilege" @@ -55,6 +55,7 @@ import ( util2 "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/plancodec" "github.com/pingcap/tidb/util/set" ) @@ -67,11 +68,8 @@ const ( // TiDBBroadCastJoin indicates applying broadcast join by force. TiDBBroadCastJoin = "tidb_bcj" - // HintBCJ indicates applying broadcast join by force. HintBCJ = "broadcast_join" - // HintBCJPreferLocal specifies the preferred local read table - HintBCJPreferLocal = "broadcast_join_local" // TiDBIndexNestedLoopJoin is hint enforce index nested loop join. TiDBIndexNestedLoopJoin = "tidb_inlj" @@ -276,7 +274,17 @@ func (b *PlanBuilder) buildAggregation(ctx context.Context, p LogicalPlan, aggFu schema4Agg.Append(newCol) names = append(names, p.OutputNames()[i]) } - if join, isJoin := p.(*LogicalJoin); isJoin && join.fullSchema != nil { + var ( + join *LogicalJoin + isJoin bool + isSelectionJoin bool + ) + join, isJoin = p.(*LogicalJoin) + selection, isSelection := p.(*LogicalSelection) + if isSelection { + join, isSelectionJoin = selection.children[0].(*LogicalJoin) + } + if (isJoin && join.fullSchema != nil) || (isSelectionJoin && join.fullSchema != nil) { for i, col := range join.fullSchema.Columns { if p.Schema().Contains(col) { continue @@ -540,19 +548,6 @@ func extractTableAlias(p Plan, parentOffset int) *hintTableInfo { return nil } -func (p *LogicalJoin) getPreferredBCJLocalIndex() (hasPrefer bool, prefer int) { - if p.hintInfo == nil { - return - } - if p.hintInfo.ifPreferAsLocalInBCJoin(p.children[0], p.blockOffset) { - return true, 0 - } - if p.hintInfo.ifPreferAsLocalInBCJoin(p.children[1], p.blockOffset) { - return true, 1 - } - return false, 0 -} - func (p *LogicalJoin) setPreferredJoinType(hintInfo *tableHintInfo) { if hintInfo == nil { return @@ -980,7 +975,7 @@ func (b *PlanBuilder) buildSelection(ctx context.Context, p LogicalPlan, where a conditions := splitWhere(where) expressions := make([]expression.Expression, 0, len(conditions)) - selection := LogicalSelection{buildByHaving: aggMapper != nil}.Init(b.ctx, b.getSelectOffset()) + selection := LogicalSelection{}.Init(b.ctx, b.getSelectOffset()) for _, cond := range conditions { expr, np, err := b.rewrite(ctx, cond, p, aggMapper, false) if err != nil { @@ -1156,9 +1151,22 @@ func (b *PlanBuilder) buildProjectionField(ctx context.Context, p LogicalPlan, f if expr == nil { return nil, name, nil } + // invalid unique id + correlatedColUniqueID := int64(0) + if cc, ok := expr.(*expression.CorrelatedColumn); ok { + correlatedColUniqueID = cc.UniqueID + } + // for expr projection, we should record the map relationship down. newCol := &expression.Column{ - UniqueID: b.ctx.GetSessionVars().AllocPlanColumnID(), - RetType: expr.GetType(), + UniqueID: b.ctx.GetSessionVars().AllocPlanColumnID(), + RetType: expr.GetType(), + CorrelatedColUniqueID: correlatedColUniqueID, + } + if b.ctx.GetSessionVars().OptimizerEnableNewOnlyFullGroupByCheck { + if b.ctx.GetSessionVars().MapHashCode2UniqueID4ExtendedCol == nil { + b.ctx.GetSessionVars().MapHashCode2UniqueID4ExtendedCol = make(map[string]int, 1) + } + b.ctx.GetSessionVars().MapHashCode2UniqueID4ExtendedCol[string(expr.HashCode(b.ctx.GetSessionVars().StmtCtx))] = int(newCol.UniqueID) } newCol.SetCoercibility(expr.Coercibility()) return newCol, name, nil @@ -2036,6 +2044,14 @@ func (a *havingWindowAndOrderbyExprResolver) resolveFromPlan(v *ast.ColumnNameEx Expr: &ast.ColumnNameExpr{Name: newColName}, Auxiliary: true, } + // appended with new select fields. set them with flag. + if a.inAggFunc { + // should skip check in FD for only full group by. + sf.AuxiliaryColInAgg = true + } else if a.curClause == orderByClause { + // should skip check in FD for only full group by only when group by item are empty. + sf.AuxiliaryColInOrderBy = true + } sf.Expr.SetType(col.GetType()) a.selectFields = append(a.selectFields, sf) return len(a.selectFields) - 1, nil @@ -2206,6 +2222,20 @@ func (b *PlanBuilder) resolveHavingAndOrderBy(sel *ast.SelectStmt, p LogicalPlan return havingAggMapper, extractor.aggMapper, nil } +func (b *PlanBuilder) extractAggFuncsInExprs(exprs []ast.ExprNode) ([]*ast.AggregateFuncExpr, map[*ast.AggregateFuncExpr]int) { + extractor := &AggregateFuncExtractor{skipAggMap: b.correlatedAggMapper} + for _, expr := range exprs { + expr.Accept(extractor) + } + aggList := extractor.AggFuncs + totalAggMapper := make(map[*ast.AggregateFuncExpr]int, len(aggList)) + + for i, agg := range aggList { + totalAggMapper[agg] = i + } + return aggList, totalAggMapper +} + func (b *PlanBuilder) extractAggFuncsInSelectFields(fields []*ast.SelectField) ([]*ast.AggregateFuncExpr, map[*ast.AggregateFuncExpr]int) { extractor := &AggregateFuncExtractor{skipAggMap: b.correlatedAggMapper} for _, f := range fields { @@ -2729,6 +2759,7 @@ func checkColFuncDepend( continue } funcDepend := true + // if all columns of some unique/pri indexes are determined, all columns left are check-passed. for _, indexCol := range index.Columns { iColInfo := tblInfo.Columns[indexCol.Offset] if !mysql.HasNotNullFlag(iColInfo.Flag) { @@ -3182,7 +3213,7 @@ func unfoldWildStar(field *ast.SelectField, outputName types.NameSlice, column [ } if (dbName.L == "" || dbName.L == name.DBName.L) && (tblName.L == "" || tblName.L == name.TblName.L) && - col.ID != model.ExtraHandleID { + col.ID != model.ExtraHandleID && col.ID != model.ExtraPidColID && col.ID != model.ExtraPhysTblID { colName := &ast.ColumnNameExpr{ Name: &ast.ColumnName{ Schema: name.DBName, @@ -3285,12 +3316,12 @@ func (b *PlanBuilder) pushHintWithoutTableWarning(hint *ast.TableOptimizerHint) func (b *PlanBuilder) pushTableHints(hints []*ast.TableOptimizerHint, currentLevel int) { hints = b.hintProcessor.GetCurrentStmtHints(hints, currentLevel) var ( - sortMergeTables, INLJTables, INLHJTables, INLMJTables, hashJoinTables, BCTables, BCJPreferLocalTables []hintTableInfo - indexHintList, indexMergeHintList []indexHintInfo - tiflashTables, tikvTables []hintTableInfo - aggHints aggHintInfo - timeRangeHint ast.HintTimeRange - limitHints limitHintInfo + sortMergeTables, INLJTables, INLHJTables, INLMJTables, hashJoinTables, BCTables []hintTableInfo + indexHintList, indexMergeHintList []indexHintInfo + tiflashTables, tikvTables []hintTableInfo + aggHints aggHintInfo + timeRangeHint ast.HintTimeRange + limitHints limitHintInfo ) for _, hint := range hints { // Set warning for the hint that requires the table name. @@ -3308,8 +3339,6 @@ func (b *PlanBuilder) pushTableHints(hints []*ast.TableOptimizerHint, currentLev sortMergeTables = append(sortMergeTables, tableNames2HintTableInfo(b.ctx, hint.HintName.L, hint.Tables, b.hintProcessor, currentLevel)...) case TiDBBroadCastJoin, HintBCJ: BCTables = append(BCTables, tableNames2HintTableInfo(b.ctx, hint.HintName.L, hint.Tables, b.hintProcessor, currentLevel)...) - case HintBCJPreferLocal: - BCJPreferLocalTables = append(BCJPreferLocalTables, tableNames2HintTableInfo(b.ctx, hint.HintName.L, hint.Tables, b.hintProcessor, currentLevel)...) case TiDBIndexNestedLoopJoin, HintINLJ: INLJTables = append(INLJTables, tableNames2HintTableInfo(b.ctx, hint.HintName.L, hint.Tables, b.hintProcessor, currentLevel)...) case HintINLHJ: @@ -3400,18 +3429,17 @@ func (b *PlanBuilder) pushTableHints(hints []*ast.TableOptimizerHint, currentLev } } b.tableHintInfo = append(b.tableHintInfo, tableHintInfo{ - sortMergeJoinTables: sortMergeTables, - broadcastJoinTables: BCTables, - broadcastJoinPreferredLocal: BCJPreferLocalTables, - indexNestedLoopJoinTables: indexNestedLoopJoinTables{INLJTables, INLHJTables, INLMJTables}, - hashJoinTables: hashJoinTables, - indexHintList: indexHintList, - tiflashTables: tiflashTables, - tikvTables: tikvTables, - aggHints: aggHints, - indexMergeHintList: indexMergeHintList, - timeRangeHint: timeRangeHint, - limitHints: limitHints, + sortMergeJoinTables: sortMergeTables, + broadcastJoinTables: BCTables, + indexNestedLoopJoinTables: indexNestedLoopJoinTables{INLJTables, INLHJTables, INLMJTables}, + hashJoinTables: hashJoinTables, + indexHintList: indexHintList, + tiflashTables: tiflashTables, + tikvTables: tikvTables, + aggHints: aggHints, + indexMergeHintList: indexMergeHintList, + timeRangeHint: timeRangeHint, + limitHints: limitHints, }) } @@ -3431,7 +3459,6 @@ func (b *PlanBuilder) popTableHints() { b.appendUnmatchedJoinHintWarning(HintINLMJ, "", hintInfo.indexNestedLoopJoinTables.inlmjTables) b.appendUnmatchedJoinHintWarning(HintSMJ, TiDBMergeJoin, hintInfo.sortMergeJoinTables) b.appendUnmatchedJoinHintWarning(HintBCJ, TiDBBroadCastJoin, hintInfo.broadcastJoinTables) - b.appendUnmatchedJoinHintWarning(HintBCJPreferLocal, "", hintInfo.broadcastJoinPreferredLocal) b.appendUnmatchedJoinHintWarning(HintHJ, TiDBHashJoin, hintInfo.hashJoinTables) b.appendUnmatchedStorageHintWarning(hintInfo.tiflashTables, hintInfo.tikvTables) b.tableHintInfo = b.tableHintInfo[:len(b.tableHintInfo)-1] @@ -3781,30 +3808,36 @@ func (ds *DataSource) newExtraHandleSchemaCol() *expression.Column { } } -// addExtraPIDColumn add an extra PID column for partition table. +// AddExtraPhysTblIDColumn for partition table. // 'select ... for update' on a partition table need to know the partition ID // to construct the lock key, so this column is added to the chunk row. -func (ds *DataSource) addExtraPIDColumn(info *extraPIDInfo) { +// Also needed for checking against the sessions transaction buffer +func (ds *DataSource) AddExtraPhysTblIDColumn() *expression.Column { + // Avoid adding multiple times (should never happen!) + cols := ds.TblCols + for i := len(cols) - 1; i >= 0; i-- { + if cols[i].ID == model.ExtraPhysTblID { + return cols[i] + } + } pidCol := &expression.Column{ RetType: types.NewFieldType(mysql.TypeLonglong), UniqueID: ds.ctx.GetSessionVars().AllocPlanColumnID(), - ID: model.ExtraPidColID, - OrigName: fmt.Sprintf("%v.%v.%v", ds.DBName, ds.tableInfo.Name, model.ExtraPartitionIdName), + ID: model.ExtraPhysTblID, + OrigName: fmt.Sprintf("%v.%v.%v", ds.DBName, ds.tableInfo.Name, model.ExtraPhysTblIdName), } - ds.Columns = append(ds.Columns, model.NewExtraPartitionIDColInfo()) + ds.Columns = append(ds.Columns, model.NewExtraPhysTblIDColInfo()) schema := ds.Schema() schema.Append(pidCol) ds.names = append(ds.names, &types.FieldName{ DBName: ds.DBName, TblName: ds.TableInfo().Name, - ColName: model.ExtraPartitionIdName, - OrigColName: model.ExtraPartitionIdName, + ColName: model.ExtraPhysTblIdName, + OrigColName: model.ExtraPhysTblIdName, }) ds.TblCols = append(ds.TblCols, pidCol) - - info.Columns = append(info.Columns, pidCol) - info.TblIDs = append(info.TblIDs, ds.TableInfo().ID) + return pidCol } var ( @@ -3899,11 +3932,15 @@ func (b *PlanBuilder) tryBuildCTE(ctx context.Context, tn *ast.TableName, asName cte.cteClass = &CTEClass{IsDistinct: cte.isDistinct, seedPartLogicalPlan: cte.seedLP, recursivePartLogicalPlan: cte.recurLP, IDForStorage: cte.storageID, optFlag: cte.optFlag, HasLimit: hasLimit, LimitBeg: limitBeg, - LimitEnd: limitEnd} + LimitEnd: limitEnd, pushDownPredicates: make([]expression.Expression, 0), ColumnMap: make(map[string]*expression.Column)} } var p LogicalPlan lp := LogicalCTE{cteAsName: tn.Name, cte: cte.cteClass, seedStat: cte.seedStat}.Init(b.ctx, b.getSelectOffset()) + prevSchema := cte.seedLP.Schema().Clone() lp.SetSchema(getResultCTESchema(cte.seedLP.Schema(), b.ctx.GetSessionVars())) + for i, col := range lp.schema.Columns { + lp.cte.ColumnMap[string(col.HashCode(nil))] = prevSchema.Columns[i] + } p = lp p.SetOutputNames(cte.seedLP.OutputNames()) if len(asName.String()) > 0 { @@ -3967,6 +4004,15 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as return b.buildMemTable(ctx, dbName, tableInfo) } + tblName := *asName + if tblName.L == "" { + tblName = tn.Name + } + possiblePaths, err := getPossibleAccessPaths(b.ctx, b.TableHints(), tn.IndexHints, tbl, dbName, tblName, b.isForUpdateRead, b.is.SchemaMetaVersion()) + if err != nil { + return nil, err + } + if tableInfo.IsView() { if tn.TableSample != nil { return nil, expression.ErrInvalidTableSample.GenWithStackByArgs("Unsupported TABLESAMPLE in views") @@ -4006,14 +4052,6 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as return nil, ErrPartitionClauseOnNonpartitioned } - tblName := *asName - if tblName.L == "" { - tblName = tn.Name - } - possiblePaths, err := getPossibleAccessPaths(b.ctx, b.TableHints(), tn.IndexHints, tbl, dbName, tblName, b.isForUpdateRead, b.is.SchemaMetaVersion()) - if err != nil { - return nil, err - } // Skip storage engine check for CreateView. if b.capFlag&canExpandAST == 0 { possiblePaths, err = filterPathByIsolationRead(b.ctx, possiblePaths, tblName, dbName) @@ -4207,12 +4245,20 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as var result LogicalPlan = ds dirty := tableHasDirtyContent(b.ctx, tableInfo) - if dirty || tableInfo.TempTableType == model.TempTableLocal { + if dirty || tableInfo.TempTableType == model.TempTableLocal || tableInfo.TableCacheStatusType == model.TableCacheStatusEnable { us := LogicalUnionScan{handleCols: handleCols}.Init(b.ctx, b.getSelectOffset()) us.SetChildren(ds) + if tableInfo.Partition != nil && b.optFlag&flagPartitionProcessor == 0 { + // Adding ExtraPhysTblIDCol for UnionScan (transaction buffer handling) + // Not using old static prune mode + // Single TableReader for all partitions, needs the PhysTblID from storage + _ = ds.AddExtraPhysTblIDColumn() + } result = us } + // Adding ExtraPhysTblIDCol for SelectLock (SELECT FOR UPDATE) is done when building SelectLock + if sessionVars.StmtCtx.TblInfo2UnionScan == nil { sessionVars.StmtCtx.TblInfo2UnionScan = make(map[*model.TableInfo]bool) } @@ -4221,6 +4267,126 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as return result, nil } +// ExtractFD implements the LogicalPlan interface. +func (ds *DataSource) ExtractFD() *fd.FDSet { + // FD in datasource (leaf node) can be cached and reused. + // Once the all conditions are not equal to nil, built it again. + if ds.fdSet == nil || ds.allConds != nil { + fds := &fd.FDSet{HashCodeToUniqueID: make(map[string]int)} + allCols := fd.NewFastIntSet() + // should use the column's unique ID avoiding fdSet conflict. + for _, col := range ds.TblCols { + // todo: change it to int64 + allCols.Insert(int(col.UniqueID)) + } + // int pk doesn't store its index column in indexInfo. + if ds.tableInfo.PKIsHandle { + keyCols := fd.NewFastIntSet() + for _, col := range ds.TblCols { + if mysql.HasPriKeyFlag(col.RetType.Flag) { + keyCols.Insert(int(col.UniqueID)) + } + } + fds.AddStrictFunctionalDependency(keyCols, allCols) + fds.MakeNotNull(keyCols) + } + // we should check index valid while forUpdateRead, see detail in https://github.com/pingcap/tidb/pull/22152 + var ( + latestIndexes map[int64]*model.IndexInfo + changed bool + err error + ) + if ds.isForUpdateRead { + latestIndexes, changed, err = getLatestIndexInfo(ds.ctx, ds.table.Meta().ID, 0) + if err != nil { + ds.fdSet = fds + return fds + } + } + // other indices including common handle. + for _, idx := range ds.tableInfo.Indices { + keyCols := fd.NewFastIntSet() + allColIsNotNull := true + if ds.isForUpdateRead && changed { + latestIndex, ok := latestIndexes[idx.ID] + if !ok || latestIndex.State != model.StatePublic { + continue + } + } + if idx.State != model.StatePublic { + continue + } + for _, idxCol := range idx.Columns { + // Note: even the prefix column can also be the FD. For example: + // unique(char_column(10)), will also guarantee the prefix to be + // the unique which means the while column is unique too. + refCol := ds.tableInfo.Columns[idxCol.Offset] + if !mysql.HasNotNullFlag(refCol.Flag) { + allColIsNotNull = false + } + keyCols.Insert(int(ds.TblCols[idxCol.Offset].UniqueID)) + } + if idx.Primary { + fds.AddStrictFunctionalDependency(keyCols, allCols) + fds.MakeNotNull(keyCols) + } else if idx.Unique { + if allColIsNotNull { + fds.AddStrictFunctionalDependency(keyCols, allCols) + fds.MakeNotNull(keyCols) + } else { + // unique index: + // 1: normal value should be unique + // 2: null value can be multiple + // for this kind of lax to be strict, we need to make the determinant not-null. + fds.AddLaxFunctionalDependency(keyCols, allCols) + } + } + } + // handle the datasource conditions (maybe pushed down from upper layer OP) + if len(ds.allConds) != 0 { + // extract the not null attributes from selection conditions. + notnullColsUniqueIDs := extractNotNullFromConds(ds.allConds, ds) + + // extract the constant cols from selection conditions. + constUniqueIDs := extractConstantCols(ds.allConds, ds.SCtx(), fds) + + // extract equivalence cols. + equivUniqueIDs := extractEquivalenceCols(ds.allConds, ds.SCtx(), fds) + + // apply conditions to FD. + fds.MakeNotNull(notnullColsUniqueIDs) + fds.AddConstants(constUniqueIDs) + for _, equiv := range equivUniqueIDs { + fds.AddEquivalence(equiv[0], equiv[1]) + } + } + // build the dependency for generated columns. + // the generated column is sequentially dependent on the forward column. + // a int, b int as (a+1), c int as (b+1), here we can build the strict FD down: + // {a} -> {b}, {b} -> {c}, put the maintenance of the dependencies between generated columns to the FD graph. + notNullCols := fd.NewFastIntSet() + for _, col := range ds.TblCols { + if col.VirtualExpr != nil { + dependencies := fd.NewFastIntSet() + dependencies.Insert(int(col.UniqueID)) + // dig out just for 1 level. + directBaseCol := expression.ExtractColumns(col.VirtualExpr) + determinant := fd.NewFastIntSet() + for _, col := range directBaseCol { + determinant.Insert(int(col.UniqueID)) + } + fds.AddStrictFunctionalDependency(determinant, dependencies) + } + if mysql.HasNotNullFlag(col.RetType.Flag) { + notNullCols.Insert(int(col.UniqueID)) + } + } + fds.MakeNotNull(notNullCols) + ds.fdSet = fds + } + return ds.fdSet +} + func (b *PlanBuilder) timeRangeForSummaryTable() QueryTimeRange { const defaultSummaryDuration = 30 * time.Minute hints := b.TableHints() @@ -4380,7 +4546,9 @@ func (b *PlanBuilder) BuildDataSourceFromView(ctx context.Context, dbName model. if err != nil { if terror.ErrorNotEqual(err, ErrViewRecursive) && terror.ErrorNotEqual(err, ErrNoSuchTable) && - terror.ErrorNotEqual(err, ErrInternal) { + terror.ErrorNotEqual(err, ErrInternal) && + terror.ErrorNotEqual(err, ErrFieldNotInGroupBy) && + terror.ErrorNotEqual(err, ErrMixOfGroupFuncAndFields) { err = ErrViewInvalid.GenWithStackByArgs(dbName.O, tableInfo.Name.O) } return nil, err @@ -5167,10 +5335,10 @@ func (b *PlanBuilder) buildDelete(ctx context.Context, ds *ast.DeleteStmt) (Plan tn.DBInfo = tb.DBInfo tn.TableInfo = tb.TableInfo if tn.TableInfo.IsView() { - return nil, errors.Errorf("delete view %s is not supported now.", tn.Name.O) + return nil, errors.Errorf("delete view %s is not supported now", tn.Name.O) } if tn.TableInfo.IsSequence() { - return nil, errors.Errorf("delete sequence %s is not supported now.", tn.Name.O) + return nil, errors.Errorf("delete sequence %s is not supported now", tn.Name.O) } if sessionVars.User != nil { authErr = ErrTableaccessDenied.FastGenByArgs("DELETE", sessionVars.User.AuthUsername, sessionVars.User.AuthHostname, tb.Name.L) @@ -5186,10 +5354,10 @@ func (b *PlanBuilder) buildDelete(ctx context.Context, ds *ast.DeleteStmt) (Plan return nil, ErrNonUpdatableTable.GenWithStackByArgs(v.Name.O, "DELETE") } if v.TableInfo.IsView() { - return nil, errors.Errorf("delete view %s is not supported now.", v.Name.O) + return nil, errors.Errorf("delete view %s is not supported now", v.Name.O) } if v.TableInfo.IsSequence() { - return nil, errors.Errorf("delete sequence %s is not supported now.", v.Name.O) + return nil, errors.Errorf("delete sequence %s is not supported now", v.Name.O) } dbName := v.Schema.L if dbName == "" { @@ -6412,7 +6580,7 @@ func (b *PlanBuilder) adjustCTEPlanOutputName(p LogicalPlan, def *ast.CommonTabl } if len(def.ColNameList) > 0 { if len(def.ColNameList) != len(p.OutputNames()) { - return nil, ddl.ErrViewWrongList + return nil, dbterror.ErrViewWrongList } for i, n := range def.ColNameList { outPutNames[i].ColName = n diff --git a/planner/core/logical_plan_test.go b/planner/core/logical_plan_test.go index 795f906ca0886..789a1cda0b90e 100644 --- a/planner/core/logical_plan_test.go +++ b/planner/core/logical_plan_test.go @@ -1151,6 +1151,7 @@ func TestVisitInfo(t *testing.T) { {mysql.IndexPriv, "test", "", "", nil, false, "", false}, {mysql.CreateViewPriv, "test", "", "", nil, false, "", false}, {mysql.ShowViewPriv, "test", "", "", nil, false, "", false}, + {mysql.TriggerPriv, "test", "", "", nil, false, "", false}, }, }, { @@ -1225,6 +1226,7 @@ func TestVisitInfo(t *testing.T) { {mysql.IndexPriv, "test", "", "", nil, false, "", false}, {mysql.CreateViewPriv, "test", "", "", nil, false, "", false}, {mysql.ShowViewPriv, "test", "", "", nil, false, "", false}, + {mysql.TriggerPriv, "test", "", "", nil, false, "", false}, }, }, { diff --git a/planner/core/logical_plans.go b/planner/core/logical_plans.go index e7c5dde77c110..896f9b60edc71 100644 --- a/planner/core/logical_plans.go +++ b/planner/core/logical_plans.go @@ -20,17 +20,18 @@ import ( "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/auth" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" + fd "github.com/pingcap/tidb/planner/funcdep" "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/planner/util" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/ranger" "go.uber.org/zap" @@ -180,6 +181,78 @@ func (p *LogicalJoin) Shallow() *LogicalJoin { return join.Init(p.ctx, p.blockOffset) } +// ExtractFD implements the interface LogicalPlan. +func (p *LogicalJoin) ExtractFD() *fd.FDSet { + switch p.JoinType { + case InnerJoin: + return p.extractFDForInnerJoin(nil) + case SemiJoin: + return p.extractFDForSemiJoin(nil) + default: + return &fd.FDSet{HashCodeToUniqueID: make(map[string]int)} + } +} + +func (p *LogicalJoin) extractFDForSemiJoin(filtersFromApply []expression.Expression) *fd.FDSet { + // 1: since semi join will keep the part or all rows of the outer table, it's outer FD can be saved. + // 2: the un-projected column will be left for the upper layer projection or already be pruned from bottom up. + outerFD, _ := p.children[0].ExtractFD(), p.children[1].ExtractFD() + fds := outerFD + + eqCondSlice := expression.ScalarFuncs2Exprs(p.EqualConditions) + allConds := append(eqCondSlice, p.OtherConditions...) + allConds = append(allConds, filtersFromApply...) + notNullColsFromFilters := extractNotNullFromConds(allConds, p) + + constUniqueIDs := extractConstantCols(p.LeftConditions, p.SCtx(), fds) + + fds.MakeNotNull(notNullColsFromFilters) + fds.AddConstants(constUniqueIDs) + p.fdSet = fds + return fds +} + +func (p *LogicalJoin) extractFDForInnerJoin(filtersFromApply []expression.Expression) *fd.FDSet { + leftFD, rightFD := p.children[0].ExtractFD(), p.children[1].ExtractFD() + fds := leftFD + fds.MakeCartesianProduct(rightFD) + + eqCondSlice := expression.ScalarFuncs2Exprs(p.EqualConditions) + // some join eq conditions are stored in the OtherConditions. + allConds := append(eqCondSlice, p.OtherConditions...) + allConds = append(allConds, filtersFromApply...) + notNullColsFromFilters := extractNotNullFromConds(allConds, p) + + constUniqueIDs := extractConstantCols(allConds, p.SCtx(), fds) + + equivUniqueIDs := extractEquivalenceCols(allConds, p.SCtx(), fds) + + fds.MakeNotNull(notNullColsFromFilters) + fds.AddConstants(constUniqueIDs) + for _, equiv := range equivUniqueIDs { + fds.AddEquivalence(equiv[0], equiv[1]) + } + // merge the not-null-cols/registered-map from both side together. + fds.NotNullCols.UnionWith(rightFD.NotNullCols) + if fds.HashCodeToUniqueID == nil { + fds.HashCodeToUniqueID = rightFD.HashCodeToUniqueID + } else { + for k, v := range rightFD.HashCodeToUniqueID { + if _, ok := fds.HashCodeToUniqueID[k]; ok { + logutil.BgLogger().Warn("Error occurred while maintaining functional dependency") + continue + } + fds.HashCodeToUniqueID[k] = v + } + } + for i, ok := rightFD.GroupByCols.Next(0); ok; i, ok = rightFD.GroupByCols.Next(i + 1) { + fds.GroupByCols.Insert(i) + } + fds.HasAggBuilt = fds.HasAggBuilt || rightFD.HasAggBuilt + p.fdSet = fds + return fds +} + // GetJoinKeys extracts join keys(columns) from EqualConditions. It returns left join keys, right // join keys and an `isNullEQ` array which means the `joinKey[i]` is a `NullEQ` function. The `hasNullEQ` // means whether there is a `NullEQ` of a join key. @@ -314,6 +387,118 @@ type LogicalProjection struct { AvoidColumnEvaluator bool } +// ExtractFD implements the logical plan interface, extracting the FD from bottom up. +func (p *LogicalProjection) ExtractFD() *fd.FDSet { + // basically extract the children's fdSet. + fds := p.logicalSchemaProducer.ExtractFD() + // collect the output columns' unique ID. + outputColsUniqueIDs := fd.NewFastIntSet() + notnullColsUniqueIDs := fd.NewFastIntSet() + outputColsUniqueIDsArray := make([]int, 0, len(p.Schema().Columns)) + // here schema extended columns may contain expr, const and column allocated with uniqueID. + for _, one := range p.Schema().Columns { + outputColsUniqueIDs.Insert(int(one.UniqueID)) + outputColsUniqueIDsArray = append(outputColsUniqueIDsArray, int(one.UniqueID)) + } + // map the expr hashCode with its unique ID. + for idx, expr := range p.Exprs { + switch x := expr.(type) { + case *expression.Column: + continue + case *expression.CorrelatedColumn: + // t1(a,b,c), t2(m,n) + // select a, (select c from t2 where m=b) from t1; + // take c as constant column here. + continue + case *expression.Constant: + hashCode := string(x.HashCode(p.ctx.GetSessionVars().StmtCtx)) + var ( + ok bool + constantUniqueID int + ) + if constantUniqueID, ok = fds.IsHashCodeRegistered(hashCode); !ok { + constantUniqueID = outputColsUniqueIDsArray[idx] + fds.RegisterUniqueID(string(x.HashCode(p.ctx.GetSessionVars().StmtCtx)), constantUniqueID) + } + fds.AddConstants(fd.NewFastIntSet(constantUniqueID)) + case *expression.ScalarFunction: + // t1(a,b,c), t2(m,n) + // select a, (select c+n from t2 where m=b) from t1; + // expr(c+n) contains correlated column , but we can treat it as constant here. + hashCode := string(x.HashCode(p.ctx.GetSessionVars().StmtCtx)) + var ( + ok bool + scalarUniqueID int + ) + // If this function is not deterministic, we skip it since it not a stable value. + if expression.CheckNonDeterministic(x) { + if scalarUniqueID, ok = fds.IsHashCodeRegistered(hashCode); !ok { + fds.RegisterUniqueID(hashCode, scalarUniqueID) + } + continue + } + if scalarUniqueID, ok = fds.IsHashCodeRegistered(hashCode); !ok { + scalarUniqueID = outputColsUniqueIDsArray[idx] + fds.RegisterUniqueID(hashCode, scalarUniqueID) + } else { + // since the scalar's hash code has been registered before, the equivalence exists between the unique ID + // allocated by phase of building-projection-for-scalar and that of previous registered unique ID. + fds.AddEquivalence(fd.NewFastIntSet(scalarUniqueID), fd.NewFastIntSet(outputColsUniqueIDsArray[idx])) + } + determinants := fd.NewFastIntSet() + extractedColumns := expression.ExtractColumns(x) + extractedCorColumns := expression.ExtractCorColumns(x) + for _, one := range extractedColumns { + determinants.Insert(int(one.UniqueID)) + // the dependent columns in scalar function should be also considered as output columns as well. + outputColsUniqueIDs.Insert(int(one.UniqueID)) + } + for _, one := range extractedCorColumns { + determinants.Insert(int(one.UniqueID)) + // the dependent columns in scalar function should be also considered as output columns as well. + outputColsUniqueIDs.Insert(int(one.UniqueID)) + } + notnull := isNullRejected(p.ctx, p.schema, x) + if notnull || determinants.SubsetOf(fds.NotNullCols) { + notnullColsUniqueIDs.Insert(scalarUniqueID) + } + fds.AddStrictFunctionalDependency(determinants, fd.NewFastIntSet(scalarUniqueID)) + } + } + + // apply operator's characteristic's FD setting. + // since the distinct attribute is built as firstRow agg func, we don't need to think about it here. + // let the fds itself to trace the not null, because after the outer join, some not null column can be nullable. + fds.MakeNotNull(notnullColsUniqueIDs) + // select max(a) from t group by b, we should project both `a` & `b` to maintain the FD down here, even if select-fields only contain `a`. + fds.ProjectCols(outputColsUniqueIDs.Union(fds.GroupByCols)) + + if fds.GroupByCols.Only1Zero() { + // maxOneRow is delayed from agg's ExtractFD logic since some details listed in it. + projectionUniqueIDs := fd.NewFastIntSet() + for _, expr := range p.Exprs { + switch x := expr.(type) { + case *expression.Column: + projectionUniqueIDs.Insert(int(x.UniqueID)) + case *expression.ScalarFunction: + scalarUniqueID, ok := fds.IsHashCodeRegistered(string(hack.String(x.HashCode(p.SCtx().GetSessionVars().StmtCtx)))) + if !ok { + logutil.BgLogger().Warn("Error occurred while maintaining the functional dependency") + continue + } + projectionUniqueIDs.Insert(scalarUniqueID) + } + } + fds.MaxOneRow(projectionUniqueIDs) + } + // for select * from view (include agg), outer projection don't have to check select list with the inner group-by flag. + fds.HasAggBuilt = false + + // just trace it down in every operator for test checking. + p.fdSet = fds + return fds +} + // ExtractCorrelatedCols implements LogicalPlan interface. func (p *LogicalProjection) ExtractCorrelatedCols() []*expression.CorrelatedColumn { corCols := make([]*expression.CorrelatedColumn, 0, len(p.Exprs)) @@ -369,6 +554,129 @@ func (la *LogicalAggregation) HasOrderBy() bool { return false } +// ExtractFD implements the logical plan interface, extracting the FD from bottom up. +// 1: +// In most of the cases, using FDs to check the only_full_group_by problem should be done in the buildAggregation phase +// by extracting the bottom-up FDs graph from the `p` --- the sub plan tree that has already been built. +// +// 2: +// and this requires that some conditions push-down into the `p` like selection should be done before building aggregation, +// otherwise, 'a=1 and a can occur in the select lists of a group by' will be miss-checked because it doesn't be implied in the known FDs graph. +// +// 3: +// when a logical agg is built, it's schema columns indicates what the permitted-non-agg columns is. Therefore, we shouldn't +// depend on logicalAgg.ExtractFD() to finish the only_full_group_by checking problem rather than by 1 & 2. +func (la *LogicalAggregation) ExtractFD() *fd.FDSet { + // basically extract the children's fdSet. + fds := la.logicalSchemaProducer.ExtractFD() + // collect the output columns' unique ID. + outputColsUniqueIDs := fd.NewFastIntSet() + notnullColsUniqueIDs := fd.NewFastIntSet() + groupByColsUniqueIDs := fd.NewFastIntSet() + groupByColsOutputCols := fd.NewFastIntSet() + // Since the aggregation is build ahead of projection, the latter one will reuse the column with UniqueID allocated in aggregation + // via aggMapper, so we don't need unnecessarily maintain the mapping in the FDSet like expr did, just treating + // it as normal column. + for _, one := range la.Schema().Columns { + outputColsUniqueIDs.Insert(int(one.UniqueID)) + } + // For one like sum(a), we don't need to build functional dependency from a --> sum(a), cause it's only determined by the + // group-by-item (group-by-item --> sum(a)). + for _, expr := range la.GroupByItems { + switch x := expr.(type) { + case *expression.Column: + groupByColsUniqueIDs.Insert(int(x.UniqueID)) + case *expression.CorrelatedColumn: + // shouldn't be here, intercepted by plan builder as unknown column. + continue + case *expression.Constant: + // shouldn't be here, interpreted as pos param by plan builder. + continue + case *expression.ScalarFunction: + hashCode := string(x.HashCode(la.ctx.GetSessionVars().StmtCtx)) + var ( + ok bool + scalarUniqueID int + ) + if scalarUniqueID, ok = fds.IsHashCodeRegistered(hashCode); ok { + groupByColsUniqueIDs.Insert(scalarUniqueID) + } else { + // retrieve unique plan column id. 1: completely new one, allocating new unique id. 2: registered by projection earlier, using it. + if scalarUniqueID, ok = la.ctx.GetSessionVars().MapHashCode2UniqueID4ExtendedCol[hashCode]; !ok { + scalarUniqueID = int(la.ctx.GetSessionVars().AllocPlanColumnID()) + } + fds.RegisterUniqueID(hashCode, scalarUniqueID) + groupByColsUniqueIDs.Insert(scalarUniqueID) + } + determinants := fd.NewFastIntSet() + extractedColumns := expression.ExtractColumns(x) + extractedCorColumns := expression.ExtractCorColumns(x) + for _, one := range extractedColumns { + determinants.Insert(int(one.UniqueID)) + groupByColsOutputCols.Insert(int(one.UniqueID)) + } + for _, one := range extractedCorColumns { + determinants.Insert(int(one.UniqueID)) + groupByColsOutputCols.Insert(int(one.UniqueID)) + } + notnull := isNullRejected(la.ctx, la.schema, x) + if notnull || determinants.SubsetOf(fds.NotNullCols) { + notnullColsUniqueIDs.Insert(scalarUniqueID) + } + fds.AddStrictFunctionalDependency(determinants, fd.NewFastIntSet(scalarUniqueID)) + } + } + + // Some details: + // For now, select max(a) from t group by c, tidb will see `max(a)` as Max aggDes and `a,b,c` as firstRow aggDes, + // and keep them all in the schema columns before projection does the pruning. If we build the fake FD eg: {c} ~~> {b} + // here since we have seen b as firstRow aggDes, for the upper layer projection of `select max(a), b from t group by c`, + // it will take b as valid projection field of group by statement since it has existed in the FD with {c} ~~> {b}. + // + // and since any_value will NOT be pushed down to agg schema, which means every firstRow aggDes in the agg logical operator + // is meaningless to build the FD with. Let's only store the non-firstRow FD down: {group by items} ~~> {real aggDes} + realAggFuncUniqueID := fd.NewFastIntSet() + for i, aggDes := range la.AggFuncs { + if aggDes.Name != "firstrow" { + realAggFuncUniqueID.Insert(int(la.schema.Columns[i].UniqueID)) + } + } + + // apply operator's characteristic's FD setting. + if len(la.GroupByItems) == 0 { + // 1: as the details shown above, output cols (normal column seen as firstrow) of group by are not validated. + // we couldn't merge them as constant FD with origin constant FD together before projection done. + // fds.MaxOneRow(outputColsUniqueIDs.Union(groupByColsOutputCols)) + // + // 2: for the convenience of later judgement, when there is no group by items, we will store a FD: {0} -> {real aggDes} + // 0 unique id is only used for here. + groupByColsUniqueIDs.Insert(0) + for i, ok := realAggFuncUniqueID.Next(0); ok; i, ok = realAggFuncUniqueID.Next(i + 1) { + fds.AddStrictFunctionalDependency(groupByColsUniqueIDs, fd.NewFastIntSet(i)) + } + } else { + // eliminating input columns that are un-projected. + fds.ProjectCols(outputColsUniqueIDs.Union(groupByColsOutputCols).Union(groupByColsUniqueIDs)) + + // note: {a} --> {b,c} is not same with {a} --> {b} and {a} --> {c} + for i, ok := realAggFuncUniqueID.Next(0); ok; i, ok = realAggFuncUniqueID.Next(i + 1) { + // group by phrase always produce strict FD. + // 1: it can always distinguish and group the all-null/part-null group column rows. + // 2: the rows with all/part null group column are unique row after group operation. + // 3: there won't be two same group key with different agg values, so strict FD secured. + fds.AddStrictFunctionalDependency(groupByColsUniqueIDs, fd.NewFastIntSet(i)) + } + + // agg funcDes has been tag not null flag when building aggregation. + fds.MakeNotNull(notnullColsUniqueIDs) + } + fds.GroupByCols = groupByColsUniqueIDs + fds.HasAggBuilt = true + // just trace it down in every operator for test checking. + la.fdSet = fds + return fds +} + // CopyAggHints copies the aggHints from another LogicalAggregation. func (la *LogicalAggregation) CopyAggHints(agg *LogicalAggregation) { // TODO: Copy the hint may make the un-applicable hint throw the @@ -458,9 +766,155 @@ type LogicalSelection struct { // but after we converted to CNF(Conjunctive normal form), it can be // split into a list of AND conditions. Conditions []expression.Expression +} - // having selection can't be pushed down, because it must above the aggregation. - buildByHaving bool +func extractNotNullFromConds(Conditions []expression.Expression, p LogicalPlan) fd.FastIntSet { + // extract the column NOT NULL rejection characteristic from selection condition. + // CNF considered only, DNF doesn't have its meanings (cause that condition's eval may don't take effect) + // + // Take this case: select * from t where (a = 1) and (b is null): + // + // If we wanna where phrase eval to true, two pre-condition: {a=1} and {b is null} both need to be true. + // Hence, we assert that: + // + // 1: `a` must not be null since `NULL = 1` is evaluated as NULL. + // 2: `b` must be null since only `NULL is NULL` is evaluated as true. + // + // As a result, `a` will be extracted as not-null column to abound the FDSet. + notnullColsUniqueIDs := fd.NewFastIntSet() + for _, condition := range Conditions { + var cols []*expression.Column + cols = expression.ExtractColumnsFromExpressions(cols, []expression.Expression{condition}, nil) + if isNullRejected(p.SCtx(), p.Schema(), condition) { + for _, col := range cols { + notnullColsUniqueIDs.Insert(int(col.UniqueID)) + } + } + } + return notnullColsUniqueIDs +} + +func extractConstantCols(Conditions []expression.Expression, sctx sessionctx.Context, fds *fd.FDSet) fd.FastIntSet { + // extract constant cols + // eg: where a=1 and b is null and (1+c)=5. + // TODO: Some columns can only be determined to be constant from multiple constraints (e.g. x <= 1 AND x >= 1) + var ( + constObjs []expression.Expression + constUniqueIDs = fd.NewFastIntSet() + ) + constObjs = expression.ExtractConstantEqColumnsOrScalar(sctx, constObjs, Conditions) + for _, constObj := range constObjs { + switch x := constObj.(type) { + case *expression.Column: + constUniqueIDs.Insert(int(x.UniqueID)) + case *expression.ScalarFunction: + hashCode := string(x.HashCode(sctx.GetSessionVars().StmtCtx)) + if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { + constUniqueIDs.Insert(uniqueID) + } else { + scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) + fds.RegisterUniqueID(string(x.HashCode(sctx.GetSessionVars().StmtCtx)), scalarUniqueID) + constUniqueIDs.Insert(scalarUniqueID) + } + } + } + return constUniqueIDs +} + +func extractEquivalenceCols(Conditions []expression.Expression, sctx sessionctx.Context, fds *fd.FDSet) [][]fd.FastIntSet { + var equivObjsPair [][]expression.Expression + equivObjsPair = expression.ExtractEquivalenceColumns(equivObjsPair, Conditions) + equivUniqueIDs := make([][]fd.FastIntSet, 0, len(equivObjsPair)) + for _, equivObjPair := range equivObjsPair { + // lhs of equivalence. + var ( + lhsUniqueID int + rhsUniqueID int + ) + switch x := equivObjPair[0].(type) { + case *expression.Column: + lhsUniqueID = int(x.UniqueID) + case *expression.ScalarFunction: + hashCode := string(x.HashCode(sctx.GetSessionVars().StmtCtx)) + if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { + lhsUniqueID = uniqueID + } else { + scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) + fds.RegisterUniqueID(string(x.HashCode(sctx.GetSessionVars().StmtCtx)), scalarUniqueID) + lhsUniqueID = scalarUniqueID + } + } + // rhs of equivalence. + switch x := equivObjPair[1].(type) { + case *expression.Column: + rhsUniqueID = int(x.UniqueID) + case *expression.ScalarFunction: + hashCode := string(x.HashCode(sctx.GetSessionVars().StmtCtx)) + if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { + rhsUniqueID = uniqueID + } else { + scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) + fds.RegisterUniqueID(string(x.HashCode(sctx.GetSessionVars().StmtCtx)), scalarUniqueID) + rhsUniqueID = scalarUniqueID + } + } + equivUniqueIDs = append(equivUniqueIDs, []fd.FastIntSet{fd.NewFastIntSet(lhsUniqueID), fd.NewFastIntSet(rhsUniqueID)}) + } + return equivUniqueIDs +} + +// ExtractFD implements the LogicalPlan interface. +func (p *LogicalSelection) ExtractFD() *fd.FDSet { + // basically extract the children's fdSet. + fds := p.baseLogicalPlan.ExtractFD() + // collect the output columns' unique ID. + outputColsUniqueIDs := fd.NewFastIntSet() + notnullColsUniqueIDs := fd.NewFastIntSet() + // eg: select t2.a, count(t2.b) from t1 join t2 using (a) where t1.a = 1 + // join's schema will miss t2.a while join.full schema has. since selection + // itself doesn't contain schema, extracting schema should tell them apart. + var columns []*expression.Column + if join, ok := p.children[0].(*LogicalJoin); ok { + columns = join.fullSchema.Columns + } else { + columns = p.Schema().Columns + } + for _, one := range columns { + outputColsUniqueIDs.Insert(int(one.UniqueID)) + } + + // extract the not null attributes from selection conditions. + notnullColsUniqueIDs.UnionWith(extractNotNullFromConds(p.Conditions, p)) + + // extract the constant cols from selection conditions. + constUniqueIDs := extractConstantCols(p.Conditions, p.SCtx(), fds) + + // extract equivalence cols. + equivUniqueIDs := extractEquivalenceCols(p.Conditions, p.SCtx(), fds) + + // after left join, according to rule 3.3.3, it may create a lax FD from inner equivalence + // cols pointing to outer equivalence cols. eg: t left join t1 on t.a = t1.b, leading a + // lax FD from t1.b ~> t.a, this lax attribute is coming from supplied null value to all + // left rows, once there is a null-refusing predicate on the inner side on upper layer, this + // can be equivalence again. (the outer rows left are all coming from equal matching) + // + // why not just makeNotNull of them, because even a non-equiv-related inner col can also + // refuse supplied null values. + if fds.Rule333Equiv.InnerCols.Len() != 0 && notnullColsUniqueIDs.Intersects(fds.Rule333Equiv.InnerCols) { + // restore/re-strength FDs from rule 333 + fds.MakeRestoreRule333() + } + + // apply operator's characteristic's FD setting. + fds.MakeNotNull(notnullColsUniqueIDs) + fds.AddConstants(constUniqueIDs) + for _, equiv := range equivUniqueIDs { + fds.AddEquivalence(equiv[0], equiv[1]) + } + fds.ProjectCols(outputColsUniqueIDs) + // just trace it down in every operator for test checking. + p.fdSet = fds + return fds } // ExtractCorrelatedCols implements LogicalPlan interface. @@ -490,6 +944,40 @@ func (la *LogicalApply) ExtractCorrelatedCols() []*expression.CorrelatedColumn { return corCols } +// ExtractFD implements the LogicalPlan interface. +func (la *LogicalApply) ExtractFD() *fd.FDSet { + innerPlan := la.children[1] + // build the join correlated equal condition for apply join, this equal condition is used for deriving the transitive FD between outer and inner side. + correlatedCols := ExtractCorrelatedCols4LogicalPlan(innerPlan) + deduplicateCorrelatedCols := make(map[int64]*expression.CorrelatedColumn) + for _, cc := range correlatedCols { + if _, ok := deduplicateCorrelatedCols[cc.UniqueID]; !ok { + deduplicateCorrelatedCols[cc.UniqueID] = cc + } + } + eqCond := make([]expression.Expression, 0, 4) + // for case like select (select t1.a from t2) from t1. will be assigned with new UniqueID after sub query projection is built. + // we should distinguish them out, building the equivalence relationship from inner == outer in the apply-join for FD derivation. + for _, cc := range deduplicateCorrelatedCols { + // for every correlated column, find the connection with the inner newly built column. + for _, col := range innerPlan.Schema().Columns { + if cc.UniqueID == col.CorrelatedColUniqueID { + ccc := &cc.Column + cond := expression.NewFunctionInternal(la.ctx, ast.EQ, types.NewFieldType(mysql.TypeTiny), ccc, col) + eqCond = append(eqCond, cond.(*expression.ScalarFunction)) + } + } + } + switch la.JoinType { + case InnerJoin: + return la.extractFDForInnerJoin(eqCond) + case SemiJoin: + return la.extractFDForSemiJoin(eqCond) + default: + return &fd.FDSet{HashCodeToUniqueID: make(map[string]int)} + } +} + // LogicalMaxOneRow checks if a query returns no more than one row. type LogicalMaxOneRow struct { baseLogicalPlan @@ -533,9 +1021,6 @@ type LogicalUnionScan struct { conditions []expression.Expression handleCols HandleCols - - // cacheTable not nil means it's reading from cached table. - cacheTable kv.MemBuffer } // DataSource represents a tableScan without condition push down. @@ -1055,26 +1540,17 @@ type LogicalLimit struct { limitHints limitHintInfo } -// extraPIDInfo is used by SelectLock on partitioned table, the TableReader need -// to return the partition id column. -// Because SelectLock has to used that partition id to encode the lock key. -// the child of SelectLock may be Join, so that table can be multiple extra PID columns. -// fields are for each of the table, and TblIDs are the corresponding table IDs. -type extraPIDInfo struct { - Columns []*expression.Column - TblIDs []int64 -} - // LogicalLock represents a select lock plan. type LogicalLock struct { baseLogicalPlan - Lock *ast.SelectLockInfo - tblID2Handle map[int64][]HandleCols - partitionedTable []table.PartitionedTable - // extraPIDInfo is used when it works on partition table, the child executor - // need to return an extra partition ID column in the chunk row. - extraPIDInfo + Lock *ast.SelectLockInfo + tblID2Handle map[int64][]HandleCols + + // tblID2phyTblIDCol is used for partitioned tables, + // the child executor need to return an extra column containing + // the Physical Table ID (i.e. from which partition the row came from) + tblID2PhysTblIDCol map[int64]*expression.Column } // WindowFrame represents a window function frame. @@ -1301,6 +1777,9 @@ type CTEClass struct { LimitBeg uint64 LimitEnd uint64 IsInApply bool + // pushDownPredicates may be push-downed by different references. + pushDownPredicates []expression.Expression + ColumnMap map[string]*expression.Column } // LogicalCTE is for CTE. diff --git a/planner/core/main_test.go b/planner/core/main_test.go index ee34f2223adce..669de70e669e9 100644 --- a/planner/core/main_test.go +++ b/planner/core/main_test.go @@ -51,6 +51,7 @@ func TestMain(m *testing.M) { planSuiteUnexportedData = testDataMap["plan_suite_unexported"] opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/planner/core/memtable_predicate_extractor.go b/planner/core/memtable_predicate_extractor.go index 72ecd4520567f..3dd916e6f11d4 100644 --- a/planner/core/memtable_predicate_extractor.go +++ b/planner/core/memtable_predicate_extractor.go @@ -237,6 +237,7 @@ func (helper extractHelper) extractLikePatternCol( predicates []expression.Expression, extractColName string, toLower bool, + needLike2Regexp bool, ) ( remained []expression.Expression, patterns []string, @@ -263,13 +264,13 @@ func (helper extractHelper) extractLikePatternCol( // We use '|' to combine DNF regular expression: .*a.*|.*b.* // e.g: // SELECT * FROM t WHERE c LIKE '%a%' OR c LIKE '%b%' - if fn.FuncName.L == ast.LogicOr { - canBuildPattern, pattern = helper.extractOrLikePattern(fn, extractColName, extractCols) + if fn.FuncName.L == ast.LogicOr && !toLower { + canBuildPattern, pattern = helper.extractOrLikePattern(fn, extractColName, extractCols, needLike2Regexp) } else { - canBuildPattern, pattern = helper.extractLikePattern(fn, extractColName, extractCols) + canBuildPattern, pattern = helper.extractLikePattern(fn, extractColName, extractCols, needLike2Regexp) } if canBuildPattern && toLower { - pattern = "(?i)" + pattern + pattern = strings.ToLower(pattern) } if canBuildPattern { patterns = append(patterns, pattern) @@ -284,6 +285,7 @@ func (helper extractHelper) extractOrLikePattern( orFunc *expression.ScalarFunction, extractColName string, extractCols map[int64]*types.FieldName, + needLike2Regexp bool, ) ( ok bool, pattern string, @@ -300,7 +302,7 @@ func (helper extractHelper) extractOrLikePattern( return false, "" } - ok, partPattern := helper.extractLikePattern(fn, extractColName, extractCols) + ok, partPattern := helper.extractLikePattern(fn, extractColName, extractCols, needLike2Regexp) if !ok { return false, "" } @@ -313,6 +315,7 @@ func (helper extractHelper) extractLikePattern( fn *expression.ScalarFunction, extractColName string, extractCols map[int64]*types.FieldName, + needLike2Regexp bool, ) ( ok bool, pattern string, @@ -328,7 +331,10 @@ func (helper extractHelper) extractLikePattern( case ast.EQ: return true, "^" + regexp.QuoteMeta(datums[0].GetString()) + "$" case ast.Like: - return true, stringutil.CompileLike2Regexp(datums[0].GetString()) + if needLike2Regexp { + return true, stringutil.CompileLike2Regexp(datums[0].GetString()) + } + return true, datums[0].GetString() case ast.Regexp: return true, datums[0].GetString() default: @@ -682,7 +688,7 @@ func (e *ClusterLogTableExtractor) Extract( return nil } - remained, patterns := e.extractLikePatternCol(schema, names, remained, "message", false) + remained, patterns := e.extractLikePatternCol(schema, names, remained, "message", false, true) e.Patterns = patterns return remained } @@ -1506,9 +1512,9 @@ func (e *ColumnsTableExtractor) Extract(_ sessionctx.Context, if e.SkipRequest { return } - remained, tableSchemaPatterns := e.extractLikePatternCol(schema, names, remained, "table_schema", true) - remained, tableNamePatterns := e.extractLikePatternCol(schema, names, remained, "table_name", true) - remained, columnNamePatterns := e.extractLikePatternCol(schema, names, remained, "column_name", true) + remained, tableSchemaPatterns := e.extractLikePatternCol(schema, names, remained, "table_schema", true, false) + remained, tableNamePatterns := e.extractLikePatternCol(schema, names, remained, "table_name", true, false) + remained, columnNamePatterns := e.extractLikePatternCol(schema, names, remained, "column_name", true, false) e.ColumnName = columnName e.TableName = tableName diff --git a/planner/core/memtable_predicate_extractor_test.go b/planner/core/memtable_predicate_extractor_test.go index 40ab99e289111..83cb9b4225610 100644 --- a/planner/core/memtable_predicate_extractor_test.go +++ b/planner/core/memtable_predicate_extractor_test.go @@ -1598,23 +1598,23 @@ func TestColumns(t *testing.T) { }, { sql: `select * from information_schema.COLUMNS where table_name like 'T%';`, - tableNamePattern: []string{"(?i)T.*"}, + tableNamePattern: []string{"t%"}, }, { sql: `select * from information_schema.COLUMNS where column_name like 'T%';`, - columnNamePattern: []string{"(?i)T.*"}, + columnNamePattern: []string{"t%"}, }, { sql: `select * from information_schema.COLUMNS where column_name like 'i%';`, - columnNamePattern: []string{"(?i)i.*"}, + columnNamePattern: []string{"i%"}, }, { sql: `select * from information_schema.COLUMNS where column_name like 'abc%' or column_name like "def%";`, - columnNamePattern: []string{"(?i)abc.*|def.*"}, + columnNamePattern: []string{}, }, { sql: `select * from information_schema.COLUMNS where column_name like 'abc%' and column_name like "%def";`, - columnNamePattern: []string{"(?i)abc.*", "(?i).*def"}, + columnNamePattern: []string{"abc%", "%def"}, }, } parser := parser.New() @@ -1659,37 +1659,39 @@ func TestPredicateQuery(t *testing.T) { tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - tk.MustExec("create table t(id int, abclmn int);") + tk.MustExec("create table t(id int, abctime int,DATETIME_PRECISION int);") tk.MustExec("create table abclmn(a int);") tk.MustQuery("select TABLE_NAME from information_schema.columns where table_schema = 'test' and column_name like 'i%'").Check(testkit.Rows("t")) tk.MustQuery("select TABLE_NAME from information_schema.columns where table_schema = 'TEST' and column_name like 'I%'").Check(testkit.Rows("t")) tk.MustQuery("select TABLE_NAME from information_schema.columns where table_schema = 'TEST' and column_name like 'ID'").Check(testkit.Rows("t")) tk.MustQuery("select TABLE_NAME from information_schema.columns where table_schema = 'TEST' and column_name like 'id'").Check(testkit.Rows("t")) - tk.MustQuery("select column_name from information_schema.columns where table_schema = 'TEST' and (column_name like 'I%' or column_name like '%D')").Check(testkit.Rows("id")) - tk.MustQuery("select column_name from information_schema.columns where table_schema = 'TEST' and (column_name like 'abc%' and column_name like '%lmn')").Check(testkit.Rows("abclmn")) - tk.MustQuery("describe t").Check(testkit.Rows("id int(11) YES ", "abclmn int(11) YES ")) + tk.MustQuery("select column_name from information_schema.columns where table_schema = 'TEST' and (column_name like 'i%' or column_name like '%d')").Check(testkit.Rows("id")) + tk.MustQuery("select column_name from information_schema.columns where table_schema = 'TEST' and (column_name like 'abc%' and column_name like '%time')").Check(testkit.Rows("abctime")) + result := tk.MustQuery("select TABLE_NAME, column_name from information_schema.columns where table_schema = 'TEST' and column_name like '%time';") + require.Len(t, result.Rows(), 1) + tk.MustQuery("describe t").Check(testkit.Rows("id int(11) YES ", "abctime int(11) YES ", "DATETIME_PRECISION int(11) YES ")) tk.MustQuery("describe t id").Check(testkit.Rows("id int(11) YES ")) tk.MustQuery("describe t ID").Check(testkit.Rows("id int(11) YES ")) tk.MustGetErrCode("describe t 'I%'", errno.ErrParse) tk.MustGetErrCode("describe t I%", errno.ErrParse) - tk.MustQuery("show columns from t like 'abclmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns from t like 'ABCLMN'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns from t like 'abc%'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns from t like 'ABC%'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns from t like '%lmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns from t like '%LMN'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns in t like '%lmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns in t like '%LMN'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show fields in t like '%lmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show fields in t like '%LMN'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) + tk.MustQuery("show columns from t like 'abctime'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns from t like 'ABCTIME'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns from t like 'abc%'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns from t like 'ABC%'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns from t like '%ime'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns from t like '%IME'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns in t like '%ime'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns in t like '%IME'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show fields in t like '%ime'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show fields in t like '%IME'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) - tk.MustQuery("show columns from t where field like '%lmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns from t where field = 'abclmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show columns in t where field = 'abclmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show fields from t where field = 'abclmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("show fields in t where field = 'abclmn'").Check(testkit.RowsWithSep(",", "abclmn,int(11),YES,,,")) - tk.MustQuery("explain t").Check(testkit.Rows("id int(11) YES ", "abclmn int(11) YES ")) + tk.MustQuery("show columns from t where field like '%time'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns from t where field = 'abctime'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show columns in t where field = 'abctime'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show fields from t where field = 'abctime'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("show fields in t where field = 'abctime'").Check(testkit.RowsWithSep(",", "abctime,int(11),YES,,,")) + tk.MustQuery("explain t").Check(testkit.Rows("id int(11) YES ", "abctime int(11) YES ", "DATETIME_PRECISION int(11) YES ")) tk.MustGetErrCode("show columns from t like id", errno.ErrBadField) tk.MustGetErrCode("show columns from t like `id`", errno.ErrBadField) diff --git a/planner/core/optimizer.go b/planner/core/optimizer.go index 1131a3c7ba92d..2bec5a5c1298c 100644 --- a/planner/core/optimizer.go +++ b/planner/core/optimizer.go @@ -17,6 +17,7 @@ package core import ( "context" "math" + "sort" "github.com/pingcap/errors" "github.com/pingcap/tidb/config" @@ -297,10 +298,29 @@ func DoOptimize(ctx context.Context, sctx sessionctx.Context, flag uint64, logic } // refineCETrace will adjust the content of CETrace. -// Currently, it will (1) deduplicate trace records and (2) fill in the table name. +// Currently, it will (1) deduplicate trace records, (2) sort the trace records (to make it easier in the tests) and (3) fill in the table name. func refineCETrace(sctx sessionctx.Context) { stmtCtx := sctx.GetSessionVars().StmtCtx stmtCtx.OptimizerCETrace = tracing.DedupCETrace(stmtCtx.OptimizerCETrace) + sort.Slice(stmtCtx.OptimizerCETrace, func(i, j int) bool { + if stmtCtx.OptimizerCETrace[i] == nil && stmtCtx.OptimizerCETrace[j] != nil { + return true + } + if stmtCtx.OptimizerCETrace[i] == nil || stmtCtx.OptimizerCETrace[j] == nil { + return false + } + + if stmtCtx.OptimizerCETrace[i].TableID != stmtCtx.OptimizerCETrace[j].TableID { + return stmtCtx.OptimizerCETrace[i].TableID < stmtCtx.OptimizerCETrace[j].TableID + } + if stmtCtx.OptimizerCETrace[i].Type != stmtCtx.OptimizerCETrace[j].Type { + return stmtCtx.OptimizerCETrace[i].Type < stmtCtx.OptimizerCETrace[j].Type + } + if stmtCtx.OptimizerCETrace[i].Expr != stmtCtx.OptimizerCETrace[j].Expr { + return stmtCtx.OptimizerCETrace[i].Expr < stmtCtx.OptimizerCETrace[j].Expr + } + return stmtCtx.OptimizerCETrace[i].RowCount < stmtCtx.OptimizerCETrace[j].RowCount + }) traceRecords := stmtCtx.OptimizerCETrace is := sctx.GetInfoSchema().(infoschema.InfoSchema) for _, rec := range traceRecords { @@ -407,6 +427,11 @@ func enableParallelApply(sctx sessionctx.Context, plan PhysicalPlan) PhysicalPla return plan } +// LogicalOptimizeTest is just exported for test. +func LogicalOptimizeTest(ctx context.Context, flag uint64, logic LogicalPlan) (LogicalPlan, error) { + return logicalOptimize(ctx, flag, logic) +} + func logicalOptimize(ctx context.Context, flag uint64, logic LogicalPlan) (LogicalPlan, error) { opt := defaultLogicalOptimizeOption() vars := logic.SCtx().GetSessionVars() @@ -474,7 +499,7 @@ func physicalOptimize(logic LogicalPlan, planCounter *PlanCounterTp) (plan Physi return nil, 0, err } if *planCounter > 0 { - logic.SCtx().GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("The parameter of nth_plan() is out of range.")) + logic.SCtx().GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("The parameter of nth_plan() is out of range")) } if t.invalid() { return nil, 0, ErrInternal.GenWithStackByArgs("Can't find a proper physical plan for this query") diff --git a/planner/core/partition_pruner_test.go b/planner/core/partition_pruner_test.go index 6ecafac2532a6..ac4673efaa1ff 100644 --- a/planner/core/partition_pruner_test.go +++ b/planner/core/partition_pruner_test.go @@ -125,21 +125,127 @@ func TestRangeColumnPartitionPruningForIn(t *testing.T) { " └─Selection 20.00 cop[tikv] in(test_range_col_in.t2.a, -1, 1)", " └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p1 keep order:false, stats:pseudo")) - // for other types, the in-pruning shouldn't be working for safety tk.MustExec(`create table t3 (a varchar(10)) partition by range columns(a) ( partition p0 values less than ("aaa"), partition p1 values less than ("bbb"), partition p2 values less than ("ccc"))`) - tk.MustQuery(`explain format='brief' select a from t3 where a in ('aaa', 'aab')`).Check(testkit.Rows("PartitionUnion 60.00 root ", - "├─TableReader 20.00 root data:Selection", - "│ └─Selection 20.00 cop[tikv] in(test_range_col_in.t3.a, \"aaa\", \"aab\")", - "│ └─TableFullScan 10000.00 cop[tikv] table:t3, partition:p0 keep order:false, stats:pseudo", - "├─TableReader 20.00 root data:Selection", - "│ └─Selection 20.00 cop[tikv] in(test_range_col_in.t3.a, \"aaa\", \"aab\")", - "│ └─TableFullScan 10000.00 cop[tikv] table:t3, partition:p1 keep order:false, stats:pseudo", - "└─TableReader 20.00 root data:Selection", - " └─Selection 20.00 cop[tikv] in(test_range_col_in.t3.a, \"aaa\", \"aab\")", - " └─TableFullScan 10000.00 cop[tikv] table:t3, partition:p2 keep order:false, stats:pseudo")) + tk.MustQuery(`explain format='brief' select a from t3 where a in ('aaa', 'aab')`).Check(testkit.Rows( + `TableReader 20.00 root data:Selection`, + `└─Selection 20.00 cop[tikv] in(test_range_col_in.t3.a, "aaa", "aab")`, + ` └─TableFullScan 10000.00 cop[tikv] table:t3, partition:p1 keep order:false, stats:pseudo`)) + tk.MustQuery(`explain format='brief' select a from t3 where a in ('aaa', 'bu')`).Check(testkit.Rows( + `PartitionUnion 40.00 root `, + `├─TableReader 20.00 root data:Selection`, + `│ └─Selection 20.00 cop[tikv] in(test_range_col_in.t3.a, "aaa", "bu")`, + `│ └─TableFullScan 10000.00 cop[tikv] table:t3, partition:p1 keep order:false, stats:pseudo`, + `└─TableReader 20.00 root data:Selection`, + ` └─Selection 20.00 cop[tikv] in(test_range_col_in.t3.a, "aaa", "bu")`, + ` └─TableFullScan 10000.00 cop[tikv] table:t3, partition:p2 keep order:false, stats:pseudo`)) +} + +func TestRangeColumnPartitionPruningForInString(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("drop database if exists test_range_col_in_string") + tk.MustExec("create database test_range_col_in_string") + + tk.MustExec("use test_range_col_in_string") + tk.MustExec("set names utf8mb4 collate utf8mb4_bin") + tk.MustExec("set @@session.tidb_partition_prune_mode='static'") + + type testStruct struct { + sql string + partitions string + rows []string + } + + extractPartitions := func(res *testkit.Result) string { + planStrings := testdata.ConvertRowsToStrings(res.Rows()) + partitions := []string{} + for _, s := range planStrings { + parts := getFieldValue("partition:", s) + if parts != "" { + partitions = append(partitions, strings.Split(parts, ",")...) + } + } + return strings.Join(partitions, ",") + } + checkColumnStringPruningTests := func(tests []testStruct) { + modes := []string{"dynamic", "static"} + for _, mode := range modes { + tk.MustExec(`set @@tidb_partition_prune_mode = '` + mode + `'`) + for _, test := range tests { + explainResult := tk.MustQuery("explain format = 'brief' " + test.sql) + partitions := strings.ToLower(extractPartitions(explainResult)) + require.Equal(t, test.partitions, partitions, "Mode: %s sql: %s", mode, test.sql) + tk.MustQuery(test.sql).Sort().Check(testkit.Rows(test.rows...)) + } + } + } + tk.MustExec("create table t (a varchar(255) charset utf8mb4 collate utf8mb4_bin) partition by range columns(a)" + + `( partition pNull values less than (""),` + + `partition pAAAA values less than ("AAAA"),` + + `partition pCCC values less than ("CCC"),` + + `partition pShrimpsandwich values less than ("Räksmörgås"),` + + `partition paaa values less than ("aaa"),` + + `partition pSushi values less than ("🍣🍣🍣"),` + + `partition pMax values less than (MAXVALUE))`) + tk.MustExec(`insert into t values (NULL), ("a"), ("Räkmacka"), ("🍣 is life"), ("🍺 after work?"), ("🍺🍺🍺🍺🍺 for oktoberfest"),("AA"),("aa"),("AAA"),("aaa")`) + tests := []testStruct{ + // Lower case partition names due to issue#32719 + {sql: `select * from t where a IS NULL`, partitions: "pnull", rows: []string{""}}, + {sql: `select * from t where a = 'AA'`, partitions: "paaaa", rows: []string{"AA"}}, + {sql: `select * from t where a = 'AA' collate utf8mb4_general_ci`, partitions: "paaaa", rows: []string{"AA"}}, // Notice that the it not uses _bin collation for partition => 'aa' not found! #32749 + {sql: `select * from t where a = 'aa'`, partitions: "paaa", rows: []string{"aa"}}, + {sql: `select * from t where a = 'aa' collate utf8mb4_general_ci`, partitions: "paaaa", rows: []string{"AA"}}, // Notice that the it not uses _bin collation for partition => 'aa' not found! #32749 + {sql: `select * from t where a = 'AAA'`, partitions: "paaaa", rows: []string{"AAA"}}, + {sql: `select * from t where a = 'AB'`, partitions: "pccc", rows: []string{}}, + {sql: `select * from t where a = 'aB'`, partitions: "paaa", rows: []string{}}, + {sql: `select * from t where a = '🍣'`, partitions: "psushi", rows: []string{}}, + {sql: `select * from t where a in ('🍣 is life', "Räkmacka", "🍺🍺🍺🍺 after work?")`, partitions: "pshrimpsandwich,psushi,pmax", rows: []string{"Räkmacka", "🍣 is life"}}, + {sql: `select * from t where a in ('AAA', 'aa')`, partitions: "paaaa,paaa", rows: []string{"AAA", "aa"}}, + {sql: `select * from t where a in ('AAA' collate utf8mb4_general_ci, 'aa')`, partitions: "paaaa,paaa", rows: []string{"AA", "AAA", "aa"}}, // aaa missing due to #32749 + {sql: `select * from t where a in ('AAA', 'aa' collate utf8mb4_general_ci)`, partitions: "paaaa", rows: []string{"AA", "AAA"}}, // aa, aaa missing due to #32749 + } + checkColumnStringPruningTests(tests) + tk.MustExec(`set names utf8mb4 collate utf8mb4_general_ci`) + checkColumnStringPruningTests(tests) + tk.MustExec(`set names utf8mb4 collate utf8mb4_unicode_ci`) + checkColumnStringPruningTests(tests) + tk.MustExec("drop table t") + tk.MustExec("create table t (a varchar(255) charset utf8mb4 collate utf8mb4_general_ci) partition by range columns(a)" + + `( partition pNull values less than (""),` + + `partition paaa values less than ("aaa"),` + + `partition pAAAA values less than ("AAAA"),` + + `partition pCCC values less than ("CCC"),` + + `partition pShrimpsandwich values less than ("Räksmörgås"),` + + `partition pSushi values less than ("🍣🍣🍣"),` + + `partition pMax values less than (MAXVALUE))`) + tk.MustExec(`insert into t values (NULL), ("a"), ("Räkmacka"), ("🍣 is life"), ("🍺 after work?"), ("🍺🍺🍺🍺🍺 for oktoberfest"),("AA"),("aa"),("AAA"),("aaa")`) + + tests = []testStruct{ + // Lower case partition names due to issue#32719 + {sql: `select * from t where a IS NULL`, partitions: "pnull", rows: []string{""}}, + {sql: `select * from t where a = 'AA'`, partitions: "paaa", rows: []string{"AA", "aa"}}, + {sql: `select * from t where a = 'AA' collate utf8mb4_bin`, partitions: "paaa", rows: []string{"AA"}}, + {sql: `select * from t where a = 'AAA'`, partitions: "paaaa", rows: []string{"AAA", "aaa"}}, + {sql: `select * from t where a = 'AAA' collate utf8mb4_bin`, partitions: "paaa", rows: []string{}}, // Notice that the it uses _bin collation for partition => not found! #32749 + {sql: `select * from t where a = 'AB'`, partitions: "pccc", rows: []string{}}, + {sql: `select * from t where a = 'aB'`, partitions: "pccc", rows: []string{}}, + {sql: `select * from t where a = '🍣'`, partitions: "psushi", rows: []string{}}, + {sql: `select * from t where a in ('🍣 is life', "Räkmacka", "🍺🍺🍺🍺 after work?")`, partitions: "pshrimpsandwich,psushi,pmax", rows: []string{"Räkmacka", "🍣 is life"}}, + {sql: `select * from t where a in ('AA', 'aaa')`, partitions: "paaa,paaaa", rows: []string{"AA", "AAA", "aa", "aaa"}}, + {sql: `select * from t where a in ('AAA' collate utf8mb4_bin, 'aa')`, partitions: "paaa", rows: []string{"aa"}}, // AAA missing due to #32749, why is AA missing? + {sql: `select * from t where a in ('AAA', 'aa' collate utf8mb4_bin)`, partitions: "paaaa,psushi", rows: []string{"AAA"}}, // aa, aaa missing due to #32749 also all missing paaa + } + + tk.MustExec(`set names utf8mb4 collate utf8mb4_bin`) + checkColumnStringPruningTests(tests) + tk.MustExec(`set names utf8mb4 collate utf8mb4_general_ci`) + checkColumnStringPruningTests(tests) + tk.MustExec(`set names utf8mb4 collate utf8mb4_unicode_ci`) + checkColumnStringPruningTests(tests) } func TestListPartitionPruner(t *testing.T) { @@ -460,7 +566,7 @@ func TestIssue22898(t *testing.T) { tk.MustExec("CREATE TABLE NT_RP3763 (COL1 TINYINT(8) SIGNED COMMENT \"NUMERIC NO INDEX\" DEFAULT 41,COL2 VARCHAR(20),COL3 DATETIME,COL4 BIGINT,COL5 FLOAT) PARTITION BY RANGE (COL1 * COL3) (PARTITION P0 VALUES LESS THAN (0),PARTITION P1 VALUES LESS THAN (10),PARTITION P2 VALUES LESS THAN (20),PARTITION P3 VALUES LESS THAN (30),PARTITION P4 VALUES LESS THAN (40),PARTITION P5 VALUES LESS THAN (50),PARTITION PMX VALUES LESS THAN MAXVALUE);") tk.MustExec("insert into NT_RP3763 (COL1,COL2,COL3,COL4,COL5) values(-82,\"夐齏醕皆磹漋甓崘潮嵙燷渏艂朼洛炷鉢儝鱈肇\",\"5748\\-06\\-26\\ 20:48:49\",-3133527360541070260,-2.624880003397658e+38);") tk.MustExec("insert into NT_RP3763 (COL1,COL2,COL3,COL4,COL5) values(48,\"簖鹩筈匹眜赖泽騈爷詵赺玡婙Ɇ郝鮙廛賙疼舢\",\"7228\\-12\\-13\\ 02:59:54\",-6181009269190017937,2.7731105531290494e+38);") - tk.MustQuery("select * from `NT_RP3763` where `COL1` in (10, 48, -82);").Check(testkit.Rows("-82 夐齏醕皆磹漋甓崘潮嵙燷渏艂朼洛炷鉢儝鱈肇 5748-06-26 20:48:49 -3133527360541070260 -262488000000000000000000000000000000000", "48 簖鹩筈匹眜赖泽騈爷詵赺玡婙Ɇ郝鮙廛賙疼舢 7228-12-13 02:59:54 -6181009269190017937 277311060000000000000000000000000000000")) + tk.MustQuery("select * from `NT_RP3763` where `COL1` in (10, 48, -82);").Sort().Check(testkit.Rows("-82 夐齏醕皆磹漋甓崘潮嵙燷渏艂朼洛炷鉢儝鱈肇 5748-06-26 20:48:49 -3133527360541070260 -262488000000000000000000000000000000000", "48 簖鹩筈匹眜赖泽騈爷詵赺玡婙Ɇ郝鮙廛賙疼舢 7228-12-13 02:59:54 -6181009269190017937 277311060000000000000000000000000000000")) tk.MustQuery("select * from `NT_RP3763` where `COL1` in (48);").Check(testkit.Rows("48 簖鹩筈匹眜赖泽騈爷詵赺玡婙Ɇ郝鮙廛賙疼舢 7228-12-13 02:59:54 -6181009269190017937 277311060000000000000000000000000000000")) } @@ -590,3 +696,25 @@ func TestHashPartitionPruning(t *testing.T) { tk.MustExec("insert into t(col1, col3) values(0, 3522101843073676459);") tk.MustQuery("SELECT col1, COL3 FROM t WHERE COL1 IN (0,14158354938390,0) AND COL3 IN (3522101843073676459,-2846203247576845955,838395691793635638);").Check(testkit.Rows("0 3522101843073676459")) } + +func TestIssue32007(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database Issue32007") + tk.MustExec("USE Issue32007") + tk.MustExec("create table t1 (a int, b tinyint, primary key (a)) partition by range (a) (" + + "partition p0 values less than (5)," + + "partition p1 values less than (20)," + + "partition p2 values less than (30)," + + "partition p3 values less than (40)," + + "partition p4 values less than MAXVALUE)") + tk.MustExec("insert into t1 values (0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14), (15, 15), (20, 20), (21, 21), (22, 22), (23, 23), (24, 24), (25, 25), (30, 30), (31, 31), (32, 32), (33, 33), (34, 34), (35, 35), (36, 36), (40, 40), (50, 50), (80, 80), (90, 90), (100, 100)") + tk.MustExec("create table t3 (a int, b mediumint, primary key (a))") + tk.MustExec("insert into t3 values (0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14), (15, 15), (16, 16), (17, 17), (18, 18), (19, 19), (20, 20), (21, 21), (22, 22), (23, 23)") + + tk.MustExec("set @@tidb_partition_prune_mode='static'") + tk.MustQuery("select * from t3 where t3.a <> ALL (select t1.a from t1 partition (p0)) order by t3.a").Sort().Check(testkit.Rows("10 10", "11 11", "12 12", "13 13", "14 14", "15 15", "16 16", "17 17", "18 18", "19 19", "20 20", "21 21", "22 22", "23 23", "5 5", "6 6", "7 7", "8 8", "9 9")) + tk.MustExec("set @@tidb_partition_prune_mode='dynamic'") + tk.MustQuery("select * from t3 where t3.a <> ALL (select t1.a from t1 partition (p0)) order by t3.a").Sort().Check(testkit.Rows("10 10", "11 11", "12 12", "13 13", "14 14", "15 15", "16 16", "17 17", "18 18", "19 19", "20 20", "21 21", "22 22", "23 23", "5 5", "6 6", "7 7", "8 8", "9 9")) +} diff --git a/planner/core/pb_to_plan.go b/planner/core/pb_to_plan.go index 661ea3fb16f62..f59cbb1c2b8c2 100644 --- a/planner/core/pb_to_plan.go +++ b/planner/core/pb_to_plan.go @@ -79,7 +79,7 @@ func (b *PBPlanBuilder) pbToPhysicalPlan(e *tipb.Executor) (p PhysicalPlan, err p, err = b.pbToKill(e) default: // TODO: Support other types. - err = errors.Errorf("this exec type %v doesn't support yet.", e.GetTp()) + err = errors.Errorf("this exec type %v doesn't support yet", e.GetTp()) } return p, err } diff --git a/planner/core/physical_plans.go b/planner/core/physical_plans.go index 876e71415b75e..1af92ba75b59f 100644 --- a/planner/core/physical_plans.go +++ b/planner/core/physical_plans.go @@ -73,6 +73,30 @@ type tableScanAndPartitionInfo struct { partitionInfo PartitionInfo } +type readReqType uint8 + +const ( + // Cop means read from storage by cop request. + Cop readReqType = iota + // BatchCop means read from storage by BatchCop request, only used for TiFlash + BatchCop + // MPP means read from storage by MPP request, only used for TiFlash + MPP +) + +// Name returns the name of read request type. +func (r readReqType) Name() string { + switch r { + case BatchCop: + return "batchCop" + case MPP: + return "mpp" + default: + // return cop by default + return "cop" + } +} + // PhysicalTableReader is the table reader in tidb. type PhysicalTableReader struct { physicalSchemaProducer @@ -84,8 +108,9 @@ type PhysicalTableReader struct { // StoreType indicates table read from which type of store. StoreType kv.StoreType - // BatchCop = true means the cop task in the physical table reader will be executed in batch mode(use in TiFlash only) - BatchCop bool + // ReadReqType is the read request type for current physical table reader, there are 3 kinds of read request: Cop, + // BatchCop and MPP, currently, the latter two are only used in TiFlash + ReadReqType readReqType IsCommonHandle bool @@ -108,23 +133,36 @@ func (p *PhysicalTableReader) GetTablePlan() PhysicalPlan { return p.tablePlan } -// GetTableScan exports the tableScan that contained in tablePlan. -func (p *PhysicalTableReader) GetTableScan() *PhysicalTableScan { - curPlan := p.tablePlan - for { - chCnt := len(curPlan.Children()) - if chCnt == 0 { - return curPlan.(*PhysicalTableScan) - } else if chCnt == 1 { - curPlan = curPlan.Children()[0] - } else { - join, ok := curPlan.(*PhysicalHashJoin) - if !ok { - return nil - } - curPlan = join.children[1-join.globalChildIndex] +// GetTableScans exports the tableScan that contained in tablePlans. +func (p *PhysicalTableReader) GetTableScans() []*PhysicalTableScan { + tableScans := make([]*PhysicalTableScan, 0, 1) + for _, tablePlan := range p.TablePlans { + tableScan, ok := tablePlan.(*PhysicalTableScan) + if ok { + tableScans = append(tableScans, tableScan) } } + return tableScans +} + +// GetTableScan exports the tableScan that contained in tablePlans and return error when the count of table scan != 1. +func (p *PhysicalTableReader) GetTableScan() (*PhysicalTableScan, error) { + tableScans := p.GetTableScans() + if len(tableScans) != 1 { + return nil, errors.New("the count of table scan != 1") + } + return tableScans[0], nil +} + +// setMppOrBatchCopForTableScan set IsMPPOrBatchCop for all TableScan. +func setMppOrBatchCopForTableScan(curPlan PhysicalPlan) { + if ts, ok := curPlan.(*PhysicalTableScan); ok { + ts.IsMPPOrBatchCop = true + } + children := curPlan.Children() + for _, child := range children { + setMppOrBatchCopForTableScan(child) + } } // GetPhysicalTableReader returns PhysicalTableReader for logical TiKVSingleGather. @@ -160,7 +198,7 @@ func (p *PhysicalTableReader) Clone() (PhysicalPlan, error) { } cloned.physicalSchemaProducer = *base cloned.StoreType = p.StoreType - cloned.BatchCop = p.BatchCop + cloned.ReadReqType = p.ReadReqType cloned.IsCommonHandle = p.IsCommonHandle if cloned.tablePlan, err = p.tablePlan.Clone(); err != nil { return nil, err @@ -476,7 +514,7 @@ type PhysicalTableScan struct { StoreType kv.StoreType - IsGlobalRead bool + IsMPPOrBatchCop bool // Used for tiflash PartitionTableScan. // The table scan may be a partition, rather than a real table. // TODO: clean up this field. After we support dynamic partitioning, table scan @@ -770,9 +808,8 @@ type PhysicalHashJoin struct { UseOuterToBuild bool // on which store the join executes. - storeTp kv.StoreType - globalChildIndex int - mppShuffleJoin bool + storeTp kv.StoreType + mppShuffleJoin bool } // Clone implements PhysicalPlan interface. @@ -959,9 +996,8 @@ type PhysicalLock struct { Lock *ast.SelectLockInfo - TblID2Handle map[int64][]HandleCols - PartitionedTable []table.PartitionedTable - ExtraPIDInfo extraPIDInfo + TblID2Handle map[int64][]HandleCols + TblID2PhysTblIDCol map[int64]*expression.Column } // PhysicalLimit is the physical operator of Limit. @@ -1186,8 +1222,6 @@ type PhysicalUnionScan struct { Conditions []expression.Expression HandleCols HandleCols - - CacheTable kv.MemBuffer } // ExtractCorrelatedCols implements PhysicalPlan interface. diff --git a/planner/core/plan.go b/planner/core/plan.go index af3cac0c22cf9..44cb793862800 100644 --- a/planner/core/plan.go +++ b/planner/core/plan.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" + fd "github.com/pingcap/tidb/planner/funcdep" "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/planner/util" "github.com/pingcap/tidb/sessionctx" @@ -308,6 +309,9 @@ type LogicalPlan interface { // canPushToCop check if we might push this plan to a specific store. canPushToCop(store kv.StoreType) bool + + // ExtractFD derive the FDSet from the tree bottom up. + ExtractFD() *fd.FDSet } // PhysicalPlan is a tree of the physical operators. @@ -369,6 +373,23 @@ type baseLogicalPlan struct { self LogicalPlan maxOneRow bool children []LogicalPlan + // fdSet is a set of functional dependencies(FDs) which powers many optimizations, + // including eliminating unnecessary DISTINCT operators, simplifying ORDER BY columns, + // removing Max1Row operators, and mapping semi-joins to inner-joins. + // for now, it's hard to maintain in individual operator, build it from bottom up when using. + fdSet *fd.FDSet +} + +// ExtractFD return the children[0]'s fdSet if there are no adding/removing fd in this logic plan. +func (p *baseLogicalPlan) ExtractFD() *fd.FDSet { + if p.fdSet != nil { + return p.fdSet + } + fds := &fd.FDSet{HashCodeToUniqueID: make(map[string]int)} + for _, ch := range p.children { + fds.AddFrom(ch.ExtractFD()) + } + return fds } func (p *baseLogicalPlan) MaxOneRow() bool { diff --git a/planner/core/plan_test.go b/planner/core/plan_test.go index 2c9cbfabe4d0b..f3cdd2840622a 100644 --- a/planner/core/plan_test.go +++ b/planner/core/plan_test.go @@ -486,7 +486,7 @@ func TestNthPlanHint(t *testing.T) { tk.MustExec("explain select /*+nth_plan(4)*/ * from tt where a=1 and b=1;") tk.MustQuery("show warnings").Check(testkit.Rows( - "Warning 1105 The parameter of nth_plan() is out of range.")) + "Warning 1105 The parameter of nth_plan() is out of range")) // Test hints for nth_plan(x). tk.MustExec("drop table if exists t") @@ -500,11 +500,11 @@ func TestNthPlanHint(t *testing.T) { tk.MustExec("explain format='hint' select /*+ nth_plan(3) */ * from t where a=1 and b=1") tk.MustQuery("show warnings").Check(testkit.Rows( - "Warning 1105 The parameter of nth_plan() is out of range.")) + "Warning 1105 The parameter of nth_plan() is out of range")) tk.MustExec("explain format='hint' select /*+ nth_plan(500) */ * from t where a=1 and b=1") tk.MustQuery("show warnings").Check(testkit.Rows( - "Warning 1105 The parameter of nth_plan() is out of range.")) + "Warning 1105 The parameter of nth_plan() is out of range")) // Test warning for multiply hints. tk.MustQuery("explain format='hint' select /*+ nth_plan(1) nth_plan(2) */ * from t where a=1 and b=1").Check(testkit.Rows( @@ -529,10 +529,10 @@ func TestNthPlanHint(t *testing.T) { // Make sure nth_plan() doesn't affect separately executed subqueries by asserting there's only one warning. tk.MustExec("select /*+ nth_plan(1000) */ count(1) from t where (select count(1) from t, tt) > 1;") tk.MustQuery("show warnings").Check(testkit.Rows( - "Warning 1105 The parameter of nth_plan() is out of range.")) + "Warning 1105 The parameter of nth_plan() is out of range")) tk.MustExec("select /*+ nth_plan(1000) */ count(1) from t where exists (select count(1) from t, tt);") tk.MustQuery("show warnings").Check(testkit.Rows( - "Warning 1105 The parameter of nth_plan() is out of range.")) + "Warning 1105 The parameter of nth_plan() is out of range")) } func BenchmarkDecodePlan(b *testing.B) { diff --git a/planner/core/plan_to_pb.go b/planner/core/plan_to_pb.go index eb0db3cd97273..d4a5441045e69 100644 --- a/planner/core/plan_to_pb.go +++ b/planner/core/plan_to_pb.go @@ -16,7 +16,6 @@ package core import ( "github.com/pingcap/errors" - "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" "github.com/pingcap/tidb/kv" @@ -131,7 +130,7 @@ func (p *PhysicalProjection) ToPB(ctx sessionctx.Context, storeType kv.StoreType } executorID = p.ExplainID().String() } else { - return nil, errors.Errorf("The projection can only be pushed down to TiFlash now, not %s.", storeType.Name()) + return nil, errors.Errorf("The projection can only be pushed down to TiFlash now, not %s", storeType.Name()) } return &tipb.Executor{Tp: tipb.ExecType_TypeProjection, Projection: projExec, ExecutorId: &executorID}, nil } @@ -177,23 +176,15 @@ func (p *PhysicalLimit) ToPB(ctx sessionctx.Context, storeType kv.StoreType) (*t // ToPB implements PhysicalPlan ToPB interface. func (p *PhysicalTableScan) ToPB(ctx sessionctx.Context, storeType kv.StoreType) (*tipb.Executor, error) { + if storeType == kv.TiFlash && p.Table.GetPartitionInfo() != nil && p.IsMPPOrBatchCop && p.ctx.GetSessionVars().UseDynamicPartitionPrune() { + return p.partitionTableScanToPBForFlash(ctx) + } tsExec := tables.BuildTableScanFromInfos(p.Table, p.Columns) tsExec.Desc = p.Desc if p.isPartition { tsExec.TableId = p.physicalTableID } executorID := "" - if storeType == kv.TiFlash && p.IsGlobalRead { - tsExec.NextReadEngine = tipb.EngineType_TiFlash - splitedRanges, _ := distsql.SplitRangesAcrossInt64Boundary(p.Ranges, false, false, p.Table.IsCommonHandle) - ranges, err := distsql.TableHandleRangesToKVRanges(ctx.GetSessionVars().StmtCtx, []int64{tsExec.TableId}, p.Table.IsCommonHandle, splitedRanges, nil) - if err != nil { - return nil, err - } - for _, keyRange := range ranges { - tsExec.Ranges = append(tsExec.Ranges, tipb.KeyRange{Low: keyRange.StartKey, High: keyRange.EndKey}) - } - } if storeType == kv.TiFlash { executorID = p.ExplainID().String() } @@ -201,6 +192,14 @@ func (p *PhysicalTableScan) ToPB(ctx sessionctx.Context, storeType kv.StoreType) return &tipb.Executor{Tp: tipb.ExecType_TypeTableScan, TblScan: tsExec, ExecutorId: &executorID}, err } +func (p *PhysicalTableScan) partitionTableScanToPBForFlash(ctx sessionctx.Context) (*tipb.Executor, error) { + ptsExec := tables.BuildPartitionTableScanFromInfos(p.Table, p.Columns) + ptsExec.Desc = p.Desc + executorID := p.ExplainID().String() + err := SetPBColumnsDefaultValue(ctx, ptsExec.Columns, p.Columns) + return &tipb.Executor{Tp: tipb.ExecType_TypePartitionTableScan, PartitionTableScan: ptsExec, ExecutorId: &executorID}, err +} + // checkCoverIndex checks whether we can pass unique info to TiKV. We should push it if and only if the length of // range and index are equal. func checkCoverIndex(idx *model.IndexInfo, ranges []*ranger.Range) bool { @@ -324,6 +323,8 @@ func (p *PhysicalIndexScan) ToPB(ctx sessionctx.Context, _ kv.StoreType) (*tipb. for _, col := range p.schema.Columns { if col.ID == model.ExtraHandleID { columns = append(columns, model.NewExtraHandleColInfo()) + } else if col.ID == model.ExtraPhysTblID { + columns = append(columns, model.NewExtraPhysTblIDColInfo()) } else if col.ID == model.ExtraPidColID { columns = append(columns, model.NewExtraPartitionIDColInfo()) } else { diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index cf8cb52959f78..335a7b44340c6 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -24,9 +24,10 @@ import ( "strings" "time" + "github.com/cznic/mathutil" "github.com/pingcap/errors" + "github.com/pingcap/tidb/bindinfo" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" @@ -45,13 +46,16 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" + "github.com/pingcap/tidb/sessiontxn/staleread" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/table/temptable" "github.com/pingcap/tidb/types" driver "github.com/pingcap/tidb/types/parser_driver" util2 "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/hint" "github.com/pingcap/tidb/util/logutil" @@ -60,11 +64,7 @@ import ( "github.com/pingcap/tidb/util/sem" "github.com/pingcap/tidb/util/set" "github.com/pingcap/tidb/util/sqlexec" - "github.com/tikv/client-go/v2/oracle" "github.com/tikv/client-go/v2/tikv" - - "github.com/cznic/mathutil" - "github.com/pingcap/tidb/table/tables" "go.uber.org/zap" ) @@ -87,17 +87,16 @@ type indexNestedLoopJoinTables struct { type tableHintInfo struct { indexNestedLoopJoinTables - sortMergeJoinTables []hintTableInfo - broadcastJoinTables []hintTableInfo - broadcastJoinPreferredLocal []hintTableInfo - hashJoinTables []hintTableInfo - indexHintList []indexHintInfo - tiflashTables []hintTableInfo - tikvTables []hintTableInfo - aggHints aggHintInfo - indexMergeHintList []indexHintInfo - timeRangeHint ast.HintTimeRange - limitHints limitHintInfo + sortMergeJoinTables []hintTableInfo + broadcastJoinTables []hintTableInfo + hashJoinTables []hintTableInfo + indexHintList []indexHintInfo + tiflashTables []hintTableInfo + tikvTables []hintTableInfo + aggHints aggHintInfo + indexMergeHintList []indexHintInfo + timeRangeHint ast.HintTimeRange + limitHints limitHintInfo } type limitHintInfo struct { @@ -199,22 +198,6 @@ func tableNames2HintTableInfo(ctx sessionctx.Context, hintName string, hintTable return hintTableInfos } -// ifPreferAsLocalInBCJoin checks if there is a data source specified as local read by hint -func (info *tableHintInfo) ifPreferAsLocalInBCJoin(p LogicalPlan, blockOffset int) bool { - alias := extractTableAlias(p, blockOffset) - if alias != nil { - tableNames := make([]*hintTableInfo, 1) - tableNames[0] = alias - return info.matchTableName(tableNames, info.broadcastJoinPreferredLocal) - } - for _, c := range p.Children() { - if info.ifPreferAsLocalInBCJoin(c, blockOffset) { - return true - } - } - return false -} - func (info *tableHintInfo) ifPreferMergeJoin(tableNames ...*hintTableInfo) bool { return info.matchTableName(tableNames, info.sortMergeJoinTables) } @@ -740,6 +723,8 @@ func (b *PlanBuilder) Build(ctx context.Context, node ast.Node) (Plan, error) { return b.buildCreateBindPlan(x) case *ast.DropBindingStmt: return b.buildDropBindPlan(x) + case *ast.SetBindingStmt: + return b.buildSetBindingStatusPlan(x) case *ast.ChangeStmt: return b.buildChange(x) case *ast.SplitRegionStmt: @@ -787,8 +772,39 @@ func (b *PlanBuilder) buildDo(ctx context.Context, v *ast.DoStmt) (Plan, error) proj := LogicalProjection{Exprs: make([]expression.Expression, 0, len(v.Exprs))}.Init(b.ctx, b.getSelectOffset()) proj.names = make([]*types.FieldName, len(v.Exprs)) schema := expression.NewSchema(make([]*expression.Column, 0, len(v.Exprs))...) + + // Since do statement only contain expression list, and it may contain aggFunc, detecting to build the aggMapper firstly. + var ( + err error + aggFuncs []*ast.AggregateFuncExpr + totalMap map[*ast.AggregateFuncExpr]int + ) + hasAgg := b.detectAggInExprNode(v.Exprs) + needBuildAgg := hasAgg + if hasAgg { + if b.buildingRecursivePartForCTE { + return nil, ErrCTERecursiveForbidsAggregation.GenWithStackByArgs(b.genCTETableNameForError()) + } + + aggFuncs, totalMap = b.extractAggFuncsInExprs(v.Exprs) + + if len(aggFuncs) == 0 { + needBuildAgg = false + } + } + if needBuildAgg { + var aggIndexMap map[int]int + p, aggIndexMap, err = b.buildAggregation(ctx, p, aggFuncs, nil, nil) + if err != nil { + return nil, err + } + for agg, idx := range totalMap { + totalMap[agg] = aggIndexMap[idx] + } + } + for _, astExpr := range v.Exprs { - expr, np, err := b.rewrite(ctx, astExpr, p, nil, true) + expr, np, err := b.rewrite(ctx, astExpr, p, totalMap, true) if err != nil { return nil, err } @@ -862,6 +878,25 @@ func (b *PlanBuilder) buildDropBindPlan(v *ast.DropBindingStmt) (Plan, error) { return p, nil } +func (b *PlanBuilder) buildSetBindingStatusPlan(v *ast.SetBindingStmt) (Plan, error) { + p := &SQLBindPlan{ + SQLBindOp: OpSetBindingStatus, + NormdOrigSQL: parser.Normalize(utilparser.RestoreWithDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB, v.OriginNode.Text())), + Db: utilparser.GetDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB), + } + switch v.BindingStatusType { + case ast.BindingStatusTypeEnabled: + p.NewStatus = bindinfo.Enabled + case ast.BindingStatusTypeDisabled: + p.NewStatus = bindinfo.Disabled + } + if v.HintedNode != nil { + p.BindSQL = utilparser.RestoreWithDefaultDB(v.HintedNode, b.ctx.GetSessionVars().CurrentDB, v.HintedNode.Text()) + } + b.visitInfo = appendVisitInfo(b.visitInfo, mysql.SuperPriv, "", "", "", nil) + return p, nil +} + func checkHintedSQL(sql, charset, collation, db string) error { p := parser.New() hintsSet, _, warns, err := hint.ParseHintsSet(p, sql, charset, collation, db) @@ -907,6 +942,16 @@ func (b *PlanBuilder) buildCreateBindPlan(v *ast.CreateBindingStmt) (Plan, error return p, nil } +// detectAggInExprNode detects an aggregate function in its exprs. +func (b *PlanBuilder) detectAggInExprNode(exprs []ast.ExprNode) bool { + for _, expr := range exprs { + if ast.HasAggFlag(expr) { + return true + } + } + return false +} + // detectSelectAgg detects an aggregate function or GROUP BY clause. func (b *PlanBuilder) detectSelectAgg(sel *ast.SelectStmt) bool { if sel.GroupBy != nil { @@ -975,8 +1020,8 @@ func isPrimaryIndex(indexName model.CIStr) bool { return indexName.L == "primary" } -func genTiFlashPath(tblInfo *model.TableInfo, isGlobalRead bool) *util.AccessPath { - tiFlashPath := &util.AccessPath{StoreType: kv.TiFlash, IsTiFlashGlobalRead: isGlobalRead} +func genTiFlashPath(tblInfo *model.TableInfo) *util.AccessPath { + tiFlashPath := &util.AccessPath{StoreType: kv.TiFlash} fillContentForTablePath(tiFlashPath, tblInfo) return tiFlashPath } @@ -1044,8 +1089,7 @@ func getPossibleAccessPaths(ctx sessionctx.Context, tableHints *tableHintInfo, i } else if !tblInfo.TiFlashReplica.Available { ctx.GetSessionVars().RaiseWarningWhenMPPEnforced("MPP mode may be blocked because tiflash replicas of table `" + tblInfo.Name.O + "` not ready.") } else { - publicPaths = append(publicPaths, genTiFlashPath(tblInfo, false)) - publicPaths = append(publicPaths, genTiFlashPath(tblInfo, true)) + publicPaths = append(publicPaths, genTiFlashPath(tblInfo)) } optimizerUseInvisibleIndexes := ctx.GetSessionVars().OptimizerUseInvisibleIndexes @@ -1226,50 +1270,40 @@ func removeTiflashDuringStaleRead(paths []*util.AccessPath) []*util.AccessPath { } func (b *PlanBuilder) buildSelectLock(src LogicalPlan, lock *ast.SelectLockInfo) (*LogicalLock, error) { - selectLock := LogicalLock{ - Lock: lock, - tblID2Handle: b.handleHelper.tailMap(), - partitionedTable: b.partitionedTable, - }.Init(b.ctx) - selectLock.SetChildren(src) - + var tblID2PhysTblIDCol map[int64]*expression.Column if len(b.partitionedTable) > 0 { + tblID2PhysTblIDCol = make(map[int64]*expression.Column) // If a chunk row is read from a partitioned table, which partition the row // comes from is unknown. With the existence of Join, the situation could be // even worse: SelectLock have to know the `pid` to construct the lock key. - // To solve the problem, an extra `pid` column is add to the schema, and the + // To solve the problem, an extra `pid` column is added to the schema, and the // DataSource need to return the `pid` information in the chunk row. - err := addExtraPIDColumnToDataSource(src, &selectLock.extraPIDInfo) - if err != nil { - return nil, err - } - // TODO: Dynamic partition mode does not support adding extra pid column to the data source. - // (Because one table reader can read from multiple partitions, which partition a chunk row comes from is unknown) - // So we have to use the old "rewrite to union" way here, set `flagPartitionProcessor` flag for that. - b.optFlag = b.optFlag | flagPartitionProcessor + // For dynamic prune mode, it is filled in from the tableID in the key by storage. + // For static prune mode it is also filled in from the tableID in the key by storage. + // since it would otherwise be lost in the PartitionUnion executor. + setExtraPhysTblIDColsOnDataSource(src, tblID2PhysTblIDCol) } + selectLock := LogicalLock{ + Lock: lock, + tblID2Handle: b.handleHelper.tailMap(), + tblID2PhysTblIDCol: tblID2PhysTblIDCol, + }.Init(b.ctx) + selectLock.SetChildren(src) return selectLock, nil } -func addExtraPIDColumnToDataSource(p LogicalPlan, info *extraPIDInfo) error { - switch raw := p.(type) { +func setExtraPhysTblIDColsOnDataSource(p LogicalPlan, tblID2PhysTblIDCol map[int64]*expression.Column) { + switch ds := p.(type) { case *DataSource: - // Fix issue 26250, do not add extra pid column to normal table. - if raw.tableInfo.GetPartitionInfo() == nil { - return nil + if ds.tableInfo.GetPartitionInfo() == nil { + return } - raw.addExtraPIDColumn(info) - return nil + tblID2PhysTblIDCol[ds.tableInfo.ID] = ds.AddExtraPhysTblIDColumn() default: - var err error for _, child := range p.Children() { - err = addExtraPIDColumnToDataSource(child, info) - if err != nil { - return err - } + setExtraPhysTblIDColsOnDataSource(child, tblID2PhysTblIDCol) } } - return nil } func (b *PlanBuilder) buildPrepare(x *ast.PrepareStmt) Plan { @@ -1787,7 +1821,7 @@ func GetPhysicalIDsAndPartitionNames(tblInfo *model.TableInfo, partitionNames [] pi := tblInfo.GetPartitionInfo() if pi == nil { if len(partitionNames) != 0 { - return nil, nil, errors.Trace(ddl.ErrPartitionMgmtOnNonpartitioned) + return nil, nil, errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } return []int64{tblInfo.ID}, []string{""}, nil } @@ -1898,7 +1932,7 @@ func (b *PlanBuilder) getPredicateColumns(tbl *ast.TableName, cols *calcOnceMap) return nil, err } if len(colList) == 0 { - b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("No predicate column has been collected yet for table %s.%s so all columns are analyzed.", tbl.Schema.L, tbl.Name.L)) + b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("No predicate column has been collected yet for table %s.%s so all columns are analyzed", tbl.Schema.L, tbl.Name.L)) for _, colInfo := range tblInfo.Columns { cols.data[colInfo.ID] = struct{}{} } @@ -1935,7 +1969,7 @@ func (b *PlanBuilder) getFullAnalyzeColumnsInfo( warning bool, ) ([]*model.ColumnInfo, []*model.ColumnInfo, error) { if mustAllColumns && warning && (columnChoice == model.PredicateColumns || columnChoice == model.ColumnList) { - b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("Table %s.%s has version 1 statistics so all the columns must be analyzed to overwrite the current statistics.", tbl.Schema.L, tbl.Name.L)) + b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("Table %s.%s has version 1 statistics so all the columns must be analyzed to overwrite the current statistics", tbl.Schema.L, tbl.Name.L)) } colSet2colList := func(colSet map[int64]struct{}) []*model.ColumnInfo { colList := make([]*model.ColumnInfo, 0, len(colSet)) @@ -1992,7 +2026,7 @@ func (b *PlanBuilder) getFullAnalyzeColumnsInfo( missingNames = append(missingNames, col.Name.O) } } - b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("Columns %s are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats.", strings.Join(missingNames, ","))) + b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("Columns %s are missing in ANALYZE but their stats are needed for calculating stats for indexes/primary key/extended stats", strings.Join(missingNames, ","))) } } for colID := range mustAnalyzed { @@ -2269,10 +2303,10 @@ func (b *PlanBuilder) buildAnalyzeTable(as *ast.AnalyzeTableStmt, opts map[ast.A usePersistedOptions := variable.PersistAnalyzeOptions.Load() for _, tbl := range as.TableNames { if tbl.TableInfo.IsView() { - return nil, errors.Errorf("analyze view %s is not supported now.", tbl.Name.O) + return nil, errors.Errorf("analyze view %s is not supported now", tbl.Name.O) } if tbl.TableInfo.IsSequence() { - return nil, errors.Errorf("analyze sequence %s is not supported now.", tbl.Name.O) + return nil, errors.Errorf("analyze sequence %s is not supported now", tbl.Name.O) } idxInfo, colInfo := getColsInfo(tbl) physicalIDs, names, err := GetPhysicalIDsAndPartitionNames(tbl.TableInfo, as.PartitionNames) @@ -2371,7 +2405,7 @@ func (b *PlanBuilder) buildAnalyzeIndex(as *ast.AnalyzeTableStmt, opts map[ast.A versionIsSame := statsHandle.CheckAnalyzeVersion(tblInfo, physicalIDs, &version) if !versionIsSame { if b.ctx.GetSessionVars().EnableFastAnalyze { - return nil, errors.Errorf("Fast analyze hasn't reached General Availability and only support analyze version 1 currently. But the existing statistics of the table is not version 1.") + return nil, errors.Errorf("Fast analyze hasn't reached General Availability and only support analyze version 1 currently. But the existing statistics of the table is not version 1") } b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("The analyze version from the session is not compatible with the existing statistics of the table. Use the existing version instead")) } @@ -2436,7 +2470,7 @@ func (b *PlanBuilder) buildAnalyzeAllIndex(as *ast.AnalyzeTableStmt, opts map[as versionIsSame := statsHandle.CheckAnalyzeVersion(tblInfo, physicalIDs, &version) if !versionIsSame { if b.ctx.GetSessionVars().EnableFastAnalyze { - return nil, errors.Errorf("Fast analyze hasn't reached General Availability and only support analyze version 1 currently. But the existing statistics of the table is not version 1.") + return nil, errors.Errorf("Fast analyze hasn't reached General Availability and only support analyze version 1 currently. But the existing statistics of the table is not version 1") } b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("The analyze version from the session is not compatible with the existing statistics of the table. Use the existing version instead")) } @@ -2548,7 +2582,7 @@ func parseAnalyzeOptionsV2(opts []ast.AnalyzeOpt) (map[ast.AnalyzeOptionType]uin } } if sampleNum > 0 && sampleRate > 0 { - return nil, errors.Errorf("You can only either set the value of the sample num or set the value of the sample rate. Don't set both of them.") + return nil, errors.Errorf("You can only either set the value of the sample num or set the value of the sample rate. Don't set both of them") } return optMap, nil } @@ -2613,7 +2647,7 @@ func handleAnalyzeOptions(opts []ast.AnalyzeOpt, statsVer int) (map[ast.AnalyzeO } } if sampleNum > 0 && sampleRate > 0 { - return nil, errors.Errorf("You can only either set the value of the sample num or set the value of the sample rate. Don't set both of them.") + return nil, errors.Errorf("You can only either set the value of the sample num or set the value of the sample rate. Don't set both of them") } if optMap[ast.AnalyzeOptCMSketchWidth]*optMap[ast.AnalyzeOptCMSketchDepth] > CMSketchSizeLimit { return nil, errors.Errorf("cm sketch size(depth * width) should not larger than %d", CMSketchSizeLimit) @@ -2624,11 +2658,11 @@ func handleAnalyzeOptions(opts []ast.AnalyzeOpt, statsVer int) (map[ast.AnalyzeO func (b *PlanBuilder) buildAnalyze(as *ast.AnalyzeTableStmt) (Plan, error) { // If enable fast analyze, the storage must be tikv.Storage. if _, isTikvStorage := b.ctx.GetStore().(tikv.Storage); !isTikvStorage && b.ctx.GetSessionVars().EnableFastAnalyze { - return nil, errors.Errorf("Only support fast analyze in tikv storage.") + return nil, errors.Errorf("Only support fast analyze in tikv storage") } statsVersion := b.ctx.GetSessionVars().AnalyzeVersion if b.ctx.GetSessionVars().EnableFastAnalyze && statsVersion >= statistics.Version2 { - return nil, errors.Errorf("Fast analyze hasn't reached General Availability and only support analyze version 1 currently.") + return nil, errors.Errorf("Fast analyze hasn't reached General Availability and only support analyze version 1 currently") } for _, tbl := range as.TableNames { user := b.ctx.GetSessionVars().User @@ -2950,6 +2984,14 @@ func (b *PlanBuilder) buildShow(ctx context.Context, show *ast.ShowStmt) (Plan, return nil, ErrOptOnTemporaryTable.GenWithStackByArgs("show table regions") } } + if show.Tp == ast.ShowVariables { + var extractor ShowVariablesExtractor + if extractor.Extract(show) { + p.Extractor = &extractor + // Avoid building Selection. + show.Pattern = nil + } + } schema, names := buildShowSchema(show, isView, isSequence) p.SetSchema(schema) p.names = names @@ -3059,6 +3101,10 @@ func (b *PlanBuilder) buildSimple(ctx context.Context, node ast.StmtNode) (Plan, b.visitInfo = appendDynamicVisitInfo(b.visitInfo, "CONNECTION_ADMIN", false, err) b.visitInfo = appendVisitInfoIsRestrictedUser(b.visitInfo, b.ctx, &auth.UserIdentity{Username: pi.User, Hostname: pi.Host}, "RESTRICTED_CONNECTION_ADMIN") } + } else if raw.ConnectionID == util2.GetAutoAnalyzeProcID() { + // Only the users with SUPER or CONNECTION_ADMIN privilege can kill auto analyze. + err := ErrSpecificAccessDenied.GenWithStackByArgs("SUPER or CONNECTION_ADMIN") + b.visitInfo = appendDynamicVisitInfo(b.visitInfo, "CONNECTION_ADMIN", false, err) } } case *ast.UseStmt: @@ -3080,7 +3126,7 @@ func (b *PlanBuilder) buildSimple(ctx context.Context, node ast.StmtNode) (Plan, case *ast.BeginStmt: readTS := b.ctx.GetSessionVars().TxnReadTS.PeakTxnReadTS() if raw.AsOf != nil { - startTS, err := calculateTsExpr(b.ctx, raw.AsOf) + startTS, err := staleread.CalculateAsOfTsExpr(b.ctx, raw.AsOf) if err != nil { return nil, err } @@ -3097,36 +3143,6 @@ func (b *PlanBuilder) buildSimple(ctx context.Context, node ast.StmtNode) (Plan, return p, nil } -// calculateTsExpr calculates the TsExpr of AsOfClause to get a StartTS. -func calculateTsExpr(sctx sessionctx.Context, asOfClause *ast.AsOfClause) (uint64, error) { - tsVal, err := evalAstExpr(sctx, asOfClause.TsExpr) - if err != nil { - return 0, err - } - toTypeTimestamp := types.NewFieldType(mysql.TypeTimestamp) - // We need at least the millionsecond here, so set fsp to 3. - toTypeTimestamp.Decimal = 3 - tsTimestamp, err := tsVal.ConvertTo(sctx.GetSessionVars().StmtCtx, toTypeTimestamp) - if err != nil { - return 0, err - } - tsTime, err := tsTimestamp.GetMysqlTime().GoTime(sctx.GetSessionVars().Location()) - if err != nil { - return 0, err - } - return oracle.GoTimeToTS(tsTime), nil -} - -func calculateTsWithReadStaleness(sctx sessionctx.Context, readStaleness time.Duration) (uint64, error) { - nowVal, err := expression.GetStmtTimestamp(sctx) - if err != nil { - return 0, err - } - tsVal := nowVal.Add(readStaleness) - minTsVal := expression.GetMinSafeTime(sctx) - return oracle.GoTimeToTS(expression.CalAppropriateTime(tsVal, nowVal, minTsVal)), nil -} - func collectVisitInfoFromRevokeStmt(sctx sessionctx.Context, vi []visitInfo, stmt *ast.RevokeStmt) ([]visitInfo, error) { // To use REVOKE, you must have the GRANT OPTION privilege, // and you must have the privileges that you are granting. @@ -3313,16 +3329,16 @@ func (b *PlanBuilder) buildInsert(ctx context.Context, insert *ast.InsertStmt) ( } tableInfo := tn.TableInfo if tableInfo.IsView() { - err := errors.Errorf("insert into view %s is not supported now.", tableInfo.Name.O) + err := errors.Errorf("insert into view %s is not supported now", tableInfo.Name.O) if insert.IsReplace { - err = errors.Errorf("replace into view %s is not supported now.", tableInfo.Name.O) + err = errors.Errorf("replace into view %s is not supported now", tableInfo.Name.O) } return nil, err } if tableInfo.IsSequence() { - err := errors.Errorf("insert into sequence %s is not supported now.", tableInfo.Name.O) + err := errors.Errorf("insert into sequence %s is not supported now", tableInfo.Name.O) if insert.IsReplace { - err = errors.Errorf("replace into sequence %s is not supported now.", tableInfo.Name.O) + err = errors.Errorf("replace into sequence %s is not supported now", tableInfo.Name.O) } return nil, err } @@ -3333,7 +3349,7 @@ func (b *PlanBuilder) buildInsert(ctx context.Context, insert *ast.InsertStmt) ( } tableInPlan, ok := b.is.TableByID(tableInfo.ID) if !ok { - return nil, errors.Errorf("Can't get table %s.", tableInfo.Name.O) + return nil, errors.Errorf("Can't get table %s", tableInfo.Name.O) } insertPlan := Insert{ @@ -4260,7 +4276,7 @@ func (b *PlanBuilder) buildDDL(ctx context.Context, node ast.DDLNode) (Plan, err } } if len(v.Cols) != schema.Len() { - return nil, ddl.ErrViewWrongList + return nil, dbterror.ErrViewWrongList } if b.ctx.GetSessionVars().User != nil { authErr = ErrTableaccessDenied.GenWithStackByArgs("CREATE VIEW", b.ctx.GetSessionVars().User.AuthUsername, @@ -4704,6 +4720,9 @@ func buildShowSchema(s *ast.ShowStmt, isView bool, isSequence bool) (schema *exp case ast.ShowBindings: names = []string{"Original_sql", "Bind_sql", "Default_db", "Status", "Create_time", "Update_time", "Charset", "Collation", "Source"} ftypes = []byte{mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeDatetime, mysql.TypeDatetime, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar} + case ast.ShowBindingCacheStatus: + names = []string{"bindings_in_cache", "bindings_in_table", "memory_usage", "memory_quota"} + ftypes = []byte{mysql.TypeLonglong, mysql.TypeLonglong, mysql.TypeVarchar, mysql.TypeVarchar} case ast.ShowAnalyzeStatus: names = []string{"Table_schema", "Table_name", "Partition_name", "Job_info", "Processed_rows", "Start_time", "End_time", "State"} ftypes = []byte{mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeVarchar, mysql.TypeLonglong, mysql.TypeDatetime, mysql.TypeDatetime, mysql.TypeVarchar} diff --git a/planner/core/planbuilder_test.go b/planner/core/planbuilder_test.go index f7b501a334258..5ff2084947170 100644 --- a/planner/core/planbuilder_test.go +++ b/planner/core/planbuilder_test.go @@ -85,8 +85,7 @@ func TestGetPathByIndexName(t *testing.T) { accessPath := []*util.AccessPath{ {IsIntHandlePath: true}, {Index: &model.IndexInfo{Name: model.NewCIStr("idx")}}, - genTiFlashPath(tblInfo, false), - genTiFlashPath(tblInfo, true), + genTiFlashPath(tblInfo), } path := getPathByIndexName(accessPath, model.NewCIStr("idx"), tblInfo) diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index dafd04997e1dc..bc0dec4ce0aa1 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -117,7 +117,7 @@ func (p *PointGetPlan) ToPB(ctx sessionctx.Context, _ kv.StoreType) (*tipb.Execu // Clone implements PhysicalPlan interface. func (p *PointGetPlan) Clone() (PhysicalPlan, error) { - return nil, errors.Errorf("%T doesn't support cloning.", p) + return nil, errors.Errorf("%T doesn't support cloning", p) } // ExplainInfo implements Plan interface. @@ -149,7 +149,7 @@ func (p *PointGetPlan) AccessObject(normalized bool) string { buffer.WriteString(", partition:?") } else { buffer.WriteString(", partition:") - buffer.WriteString(p.PartitionInfo.Name.L) + buffer.WriteString(p.PartitionInfo.Name.O) } } if p.IndexInfo != nil { @@ -1561,6 +1561,11 @@ func buildPointDeletePlan(ctx sessionctx.Context, pointPlan PhysicalPlan, dbName } func findCol(tbl *model.TableInfo, colName *ast.ColumnName) *model.ColumnInfo { + if colName.Name.L == model.ExtraHandleName.L && !tbl.PKIsHandle { + colInfo := model.NewExtraHandleColInfo() + colInfo.Offset = len(tbl.Columns) - 1 + return colInfo + } for _, col := range tbl.Columns { if col.Name.L == colName.Name.L { return col diff --git a/planner/core/point_get_plan_test.go b/planner/core/point_get_plan_test.go index ba83f6f0d384c..d39e95b767ab8 100644 --- a/planner/core/point_get_plan_test.go +++ b/planner/core/point_get_plan_test.go @@ -184,6 +184,37 @@ func TestPointGetForUpdate(t *testing.T) { tk.MustExec("rollback") } +func TestGetExtraColumn(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec(`CREATE TABLE t ( + a int(11) DEFAULT NULL, + b int(11) DEFAULT NULL, + UNIQUE KEY idx (a))`) + tk.MustQuery(`explain format='brief' select t.*, _tidb_rowid from t where a = 1`).Check(testkit.Rows("Point_Get 1.00 root table:t, index:idx(a) ")) + tk.MustQuery(`explain format='brief' select t.*, _tidb_rowid, date_format(a, "") from t where a = 1`).Check(testkit.Rows( + `Projection 1.00 root test.t.a, test.t.b, test.t._tidb_rowid, date_format(cast(test.t.a, datetime BINARY), )->Column#4`, + `└─Point_Get 1.00 root table:t, index:idx(a) `)) + tk.MustExec(`begin`) // in transaction + tk.MustExec(`insert into t values (1, 1)`) + tk.MustQuery(`explain format='brief' select t.*, _tidb_rowid from t where a = 1`).Check(testkit.Rows(`Point_Get 1.00 root table:t, index:idx(a) `)) + tk.MustExec(`commit`) + tk.MustQuery(`explain format='brief' select count(_tidb_rowid) from t where a=1`).Check(testkit.Rows( + `StreamAgg 1.00 root funcs:count(test.t._tidb_rowid)->Column#4`, + `└─Point_Get 1.00 root table:t, index:idx(a) `)) + tk.MustQuery(`explain format='brief' select *, date_format(b, "") from t where a =1 for update`).Check(testkit.Rows( + `Projection 1.00 root test.t.a, test.t.b, date_format(cast(test.t.b, datetime BINARY), )->Column#4`, + `└─SelectLock 1.00 root for update 0`, + ` └─Point_Get 1.00 root table:t, index:idx(a) `)) + + // if the PK is handled + tk.MustExec(`create table t1 (pk int, a int, b int, primary key(pk), unique key(a))`) + err := tk.ExecToErr(`explain format='brief' select t1.*, _tidb_rowid from t1 where a = 1`) + require.EqualError(t, err, `[planner:1054]Unknown column '_tidb_rowid' in 'field list'`) +} + func TestPointGetForUpdateWithSubquery(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() diff --git a/planner/core/prepare_test.go b/planner/core/prepare_test.go index 4247e78f5b171..e88ce13c3827d 100644 --- a/planner/core/prepare_test.go +++ b/planner/core/prepare_test.go @@ -42,6 +42,80 @@ import ( "github.com/stretchr/testify/require" ) +func TestPreparePointGetWithDML(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + orgEnable := core.PreparedPlanCacheEnabled() + defer core.SetPreparedPlanCache(orgEnable) + core.SetPreparedPlanCache(true) + se, err := session.CreateSession4TestWithOpt(store, &session.Opt{ + PreparedPlanCache: kvcache.NewSimpleLRUCache(100, 0.1, math.MaxUint64), + }) + require.NoError(t, err) + tk := testkit.NewTestKitWithSession(t, store, se) + + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t`) + tk.MustExec(`create table t(a int, unique key(a))`) + tk.MustExec(`insert into t values(1), (2)`) + + // txn1 left a cached plan + tk.MustExec(`begin`) + tk.MustExec(`prepare stmt from 'update t set a = ? where a = ?'`) + tk.MustExec(`set @a=1`) + tk.MustExec(`execute stmt using @a, @a`) + tk.MustExec(`commit`) + + // txn2 can reuse the cached plan generated by txn1 directly + tk.MustExec(`begin`) + tk.MustExec(`prepare stmt from 'update t set a = ? where a = ?'`) + tk.MustExec(`set @a=2`) + tk.MustExec(`execute stmt using @a, @a`) // can reuse the cached plan directly + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + tk.MustExec(`rollback`) +} + +func TestPrepareIgnoreCloseStmtCmd(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + orgEnable := core.PreparedPlanCacheEnabled() + defer core.SetPreparedPlanCache(orgEnable) + core.SetPreparedPlanCache(true) + se, err := session.CreateSession4TestWithOpt(store, &session.Opt{ + PreparedPlanCache: kvcache.NewSimpleLRUCache(100, 0.1, math.MaxUint64), + }) + require.NoError(t, err) + tk := testkit.NewTestKitWithSession(t, store, se) + + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t`) + tk.MustExec(`create table t(a int, unique key(a))`) + + // disable the ignore-stmt-cmd + tk.MustExec(`set @@tidb_ignore_prepared_cache_close_stmt=0`) + tk.MustQuery(`select @@tidb_ignore_prepared_cache_close_stmt`).Check(testkit.Rows("0")) + tk.MustExec(`prepare stmt from 'select * from t'`) + tk.MustQuery(`execute stmt`).Check(testkit.Rows()) + tk.MustQuery(`execute stmt`).Check(testkit.Rows()) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + tk.MustExec(`deallocate prepare stmt`) // close/deallocate this stmt + tk.MustExec(`prepare stmt from 'select * from t'`) + tk.MustQuery(`execute stmt`).Check(testkit.Rows()) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) // cannot reuse last plan since it is closed + + // enable the ignore-stmt-cmd + tk.MustExec(`set tidb_ignore_prepared_cache_close_stmt=1`) + tk.MustQuery(`select @@tidb_ignore_prepared_cache_close_stmt`).Check(testkit.Rows("1")) + tk.MustExec(`prepare stmt from 'select * from t'`) + tk.MustQuery(`execute stmt`).Check(testkit.Rows()) + tk.MustQuery(`execute stmt`).Check(testkit.Rows()) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + tk.MustExec(`deallocate prepare stmt`) // close/deallocate this stmt + tk.MustExec(`prepare stmt from 'select * from t'`) + tk.MustQuery(`execute stmt`).Check(testkit.Rows()) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) // can reuse last plan since last close-cmd was ignored +} + func TestRandomFlushPlanCache(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -990,8 +1064,8 @@ func TestPrepareCacheForPartition(t *testing.T) { tk := testkit.NewTestKitWithSession(t, store, se) tk.MustExec("use test") - for _, val := range []string{string(variable.Static), string(variable.Dynamic)} { - tk.MustExec("set @@tidb_partition_prune_mode = '" + val + "'") + for _, pruneMode := range []string{string(variable.Static), string(variable.Dynamic)} { + tk.MustExec("set @@tidb_partition_prune_mode = '" + pruneMode + "'") // Test for PointGet and IndexRead. tk.MustExec("drop table if exists t_index_read") tk.MustExec("create table t_index_read (id int, k int, c varchar(10), primary key (id, k)) partition by hash(id+k) partitions 10") @@ -1092,6 +1166,22 @@ func TestPrepareCacheForPartition(t *testing.T) { tk.MustQuery("execute stmt8 using @id").Check(testkit.Rows("hij")) tk.MustExec("set @id=100") tk.MustQuery("execute stmt8 using @id").Check(testkit.Rows()) + + // https://github.com/pingcap/tidb/issues/33031 + tk.MustExec(`drop table if exists Issue33031`) + tk.MustExec(`CREATE TABLE Issue33031 (COL1 int(16) DEFAULT '29' COMMENT 'NUMERIC UNIQUE INDEX', COL2 bigint(20) DEFAULT NULL, UNIQUE KEY UK_COL1 (COL1)) PARTITION BY RANGE (COL1) (PARTITION P0 VALUES LESS THAN (0))`) + tk.MustExec(`insert into Issue33031 values(-5, 7)`) + tk.MustExec(`prepare stmt from 'select *,? from Issue33031 where col2 < ? and col1 in (?, ?)'`) + tk.MustExec(`set @a=111, @b=1, @c=2, @d=22`) + tk.MustQuery(`execute stmt using @d,@a,@b,@c`).Check(testkit.Rows()) + tk.MustExec(`set @a=112, @b=-2, @c=-5, @d=33`) + tk.MustQuery(`execute stmt using @d,@a,@b,@c`).Check(testkit.Rows("-5 7 33")) + if pruneMode == string(variable.Dynamic) { + // When the temporary disabling of prepared plan cache for dynamic partition prune mode is disabled, change this to 1! + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + } else { + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + } } } @@ -1307,6 +1397,60 @@ func TestPlanCacheUnionScan(t *testing.T) { require.Equal(t, float64(6), cnt) } +func TestPlanCacheSwitchDB(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + orgEnable := core.PreparedPlanCacheEnabled() + defer core.SetPreparedPlanCache(orgEnable) + core.SetPreparedPlanCache(true) + se, err := session.CreateSession4TestWithOpt(store, &session.Opt{ + PreparedPlanCache: kvcache.NewSimpleLRUCache(100, 0.1, math.MaxUint64), + }) + require.NoError(t, err) + tk := testkit.NewTestKitWithSession(t, store, se) + + // create a table in test + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists t`) + tk.MustExec(`create table t(a int)`) + tk.MustExec(`insert into t values (-1)`) + tk.MustExec(`prepare stmt from 'select * from t'`) + + // DB is not specified + se2, err := session.CreateSession4TestWithOpt(store, &session.Opt{ + PreparedPlanCache: kvcache.NewSimpleLRUCache(100, 0.1, math.MaxUint64), + }) + require.NoError(t, err) + tk2 := testkit.NewTestKitWithSession(t, store, se2) + require.Equal(t, tk2.ExecToErr(`prepare stmt from 'select * from t'`).Error(), "[planner:1046]No database selected") + require.Equal(t, tk2.ExecToErr(`prepare stmt from 'select * from test.t'`), nil) + + // switch to a new DB + tk.MustExec(`drop database if exists plan_cache`) + tk.MustExec(`create database plan_cache`) + tk.MustExec(`use plan_cache`) + tk.MustExec(`create table t(a int)`) + tk.MustExec(`insert into t values (1)`) + tk.MustQuery(`execute stmt`).Check(testkit.Rows("-1")) // read test.t + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + tk.MustQuery(`execute stmt`).Check(testkit.Rows("-1")) // read test.t + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + + // prepare again + tk.MustExec(`prepare stmt from 'select * from t'`) + tk.MustQuery(`execute stmt`).Check(testkit.Rows("1")) // read plan_cache.t + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + tk.MustQuery(`execute stmt`).Check(testkit.Rows("1")) // read plan_cache.t + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + + // specify DB in the query + tk.MustExec(`prepare stmt from 'select * from test.t'`) + tk.MustQuery(`execute stmt`).Check(testkit.Rows("-1")) // read test.t + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + tk.MustQuery(`execute stmt`).Check(testkit.Rows("-1")) // read test.t + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) +} + func TestPlanCacheHitInfo(t *testing.T) { t.Skip("unstable, skip it and fix it before 20210705") store, clean := testkit.CreateMockStore(t) @@ -1454,6 +1598,30 @@ func TestIssue28254(t *testing.T) { tk.MustQuery("execute stmt using @a").Check(testkit.Rows("1")) } +func TestIssue33067(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + orgEnable := core.PreparedPlanCacheEnabled() + defer core.SetPreparedPlanCache(orgEnable) + core.SetPreparedPlanCache(true) + se, err := session.CreateSession4TestWithOpt(store, &session.Opt{ + PreparedPlanCache: kvcache.NewSimpleLRUCache(100, 0.1, math.MaxUint64), + }) + require.NoError(t, err) + tk := testkit.NewTestKitWithSession(t, store, se) + + tk.MustExec("use test") + tk.MustExec("DROP TABLE IF EXISTS `t`") + tk.MustExec("CREATE TABLE `t` (`COL1` char(20) DEFAULT NULL, `COL2` bit(16),`COL3` date, KEY `U_M_COL5` (`COL3`,`COL2`))") + tk.MustExec("insert into t values ('','>d','9901-06-17')") + tk.MustExec("prepare stmt from 'select * from t where col1 is not null and col2 not in (?, ?, ?) and col3 in (?, ?, ?)'") + tk.MustExec(`set @a=-21188, @b=26824, @c=31855, @d="5597-1-4", @e="5755-12-6", @f="1253-7-12"`) + tk.MustQuery(`execute stmt using @a,@b,@c,@d,@e,@f`).Check(testkit.Rows()) + tk.MustExec(`set @a=-5360, @b=-11715, @c=9399, @d="9213-09-13", @e="4705-12-24", @f="9901-06-17"`) + tk.MustQuery(`execute stmt using @a,@b,@c,@d,@e,@f`).Check(testkit.Rows(" >d 9901-06-17")) + tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("0")) +} + func TestIssue29486(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -1657,9 +1825,29 @@ func TestIssue29565(t *testing.T) { tk.MustQuery(`execute stmt using @a,@b`).Check(testkit.Rows()) tk.MustExec(`set @a=5408499810319315618, @b=-9999999999999999999999999999999999999999999999999999999`) tk.MustQuery(`execute stmt using @a,@b`).Check(testkit.Rows("-9999999999999999999999999999999999999999999999999999999")) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + tk.MustExec(`set @a=7309027171262036496, @b=-9798213896406520625`) + tk.MustQuery(`execute stmt using @a,@b`).Check(testkit.Rows()) tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) } +func TestIssue31730(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + orgEnable := core.PreparedPlanCacheEnabled() + defer core.SetPreparedPlanCache(orgEnable) + core.SetPreparedPlanCache(true) + tk := testkit.NewTestKit(t, store) + + tk.MustExec(`use test`) + tk.MustExec(`drop table if exists PK_S_MULTI_37;`) + tk.MustExec(`CREATE TABLE PK_S_MULTI_37 (COL1 decimal(55,0) NOT NULL, COL2 decimal(55,0) NOT NULL,PRIMARY KEY (COL1, COL2) /*T![clustered_index] NONCLUSTERED */) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;`) + tk.MustExec(`insert into PK_S_MULTI_37 values(-9999999999999999999999999999999999999999999999, 1);`) + tk.MustExec(`prepare stmt from 'SELECT SUM(COL1+?), col2 FROM PK_S_MULTI_37 GROUP BY col2';`) + tk.MustExec(`set @a=1;`) + tk.MustQuery(`execute stmt using @a`).Check(testkit.Rows("-9999999999999999999999999999999999999999999998 1")) +} + func TestIssue28828(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -1756,9 +1944,9 @@ func TestIssue18066(t *testing.T) { testkit.Rows("2 1 1")) tk.MustExec("prepare stmt from 'select * from t'") tk.MustQuery("execute stmt").Check(testkit.Rows()) - tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("0")) - tk.MustQuery("select EXEC_COUNT,plan_cache_hits, plan_in_cache from information_schema.statements_summary where digest_text='select * from `t`'").Check( - testkit.Rows("3 1 0")) + tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("1")) + tk.MustQuery("select EXEC_COUNT, plan_cache_hits, plan_in_cache from information_schema.statements_summary where digest_text='select * from `t`'").Check( + testkit.Rows("3 2 1")) } func TestPrepareForGroupByMultiItems(t *testing.T) { @@ -1943,7 +2131,7 @@ func TestPlanCachePointGetAndTableDual(t *testing.T) { tk.MustExec("set @a3=1,@b3=3") // TableReader plan would be built, we should cache it. tk.MustQuery("execute s3 using @b3,@a3").Check(testkit.Rows()) - tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("0")) + tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("1")) tk.MustQuery("execute s3 using @a3,@b3").Check(testkit.Rows("2 1 1")) tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("1")) @@ -1959,7 +2147,7 @@ func TestPlanCachePointGetAndTableDual(t *testing.T) { tk.MustExec("prepare s4 from 'select /*+ use_index_merge(t4) */ * from t4 where (c1 >= ? and c1 <= ?) or c2 > 1'") tk.MustExec("set @a4=1,@b4=3") tk.MustQuery("execute s4 using @b4,@a4").Check(testkit.Rows()) - tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("0")) + tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("1")) tk.MustQuery("execute s4 using @a4,@b4").Check(testkit.Rows("2 1 1")) tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("1")) } @@ -2240,6 +2428,7 @@ func TestPartitionTable(t *testing.T) { tk.MustExec("create database test_plan_cache") tk.MustExec("use test_plan_cache") tk.MustExec("set @@tidb_partition_prune_mode = 'dynamic'") + tk.MustExec("set @@tidb_enable_list_partition = 1") type testcase struct { t1Create string @@ -2349,7 +2538,8 @@ func TestPartitionTable(t *testing.T) { for i := 0; i < 100; i++ { tk.MustExec(fmt.Sprintf("set @a=%v", tc.varGener())) result1 := tk.MustQuery("execute stmt1 using @a").Sort().Rows() - tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("1")) + // When https://github.com/pingcap/tidb/pull/33098 is reverted this should be 1 again + tk.MustQuery("select @@last_plan_from_cache /* i=" + strconv.Itoa(i) + " prepared statement: (t1) " + tc.query + "\n-- create table: " + tc.t1Create + "*/").Check(testkit.Rows("0")) tk.MustQuery("execute stmt2 using @a").Sort().Check(result1) tk.MustQuery("select @@last_plan_from_cache").Check(testkit.Rows("1")) } @@ -2460,10 +2650,16 @@ func TestPartitionWithVariedDataSources(t *testing.T) { tk.MustExec(fmt.Sprintf(`set @a0=%v, @a1=%v, @a2=%v`, rand.Intn(40000), rand.Intn(40000), rand.Intn(40000))) var rscan, rlookup, rpoint, rbatch [][]interface{} + var expectedFromPlanCache string for id, tbl := range []string{"trangeIdx", "thashIdx", "tnormalIdx"} { scan := tk.MustQuery(fmt.Sprintf(`execute stmt%v_indexscan using @mina, @maxa`, tbl)).Sort() + if id == 2 { + expectedFromPlanCache = "1" + } else { + expectedFromPlanCache = "0" + } if i > 0 { - tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + tk.MustQuery(`select @@last_plan_from_cache /* table: ` + tbl + " */").Check(testkit.Rows(expectedFromPlanCache)) } if id == 0 { rscan = scan.Rows() @@ -2473,7 +2669,7 @@ func TestPartitionWithVariedDataSources(t *testing.T) { lookup := tk.MustQuery(fmt.Sprintf(`execute stmt%v_indexlookup using @mina, @maxa`, tbl)).Sort() if i > 0 { - tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows(expectedFromPlanCache)) } if id == 0 { rlookup = lookup.Rows() @@ -2485,7 +2681,7 @@ func TestPartitionWithVariedDataSources(t *testing.T) { if tbl == `tnormalPK` && i > 0 { // PlanCache cannot support PointGet now since we haven't relocated partition after rebuilding range. // Please see Execute.rebuildRange for more details. - tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows(expectedFromPlanCache)) } if id == 0 { rpoint = point.Rows() @@ -2495,7 +2691,7 @@ func TestPartitionWithVariedDataSources(t *testing.T) { batch := tk.MustQuery(fmt.Sprintf(`execute stmt%v_batchget_idx using @a0, @a1, @a2`, tbl)).Sort() if i > 0 { - tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows(expectedFromPlanCache)) } if id == 0 { rbatch = batch.Rows() diff --git a/planner/core/preprocess.go b/planner/core/preprocess.go index ecc6cffa9d3f0..e7d02e22fabfb 100644 --- a/planner/core/preprocess.go +++ b/planner/core/preprocess.go @@ -15,7 +15,6 @@ package core import ( - "context" "fmt" "math" "strings" @@ -26,10 +25,10 @@ import ( "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/parser/auth" "github.com/pingcap/tidb/parser/charset" "github.com/pingcap/tidb/parser/format" "github.com/pingcap/tidb/parser/model" @@ -39,11 +38,13 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/sessiontxn" + "github.com/pingcap/tidb/sessiontxn/staleread" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/temptable" "github.com/pingcap/tidb/types" driver "github.com/pingcap/tidb/types/parser_driver" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/domainutil" utilparser "github.com/pingcap/tidb/util/parser" ) @@ -113,7 +114,12 @@ func TryAddExtraLimit(ctx sessionctx.Context, node ast.StmtNode) ast.StmtNode { // Preprocess resolves table names of the node, and checks some statements' validation. // preprocessReturn used to extract the infoschema for the tableName and the timestamp from the asof clause. func Preprocess(ctx sessionctx.Context, node ast.Node, preprocessOpt ...PreprocessOpt) error { - v := preprocessor{ctx: ctx, tableAliasInJoin: make([]map[string]interface{}, 0), withName: make(map[string]interface{})} + v := preprocessor{ + ctx: ctx, + tableAliasInJoin: make([]map[string]interface{}, 0), + withName: make(map[string]interface{}), + staleReadProcessor: staleread.NewStaleReadProcessor(ctx), + } for _, optFn := range preprocessOpt { optFn(&v) } @@ -184,6 +190,8 @@ type preprocessor struct { tableAliasInJoin []map[string]interface{} withName map[string]interface{} + staleReadProcessor staleread.Processor + // values that may be returned *PreprocessorReturn *PreprocessExecuteISUpdate @@ -299,7 +307,7 @@ func (p *preprocessor) Enter(in ast.Node) (out ast.Node, skipChildren bool) { case *ast.TableSource: isModeOracle := p.ctx.GetSessionVars().SQLMode&mysql.ModeOracle != 0 if _, ok := node.Source.(*ast.SelectStmt); ok && !isModeOracle && len(node.AsName.L) == 0 { - p.err = ddl.ErrDerivedMustHaveAlias.GenWithStackByArgs() + p.err = dbterror.ErrDerivedMustHaveAlias.GenWithStackByArgs() } if v, ok := node.Source.(*ast.TableName); ok && v.TableSample != nil { switch v.TableSample.SampleMethod { @@ -467,7 +475,7 @@ func (p *preprocessor) checkBindGrammar(originNode, hintedNode ast.StmtNode, def return } if tbl.Meta().TempTableType != model.TempTableNone { - p.err = ddl.ErrOptOnTemporaryTable.GenWithStackByArgs("create binding") + p.err = dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("create binding") return } tableInfo := tbl.Meta() @@ -704,20 +712,20 @@ func (p *preprocessor) checkSetOprSelectList(stmt *ast.SetOprSelectList) { func (p *preprocessor) checkCreateDatabaseGrammar(stmt *ast.CreateDatabaseStmt) { if isIncorrectName(stmt.Name) { - p.err = ddl.ErrWrongDBName.GenWithStackByArgs(stmt.Name) + p.err = dbterror.ErrWrongDBName.GenWithStackByArgs(stmt.Name) } } func (p *preprocessor) checkAlterDatabaseGrammar(stmt *ast.AlterDatabaseStmt) { // for 'ALTER DATABASE' statement, database name can be empty to alter default database. if isIncorrectName(stmt.Name) && !stmt.AlterDefaultDatabase { - p.err = ddl.ErrWrongDBName.GenWithStackByArgs(stmt.Name) + p.err = dbterror.ErrWrongDBName.GenWithStackByArgs(stmt.Name) } } func (p *preprocessor) checkDropDatabaseGrammar(stmt *ast.DropDatabaseStmt) { if isIncorrectName(stmt.Name) { - p.err = ddl.ErrWrongDBName.GenWithStackByArgs(stmt.Name) + p.err = dbterror.ErrWrongDBName.GenWithStackByArgs(stmt.Name) } } @@ -782,7 +790,7 @@ func (p *preprocessor) checkCreateTableGrammar(stmt *ast.CreateTableStmt) { } tName := stmt.Table.Name.String() if isIncorrectName(tName) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(tName) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(tName) return } countPrimaryKey := 0 @@ -814,7 +822,7 @@ func (p *preprocessor) checkCreateTableGrammar(stmt *ast.CreateTableStmt) { return } if constraint.IsEmptyIndex { - p.err = ddl.ErrWrongNameForIndex.GenWithStackByArgs(constraint.Name) + p.err = dbterror.ErrWrongNameForIndex.GenWithStackByArgs(constraint.Name) return } case ast.ConstraintPrimaryKey: @@ -838,7 +846,7 @@ func (p *preprocessor) checkCreateTableGrammar(stmt *ast.CreateTableStmt) { p.err = errors.New("'CREATE TABLE ... SELECT' is not implemented yet") return } else if len(stmt.Cols) == 0 && stmt.ReferTable == nil { - p.err = ddl.ErrTableMustHaveColumns + p.err = dbterror.ErrTableMustHaveColumns return } @@ -846,7 +854,7 @@ func (p *preprocessor) checkCreateTableGrammar(stmt *ast.CreateTableStmt) { for _, def := range stmt.Partition.Definitions { pName := def.Name.String() if isIncorrectName(pName) { - p.err = ddl.ErrWrongPartitionName.GenWithStackByArgs(pName) + p.err = dbterror.ErrWrongPartitionName.GenWithStackByArgs(pName) return } } @@ -856,22 +864,30 @@ func (p *preprocessor) checkCreateTableGrammar(stmt *ast.CreateTableStmt) { func (p *preprocessor) checkCreateViewGrammar(stmt *ast.CreateViewStmt) { vName := stmt.ViewName.Name.String() if isIncorrectName(vName) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(vName) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(vName) return } for _, col := range stmt.Cols { if isIncorrectName(col.String()) { - p.err = ddl.ErrWrongColumnName.GenWithStackByArgs(col) + p.err = dbterror.ErrWrongColumnName.GenWithStackByArgs(col) return } } + if len(stmt.Definer.Username) > auth.UserNameMaxLength { + p.err = dbterror.ErrWrongStringLength.GenWithStackByArgs(stmt.Definer.Username, "user name", auth.UserNameMaxLength) + return + } + if len(stmt.Definer.Hostname) > auth.HostNameMaxLength { + p.err = dbterror.ErrWrongStringLength.GenWithStackByArgs(stmt.Definer.Hostname, "host name", auth.HostNameMaxLength) + return + } } func (p *preprocessor) checkCreateViewWithSelect(stmt ast.Node) { switch s := stmt.(type) { case *ast.SelectStmt: if s.SelectIntoOpt != nil { - p.err = ddl.ErrViewSelectClause.GenWithStackByArgs("INFO") + p.err = dbterror.ErrViewSelectClause.GenWithStackByArgs("INFO") return } if s.LockInfo != nil && s.LockInfo.LockType != ast.SelectLockNone { @@ -914,7 +930,7 @@ func (p *preprocessor) checkDropTemporaryTableGrammar(stmt *ast.DropTableStmt) { currentDB := model.NewCIStr(p.ctx.GetSessionVars().CurrentDB) for _, t := range stmt.Tables { if isIncorrectName(t.Name.String()) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(t.Name.String()) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(t.Name.String()) return } @@ -945,7 +961,7 @@ func (p *preprocessor) checkDropTemporaryTableGrammar(stmt *ast.DropTableStmt) { func (p *preprocessor) checkDropTableNames(tables []*ast.TableName) { for _, t := range tables { if isIncorrectName(t.Name.String()) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(t.Name.String()) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(t.Name.String()) return } } @@ -1018,11 +1034,11 @@ func checkColumnOptions(isTempTable bool, ops []*ast.ColumnOption) (int, error) func (p *preprocessor) checkCreateIndexGrammar(stmt *ast.CreateIndexStmt) { tName := stmt.Table.Name.String() if isIncorrectName(tName) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(tName) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(tName) return } if stmt.IndexName == "" { - p.err = ddl.ErrWrongNameForIndex.GenWithStackByArgs(stmt.IndexName) + p.err = dbterror.ErrWrongNameForIndex.GenWithStackByArgs(stmt.IndexName) return } p.err = checkIndexInfo(stmt.IndexName, stmt.IndexPartSpecifications) @@ -1052,12 +1068,12 @@ func (p *preprocessor) checkRenameTableGrammar(stmt *ast.RenameTableStmt) { func (p *preprocessor) checkRenameTable(oldTable, newTable string) { if isIncorrectName(oldTable) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(oldTable) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(oldTable) return } if isIncorrectName(newTable) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(newTable) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(newTable) return } } @@ -1065,11 +1081,11 @@ func (p *preprocessor) checkRenameTable(oldTable, newTable string) { func (p *preprocessor) checkRepairTableGrammar(stmt *ast.RepairTableStmt) { // Check create table stmt whether it's is in REPAIR MODE. if !domainutil.RepairInfo.InRepairMode() { - p.err = ddl.ErrRepairTableFail.GenWithStackByArgs("TiDB is not in REPAIR MODE") + p.err = dbterror.ErrRepairTableFail.GenWithStackByArgs("TiDB is not in REPAIR MODE") return } if len(domainutil.RepairInfo.GetRepairTableList()) == 0 { - p.err = ddl.ErrRepairTableFail.GenWithStackByArgs("repair list is empty") + p.err = dbterror.ErrRepairTableFail.GenWithStackByArgs("repair list is empty") return } @@ -1082,7 +1098,7 @@ func (p *preprocessor) checkRepairTableGrammar(stmt *ast.RepairTableStmt) { func (p *preprocessor) checkAlterTableGrammar(stmt *ast.AlterTableStmt) { tName := stmt.Table.Name.String() if isIncorrectName(tName) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(tName) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(tName) return } specs := stmt.Specs @@ -1090,7 +1106,7 @@ func (p *preprocessor) checkAlterTableGrammar(stmt *ast.AlterTableStmt) { if spec.NewTable != nil { ntName := spec.NewTable.Name.String() if isIncorrectName(ntName) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(ntName) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(ntName) return } } @@ -1125,7 +1141,7 @@ func (p *preprocessor) checkAlterTableGrammar(stmt *ast.AlterTableStmt) { for _, def := range spec.PartDefinitions { pName := def.Name.String() if isIncorrectName(pName) { - p.err = ddl.ErrWrongPartitionName.GenWithStackByArgs(pName) + p.err = dbterror.ErrWrongPartitionName.GenWithStackByArgs(pName) return } } @@ -1153,7 +1169,7 @@ func checkDuplicateColumnName(IndexPartSpecifications []*ast.IndexPartSpecificat // checkIndexInfo checks index name, index column names and prefix lengths. func checkIndexInfo(indexName string, IndexPartSpecifications []*ast.IndexPartSpecification) error { if strings.EqualFold(indexName, mysql.PrimaryKeyName) { - return ddl.ErrWrongNameForIndex.GenWithStackByArgs(indexName) + return dbterror.ErrWrongNameForIndex.GenWithStackByArgs(indexName) } if len(IndexPartSpecifications) > mysql.MaxKeyParts { return infoschema.ErrTooManyKeyParts.GenWithStackByArgs(mysql.MaxKeyParts) @@ -1173,9 +1189,9 @@ func checkUnsupportedTableOptions(options []*ast.TableOption) error { for _, option := range options { switch option.Tp { case ast.TableOptionUnion: - err = ddl.ErrTableOptionUnionUnsupported + err = dbterror.ErrTableOptionUnionUnsupported case ast.TableOptionInsertMethod: - err = ddl.ErrTableOptionInsertMethodUnsupported + err = dbterror.ErrTableOptionInsertMethodUnsupported case ast.TableOptionEngine: err = checkTableEngine(option.StrValue) } @@ -1203,7 +1219,7 @@ var mysqlValidTableEngineNames = map[string]struct{}{ func checkTableEngine(engineName string) error { if _, have := mysqlValidTableEngineNames[strings.ToLower(engineName)]; !have { - return ddl.ErrUnknownEngine.GenWithStackByArgs(engineName) + return dbterror.ErrUnknownEngine.GenWithStackByArgs(engineName) } return nil } @@ -1234,7 +1250,7 @@ func checkColumn(colDef *ast.ColumnDef) error { // Check column name. cName := colDef.Name.Name.String() if isIncorrectName(cName) { - return ddl.ErrWrongColumnName.GenWithStackByArgs(cName) + return dbterror.ErrWrongColumnName.GenWithStackByArgs(cName) } if isInvalidDefaultValue(colDef) { @@ -1377,11 +1393,11 @@ func (p *preprocessor) checkContainDotColumn(stmt *ast.CreateTableStmt) { for _, colDef := range stmt.Cols { // check schema and table names. if colDef.Name.Schema.O != sName && len(colDef.Name.Schema.O) != 0 { - p.err = ddl.ErrWrongDBName.GenWithStackByArgs(colDef.Name.Schema.O) + p.err = dbterror.ErrWrongDBName.GenWithStackByArgs(colDef.Name.Schema.O) return } if colDef.Name.Table.O != tName && len(colDef.Name.Table.O) != 0 { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(colDef.Name.Table.O) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(colDef.Name.Table.O) return } } @@ -1446,7 +1462,7 @@ func (p *preprocessor) handleTableName(tn *ast.TableName) { return } - p.handleAsOfAndReadTS(tn.AsOf) + p.handleAsOfAndReadTS(tn) if p.err != nil { return } @@ -1476,24 +1492,24 @@ func (p *preprocessor) checkNotInRepair(tn *ast.TableName) { return } if tableInfo != nil { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(tn.Name.L, "this table is in repair") + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(tn.Name.L, "this table is in repair") } } func (p *preprocessor) handleRepairName(tn *ast.TableName) { // Check the whether the repaired table is system table. if util.IsMemOrSysDB(tn.Schema.L) { - p.err = ddl.ErrRepairTableFail.GenWithStackByArgs("memory or system database is not for repair") + p.err = dbterror.ErrRepairTableFail.GenWithStackByArgs("memory or system database is not for repair") return } tableInfo, dbInfo := domainutil.RepairInfo.GetRepairedTableInfoByTableName(tn.Schema.L, tn.Name.L) // tableName here only has the schema rather than DBInfo. if dbInfo == nil { - p.err = ddl.ErrRepairTableFail.GenWithStackByArgs("database " + tn.Schema.L + " is not in repair") + p.err = dbterror.ErrRepairTableFail.GenWithStackByArgs("database " + tn.Schema.L + " is not in repair") return } if tableInfo == nil { - p.err = ddl.ErrRepairTableFail.GenWithStackByArgs("table " + tn.Name.L + " is not in repair") + p.err = dbterror.ErrRepairTableFail.GenWithStackByArgs("table " + tn.Name.L + " is not in repair") return } p.ctx.SetValue(domainutil.RepairedTable, tableInfo) @@ -1574,7 +1590,7 @@ func (p *preprocessor) resolveAlterTableStmt(node *ast.AlterTableStmt) { func (p *preprocessor) resolveCreateSequenceStmt(stmt *ast.CreateSequenceStmt) { sName := stmt.Name.Name.String() if isIncorrectName(sName) { - p.err = ddl.ErrWrongTableName.GenWithStackByArgs(sName) + p.err = dbterror.ErrWrongTableName.GenWithStackByArgs(sName) return } } @@ -1608,7 +1624,7 @@ func (p *preprocessor) checkFuncCastExpr(node *ast.FuncCastExpr) { } // handleAsOfAndReadTS tries to handle as of closure, or possibly read_ts. -func (p *preprocessor) handleAsOfAndReadTS(node *ast.AsOfClause) { +func (p *preprocessor) handleAsOfAndReadTS(tn *ast.TableName) { if p.stmtTp != TypeSelect { return } @@ -1620,117 +1636,32 @@ func (p *preprocessor) handleAsOfAndReadTS(node *ast.AsOfClause) { p.ctx.GetSessionVars().StmtCtx.IsStaleness = true } }() - // When statement is during the Txn, we check whether there exists AsOfClause. If exists, we will return error, - // otherwise we should directly set the return param from TxnCtx. - p.ReadReplicaScope = kv.GlobalReplicaScope - if p.ctx.GetSessionVars().InTxn() { - if node != nil { - p.err = ErrAsOf.FastGenWithCause("as of timestamp can't be set in transaction.") - return - } - txnCtx := p.ctx.GetSessionVars().TxnCtx - p.ReadReplicaScope = txnCtx.TxnScope - // It means we meet following case: - // 1. start transaction read only as of timestamp ts - // 2. select statement - if txnCtx.IsStaleness { - p.LastSnapshotTS = txnCtx.StartTS - p.IsStaleness = txnCtx.IsStaleness - p.initedLastSnapshotTS = true - return - } - } - scope := config.GetTxnScopeFromConfig() - if p.ctx.GetSessionVars().GetReplicaRead().IsClosestRead() && scope != kv.GlobalReplicaScope { - p.ReadReplicaScope = scope - } - // If the statement is in auto-commit mode, we will check whether there exists read_ts, if exists, - // we will directly use it. The txnScope will be defined by the zone label, if it is not set, we will use - // global txnScope directly. - readTS := p.ctx.GetSessionVars().TxnReadTS.UseTxnReadTS() - readStaleness := p.ctx.GetSessionVars().ReadStaleness - var ts uint64 - switch { - case readTS > 0: - ts = readTS - if node != nil { - p.err = ErrAsOf.FastGenWithCause("can't use select as of while already set transaction as of") - return - } - if !p.initedLastSnapshotTS { - p.SnapshotTSEvaluator = func(sessionctx.Context) (uint64, error) { - return ts, nil - } - p.LastSnapshotTS = ts - p.IsStaleness = true - } - case readTS == 0 && node != nil: - // If we didn't use read_ts, and node isn't nil, it means we use 'select table as of timestamp ... ' - // for stale read - // It means we meet following case: - // select statement with as of timestamp - ts, p.err = calculateTsExpr(p.ctx, node) - if p.err != nil { - return - } - if err := sessionctx.ValidateStaleReadTS(context.Background(), p.ctx, ts); err != nil { - p.err = errors.Trace(err) - return - } - if !p.initedLastSnapshotTS { - p.SnapshotTSEvaluator = func(ctx sessionctx.Context) (uint64, error) { - return calculateTsExpr(ctx, node) - } - p.LastSnapshotTS = ts - p.IsStaleness = true - } - case readTS == 0 && node == nil && readStaleness != 0: - // If both readTS and node is empty while the readStaleness isn't, it means we meet following situation: - // set @@tidb_read_staleness='-5'; - // select * from t; - // Then the following select statement should be affected by the tidb_read_staleness in session. - ts, p.err = calculateTsWithReadStaleness(p.ctx, readStaleness) - if p.err != nil { - return - } - if err := sessionctx.ValidateStaleReadTS(context.Background(), p.ctx, ts); err != nil { - p.err = errors.Trace(err) - return - } - if !p.initedLastSnapshotTS { - p.SnapshotTSEvaluator = func(ctx sessionctx.Context) (uint64, error) { - return calculateTsWithReadStaleness(p.ctx, readStaleness) - } - p.LastSnapshotTS = ts - p.IsStaleness = true - } - case readTS == 0 && node == nil && readStaleness == 0: - // If both readTS and node is empty while the readStaleness is empty, - // setting p.ReadReplicaScope is necessary to verify the txn scope later - // because we may be in a local txn without using the Stale Read. - p.ReadReplicaScope = scope + if p.err = p.staleReadProcessor.OnSelectTable(tn); p.err != nil { + return } - // If the select statement is related to multi tables, we should grantee that all tables use the same timestamp - if p.LastSnapshotTS != ts { - p.err = ErrAsOf.GenWithStack("can not set different time in the as of") + if p.initedLastSnapshotTS { return } - if p.LastSnapshotTS != 0 { - dom := domain.GetDomain(p.ctx) - is, err := dom.GetSnapshotInfoSchema(p.LastSnapshotTS) - // if infoschema is empty, LastSnapshotTS init failed - if err != nil { - p.err = err - return - } - if is == nil { - p.err = fmt.Errorf("can not get any information schema based on snapshotTS: %d", p.LastSnapshotTS) - return - } - p.InfoSchema = temptable.AttachLocalTemporaryTableInfoSchema(p.ctx, is) + + if p.IsStaleness = p.staleReadProcessor.IsStaleness(); p.IsStaleness { + p.LastSnapshotTS = p.staleReadProcessor.GetStalenessReadTS() + p.SnapshotTSEvaluator = p.staleReadProcessor.GetStalenessTSEvaluatorForPrepare() + p.InfoSchema = p.staleReadProcessor.GetStalenessInfoSchema() } + + // It is a little hacking for the below codes. `ReadReplicaScope` is used both by stale read's closest read and local txn. + // They are different features and the value for `ReadReplicaScope` will be conflicted in some scenes. + // But because local txn is still an experimental feature, we should make stale read work first. + if p.IsStaleness || p.ctx.GetSessionVars().GetReplicaRead().IsClosestRead() { + // When stale read or closet read is set, we read the tidb's locality as the read replica scope + p.ReadReplicaScope = config.GetTxnScopeFromConfig() + } else { + // Otherwise, use the scope from TxnCtx for local txn validation + p.ReadReplicaScope = p.ctx.GetSessionVars().TxnCtx.TxnScope + } + p.initedLastSnapshotTS = true } @@ -1769,9 +1700,9 @@ func (p *preprocessor) hasAutoConvertWarning(colDef *ast.ColumnDef) bool { if !sessVars.SQLMode.HasStrictMode() && colDef.Tp.Tp == mysql.TypeVarchar { colDef.Tp.Tp = mysql.TypeBlob if colDef.Tp.Charset == charset.CharsetBin { - sessVars.StmtCtx.AppendWarning(ddl.ErrAutoConvert.GenWithStackByArgs(colDef.Name.Name.O, "VARBINARY", "BLOB")) + sessVars.StmtCtx.AppendWarning(dbterror.ErrAutoConvert.GenWithStackByArgs(colDef.Name.Name.O, "VARBINARY", "BLOB")) } else { - sessVars.StmtCtx.AppendWarning(ddl.ErrAutoConvert.GenWithStackByArgs(colDef.Name.Name.O, "VARCHAR", "TEXT")) + sessVars.StmtCtx.AppendWarning(dbterror.ErrAutoConvert.GenWithStackByArgs(colDef.Name.Name.O, "VARCHAR", "TEXT")) } return true } diff --git a/planner/core/preprocess_test.go b/planner/core/preprocess_test.go index d6fe29fb8d88f..0a22f349bd9ed 100644 --- a/planner/core/preprocess_test.go +++ b/planner/core/preprocess_test.go @@ -18,7 +18,6 @@ import ( "testing" "github.com/pingcap/errors" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/meta/autoid" @@ -31,6 +30,7 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" ) @@ -126,8 +126,8 @@ func TestValidator(t *testing.T) { errors.New("[types:1074]Column length too big for column 'c' (max = 16383); use BLOB or TEXT instead")}, {"alter table t add column c varchar(4294967295) CHARACTER SET ascii", true, errors.New("[types:1074]Column length too big for column 'c' (max = 65535); use BLOB or TEXT instead")}, - {"create table t", false, ddl.ErrTableMustHaveColumns}, - {"create table t (unique(c))", false, ddl.ErrTableMustHaveColumns}, + {"create table t", false, dbterror.ErrTableMustHaveColumns}, + {"create table t (unique(c))", false, dbterror.ErrTableMustHaveColumns}, {"create table `t ` (a int)", true, errors.New("[ddl:1103]Incorrect table name 't '")}, {"create table `` (a int)", true, errors.New("[ddl:1103]Incorrect table name ''")}, @@ -223,7 +223,7 @@ func TestValidator(t *testing.T) { {"select * from (select 1 ) a , (select 2) b, (select * from (select 3) a join (select 4) b) c;", false, nil}, {"CREATE VIEW V (a,b,c) AS SELECT 1,1,3;", false, nil}, - {"CREATE VIEW V AS SELECT 5 INTO OUTFILE 'ttt'", true, ddl.ErrViewSelectClause.GenWithStackByArgs("INFO")}, + {"CREATE VIEW V AS SELECT 5 INTO OUTFILE 'ttt'", true, dbterror.ErrViewSelectClause.GenWithStackByArgs("INFO")}, {"CREATE VIEW V AS SELECT 5 FOR UPDATE", false, nil}, {"CREATE VIEW V AS SELECT 5 LOCK IN SHARE MODE", false, nil}, @@ -250,11 +250,11 @@ func TestValidator(t *testing.T) { {"CREATE INDEX `` on t ((lower(a)));", true, errors.New("[ddl:1280]Incorrect index name ''")}, // issue 21082 - {"CREATE TABLE t (a int) ENGINE=Unknown;", false, ddl.ErrUnknownEngine}, + {"CREATE TABLE t (a int) ENGINE=Unknown;", false, dbterror.ErrUnknownEngine}, {"CREATE TABLE t (a int) ENGINE=InnoDB;", false, nil}, {"CREATE TABLE t (a int);", false, nil}, {"ALTER TABLE t ENGINE=InnoDB;", false, nil}, - {"ALTER TABLE t ENGINE=Unknown;", false, ddl.ErrUnknownEngine}, + {"ALTER TABLE t ENGINE=Unknown;", false, dbterror.ErrUnknownEngine}, // issue 20295 // issue 11193 @@ -361,6 +361,6 @@ func TestLargeVarcharAutoConv(t *testing.T) { require.Equal(t, uint16(3), warnCnt) warns := tk.Session().GetSessionVars().StmtCtx.GetWarnings() for i := range warns { - require.True(t, terror.ErrorEqual(warns[i].Err, ddl.ErrAutoConvert)) + require.True(t, terror.ErrorEqual(warns[i].Err, dbterror.ErrAutoConvert)) } } diff --git a/planner/core/rule_column_pruning.go b/planner/core/rule_column_pruning.go index d79d7aa7760a3..98ca1e20190da 100644 --- a/planner/core/rule_column_pruning.go +++ b/planner/core/rule_column_pruning.go @@ -293,6 +293,11 @@ func (p *LogicalUnionScan) PruneColumns(parentUsedCols []*expression.Column, opt for i := 0; i < p.handleCols.NumCols(); i++ { parentUsedCols = append(parentUsedCols, p.handleCols.GetCol(i)) } + for _, col := range p.Schema().Columns { + if col.ID == model.ExtraPidColID || col.ID == model.ExtraPhysTblID { + parentUsedCols = append(parentUsedCols, col) + } + } condCols := expression.ExtractColumnsFromExpressions(nil, p.conditions, nil) parentUsedCols = append(parentUsedCols, condCols...) return p.children[0].PruneColumns(parentUsedCols, opt) @@ -479,17 +484,16 @@ func (p *LogicalLock) PruneColumns(parentUsedCols []*expression.Column, opt *log return p.baseLogicalPlan.PruneColumns(parentUsedCols, opt) } - if len(p.partitionedTable) > 0 { - // If the children include partitioned tables, there is an extra partition ID column. - parentUsedCols = append(parentUsedCols, p.extraPIDInfo.Columns...) - } - - for _, cols := range p.tblID2Handle { + for tblID, cols := range p.tblID2Handle { for _, col := range cols { for i := 0; i < col.NumCols(); i++ { parentUsedCols = append(parentUsedCols, col.GetCol(i)) } } + if physTblIDCol, ok := p.tblID2PhysTblIDCol[tblID]; ok { + // If the children include partitioned tables, there is an extra partition ID column. + parentUsedCols = append(parentUsedCols, physTblIDCol) + } } return p.children[0].PruneColumns(parentUsedCols, opt) } diff --git a/planner/core/rule_partition_processor.go b/planner/core/rule_partition_processor.go index 0597298fc2cc7..991c42ec4c1b6 100644 --- a/planner/core/rule_partition_processor.go +++ b/planner/core/rule_partition_processor.go @@ -43,6 +43,7 @@ import ( const FullRange = -1 // partitionProcessor rewrites the ast for table partition. +// Used by static partition prune mode. // // create table t (id int) partition by range (id) // (partition p1 values less than (10), @@ -310,6 +311,15 @@ func (s *partitionProcessor) reconstructTableColNames(ds *DataSource) ([]*types. }) continue } + if colExpr.ID == model.ExtraPhysTblID { + names = append(names, &types.FieldName{ + DBName: ds.DBName, + TblName: ds.tableInfo.Name, + ColName: model.ExtraPhysTblIdName, + OrigColName: model.ExtraPhysTblIdName, + }) + continue + } if colInfo, found := colsInfoMap[colExpr.ID]; found { names = append(names, &types.FieldName{ DBName: ds.DBName, @@ -640,7 +650,7 @@ func (s *partitionProcessor) prune(ds *DataSource, opt *logicalOptimizeOp) (Logi return s.processListPartition(ds, pi, opt) } - // We haven't implement partition by list and so on. + // We haven't implement partition by key and so on. return s.makeUnionAllChildren(ds, pi, fullRange(len(pi.Definitions)), opt) } @@ -1041,7 +1051,7 @@ func partitionRangeColumnForInExpr(sctx sessionctx.Context, args []expression.Ex return pruner.fullRange() } switch constExpr.Value.Kind() { - case types.KindInt64, types.KindUint64, types.KindMysqlTime: // for safety, only support int and datetime now + case types.KindInt64, types.KindUint64, types.KindMysqlTime, types.KindString: // for safety, only support string,int and datetime now case types.KindNull: result = append(result, partitionRange{0, 1}) continue diff --git a/planner/core/rule_predicate_push_down.go b/planner/core/rule_predicate_push_down.go index 9896b844f74f8..82201b74d8f92 100644 --- a/planner/core/rule_predicate_push_down.go +++ b/planner/core/rule_predicate_push_down.go @@ -103,15 +103,10 @@ func (p *LogicalSelection) PredicatePushDown(predicates []expression.Expression, var child LogicalPlan var retConditions []expression.Expression var originConditions []expression.Expression - if p.buildByHaving { - retConditions, child = p.children[0].PredicatePushDown(predicates, opt) - retConditions = append(retConditions, p.Conditions...) - } else { - canBePushDown, canNotBePushDown := splitSetGetVarFunc(p.Conditions) - originConditions = canBePushDown - retConditions, child = p.children[0].PredicatePushDown(append(canBePushDown, predicates...), opt) - retConditions = append(retConditions, canNotBePushDown...) - } + canBePushDown, canNotBePushDown := splitSetGetVarFunc(p.Conditions) + originConditions = canBePushDown + retConditions, child = p.children[0].PredicatePushDown(append(canBePushDown, predicates...), opt) + retConditions = append(retConditions, canNotBePushDown...) if len(retConditions) > 0 { p.Conditions = expression.PropagateConstant(p.ctx, retConditions) // Return table dual when filter is constant false or null. @@ -444,6 +439,94 @@ func (p *LogicalUnionAll) PredicatePushDown(predicates []expression.Expression, return nil, p } +// pushDownPredicatesForAggregation split a condition to two parts, can be pushed-down or can not be pushed-down below aggregation. +func (la *LogicalAggregation) pushDownPredicatesForAggregation(cond expression.Expression, groupByColumns *expression.Schema, exprsOriginal []expression.Expression) ([]expression.Expression, []expression.Expression) { + var condsToPush []expression.Expression + var ret []expression.Expression + switch cond.(type) { + case *expression.Constant: + condsToPush = append(condsToPush, cond) + // Consider SQL list "select sum(b) from t group by a having 1=0". "1=0" is a constant predicate which should be + // retained and pushed down at the same time. Because we will get a wrong query result that contains one column + // with value 0 rather than an empty query result. + ret = append(ret, cond) + case *expression.ScalarFunction: + extractedCols := expression.ExtractColumns(cond) + ok := true + for _, col := range extractedCols { + if !groupByColumns.Contains(col) { + ok = false + break + } + } + if ok { + newFunc := expression.ColumnSubstitute(cond, la.Schema(), exprsOriginal) + condsToPush = append(condsToPush, newFunc) + } else { + ret = append(ret, cond) + } + default: + ret = append(ret, cond) + } + return condsToPush, ret +} + +// pushDownPredicatesForAggregation split a CNF condition to two parts, can be pushed-down or can not be pushed-down below aggregation. +// It would consider the CNF. +// For example, +// (a > 1 or avg(b) > 1) and (a < 3), and `avg(b) > 1` can't be pushed-down. +// Then condsToPush: a < 3, ret: a > 1 or avg(b) > 1 +func (la *LogicalAggregation) pushDownCNFPredicatesForAggregation(cond expression.Expression, groupByColumns *expression.Schema, exprsOriginal []expression.Expression) ([]expression.Expression, []expression.Expression) { + var condsToPush []expression.Expression + var ret []expression.Expression + subCNFItem := expression.SplitCNFItems(cond) + if len(subCNFItem) == 1 { + return la.pushDownPredicatesForAggregation(subCNFItem[0], groupByColumns, exprsOriginal) + } + for _, item := range subCNFItem { + condsToPushForItem, retForItem := la.pushDownDNFPredicatesForAggregation(item, groupByColumns, exprsOriginal) + if len(condsToPushForItem) > 0 { + condsToPush = append(condsToPush, expression.ComposeDNFCondition(la.ctx, condsToPushForItem...)) + } + if len(retForItem) > 0 { + ret = append(ret, expression.ComposeDNFCondition(la.ctx, retForItem...)) + } + } + return condsToPush, ret +} + +// pushDownDNFPredicatesForAggregation split a DNF condition to two parts, can be pushed-down or can not be pushed-down below aggregation. +// It would consider the DNF. +// For example, +// (a > 1 and avg(b) > 1) or (a < 3), and `avg(b) > 1` can't be pushed-down. +// Then condsToPush: (a < 3) and (a > 1), ret: (a > 1 and avg(b) > 1) or (a < 3) +func (la *LogicalAggregation) pushDownDNFPredicatesForAggregation(cond expression.Expression, groupByColumns *expression.Schema, exprsOriginal []expression.Expression) ([]expression.Expression, []expression.Expression) { + var condsToPush []expression.Expression + var ret []expression.Expression + subDNFItem := expression.SplitDNFItems(cond) + if len(subDNFItem) == 1 { + return la.pushDownPredicatesForAggregation(subDNFItem[0], groupByColumns, exprsOriginal) + } + for _, item := range subDNFItem { + condsToPushForItem, retForItem := la.pushDownCNFPredicatesForAggregation(item, groupByColumns, exprsOriginal) + if len(condsToPushForItem) > 0 { + condsToPush = append(condsToPush, expression.ComposeCNFCondition(la.ctx, condsToPushForItem...)) + } else { + return nil, []expression.Expression{cond} + } + if len(retForItem) > 0 { + ret = append(ret, expression.ComposeCNFCondition(la.ctx, retForItem...)) + } + } + if len(ret) == 0 { + // All the condition can be pushed down. + return []expression.Expression{cond}, nil + } + dnfPushDownCond := expression.ComposeDNFCondition(la.ctx, condsToPush...) + // Some condition can't be pushed down, we need to keep all the condition. + return []expression.Expression{dnfPushDownCond}, []expression.Expression{cond} +} + // PredicatePushDown implements LogicalPlan PredicatePushDown interface. func (la *LogicalAggregation) PredicatePushDown(predicates []expression.Expression, opt *logicalOptimizeOp) (ret []expression.Expression, retPlan LogicalPlan) { var condsToPush []expression.Expression @@ -452,31 +535,14 @@ func (la *LogicalAggregation) PredicatePushDown(predicates []expression.Expressi exprsOriginal = append(exprsOriginal, fun.Args[0]) } groupByColumns := expression.NewSchema(la.GetGroupByCols()...) + // It's almost the same as pushDownCNFPredicatesForAggregation, except that the condition is a slice. for _, cond := range predicates { - switch cond.(type) { - case *expression.Constant: - condsToPush = append(condsToPush, cond) - // Consider SQL list "select sum(b) from t group by a having 1=0". "1=0" is a constant predicate which should be - // retained and pushed down at the same time. Because we will get a wrong query result that contains one column - // with value 0 rather than an empty query result. - ret = append(ret, cond) - case *expression.ScalarFunction: - extractedCols := expression.ExtractColumns(cond) - ok := true - for _, col := range extractedCols { - if !groupByColumns.Contains(col) { - ok = false - break - } - } - if ok { - newFunc := expression.ColumnSubstitute(cond, la.Schema(), exprsOriginal) - condsToPush = append(condsToPush, newFunc) - } else { - ret = append(ret, cond) - } - default: - ret = append(ret, cond) + subCondsToPush, subRet := la.pushDownDNFPredicatesForAggregation(cond, groupByColumns, exprsOriginal) + if len(subCondsToPush) > 0 { + condsToPush = append(condsToPush, subCondsToPush...) + } + if len(subRet) > 0 { + ret = append(ret, subRet...) } } la.baseLogicalPlan.PredicatePushDown(condsToPush, opt) @@ -696,7 +762,7 @@ func appendSelectionPredicatePushDownTraceStep(p *LogicalSelection, conditions [ reason := func() string { return "" } - if len(conditions) > 0 && !p.buildByHaving { + if len(conditions) > 0 { reason = func() string { buffer := bytes.NewBufferString("The conditions[") for i, cond := range conditions { @@ -860,3 +926,22 @@ func (adder *exprPrefixAdder) addExprPrefix4DNFCond(condition *expression.Scalar return []expression.Expression{expression.ComposeDNFCondition(adder.sctx, newAccessItems...)}, nil } + +// PredicatePushDown implements LogicalPlan PredicatePushDown interface. +func (p *LogicalCTE) PredicatePushDown(predicates []expression.Expression, opt *logicalOptimizeOp) ([]expression.Expression, LogicalPlan) { + if p.cte.recursivePartLogicalPlan != nil { + // Doesn't support recursive CTE yet. + return predicates, p.self + } + if len(predicates) == 0 { + p.cte.pushDownPredicates = append(p.cte.pushDownPredicates, expression.NewOne()) + return predicates, p.self + } + newPred := make([]expression.Expression, 0, len(predicates)) + for i := range predicates { + newPred = append(newPred, predicates[i].Clone()) + ResolveExprAndReplace(newPred[i], p.cte.ColumnMap) + } + p.cte.pushDownPredicates = append(p.cte.pushDownPredicates, expression.ComposeCNFCondition(p.ctx, newPred...)) + return predicates, p.self +} diff --git a/planner/core/show_predicate_extractor.go b/planner/core/show_predicate_extractor.go index 103c4107c7f5e..352b38b4f8b8c 100644 --- a/planner/core/show_predicate_extractor.go +++ b/planner/core/show_predicate_extractor.go @@ -21,13 +21,13 @@ import ( "github.com/pingcap/tidb/parser/ast" driver "github.com/pingcap/tidb/types/parser_driver" - "github.com/pingcap/tidb/util/collate" "github.com/pingcap/tidb/util/stringutil" ) var ( _ ShowPredicateExtractor = &ShowColumnsTableExtractor{} _ ShowPredicateExtractor = &ShowTablesTableExtractor{} + _ ShowPredicateExtractor = &ShowVariablesExtractor{} ) // ShowPredicateExtractor is used to extract some predicates from `PatternLikeExpr` clause @@ -39,18 +39,43 @@ var ( // // it is a way to fix https://github.com/pingcap/tidb/issues/29910. type ShowPredicateExtractor interface { - // Extracts predicates which can be pushed down and returns whether the extractor can extract predicates. + // Extract predicates which can be pushed down and returns whether the extractor can extract predicates. Extract(show *ast.ShowStmt) bool explainInfo() string } -// ShowColumnsTableExtractor is used to extract some predicates of tables table. -type ShowColumnsTableExtractor struct { +// ShowBaseExtractor is the definition of base extractor for derived predicates. +type ShowBaseExtractor struct { Field string FieldPatterns string } +// Extract implements the ShowPredicateExtractor interface. +func (e *ShowBaseExtractor) Extract(show *ast.ShowStmt) bool { + if show.Pattern != nil && show.Pattern.Pattern != nil { + pattern := show.Pattern + switch pattern.Pattern.(type) { + case *driver.ValueExpr: + // It is used in `SHOW XXXX in t LIKE `abc``. + ptn := pattern.Pattern.(*driver.ValueExpr).GetString() + patValue, patTypes := stringutil.CompilePattern(ptn, pattern.Escape) + if stringutil.IsExactMatch(patTypes) { + e.Field = strings.ToLower(string(patValue)) + return true + } + e.FieldPatterns = strings.ToLower(string(patValue)) + return true + } + } + return false +} + +// ShowColumnsTableExtractor is used to extract some predicates of tables table. +type ShowColumnsTableExtractor struct { + ShowBaseExtractor +} + // Extract implements the MemTablePredicateExtractor Extract interface func (e *ShowColumnsTableExtractor) Extract(show *ast.ShowStmt) bool { if show.Pattern != nil && show.Pattern.Pattern != nil { @@ -60,12 +85,11 @@ func (e *ShowColumnsTableExtractor) Extract(show *ast.ShowStmt) bool { // It is used in `SHOW COLUMNS FROM t LIKE `abc``. ptn := pattern.Pattern.(*driver.ValueExpr).GetString() patValue, patTypes := stringutil.CompilePattern(ptn, pattern.Escape) - if !collate.NewCollationEnabled() && stringutil.IsExactMatch(patTypes) { + if stringutil.IsExactMatch(patTypes) { e.Field = strings.ToLower(string(patValue)) return true } - // (?i) mean to be case-insensitive. - e.FieldPatterns = "(?i)" + stringutil.CompileLike2Regexp(string(patValue)) + e.FieldPatterns = strings.ToLower(string(patValue)) return true case *ast.ColumnNameExpr: // It is used in `SHOW COLUMNS FROM t LIKE abc`. @@ -100,28 +124,7 @@ func (e *ShowColumnsTableExtractor) explainInfo() string { // ShowTablesTableExtractor is used to extract some predicates of tables. type ShowTablesTableExtractor struct { - ShowColumnsTableExtractor -} - -// Extract implements the ShowTablesTableExtractor Extract interface -func (e *ShowTablesTableExtractor) Extract(show *ast.ShowStmt) bool { - if show.Pattern != nil && show.Pattern.Pattern != nil { - pattern := show.Pattern - switch pattern.Pattern.(type) { - case *driver.ValueExpr: - // It is used in `SHOW TABLE in t LIKE `abc``. - ptn := pattern.Pattern.(*driver.ValueExpr).GetString() - patValue, patTypes := stringutil.CompilePattern(ptn, pattern.Escape) - if stringutil.IsExactMatch(patTypes) { - e.Field = strings.ToLower(string(patValue)) - return true - } - // (?i) mean to be case-insensitive. - e.FieldPatterns = "(?i)" + stringutil.CompileLike2Regexp(string(patValue)) - return true - } - } - return false + ShowBaseExtractor } func (e *ShowTablesTableExtractor) explainInfo() string { @@ -141,3 +144,26 @@ func (e *ShowTablesTableExtractor) explainInfo() string { } return s } + +// ShowVariablesExtractor is used to extract some predicates of variables. +type ShowVariablesExtractor struct { + ShowBaseExtractor +} + +func (e *ShowVariablesExtractor) explainInfo() string { + r := new(bytes.Buffer) + if len(e.Field) > 0 { + r.WriteString(fmt.Sprintf("variable:[%s], ", e.Field)) + } + + if len(e.FieldPatterns) > 0 { + r.WriteString(fmt.Sprintf("variable_pattern:[%s], ", e.FieldPatterns)) + } + + // remove the last ", " in the message info + s := r.String() + if len(s) > 2 { + return s[:len(s)-2] + } + return s +} diff --git a/planner/core/stats.go b/planner/core/stats.go index 729ec2cbd559d..7613ffdb6837c 100644 --- a/planner/core/stats.go +++ b/planner/core/stats.go @@ -316,8 +316,8 @@ func (ds *DataSource) derivePathStatsAndTryHeuristics() error { for _, singleScanIdx := range singleScanIdxs { col2Len := singleScanIdx.GetCol2LenFromAccessConds() for _, uniqueIdxCol2Len := range uniqueIdxAccessCols { - accessResult, comparable := util.CompareCol2Len(col2Len, uniqueIdxCol2Len) - if comparable && accessResult == 1 { + accessResult, comparable1 := util.CompareCol2Len(col2Len, uniqueIdxCol2Len) + if comparable1 && accessResult == 1 { if refinedBest == nil || len(singleScanIdx.Ranges) < len(refinedBest.Ranges) { refinedBest = singleScanIdx } @@ -478,7 +478,7 @@ func (ds *DataSource) generateAndPruneIndexMergePath(indexMergeConds []expressio // With hints and without generated IndexMerge paths if regularPathCount == len(ds.possibleAccessPaths) { ds.indexMergeHints = nil - ds.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("IndexMerge is inapplicable.")) + ds.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("IndexMerge is inapplicable")) return nil } // Do not need to consider the regular paths in find_best_task(). @@ -1258,6 +1258,13 @@ func (p *LogicalCTE) DeriveStats(childStats []*property.StatsInfo, selfSchema *e var err error if p.cte.seedPartPhysicalPlan == nil { + // Build push-downed predicates. + if len(p.cte.pushDownPredicates) > 0 { + newCond := expression.ComposeDNFCondition(p.ctx, p.cte.pushDownPredicates...) + newSel := LogicalSelection{Conditions: []expression.Expression{newCond}}.Init(p.SCtx(), p.cte.seedPartLogicalPlan.SelectBlockOffset()) + newSel.SetChildren(p.cte.seedPartLogicalPlan) + p.cte.seedPartLogicalPlan = newSel + } p.cte.seedPartPhysicalPlan, _, err = DoOptimize(context.TODO(), p.ctx, p.cte.optFlag, p.cte.seedPartLogicalPlan) if err != nil { return nil, err diff --git a/planner/core/stringer.go b/planner/core/stringer.go index 68eb94c584861..3679b92ce777c 100644 --- a/planner/core/stringer.go +++ b/planner/core/stringer.go @@ -28,6 +28,15 @@ func ToString(p Plan) string { return strings.Join(strs, "->") } +// FDToString explains fd transfer over a Plan, returns description string. +func FDToString(p LogicalPlan) string { + strs, _ := fdToString(p, []string{}, []int{}) + for i, j := 0, len(strs)-1; i < j; i, j = i+1, j-1 { + strs[i], strs[j] = strs[j], strs[i] + } + return strings.Join(strs, " >>> ") +} + func needIncludeChildrenString(plan Plan) bool { switch x := plan.(type) { case *LogicalUnionAll, *PhysicalUnionAll, *LogicalPartitionUnionAll: @@ -43,6 +52,29 @@ func needIncludeChildrenString(plan Plan) bool { } } +func fdToString(in LogicalPlan, strs []string, idxs []int) ([]string, []int) { + switch x := in.(type) { + case *LogicalProjection: + strs = append(strs, "{"+x.fdSet.String()+"}") + for _, child := range x.Children() { + strs, idxs = fdToString(child, strs, idxs) + } + case *LogicalAggregation: + strs = append(strs, "{"+x.fdSet.String()+"}") + for _, child := range x.Children() { + strs, idxs = fdToString(child, strs, idxs) + } + case *DataSource: + strs = append(strs, "{"+x.fdSet.String()+"}") + case *LogicalApply: + strs = append(strs, "{"+x.fdSet.String()+"}") + case *LogicalJoin: + strs = append(strs, "{"+x.fdSet.String()+"}") + default: + } + return strs, idxs +} + func toString(in Plan, strs []string, idxs []int) ([]string, []int) { switch x := in.(type) { case LogicalPlan: diff --git a/planner/core/stringer_test.go b/planner/core/stringer_test.go index b356dbe4ca3da..6433ad59b158c 100644 --- a/planner/core/stringer_test.go +++ b/planner/core/stringer_test.go @@ -38,11 +38,11 @@ func TestPlanStringer(t *testing.T) { }{ { sql: "show columns from t like 'a'", - plan: "Show(field_pattern:[(?i)a])", + plan: "Show(field:[a])", }, { sql: "show columns from t like 'a%'", - plan: "Show(field_pattern:[(?i)a.*])", + plan: "Show(field_pattern:[a%])", }, { sql: "show columns from t where field = 'a'", @@ -66,11 +66,11 @@ func TestPlanStringer(t *testing.T) { }, { sql: "show tables in test like 't%'", - plan: "Show(table_pattern:[(?i)t.*])", + plan: "Show(table_pattern:[t%])", }, { sql: "show tables in test like '%T%'", - plan: "Show(table_pattern:[(?i).*T.*])", + plan: "Show(table_pattern:[%t%])", }, } parser := parser.New() diff --git a/planner/core/task.go b/planner/core/task.go index a321834be79ed..c5bcfdc61f3bd 100644 --- a/planner/core/task.go +++ b/planner/core/task.go @@ -967,7 +967,18 @@ func buildIndexLookUpTask(ctx sessionctx.Context, t *copTask) *rootTask { newTask.cst += sortCPUCost } p.cost = newTask.cst - if t.needExtraProj { + + // Do not inject the extra Projection even if t.needExtraProj is set, or the schema between the phase-1 agg and + // the final agg would be broken. Please reference comments for the similar logic in + // (*copTask).convertToRootTaskImpl() for the PhysicalTableReader case. + // We need to refactor these logics. + aggPushedDown := false + switch p.tablePlan.(type) { + case *PhysicalHashAgg, *PhysicalStreamAgg: + aggPushedDown = true + } + + if t.needExtraProj && !aggPushedDown { schema := t.originSchema proj := PhysicalProjection{Exprs: expression.Column2Exprs(schema.Columns)}.Init(ctx, p.stats, t.tablePlan.SelectBlockOffset(), nil) proj.SetSchema(schema) @@ -2055,6 +2066,9 @@ func (p *PhysicalStreamAgg) attach2Task(tasks ...task) task { attachPlan2Task(finalAgg, t) finalAgg.SetCost(cop.cost()) } + } else if mpp, ok := t.(*mppTask); ok { + t = mpp.convertToRootTask(p.ctx) + attachPlan2Task(p, t) } else { attachPlan2Task(p, t) } @@ -2358,6 +2372,13 @@ func collectPartitionInfosFromMPPPlan(p *PhysicalTableReader, mppPlan PhysicalPl } } +func collectRowSizeFromMPPPlan(mppPlan PhysicalPlan) (rowSize float64) { + if mppPlan != nil && mppPlan.Stats() != nil && mppPlan.Stats().HistColl != nil { + return mppPlan.Stats().HistColl.GetAvgRowSize(mppPlan.SCtx(), mppPlan.Schema().Columns, false, false) + } + return 1 // use 1 as lower-bound for safety +} + func (t *mppTask) convertToRootTaskImpl(ctx sessionctx.Context) *rootTask { sender := PhysicalExchangeSender{ ExchangeType: tipb.ExchangeType_PassThrough, @@ -2371,15 +2392,17 @@ func (t *mppTask) convertToRootTaskImpl(ctx sessionctx.Context) *rootTask { }.Init(ctx, t.p.SelectBlockOffset()) p.stats = t.p.statsInfo() collectPartitionInfosFromMPPPlan(p, t.p) + rowSize := collectRowSizeFromMPPPlan(sender) - cst := t.cst + t.count()*ctx.GetSessionVars().GetNetworkFactor(nil) - p.cost = cst / p.ctx.GetSessionVars().CopTiFlashConcurrencyFactor + cst := t.cst + t.count()*rowSize*ctx.GetSessionVars().GetNetworkFactor(nil) + cst /= p.ctx.GetSessionVars().CopTiFlashConcurrencyFactor + p.cost = cst if p.ctx.GetSessionVars().IsMPPEnforced() { - p.cost = cst / 1000000000 + cst /= 1000000000 } rt := &rootTask{ p: p, - cst: p.cost, + cst: cst, } return rt } diff --git a/planner/core/testdata/enforce_mpp_suite_out.json b/planner/core/testdata/enforce_mpp_suite_out.json index 931c98c72d415..32e92bf19d031 100644 --- a/planner/core/testdata/enforce_mpp_suite_out.json +++ b/planner/core/testdata/enforce_mpp_suite_out.json @@ -94,10 +94,10 @@ "Plan": [ "HashAgg_21 1.00 11910.73 root funcs:count(Column#6)->Column#4", "└─TableReader_23 1.00 11877.13 root data:ExchangeSender_22", - " └─ExchangeSender_22 1.00 285050.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg_9 1.00 285050.00 batchCop[tiflash] funcs:count(1)->Column#6", - " └─Selection_20 10.00 285020.00 batchCop[tiflash] eq(test.t.a, 1)", - " └─TableFullScan_19 10000.00 255020.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender_22 1.00 285050.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg_9 1.00 285050.00 mpp[tiflash] funcs:count(1)->Column#6", + " └─Selection_20 10.00 285020.00 mpp[tiflash] eq(test.t.a, 1)", + " └─TableFullScan_19 10000.00 255020.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": null }, @@ -111,10 +111,10 @@ "Plan": [ "HashAgg_24 1.00 33.89 root funcs:count(Column#6)->Column#4", "└─TableReader_26 1.00 0.29 root data:ExchangeSender_25", - " └─ExchangeSender_25 1.00 285050.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg_9 1.00 285050.00 batchCop[tiflash] funcs:count(1)->Column#6", - " └─Selection_23 10.00 285020.00 batchCop[tiflash] eq(test.t.a, 1)", - " └─TableFullScan_22 10000.00 255020.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender_25 1.00 285050.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg_9 1.00 285050.00 mpp[tiflash] funcs:count(1)->Column#6", + " └─Selection_23 10.00 285020.00 mpp[tiflash] eq(test.t.a, 1)", + " └─TableFullScan_22 10000.00 255020.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": null }, @@ -133,10 +133,10 @@ "Plan": [ "HashAgg_21 1.00 33.89 root funcs:count(Column#6)->Column#4", "└─TableReader_23 1.00 0.29 root data:ExchangeSender_22", - " └─ExchangeSender_22 1.00 285050.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg_9 1.00 285050.00 batchCop[tiflash] funcs:count(1)->Column#6", - " └─Selection_20 10.00 285020.00 batchCop[tiflash] eq(test.t.a, 1)", - " └─TableFullScan_19 10000.00 255020.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender_22 1.00 285050.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg_9 1.00 285050.00 mpp[tiflash] funcs:count(1)->Column#6", + " └─Selection_20 10.00 285020.00 mpp[tiflash] eq(test.t.a, 1)", + " └─TableFullScan_19 10000.00 255020.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": null }, @@ -149,11 +149,11 @@ "SQL": "explain format='verbose' select count(*) from t where a=1", "Plan": [ "HashAgg_25 1.00 33.60 root funcs:count(Column#6)->Column#4", - "└─TableReader_27 1.00 0.00 root data:ExchangeSender_26", - " └─ExchangeSender_26 1.00 285050.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg_10 1.00 285050.00 batchCop[tiflash] funcs:count(1)->Column#6", - " └─Selection_24 10.00 285020.00 batchCop[tiflash] eq(test.t.a, 1)", - " └─TableFullScan_23 10000.00 255020.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─TableReader_27 1.00 0.29 root data:ExchangeSender_26", + " └─ExchangeSender_26 1.00 285050.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg_10 1.00 285050.00 mpp[tiflash] funcs:count(1)->Column#6", + " └─Selection_24 10.00 285020.00 mpp[tiflash] eq(test.t.a, 1)", + " └─TableFullScan_23 10000.00 255020.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": null }, @@ -173,11 +173,11 @@ "SQL": "explain format='verbose' select /*+ read_from_storage(tiflash[t]) */ count(*) from t where a=1", "Plan": [ "HashAgg_22 1.00 33.60 root funcs:count(Column#6)->Column#4", - "└─TableReader_24 1.00 0.00 root data:ExchangeSender_23", - " └─ExchangeSender_23 1.00 285050.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg_10 1.00 285050.00 batchCop[tiflash] funcs:count(1)->Column#6", - " └─Selection_21 10.00 285020.00 batchCop[tiflash] eq(test.t.a, 1)", - " └─TableFullScan_20 10000.00 255020.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─TableReader_24 1.00 0.29 root data:ExchangeSender_23", + " └─ExchangeSender_23 1.00 285050.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg_10 1.00 285050.00 mpp[tiflash] funcs:count(1)->Column#6", + " └─Selection_21 10.00 285020.00 mpp[tiflash] eq(test.t.a, 1)", + " └─TableFullScan_20 10000.00 255020.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": null } @@ -418,9 +418,9 @@ "Plan": [ "HashAgg_24 8000.00 root group by:test.t.b, funcs:count(Column#7)->Column#4", "└─TableReader_26 8000.00 root data:ExchangeSender_25", - " └─ExchangeSender_25 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg_11 8000.00 batchCop[tiflash] group by:test.t.b, funcs:count(1)->Column#7", - " └─TableFullScan_21 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender_25 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg_11 8000.00 mpp[tiflash] group by:test.t.b, funcs:count(1)->Column#7", + " └─TableFullScan_21 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because when `new_collation_enabled` is true, HashJoin or HashAgg with string key is not supported now.", @@ -432,14 +432,14 @@ "SQL": "EXPLAIN SELECT * from t t1 join t t2 on t1.b=t2.b; -- 2. new collation FIXME", "Plan": [ "TableReader_34 12487.50 root data:ExchangeSender_33", - "└─ExchangeSender_33 12487.50 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin_32 12487.50 cop[tiflash] inner join, equal:[eq(test.t.b, test.t.b)]", - " ├─ExchangeReceiver_15(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender_14 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection_13 9990.00 cop[tiflash] not(isnull(test.t.b))", - " │ └─TableFullScan_12 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo", - " └─Selection_17(Probe) 9990.00 cop[tiflash] not(isnull(test.t.b))", - " └─TableFullScan_16 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo" + "└─ExchangeSender_33 12487.50 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin_32 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.b, test.t.b)]", + " ├─ExchangeReceiver_15(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender_14 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection_13 9990.00 mpp[tiflash] not(isnull(test.t.b))", + " │ └─TableFullScan_12 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo", + " └─Selection_17(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.b))", + " └─TableFullScan_16 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo" ], "Warn": null } @@ -457,10 +457,10 @@ "SQL": "EXPLAIN SELECT /*+ MERGE_JOIN(t,s) */ * from t join s using(a); -- 1. hint use MERGE_JOIN", "Plan": [ "MergeJoin_8 12500.00 root inner join, left key:test.t.a, right key:test.s.a", - "├─TableReader_19(Build) 10000.00 root data:TableFullScan_18", - "│ └─TableFullScan_18 10000.00 cop[tiflash] table:s keep order:true, stats:pseudo", - "└─TableReader_15(Probe) 10000.00 root data:TableFullScan_14", - " └─TableFullScan_14 10000.00 cop[tiflash] table:t keep order:true, stats:pseudo" + "├─TableReader_18(Build) 10000.00 root data:TableFullScan_17", + "│ └─TableFullScan_17 10000.00 cop[tiflash] table:s keep order:true, stats:pseudo", + "└─TableReader_14(Probe) 10000.00 root data:TableFullScan_13", + " └─TableFullScan_13 10000.00 cop[tiflash] table:t keep order:true, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because you have used hint to specify a join algorithm which is not supported by mpp now.", @@ -470,11 +470,11 @@ { "SQL": "EXPLAIN SELECT /*+ INL_JOIN(t,s) */ * from t, s where t.a=s.a; -- 2. hint use INL_JOIN", "Plan": [ - "IndexJoin_16 12500.00 root inner join, inner:TableReader_13, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", - "├─TableReader_33(Build) 10000.00 root data:TableFullScan_32", - "│ └─TableFullScan_32 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - "└─TableReader_13(Probe) 1.00 root data:TableRangeScan_12", - " └─TableRangeScan_12 1.00 cop[tikv] table:s range: decided by [test.t.a], keep order:false, stats:pseudo" + "IndexJoin_15 12500.00 root inner join, inner:TableReader_12, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", + "├─TableReader_32(Build) 10000.00 root data:TableFullScan_31", + "│ └─TableFullScan_31 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + "└─TableReader_12(Probe) 1.00 root data:TableRangeScan_11", + " └─TableRangeScan_11 1.00 cop[tikv] table:s range: decided by [test.t.a], keep order:false, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because you have used hint to specify a join algorithm which is not supported by mpp now.", @@ -484,11 +484,11 @@ { "SQL": "EXPLAIN SELECT /*+ INL_HASH_JOIN(t,s) */ * from t join s using(a); -- 3. hint use INL_HASH_JOIN", "Plan": [ - "IndexHashJoin_17 12500.00 root inner join, inner:TableReader_12, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", - "├─TableReader_32(Build) 10000.00 root data:TableFullScan_31", - "│ └─TableFullScan_31 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - "└─TableReader_12(Probe) 1.00 root data:TableRangeScan_11", - " └─TableRangeScan_11 1.00 cop[tikv] table:s range: decided by [test.t.a], keep order:false, stats:pseudo" + "IndexHashJoin_16 12500.00 root inner join, inner:TableReader_11, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", + "├─TableReader_31(Build) 10000.00 root data:TableFullScan_30", + "│ └─TableFullScan_30 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + "└─TableReader_11(Probe) 1.00 root data:TableRangeScan_10", + " └─TableRangeScan_10 1.00 cop[tikv] table:s range: decided by [test.t.a], keep order:false, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because you have used hint to specify a join algorithm which is not supported by mpp now.", @@ -498,11 +498,11 @@ { "SQL": "EXPLAIN SELECT /*+ HASH_JOIN(t,s) */ * from t join s using(a); -- 4. hint use INL_JOIN", "Plan": [ - "HashJoin_29 12500.00 root inner join, equal:[eq(test.t.a, test.s.a)]", - "├─TableReader_38(Build) 10000.00 root data:TableFullScan_37", - "│ └─TableFullScan_37 10000.00 cop[tiflash] table:s keep order:false, stats:pseudo", - "└─TableReader_34(Probe) 10000.00 root data:TableFullScan_33", - " └─TableFullScan_33 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "HashJoin_28 12500.00 root inner join, equal:[eq(test.t.a, test.s.a)]", + "├─TableReader_37(Build) 10000.00 root data:TableFullScan_36", + "│ └─TableFullScan_36 10000.00 cop[tiflash] table:s keep order:false, stats:pseudo", + "└─TableReader_33(Probe) 10000.00 root data:TableFullScan_32", + " └─TableFullScan_32 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because you have used hint to specify a join algorithm which is not supported by mpp now.", @@ -556,12 +556,12 @@ "SQL": "EXPLAIN SELECT * from t join s; -- can use mpp", "Plan": [ "TableReader_27 100000000.00 root data:ExchangeSender_26", - "└─ExchangeSender_26 100000000.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin_25 100000000.00 cop[tiflash] CARTESIAN inner join", - " ├─ExchangeReceiver_13(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender_12 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan_11 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan_14(Probe) 10000.00 cop[tiflash] table:s keep order:false, stats:pseudo" + "└─ExchangeSender_26 100000000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin_25 100000000.00 mpp[tiflash] CARTESIAN inner join", + " ├─ExchangeReceiver_13(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender_12 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan_11 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan_14(Probe) 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo" ], "Warn": null }, @@ -574,12 +574,12 @@ "SQL": "EXPLAIN SELECT * from t join s; -- can use mpp", "Plan": [ "TableReader_27 100000000.00 root data:ExchangeSender_26", - "└─ExchangeSender_26 100000000.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin_25 100000000.00 cop[tiflash] CARTESIAN inner join", - " ├─ExchangeReceiver_13(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender_12 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan_11 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan_14(Probe) 10000.00 cop[tiflash] table:s keep order:false, stats:pseudo" + "└─ExchangeSender_26 100000000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin_25 100000000.00 mpp[tiflash] CARTESIAN inner join", + " ├─ExchangeReceiver_13(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender_12 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan_11 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan_14(Probe) 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo" ], "Warn": null }, @@ -591,30 +591,30 @@ { "SQL": "explain select a from t where t.a>1 or t.a in (select a from t); -- 7. left outer semi join", "Plan": [ - "TableReader_49 8000.00 root data:ExchangeSender_48", - "└─ExchangeSender_48 8000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection_8 8000.00 cop[tiflash] test.t.a", - " └─Selection_46 8000.00 cop[tiflash] or(gt(test.t.a, 1), Column#3)", - " └─HashJoin_47 10000.00 cop[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)]", - " ├─ExchangeReceiver_27(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender_26 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan_25 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan_24(Probe) 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "TableReader_48 8000.00 root data:ExchangeSender_47", + "└─ExchangeSender_47 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection_8 8000.00 mpp[tiflash] test.t.a", + " └─Selection_45 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#3)", + " └─HashJoin_46 10000.00 mpp[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " ├─ExchangeReceiver_26(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender_25 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan_24 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan_23(Probe) 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": null }, { "SQL": "explain select a from t where t.a>1 or t.a not in (select a from t); -- now it's supported -- 8. anti left outer semi join", "Plan": [ - "TableReader_49 8000.00 root data:ExchangeSender_48", - "└─ExchangeSender_48 8000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection_8 8000.00 cop[tiflash] test.t.a", - " └─Selection_46 8000.00 cop[tiflash] or(gt(test.t.a, 1), Column#3)", - " └─HashJoin_47 10000.00 cop[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", - " ├─ExchangeReceiver_27(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender_26 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan_25 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan_24(Probe) 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "TableReader_48 8000.00 root data:ExchangeSender_47", + "└─ExchangeSender_47 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection_8 8000.00 mpp[tiflash] test.t.a", + " └─Selection_45 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#3)", + " └─HashJoin_46 10000.00 mpp[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " ├─ExchangeReceiver_26(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender_25 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan_24 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan_23(Probe) 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ], "Warn": null }, @@ -622,10 +622,10 @@ "SQL": "explain select a from t where t.a not in (select a from s where t.a<1); -- 9. non left join has left conditions", "Plan": [ "MergeJoin_10 8000.00 root anti semi join, left key:test.t.a, right key:test.s.a, left cond:[lt(test.t.a, 1)]", - "├─TableReader_30(Build) 10000.00 root data:TableFullScan_29", - "│ └─TableFullScan_29 10000.00 cop[tiflash] table:s keep order:true, stats:pseudo", - "└─TableReader_26(Probe) 10000.00 root data:TableFullScan_25", - " └─TableFullScan_25 10000.00 cop[tiflash] table:t keep order:true, stats:pseudo" + "├─TableReader_29(Build) 10000.00 root data:TableFullScan_28", + "│ └─TableFullScan_28 10000.00 cop[tiflash] table:s keep order:true, stats:pseudo", + "└─TableReader_25(Probe) 10000.00 root data:TableFullScan_24", + " └─TableFullScan_24 10000.00 cop[tiflash] table:t keep order:true, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because there is a join that is not `left join` but has left conditions, which is not supported by mpp now, see github.com/pingcap/tidb/issues/26090 for more information.", diff --git a/planner/core/testdata/integration_suite_in.json b/planner/core/testdata/integration_suite_in.json index b874166c28eaf..a93847591c21a 100644 --- a/planner/core/testdata/integration_suite_in.json +++ b/planner/core/testdata/integration_suite_in.json @@ -867,5 +867,20 @@ "desc format = 'brief' select * from ((select count(*) from (select id,name from t order by id)a group by name,id order by id) union all (select id+1 from t order by 1))c", "desc format = 'brief' select * from (select * from t order by id)a order by name" ] + }, + { + "name": "TestIssue32632", + "cases": [ + "explain format = 'brief' select sum(ps_supplycost) from partsupp, supplier where ps_suppkey = s_suppkey;" + ] + }, + { + "name": "TestTiFlashPartitionTableScan", + "cases": [ + "explain format = 'brief' select * from rp_t where a = 1 or a = 20", + "explain format = 'brief' select * from hp_t where a = 1 or a = 20", + "explain format = 'brief' select count(*) from rp_t where a = 1 or a = 20", + "explain format = 'brief' select count(*) from hp_t where a = 1 or a = 20" + ] } ] diff --git a/planner/core/testdata/integration_suite_out.json b/planner/core/testdata/integration_suite_out.json index 6d3a10ddf9fa9..c9f4c39a74b2b 100644 --- a/planner/core/testdata/integration_suite_out.json +++ b/planner/core/testdata/integration_suite_out.json @@ -1332,7 +1332,7 @@ "└─IndexRangeScan 20.00 cop[tikv] table:tt, index:a(a) range:[10,10], [20,20], keep order:false, stats:pseudo" ], "Warnings": [ - "Warning 1105 IndexMerge is inapplicable." + "Warning 1105 IndexMerge is inapplicable" ] }, { @@ -1342,7 +1342,7 @@ "└─IndexRangeScan 6666.67 cop[tikv] table:tt, index:a(a) range:[-inf,10), [15,15], (20,+inf], keep order:false, stats:pseudo" ], "Warnings": [ - "Warning 1105 IndexMerge is inapplicable." + "Warning 1105 IndexMerge is inapplicable" ] } ] @@ -2062,12 +2062,12 @@ { "SQL": "select /*+ use_index_merge(t1) */ 1 from t1 where c1 = 'de' or c2 = '10' and from_base64(to_base64(c1)) = 'ab';", "Plan": [ - "Projection 17.99 root 1->Column#5", - "└─IndexMerge 0.04 root ", - " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c1(c1) range:[\"de\",\"de\"], keep order:false, stats:pseudo", - " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c2(c2) range:[\"10\",\"10\"], keep order:false, stats:pseudo", - " └─Selection(Probe) 0.04 cop[tikv] or(eq(test.t1.c1, \"de\"), and(eq(test.t1.c2, \"10\"), eq(from_base64(to_base64(test.t1.c1)), \"ab\")))", - " └─TableRowIDScan 19.99 cop[tikv] table:t1 keep order:false, stats:pseudo" + "Projection 15.99 root 1->Column#5", + "└─Selection 15.99 root or(eq(test.t1.c1, \"de\"), and(eq(test.t1.c2, \"10\"), eq(from_base64(to_base64(test.t1.c1)), \"ab\")))", + " └─IndexMerge 19.99 root ", + " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c1(c1) range:[\"de\",\"de\"], keep order:false, stats:pseudo", + " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c2(c2) range:[\"10\",\"10\"], keep order:false, stats:pseudo", + " └─TableRowIDScan(Probe) 19.99 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1" @@ -2077,11 +2077,11 @@ "SQL": "select /*+ use_index_merge(t1) */ 1 from t1 where c1 = 'ab' or c2 = '10' and char_length(left(c1, 10)) = 10;", "Plan": [ "Projection 17.99 root 1->Column#5", - "└─IndexMerge 0.04 root ", - " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c1(c1) range:[\"ab\",\"ab\"], keep order:false, stats:pseudo", - " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c2(c2) range:[\"10\",\"10\"], keep order:false, stats:pseudo", - " └─Selection(Probe) 0.04 cop[tikv] or(eq(test.t1.c1, \"ab\"), and(eq(test.t1.c2, \"10\"), eq(char_length(left(test.t1.c1, 10)), 10)))", - " └─TableRowIDScan 19.99 cop[tikv] table:t1 keep order:false, stats:pseudo" + "└─Selection 0.04 root or(eq(test.t1.c1, \"ab\"), and(eq(test.t1.c2, \"10\"), eq(char_length(left(test.t1.c1, 10)), 10)))", + " └─IndexMerge 19.99 root ", + " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c1(c1) range:[\"ab\",\"ab\"], keep order:false, stats:pseudo", + " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c2(c2) range:[\"10\",\"10\"], keep order:false, stats:pseudo", + " └─TableRowIDScan(Probe) 19.99 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1" @@ -2090,12 +2090,12 @@ { "SQL": "select /*+ use_index_merge(tt1) */ 1 from tt1 where c1 = 'de' or c2 = '10' and from_base64(to_base64(c3)) = '10';", "Plan": [ - "Projection 17.99 root 1->Column#6", - "└─IndexMerge 17.99 root ", - " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:tt1, index:idx_0(c1) range:[\"de\",\"de\"], keep order:false, stats:pseudo", - " ├─Selection(Build) 8.00 cop[tikv] eq(from_base64(to_base64(test.tt1.c3)), \"10\")", - " │ └─IndexRangeScan 10.00 cop[tikv] table:tt1, index:idx_1(c2, c3) range:[\"10\",\"10\"], keep order:false, stats:pseudo", - " └─TableRowIDScan(Probe) 17.99 cop[tikv] table:tt1 keep order:false, stats:pseudo" + "Projection 15.99 root 1->Column#6", + "└─Selection 15.99 root or(eq(test.tt1.c1, \"de\"), and(eq(test.tt1.c2, \"10\"), eq(from_base64(to_base64(test.tt1.c3)), \"10\")))", + " └─IndexMerge 19.99 root ", + " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:tt1, index:idx_0(c1) range:[\"de\",\"de\"], keep order:false, stats:pseudo", + " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:tt1, index:idx_1(c2, c3) range:[\"10\",\"10\"], keep order:false, stats:pseudo", + " └─TableRowIDScan(Probe) 19.99 cop[tikv] table:tt1 keep order:false, stats:pseudo" ], "Res": [ "1" @@ -2104,13 +2104,12 @@ { "SQL": "select /*+ use_index_merge( tt2 ) */ 1 from tt2 where tt2.c1 in (-3896405) or tt2.pk in (1, 53330) and to_base64(left(pk, 5));", "Plan": [ - "Projection 2.60 root 1->Column#3", - "└─IndexMerge 0.00 root ", - " ├─IndexRangeScan(Build) 1.00 cop[tikv] table:tt2, index:c1(c1) range:[-3896405,-3896405], keep order:false, stats:pseudo", - " ├─Selection(Build) 1.60 cop[tikv] istrue_with_null(cast(to_base64(left(cast(test.tt2.pk, var_string(20)), 5)), double BINARY))", - " │ └─TableRangeScan 2.00 cop[tikv] table:tt2 range:[1,1], [53330,53330], keep order:false, stats:pseudo", - " └─Selection(Probe) 0.00 cop[tikv] or(eq(test.tt2.c1, -3896405), and(in(test.tt2.pk, 1, 53330), istrue_with_null(cast(to_base64(left(cast(test.tt2.pk, var_string(20)), 5)), double BINARY))))", - " └─TableRowIDScan 3.00 cop[tikv] table:tt2 keep order:false, stats:pseudo" + "Projection 2.40 root 1->Column#3", + "└─Selection 2.40 root or(eq(test.tt2.c1, -3896405), and(in(test.tt2.pk, 1, 53330), istrue_with_null(cast(to_base64(left(cast(test.tt2.pk, var_string(20)), 5)), double BINARY))))", + " └─IndexMerge 3.00 root ", + " ├─IndexRangeScan(Build) 1.00 cop[tikv] table:tt2, index:c1(c1) range:[-3896405,-3896405], keep order:false, stats:pseudo", + " ├─TableRangeScan(Build) 2.00 cop[tikv] table:tt2 range:[1,1], [53330,53330], keep order:false, stats:pseudo", + " └─TableRowIDScan(Probe) 3.00 cop[tikv] table:tt2 keep order:false, stats:pseudo" ], "Res": [ "1" @@ -2133,12 +2132,10 @@ { "SQL": "select 1 from t1 where c1 = 'de' or c2 = '10' and from_base64(to_base64(c1)) = 'ab';", "Plan": [ - "Projection 17.99 root 1->Column#5", - "└─IndexMerge 0.04 root ", - " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c1(c1) range:[\"de\",\"de\"], keep order:false, stats:pseudo", - " ├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:c2(c2) range:[\"10\",\"10\"], keep order:false, stats:pseudo", - " └─Selection(Probe) 0.04 cop[tikv] or(eq(test.t1.c1, \"de\"), and(eq(test.t1.c2, \"10\"), eq(from_base64(to_base64(test.t1.c1)), \"ab\")))", - " └─TableRowIDScan 19.99 cop[tikv] table:t1 keep order:false, stats:pseudo" + "Projection 8000.00 root 1->Column#5", + "└─Selection 8000.00 root or(eq(test.t1.c1, \"de\"), and(eq(test.t1.c2, \"10\"), eq(from_base64(to_base64(test.t1.c1)), \"ab\")))", + " └─TableReader 10000.00 root data:TableFullScan", + " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ], "Res": [ "1" @@ -2394,12 +2391,12 @@ "SQL": "explain format = 'verbose' select count(*) from t2 group by a", "Plan": [ "TableReader_24 3.00 3.33 root data:ExchangeSender_23", - "└─ExchangeSender_23 3.00 77.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection_22 3.00 0.00 batchCop[tiflash] Column#4", - " └─HashAgg_8 3.00 77.00 batchCop[tiflash] group by:test.t2.a, funcs:count(1)->Column#4", - " └─ExchangeReceiver_21 3.00 68.00 batchCop[tiflash] ", - " └─ExchangeSender_20 3.00 68.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t2.a, collate: binary]", - " └─TableFullScan_19 3.00 65.00 batchCop[tiflash] table:t2 keep order:false" + "└─ExchangeSender_23 3.00 77.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection_22 3.00 0.00 mpp[tiflash] Column#4", + " └─HashAgg_8 3.00 77.00 mpp[tiflash] group by:test.t2.a, funcs:count(1)->Column#4", + " └─ExchangeReceiver_21 3.00 68.00 mpp[tiflash] ", + " └─ExchangeSender_20 3.00 68.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t2.a, collate: binary]", + " └─TableFullScan_19 3.00 65.00 mpp[tiflash] table:t2 keep order:false" ] }, { @@ -2443,16 +2440,16 @@ { "SQL": "explain format = 'verbose' select count(*) from t1 join t2 on t1.a = t2.a", "Plan": [ - "StreamAgg_12 1.00 18.93 root funcs:count(1)->Column#7", - "└─TableReader_45 3.00 9.93 root data:ExchangeSender_44", - " └─ExchangeSender_44 3.00 235.38 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin_41 3.00 235.38 cop[tiflash] inner join, equal:[eq(test.t1.a, test.t2.a)]", - " ├─ExchangeReceiver_20(Build) 3.00 77.00 cop[tiflash] ", - " │ └─ExchangeSender_19 3.00 77.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection_18 3.00 74.00 cop[tiflash] not(isnull(test.t1.a))", - " │ └─TableFullScan_17 3.00 65.00 cop[tiflash] table:t1 keep order:false", - " └─Selection_22(Probe) 3.00 74.00 cop[tiflash] not(isnull(test.t2.a))", - " └─TableFullScan_21 3.00 65.00 cop[tiflash] table:t2 keep order:false" + "StreamAgg_14 1.00 18.93 root funcs:count(1)->Column#7", + "└─TableReader_46 3.00 9.93 root data:ExchangeSender_45", + " └─ExchangeSender_45 3.00 235.38 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin_42 3.00 235.38 mpp[tiflash] inner join, equal:[eq(test.t1.a, test.t2.a)]", + " ├─ExchangeReceiver_21(Build) 3.00 77.00 mpp[tiflash] ", + " │ └─ExchangeSender_20 3.00 77.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection_19 3.00 74.00 mpp[tiflash] not(isnull(test.t1.a))", + " │ └─TableFullScan_18 3.00 65.00 mpp[tiflash] table:t1 keep order:false", + " └─Selection_23(Probe) 3.00 74.00 mpp[tiflash] not(isnull(test.t2.a))", + " └─TableFullScan_22 3.00 65.00 mpp[tiflash] table:t2 keep order:false" ] }, { @@ -2463,14 +2460,14 @@ " ├─IndexReader_53(Build) 3.00 11.66 root index:IndexFullScan_52", " │ └─IndexFullScan_52 3.00 150.50 cop[tikv] table:t3, index:c(b) keep order:false", " └─TableReader_39(Probe) 3.00 11.14 root data:ExchangeSender_38", - " └─ExchangeSender_38 3.00 264.38 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin_29 3.00 264.38 cop[tiflash] inner join, equal:[eq(test.t1.a, test.t2.a)]", - " ├─ExchangeReceiver_35(Build) 3.00 106.00 cop[tiflash] ", - " │ └─ExchangeSender_34 3.00 106.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection_33 3.00 103.00 cop[tiflash] not(isnull(test.t1.a)), not(isnull(test.t1.b))", - " │ └─TableFullScan_32 3.00 94.00 cop[tiflash] table:t1 keep order:false", - " └─Selection_37(Probe) 3.00 74.00 cop[tiflash] not(isnull(test.t2.a))", - " └─TableFullScan_36 3.00 65.00 cop[tiflash] table:t2 keep order:false" + " └─ExchangeSender_38 3.00 264.38 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin_29 3.00 264.38 mpp[tiflash] inner join, equal:[eq(test.t1.a, test.t2.a)]", + " ├─ExchangeReceiver_35(Build) 3.00 106.00 mpp[tiflash] ", + " │ └─ExchangeSender_34 3.00 106.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection_33 3.00 103.00 mpp[tiflash] not(isnull(test.t1.a)), not(isnull(test.t1.b))", + " │ └─TableFullScan_32 3.00 94.00 mpp[tiflash] table:t1 keep order:false", + " └─Selection_37(Probe) 3.00 74.00 mpp[tiflash] not(isnull(test.t2.a))", + " └─TableFullScan_36 3.00 65.00 mpp[tiflash] table:t2 keep order:false" ] }, { @@ -2489,24 +2486,24 @@ " └─Projection_27(Probe) 1.00 21.95 root 1->Column#26", " └─Limit_30 1.00 3.35 root offset:0, count:1", " └─TableReader_38 1.00 3.35 root data:ExchangeSender_37", - " └─ExchangeSender_37 1.00 79.50 cop[tiflash] ExchangeType: PassThrough", - " └─Limit_36 1.00 79.50 cop[tiflash] offset:0, count:1", - " └─TableFullScan_35 1.00 79.50 cop[tiflash] table:t2 keep order:false" + " └─ExchangeSender_37 1.00 79.50 mpp[tiflash] ExchangeType: PassThrough", + " └─Limit_36 1.00 79.50 mpp[tiflash] offset:0, count:1", + " └─TableFullScan_35 1.00 79.50 mpp[tiflash] table:t2 keep order:false" ] }, { "SQL": "explain format = 'verbose' select /*+ merge_join(t1) */ count(*) from t1 join t2 on t1.a = t2.a", "Plan": [ - "StreamAgg_11 1.00 59.65 root funcs:count(1)->Column#7", - "└─MergeJoin_30 3.00 50.65 root inner join, left key:test.t1.a, right key:test.t2.a", - " ├─Sort_28(Build) 3.00 20.83 root test.t2.a", - " │ └─TableReader_27 3.00 6.56 root data:Selection_26", - " │ └─Selection_26 3.00 74.00 cop[tiflash] not(isnull(test.t2.a))", - " │ └─TableFullScan_25 3.00 65.00 cop[tiflash] table:t2 keep order:false", - " └─Sort_21(Probe) 3.00 20.83 root test.t1.a", - " └─TableReader_20 3.00 6.56 root data:Selection_19", - " └─Selection_19 3.00 74.00 cop[tiflash] not(isnull(test.t1.a))", - " └─TableFullScan_18 3.00 65.00 cop[tiflash] table:t1 keep order:false" + "StreamAgg_13 1.00 59.65 root funcs:count(1)->Column#7", + "└─MergeJoin_31 3.00 50.65 root inner join, left key:test.t1.a, right key:test.t2.a", + " ├─Sort_29(Build) 3.00 20.83 root test.t2.a", + " │ └─TableReader_28 3.00 6.56 root data:Selection_27", + " │ └─Selection_27 3.00 74.00 cop[tiflash] not(isnull(test.t2.a))", + " │ └─TableFullScan_26 3.00 65.00 cop[tiflash] table:t2 keep order:false", + " └─Sort_22(Probe) 3.00 20.83 root test.t1.a", + " └─TableReader_21 3.00 6.56 root data:Selection_20", + " └─Selection_20 3.00 74.00 cop[tiflash] not(isnull(test.t1.a))", + " └─TableFullScan_19 3.00 65.00 cop[tiflash] table:t1 keep order:false" ] } ] @@ -2785,14 +2782,14 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─Selection(Probe) 8.00 cop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─Selection(Probe) 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2800,24 +2797,24 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#17", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] inner join, equal:[eq(test.fact_t.d3_k, test.d3_t.d3_k)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d3_t.d3_k))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d3_t keep order:false", - " └─HashJoin(Probe) 8.00 cop[tiflash] inner join, equal:[eq(test.fact_t.d2_k, test.d2_t.d2_k)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d2_t.d2_k))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d2_t keep order:false", - " └─HashJoin(Probe) 8.00 cop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─Selection(Probe) 8.00 cop[tiflash] not(isnull(test.fact_t.d1_k)), not(isnull(test.fact_t.d2_k)), not(isnull(test.fact_t.d3_k))", - " └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] inner join, equal:[eq(test.fact_t.d3_k, test.d3_t.d3_k)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d3_t.d3_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d3_t keep order:false", + " └─HashJoin(Probe) 8.00 mpp[tiflash] inner join, equal:[eq(test.fact_t.d2_k, test.d2_t.d2_k)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d2_t.d2_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d2_t keep order:false", + " └─HashJoin(Probe) 8.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─Selection(Probe) 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k)), not(isnull(test.fact_t.d2_k)), not(isnull(test.fact_t.d3_k))", + " └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2825,14 +2822,14 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─Selection(Probe) 8.00 cop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─Selection(Probe) 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2840,13 +2837,13 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─TableFullScan(Probe) 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─TableFullScan(Probe) 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2854,13 +2851,13 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", - " ├─ExchangeReceiver(Build) 8.00 cop[tiflash] ", - " │ └─ExchangeSender 8.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 8.00 cop[tiflash] not(isnull(test.fact_t.d1_k))", - " │ └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false", - " └─TableFullScan(Probe) 2.00 cop[tiflash] table:d1_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " ├─ExchangeReceiver(Build) 8.00 mpp[tiflash] ", + " │ └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " │ └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false", + " └─TableFullScan(Probe) 2.00 mpp[tiflash] table:d1_t keep order:false" ] }, { @@ -2868,14 +2865,14 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)], other cond:gt(test.fact_t.col1, test.d1_t.value)", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─Selection(Probe) 8.00 cop[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)], other cond:gt(test.fact_t.col1, test.d1_t.value)", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─Selection(Probe) 8.00 mpp[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2883,13 +2880,13 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col1, 10)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─TableFullScan(Probe) 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col1, 10)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─TableFullScan(Probe) 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2897,13 +2894,13 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col2, 10)], other cond:gt(test.fact_t.col1, test.d1_t.value)", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─TableFullScan(Probe) 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col2, 10)], other cond:gt(test.fact_t.col1, test.d1_t.value)", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─TableFullScan(Probe) 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2911,13 +2908,13 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10)", - " ├─ExchangeReceiver(Build) 8.00 cop[tiflash] ", - " │ └─ExchangeSender 8.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 8.00 cop[tiflash] not(isnull(test.fact_t.d1_k))", - " │ └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false", - " └─TableFullScan(Probe) 2.00 cop[tiflash] table:d1_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10)", + " ├─ExchangeReceiver(Build) 8.00 mpp[tiflash] ", + " │ └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " │ └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false", + " └─TableFullScan(Probe) 2.00 mpp[tiflash] table:d1_t keep order:false" ] }, { @@ -2925,13 +2922,13 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 8.00 root data:ExchangeSender", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8.00 cop[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10), other cond:gt(test.fact_t.col1, test.d1_t.value)", - " ├─ExchangeReceiver(Build) 8.00 cop[tiflash] ", - " │ └─ExchangeSender 8.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 8.00 cop[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", - " │ └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false", - " └─TableFullScan(Probe) 2.00 cop[tiflash] table:d1_t keep order:false" + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10), other cond:gt(test.fact_t.col1, test.d1_t.value)", + " ├─ExchangeReceiver(Build) 8.00 mpp[tiflash] ", + " │ └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 8.00 mpp[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", + " │ └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false", + " └─TableFullScan(Probe) 2.00 mpp[tiflash] table:d1_t keep order:false" ] }, { @@ -2939,14 +2936,14 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#12", "└─TableReader 6.40 root data:ExchangeSender", - " └─ExchangeSender 6.40 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6.40 cop[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─Selection(Probe) 8.00 cop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 6.40 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─Selection(Probe) 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2954,14 +2951,14 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#12", "└─TableReader 6.40 root data:ExchangeSender", - " └─ExchangeSender 6.40 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6.40 cop[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─Selection(Probe) 8.00 cop[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 6.40 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─Selection(Probe) 8.00 mpp[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2969,12 +2966,12 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#12", "└─TableReader 6.40 root data:ExchangeSender", - " └─ExchangeSender 6.40 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6.40 cop[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─TableFullScan(Probe) 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 6.40 mpp[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─TableFullScan(Probe) 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2982,12 +2979,12 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#12", "└─TableReader 6.40 root data:ExchangeSender", - " └─ExchangeSender 6.40 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6.40 cop[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─TableFullScan(Probe) 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 6.40 mpp[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─TableFullScan(Probe) 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -2995,15 +2992,15 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 16.00 batchCop[tiflash] CARTESIAN inner join, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", - " ├─ExchangeReceiver(Build) 2.00 batchCop[tiflash] ", - " │ └─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 2.00 batchCop[tiflash] table:d1_t keep order:false", - " └─Selection(Probe) 8.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 8.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 16.00 mpp[tiflash] CARTESIAN inner join, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─Selection(Probe) 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3011,14 +3008,14 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 16.00 batchCop[tiflash] CARTESIAN left outer join, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", - " ├─ExchangeReceiver(Build) 2.00 batchCop[tiflash] ", - " │ └─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 2.00 batchCop[tiflash] table:d1_t keep order:false", - " └─TableFullScan(Probe) 8.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 16.00 mpp[tiflash] CARTESIAN left outer join, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─TableFullScan(Probe) 8.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3026,14 +3023,14 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 16.00 batchCop[tiflash] CARTESIAN right outer join, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", - " ├─ExchangeReceiver(Build) 8.00 batchCop[tiflash] ", - " │ └─ExchangeSender 8.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 8.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " │ └─TableFullScan 8.00 batchCop[tiflash] table:fact_t keep order:false", - " └─TableFullScan(Probe) 2.00 batchCop[tiflash] table:d1_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 16.00 mpp[tiflash] CARTESIAN right outer join, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", + " ├─ExchangeReceiver(Build) 8.00 mpp[tiflash] ", + " │ └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " │ └─TableFullScan 8.00 mpp[tiflash] table:fact_t keep order:false", + " └─TableFullScan(Probe) 2.00 mpp[tiflash] table:d1_t keep order:false" ] }, { @@ -3041,12 +3038,12 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 6.40 root data:ExchangeSender", - " └─ExchangeSender 6.40 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6.40 cop[tiflash] CARTESIAN anti semi join, other cond:eq(test.fact_t.d1_k, test.d1_t.d1_k)", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 2.00 cop[tiflash] table:d1_t keep order:false", - " └─TableFullScan(Probe) 8.00 cop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 6.40 mpp[tiflash] CARTESIAN anti semi join, other cond:eq(test.fact_t.d1_k, test.d1_t.d1_k)", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", + " └─TableFullScan(Probe) 8.00 mpp[tiflash] table:fact_t keep order:false" ] } ] @@ -3058,14 +3055,14 @@ "SQL": "explain format = 'brief' select * from test.t t1 where t1.a>1 or t1.a in (select a from test.t); -- left semi", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 cop[tiflash] test.t.a, test.t.b", - " └─Selection 8000.00 cop[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 cop[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)]", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan(Probe) 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", + " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", + " └─HashJoin 10000.00 mpp[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan(Probe) 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ], "Warn": null }, @@ -3073,14 +3070,14 @@ "SQL": "explain format = 'brief' select * from test.t t1 where t1.a>1 or t1.a in (select a from test.t where b1 or t1.a not in (select a from test.t); -- left anti", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 cop[tiflash] test.t.a, test.t.b", - " └─Selection 8000.00 cop[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 cop[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan(Probe) 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", + " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", + " └─HashJoin 10000.00 mpp[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan(Probe) 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ], "Warn": null }, @@ -3103,14 +3100,14 @@ "SQL": "explain format = 'brief' select * from test.t t1 where t1.a>1 or t1.a not in (select a from test.t where b1 or t1.b in (select a from test.t); -- cartesian left semi", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 cop[tiflash] test.t.a, test.t.b", - " └─Selection 8000.00 cop[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 cop[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.b, test.t.a)", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan(Probe) 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", + " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", + " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.b, test.t.a)", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan(Probe) 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ], "Warn": null }, @@ -3133,14 +3130,14 @@ "SQL": "explain format = 'brief' select * from test.t t1 where t1.a>1 or t1.a in (select b from test.t where b1 or t1.b not in (select a from test.t); -- cartesian left anti", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 cop[tiflash] test.t.a, test.t.b", - " └─Selection 8000.00 cop[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 cop[tiflash] CARTESIAN anti left outer semi join, other cond:eq(test.t.b, test.t.a)", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan(Probe) 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", + " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", + " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN anti left outer semi join, other cond:eq(test.t.b, test.t.a)", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan(Probe) 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ], "Warn": null }, @@ -3163,14 +3160,14 @@ "SQL": "explain format = 'brief' select * from test.t t1 where t1.a>1 or t1.b not in (select a from test.t where bColumn#7", "└─TableReader 2.00 root data:ExchangeSender", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", - " ├─ExchangeReceiver(Build) 3.00 cop[tiflash] ", - " │ └─ExchangeSender 3.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 3.00 cop[tiflash] not(isnull(test.b.id))", - " │ └─TableFullScan 3.00 cop[tiflash] table:b keep order:false", - " └─TableFullScan(Probe) 2.00 cop[tiflash] table:a keep order:false" + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", + " ├─ExchangeReceiver(Build) 3.00 mpp[tiflash] ", + " │ └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", + " │ └─TableFullScan 3.00 mpp[tiflash] table:b keep order:false", + " └─TableFullScan(Probe) 2.00 mpp[tiflash] table:a keep order:false" ] }, { @@ -3311,13 +3308,13 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#7", "└─TableReader 2.00 root data:ExchangeSender", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", - " ├─ExchangeReceiver(Build) 3.00 cop[tiflash] ", - " │ └─ExchangeSender 3.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 3.00 cop[tiflash] not(isnull(test.b.id))", - " │ └─TableFullScan 3.00 cop[tiflash] table:b keep order:false", - " └─TableFullScan(Probe) 2.00 cop[tiflash] table:a keep order:false" + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", + " ├─ExchangeReceiver(Build) 3.00 mpp[tiflash] ", + " │ └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", + " │ └─TableFullScan 3.00 mpp[tiflash] table:b keep order:false", + " └─TableFullScan(Probe) 2.00 mpp[tiflash] table:a keep order:false" ] } ] @@ -3330,15 +3327,15 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#7", "└─TableReader 2.00 root data:ExchangeSender", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", - " ├─ExchangeReceiver(Build) 3.00 cop[tiflash] ", - " │ └─ExchangeSender 3.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.b.id, collate: binary]", - " │ └─Selection 3.00 cop[tiflash] not(isnull(test.b.id))", - " │ └─TableFullScan 3.00 cop[tiflash] table:b keep order:false", - " └─ExchangeReceiver(Probe) 2.00 cop[tiflash] ", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.a.id, collate: binary]", - " └─TableFullScan 2.00 cop[tiflash] table:a keep order:false" + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", + " ├─ExchangeReceiver(Build) 3.00 mpp[tiflash] ", + " │ └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.b.id, collate: binary]", + " │ └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", + " │ └─TableFullScan 3.00 mpp[tiflash] table:b keep order:false", + " └─ExchangeReceiver(Probe) 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.a.id, collate: binary]", + " └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false" ] }, { @@ -3346,15 +3343,15 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#7", "└─TableReader 2.00 root data:ExchangeSender", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", - " ├─ExchangeReceiver(Build) 3.00 cop[tiflash] ", - " │ └─ExchangeSender 3.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.b.id, collate: binary]", - " │ └─Selection 3.00 cop[tiflash] not(isnull(test.b.id))", - " │ └─TableFullScan 3.00 cop[tiflash] table:b keep order:false", - " └─ExchangeReceiver(Probe) 2.00 cop[tiflash] ", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.a.id, collate: binary]", - " └─TableFullScan 2.00 cop[tiflash] table:a keep order:false" + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", + " ├─ExchangeReceiver(Build) 3.00 mpp[tiflash] ", + " │ └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.b.id, collate: binary]", + " │ └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", + " │ └─TableFullScan 3.00 mpp[tiflash] table:b keep order:false", + " └─ExchangeReceiver(Probe) 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.a.id, collate: binary]", + " └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false" ] } ] @@ -3367,15 +3364,15 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#7", "└─TableReader 2.00 root data:ExchangeSender", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.a.id, collate: binary]", - " │ └─TableFullScan 2.00 cop[tiflash] table:a keep order:false", - " └─ExchangeReceiver(Probe) 3.00 cop[tiflash] ", - " └─ExchangeSender 3.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.b.id, collate: binary]", - " └─Selection 3.00 cop[tiflash] not(isnull(test.b.id))", - " └─TableFullScan 3.00 cop[tiflash] table:b keep order:false" + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.a.id, collate: binary]", + " │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", + " └─ExchangeReceiver(Probe) 3.00 mpp[tiflash] ", + " └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.b.id, collate: binary]", + " └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", + " └─TableFullScan 3.00 mpp[tiflash] table:b keep order:false" ] }, { @@ -3383,15 +3380,15 @@ "Plan": [ "StreamAgg 1.00 root funcs:count(1)->Column#7", "└─TableReader 2.00 root data:ExchangeSender", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.a.id, collate: binary]", - " │ └─TableFullScan 2.00 cop[tiflash] table:a keep order:false", - " └─ExchangeReceiver(Probe) 3.00 cop[tiflash] ", - " └─ExchangeSender 3.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.b.id, collate: binary]", - " └─Selection 3.00 cop[tiflash] not(isnull(test.b.id))", - " └─TableFullScan 3.00 cop[tiflash] table:b keep order:false" + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.a.id, collate: binary]", + " │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", + " └─ExchangeReceiver(Probe) 3.00 mpp[tiflash] ", + " └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.b.id, collate: binary]", + " └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", + " └─TableFullScan 3.00 mpp[tiflash] table:b keep order:false" ] } ] @@ -3404,17 +3401,17 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3422,31 +3419,31 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#18)->Column#17", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#18", - " └─HashJoin 128.00 batchCop[tiflash] inner join, equal:[eq(test.fact_t.d3_k, test.d3_t.d3_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d3_t.d3_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d3_t.d3_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d3_t keep order:false", - " └─ExchangeReceiver(Probe) 64.00 batchCop[tiflash] ", - " └─ExchangeSender 64.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d3_k, collate: binary]", - " └─HashJoin 64.00 batchCop[tiflash] inner join, equal:[eq(test.fact_t.d2_k, test.d2_t.d2_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d2_t.d2_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d2_t.d2_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d2_t keep order:false", - " └─ExchangeReceiver(Probe) 32.00 batchCop[tiflash] ", - " └─ExchangeSender 32.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d2_k, collate: binary]", - " └─HashJoin 32.00 batchCop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k)), not(isnull(test.fact_t.d2_k)), not(isnull(test.fact_t.d3_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#18", + " └─HashJoin 128.00 mpp[tiflash] inner join, equal:[eq(test.fact_t.d3_k, test.d3_t.d3_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d3_t.d3_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d3_t.d3_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d3_t keep order:false", + " └─ExchangeReceiver(Probe) 64.00 mpp[tiflash] ", + " └─ExchangeSender 64.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d3_k, collate: binary]", + " └─HashJoin 64.00 mpp[tiflash] inner join, equal:[eq(test.fact_t.d2_k, test.d2_t.d2_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d2_t.d2_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d2_t.d2_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d2_t keep order:false", + " └─ExchangeReceiver(Probe) 32.00 mpp[tiflash] ", + " └─ExchangeSender 32.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d2_k, collate: binary]", + " └─HashJoin 32.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k)), not(isnull(test.fact_t.d2_k)), not(isnull(test.fact_t.d3_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3454,17 +3451,17 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3472,27 +3469,27 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#18)->Column#17", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#18", - " └─HashJoin 128.00 batchCop[tiflash] inner join, equal:[eq(test.fact_t.d1_k, test.d3_t.value)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d3_t.value, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d3_t.value))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d3_t keep order:false", - " └─HashJoin(Probe) 64.00 batchCop[tiflash] inner join, equal:[eq(test.fact_t.d1_k, test.d2_t.value)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d2_t.value, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d2_t.value))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d2_t keep order:false", - " └─HashJoin(Probe) 32.00 batchCop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#18", + " └─HashJoin 128.00 mpp[tiflash] inner join, equal:[eq(test.fact_t.d1_k, test.d3_t.value)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d3_t.value, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d3_t.value))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d3_t keep order:false", + " └─HashJoin(Probe) 64.00 mpp[tiflash] inner join, equal:[eq(test.fact_t.d1_k, test.d2_t.value)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d2_t.value, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d2_t.value))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d2_t keep order:false", + " └─HashJoin(Probe) 32.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3500,16 +3497,16 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3517,16 +3514,16 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3534,17 +3531,17 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)], other cond:gt(test.fact_t.col1, test.d1_t.value)", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)], other cond:gt(test.fact_t.col1, test.d1_t.value)", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3552,16 +3549,16 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col1, 10)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col1, 10)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3569,24 +3566,24 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#22)->Column#19", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#22", - " └─HashJoin 204.80 batchCop[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─Projection(Probe) 102.40 batchCop[tiflash] test.fact_t.d1_k", - " └─Selection 102.40 batchCop[tiflash] gt(case(isnull(test.fact_t.col1), plus(test.fact_t.col1, 5), 10), 5)", - " └─HashJoin 128.00 batchCop[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.fact_t.d1_k)]", - " ├─ExchangeReceiver(Build) 16.00 batchCop[tiflash] ", - " │ └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " │ └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " │ └─TableFullScan 16.00 batchCop[tiflash] table:t1 keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:t2 keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#22", + " └─HashJoin 204.80 mpp[tiflash] inner join, equal:[eq(test.d1_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─Projection(Probe) 102.40 mpp[tiflash] test.fact_t.d1_k", + " └─Selection 102.40 mpp[tiflash] gt(case(isnull(test.fact_t.col1), plus(test.fact_t.col1, 5), 10), 5)", + " └─HashJoin 128.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.fact_t.d1_k)]", + " ├─ExchangeReceiver(Build) 16.00 mpp[tiflash] ", + " │ └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " │ └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " │ └─TableFullScan 16.00 mpp[tiflash] table:t1 keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:t2 keep order:false" ] }, { @@ -3594,16 +3591,16 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col2, 10)], other cond:gt(test.fact_t.col1, test.d1_t.value)", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col2, 10)], other cond:gt(test.fact_t.col1, test.d1_t.value)", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3611,16 +3608,16 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10)", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10)", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3628,16 +3625,16 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 batchCop[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10), other cond:gt(test.fact_t.col1, test.d1_t.value)", - " ├─ExchangeReceiver(Build) 16.00 batchCop[tiflash] ", - " │ └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " │ └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", - " │ └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false", - " └─ExchangeReceiver(Probe) 4.00 batchCop[tiflash] ", - " └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─HashJoin 32.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10), other cond:gt(test.fact_t.col1, test.d1_t.value)", + " ├─ExchangeReceiver(Build) 16.00 mpp[tiflash] ", + " │ └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " │ └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", + " │ └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false", + " └─ExchangeReceiver(Probe) 4.00 mpp[tiflash] ", + " └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false" ] }, { @@ -3645,17 +3642,17 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#13)->Column#12", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#13", - " └─HashJoin 12.80 batchCop[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#13", + " └─HashJoin 12.80 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3663,17 +3660,17 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#13)->Column#12", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#13", - " └─HashJoin 12.80 batchCop[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─Selection 4.00 batchCop[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─Selection 16.00 batchCop[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#13", + " └─HashJoin 12.80 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3681,15 +3678,15 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#13)->Column#12", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#13", - " └─HashJoin 12.80 batchCop[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#13", + " └─HashJoin 12.80 mpp[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] }, { @@ -3697,15 +3694,15 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#13)->Column#12", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#13", - " └─HashJoin 12.80 batchCop[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", - " ├─ExchangeReceiver(Build) 4.00 batchCop[tiflash] ", - " │ └─ExchangeSender 4.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", - " │ └─TableFullScan 4.00 batchCop[tiflash] table:d1_t keep order:false", - " └─ExchangeReceiver(Probe) 16.00 batchCop[tiflash] ", - " └─ExchangeSender 16.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", - " └─TableFullScan 16.00 batchCop[tiflash] table:fact_t keep order:false" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#13", + " └─HashJoin 12.80 mpp[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", + " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", + " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", + " └─ExchangeReceiver(Probe) 16.00 mpp[tiflash] ", + " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", + " └─TableFullScan 16.00 mpp[tiflash] table:fact_t keep order:false" ] } ] @@ -3717,65 +3714,65 @@ "SQL": "explain format = 'brief' select v from t3 as a left join (select t1.v1, t1.v2, t1.v1 + t1.v2 as v from t1 left join t2 on t1.v1 = t2.v1 and t1.v2 = t2.v2) b on a.v1 = b.v1 and a.v2 = b.v2", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 cop[tiflash] Column#13", - " └─HashJoin 1.00 cop[tiflash] left outer join, equal:[eq(test.t3.v1, test.t1.v1) eq(test.t3.v2, test.t1.v2)]", - " ├─ExchangeReceiver(Build) 1.00 cop[tiflash] ", - " │ └─ExchangeSender 1.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#23, collate: binary], [name: Column#24, collate: binary]", - " │ └─Projection 1.00 cop[tiflash] test.t3.v1, test.t3.v2, cast(test.t3.v1, decimal(20,2))->Column#23, cast(test.t3.v2, decimal(20,2))->Column#24", - " │ └─TableFullScan 1.00 cop[tiflash] table:a keep order:false", - " └─Projection(Probe) 2.00 cop[tiflash] test.t1.v1, test.t1.v2, plus(test.t1.v1, test.t1.v2)->Column#13", - " └─HashJoin 2.00 cop[tiflash] left outer join, equal:[eq(test.t1.v1, test.t2.v1) eq(test.t1.v2, test.t2.v2)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t1.v1, collate: binary], [name: test.t1.v2, collate: binary]", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.t1.v1)), not(isnull(test.t1.v2))", - " │ └─TableFullScan 2.00 cop[tiflash] table:t1 keep order:false", - " └─ExchangeReceiver(Probe) 8.00 cop[tiflash] ", - " └─ExchangeSender 8.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#15, collate: binary], [name: Column#16, collate: binary]", - " └─Projection 8.00 cop[tiflash] test.t2.v1, test.t2.v2, cast(test.t2.v1, decimal(20,2))->Column#15, cast(test.t2.v2, decimal(20,2))->Column#16", - " └─Selection 8.00 cop[tiflash] not(isnull(test.t2.v1)), not(isnull(test.t2.v2))", - " └─TableFullScan 8.00 cop[tiflash] table:t2 keep order:false" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#13", + " └─HashJoin 1.00 mpp[tiflash] left outer join, equal:[eq(test.t3.v1, test.t1.v1) eq(test.t3.v2, test.t1.v2)]", + " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#23, collate: binary], [name: Column#24, collate: binary]", + " │ └─Projection 1.00 mpp[tiflash] test.t3.v1, test.t3.v2, cast(test.t3.v1, decimal(20,2))->Column#23, cast(test.t3.v2, decimal(20,2))->Column#24", + " │ └─TableFullScan 1.00 mpp[tiflash] table:a keep order:false", + " └─Projection(Probe) 2.00 mpp[tiflash] test.t1.v1, test.t1.v2, plus(test.t1.v1, test.t1.v2)->Column#13", + " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.t1.v1, test.t2.v1) eq(test.t1.v2, test.t2.v2)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t1.v1, collate: binary], [name: test.t1.v2, collate: binary]", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.t1.v1)), not(isnull(test.t1.v2))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:t1 keep order:false", + " └─ExchangeReceiver(Probe) 8.00 mpp[tiflash] ", + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#15, collate: binary], [name: Column#16, collate: binary]", + " └─Projection 8.00 mpp[tiflash] test.t2.v1, test.t2.v2, cast(test.t2.v1, decimal(20,2))->Column#15, cast(test.t2.v2, decimal(20,2))->Column#16", + " └─Selection 8.00 mpp[tiflash] not(isnull(test.t2.v1)), not(isnull(test.t2.v2))", + " └─TableFullScan 8.00 mpp[tiflash] table:t2 keep order:false" ] }, { "SQL": "explain format = 'brief' select count(*), t2.v1, t2.v2 from t1 left join t2 on t1.v1 = t2.v1 and t1.v2 = t2.v2 group by t2.v1, t2.v2", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 2.00 batchCop[tiflash] Column#9, test.t2.v1, test.t2.v2", - " └─HashAgg 2.00 batchCop[tiflash] group by:test.t2.v1, test.t2.v2, funcs:sum(Column#22)->Column#9, funcs:firstrow(test.t2.v1)->test.t2.v1, funcs:firstrow(test.t2.v2)->test.t2.v2", - " └─ExchangeReceiver 2.00 batchCop[tiflash] ", - " └─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t2.v1, collate: binary], [name: test.t2.v2, collate: binary]", - " └─HashAgg 2.00 batchCop[tiflash] group by:test.t2.v1, test.t2.v2, funcs:count(1)->Column#22", - " └─HashJoin 2.00 batchCop[tiflash] left outer join, equal:[eq(test.t1.v1, test.t2.v1) eq(test.t1.v2, test.t2.v2)]", - " ├─ExchangeReceiver(Build) 2.00 batchCop[tiflash] ", - " │ └─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t1.v1, collate: binary], [name: test.t1.v2, collate: binary]", - " │ └─TableFullScan 2.00 batchCop[tiflash] table:t1 keep order:false", - " └─ExchangeReceiver(Probe) 8.00 batchCop[tiflash] ", - " └─ExchangeSender 8.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#14, collate: binary], [name: Column#15, collate: binary]", - " └─Projection 8.00 batchCop[tiflash] test.t2.v1, test.t2.v2, cast(test.t2.v1, decimal(20,2))->Column#14, cast(test.t2.v2, decimal(20,2))->Column#15", - " └─Selection 8.00 batchCop[tiflash] not(isnull(test.t2.v1)), not(isnull(test.t2.v2))", - " └─TableFullScan 8.00 batchCop[tiflash] table:t2 keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 2.00 mpp[tiflash] Column#9, test.t2.v1, test.t2.v2", + " └─HashAgg 2.00 mpp[tiflash] group by:test.t2.v1, test.t2.v2, funcs:sum(Column#22)->Column#9, funcs:firstrow(test.t2.v1)->test.t2.v1, funcs:firstrow(test.t2.v2)->test.t2.v2", + " └─ExchangeReceiver 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t2.v1, collate: binary], [name: test.t2.v2, collate: binary]", + " └─HashAgg 2.00 mpp[tiflash] group by:test.t2.v1, test.t2.v2, funcs:count(1)->Column#22", + " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.t1.v1, test.t2.v1) eq(test.t1.v2, test.t2.v2)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t1.v1, collate: binary], [name: test.t1.v2, collate: binary]", + " │ └─TableFullScan 2.00 mpp[tiflash] table:t1 keep order:false", + " └─ExchangeReceiver(Probe) 8.00 mpp[tiflash] ", + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#14, collate: binary], [name: Column#15, collate: binary]", + " └─Projection 8.00 mpp[tiflash] test.t2.v1, test.t2.v2, cast(test.t2.v1, decimal(20,2))->Column#14, cast(test.t2.v2, decimal(20,2))->Column#15", + " └─Selection 8.00 mpp[tiflash] not(isnull(test.t2.v1)), not(isnull(test.t2.v2))", + " └─TableFullScan 8.00 mpp[tiflash] table:t2 keep order:false" ] }, { "SQL": "explain format = 'brief' select count(*), t2.v1, t2.v2 from t3 left join t2 on t3.v1 = t2.v1 and t3.v2 = t2.v2 group by t2.v1, t2.v2", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#9, test.t2.v1, test.t2.v2", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.t2.v1, test.t2.v2, funcs:sum(Column#16)->Column#9, funcs:firstrow(test.t2.v1)->test.t2.v1, funcs:firstrow(test.t2.v2)->test.t2.v2", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t2.v1, collate: binary], [name: test.t2.v2, collate: binary]", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.t2.v1, test.t2.v2, funcs:count(1)->Column#16", - " └─HashJoin 1.00 batchCop[tiflash] left outer join, equal:[eq(test.t3.v1, test.t2.v1) eq(test.t3.v2, test.t2.v2)]", - " ├─ExchangeReceiver(Build) 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t3.v1, collate: binary], [name: test.t3.v2, collate: binary]", - " │ └─TableFullScan 1.00 batchCop[tiflash] table:t3 keep order:false", - " └─ExchangeReceiver(Probe) 8.00 batchCop[tiflash] ", - " └─ExchangeSender 8.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t2.v1, collate: binary], [name: test.t2.v2, collate: binary]", - " └─Selection 8.00 batchCop[tiflash] not(isnull(test.t2.v1)), not(isnull(test.t2.v2))", - " └─TableFullScan 8.00 batchCop[tiflash] table:t2 keep order:false" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#9, test.t2.v1, test.t2.v2", + " └─HashAgg 1.00 mpp[tiflash] group by:test.t2.v1, test.t2.v2, funcs:sum(Column#16)->Column#9, funcs:firstrow(test.t2.v1)->test.t2.v1, funcs:firstrow(test.t2.v2)->test.t2.v2", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t2.v1, collate: binary], [name: test.t2.v2, collate: binary]", + " └─HashAgg 1.00 mpp[tiflash] group by:test.t2.v1, test.t2.v2, funcs:count(1)->Column#16", + " └─HashJoin 1.00 mpp[tiflash] left outer join, equal:[eq(test.t3.v1, test.t2.v1) eq(test.t3.v2, test.t2.v2)]", + " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t3.v1, collate: binary], [name: test.t3.v2, collate: binary]", + " │ └─TableFullScan 1.00 mpp[tiflash] table:t3 keep order:false", + " └─ExchangeReceiver(Probe) 8.00 mpp[tiflash] ", + " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t2.v1, collate: binary], [name: test.t2.v2, collate: binary]", + " └─Selection 8.00 mpp[tiflash] not(isnull(test.t2.v1)), not(isnull(test.t2.v2))", + " └─TableFullScan 8.00 mpp[tiflash] table:t2 keep order:false" ] } ] @@ -3832,102 +3829,102 @@ "SQL": "explain format = 'brief' select * from table_1 a, table_1 b where a.value = b.value", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] inner join, equal:[eq(test.table_1.value, test.table_1.value)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " │ └─TableFullScan 2.00 cop[tiflash] table:a keep order:false", - " └─ExchangeReceiver(Probe) 2.00 cop[tiflash] ", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", - " └─Selection 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " └─TableFullScan 2.00 cop[tiflash] table:b keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] inner join, equal:[eq(test.table_1.value, test.table_1.value)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", + " └─ExchangeReceiver(Probe) 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", + " └─Selection 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " └─TableFullScan 2.00 mpp[tiflash] table:b keep order:false" ] }, { "SQL": "explain format = 'brief' select * from table_1 a, table_2 b where a.value = b.value", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] inner join, equal:[eq(test.table_1.value, test.table_2.value)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_bin]", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " │ └─TableFullScan 2.00 cop[tiflash] table:a keep order:false", - " └─ExchangeReceiver(Probe) 2.00 cop[tiflash] ", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_2.value, collate: utf8mb4_bin]", - " └─Selection 2.00 cop[tiflash] not(isnull(test.table_2.value))", - " └─TableFullScan 2.00 cop[tiflash] table:b keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] inner join, equal:[eq(test.table_1.value, test.table_2.value)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_bin]", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", + " └─ExchangeReceiver(Probe) 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_2.value, collate: utf8mb4_bin]", + " └─Selection 2.00 mpp[tiflash] not(isnull(test.table_2.value))", + " └─TableFullScan 2.00 mpp[tiflash] table:b keep order:false" ] }, { "SQL": "explain format = 'brief' select * from table_1 a, table_2 b, table_1 c where a.value = b.value and b.value = c.value", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] inner join, equal:[eq(test.table_2.value, test.table_1.value)]", - " ├─HashJoin(Build) 2.00 cop[tiflash] inner join, equal:[eq(test.table_1.value, test.table_2.value)]", - " │ ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_bin]", - " │ │ └─Selection 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " │ │ └─TableFullScan 2.00 cop[tiflash] table:a keep order:false", - " │ └─ExchangeReceiver(Probe) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_2.value, collate: utf8mb4_bin]", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.table_2.value))", - " │ └─TableFullScan 2.00 cop[tiflash] table:b keep order:false", - " └─ExchangeReceiver(Probe) 2.00 cop[tiflash] ", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_bin]", - " └─Selection 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " └─TableFullScan 2.00 cop[tiflash] table:c keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] inner join, equal:[eq(test.table_2.value, test.table_1.value)]", + " ├─HashJoin(Build) 2.00 mpp[tiflash] inner join, equal:[eq(test.table_1.value, test.table_2.value)]", + " │ ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_bin]", + " │ │ └─Selection 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " │ │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", + " │ └─ExchangeReceiver(Probe) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_2.value, collate: utf8mb4_bin]", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.table_2.value))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:b keep order:false", + " └─ExchangeReceiver(Probe) 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_bin]", + " └─Selection 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " └─TableFullScan 2.00 mpp[tiflash] table:c keep order:false" ] }, { "SQL": "explain format = 'brief' select * from table_1 a, table_2 b, table_1 c where a.value = b.value and a.value = c.value", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] inner join, equal:[eq(test.table_1.value, test.table_1.value)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", - " │ └─HashJoin 2.00 cop[tiflash] inner join, equal:[eq(test.table_1.value, test.table_2.value)]", - " │ ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_bin]", - " │ │ └─Selection 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " │ │ └─TableFullScan 2.00 cop[tiflash] table:a keep order:false", - " │ └─ExchangeReceiver(Probe) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_2.value, collate: utf8mb4_bin]", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.table_2.value))", - " │ └─TableFullScan 2.00 cop[tiflash] table:b keep order:false", - " └─ExchangeReceiver(Probe) 2.00 cop[tiflash] ", - " └─ExchangeSender 2.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", - " └─Selection 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " └─TableFullScan 2.00 cop[tiflash] table:c keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] inner join, equal:[eq(test.table_1.value, test.table_1.value)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", + " │ └─HashJoin 2.00 mpp[tiflash] inner join, equal:[eq(test.table_1.value, test.table_2.value)]", + " │ ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_bin]", + " │ │ └─Selection 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " │ │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", + " │ └─ExchangeReceiver(Probe) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_2.value, collate: utf8mb4_bin]", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.table_2.value))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:b keep order:false", + " └─ExchangeReceiver(Probe) 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", + " └─Selection 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " └─TableFullScan 2.00 mpp[tiflash] table:c keep order:false" ] }, { "SQL": "explain format = 'brief' select /*+ agg_to_cop() */ count(*), value from table_1 group by value", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 2.00 batchCop[tiflash] Column#4, test.table_1.value", - " └─HashAgg 2.00 batchCop[tiflash] group by:test.table_1.value, funcs:sum(Column#7)->Column#4, funcs:firstrow(test.table_1.value)->test.table_1.value", - " └─ExchangeReceiver 2.00 batchCop[tiflash] ", - " └─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", - " └─HashAgg 2.00 batchCop[tiflash] group by:test.table_1.value, funcs:count(1)->Column#7", - " └─TableFullScan 2.00 batchCop[tiflash] table:table_1 keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 2.00 mpp[tiflash] Column#4, test.table_1.value", + " └─HashAgg 2.00 mpp[tiflash] group by:test.table_1.value, funcs:sum(Column#7)->Column#4, funcs:firstrow(test.table_1.value)->test.table_1.value", + " └─ExchangeReceiver 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.value, collate: utf8mb4_general_ci]", + " └─HashAgg 2.00 mpp[tiflash] group by:test.table_1.value, funcs:count(1)->Column#7", + " └─TableFullScan 2.00 mpp[tiflash] table:table_1 keep order:false" ] }, { "SQL": "explain format = 'brief' select /*+ agg_to_cop() */ count(*), value from table_2 group by value", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 2.00 batchCop[tiflash] Column#4, test.table_2.value", - " └─HashAgg 2.00 batchCop[tiflash] group by:test.table_2.value, funcs:sum(Column#7)->Column#4, funcs:firstrow(test.table_2.value)->test.table_2.value", - " └─ExchangeReceiver 2.00 batchCop[tiflash] ", - " └─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_2.value, collate: utf8mb4_bin]", - " └─HashAgg 2.00 batchCop[tiflash] group by:test.table_2.value, funcs:count(1)->Column#7", - " └─TableFullScan 2.00 batchCop[tiflash] table:table_2 keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 2.00 mpp[tiflash] Column#4, test.table_2.value", + " └─HashAgg 2.00 mpp[tiflash] group by:test.table_2.value, funcs:sum(Column#7)->Column#4, funcs:firstrow(test.table_2.value)->test.table_2.value", + " └─ExchangeReceiver 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_2.value, collate: utf8mb4_bin]", + " └─HashAgg 2.00 mpp[tiflash] group by:test.table_2.value, funcs:count(1)->Column#7", + " └─TableFullScan 2.00 mpp[tiflash] table:table_2 keep order:false" ] } ] @@ -3939,26 +3936,26 @@ "SQL": "explain format = 'brief' select /*+ broadcast_join(a,b) */ * from table_1 a, table_1 b where a.id = b.id", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] inner join, equal:[eq(test.table_1.id, test.table_1.id)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 2.00 cop[tiflash] table:a keep order:false", - " └─TableFullScan(Probe) 2.00 cop[tiflash] table:b keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] inner join, equal:[eq(test.table_1.id, test.table_1.id)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", + " └─TableFullScan(Probe) 2.00 mpp[tiflash] table:b keep order:false" ] }, { "SQL": "explain format = 'brief' select /*+ broadcast_join(a,b) */ * from table_1 a, table_1 b where a.value = b.value", "Plan": [ "TableReader 2.00 root data:ExchangeSender", - "└─ExchangeSender 2.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 cop[tiflash] inner join, equal:[eq(test.table_1.value, test.table_1.value)]", - " ├─ExchangeReceiver(Build) 2.00 cop[tiflash] ", - " │ └─ExchangeSender 2.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " │ └─TableFullScan 2.00 cop[tiflash] table:a keep order:false", - " └─Selection(Probe) 2.00 cop[tiflash] not(isnull(test.table_1.value))", - " └─TableFullScan 2.00 cop[tiflash] table:b keep order:false" + "└─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 2.00 mpp[tiflash] inner join, equal:[eq(test.table_1.value, test.table_1.value)]", + " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", + " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", + " └─Selection(Probe) 2.00 mpp[tiflash] not(isnull(test.table_1.value))", + " └─TableFullScan 2.00 mpp[tiflash] table:b keep order:false" ] } ] @@ -3971,14 +3968,14 @@ "Plan": [ "Projection 2.00 root test.table_1.id, Column#4, Column#5", "└─TableReader 2.00 root data:ExchangeSender", - " └─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 2.00 batchCop[tiflash] div(Column#4, cast(case(eq(Column#13, 0), 1, Column#13), decimal(20,0) BINARY))->Column#4, div(Column#5, cast(case(eq(Column#14, 0), 1, Column#14), decimal(20,0) BINARY))->Column#5, test.table_1.id", - " └─HashAgg 2.00 batchCop[tiflash] group by:test.table_1.id, funcs:sum(Column#15)->Column#13, funcs:sum(Column#16)->Column#4, funcs:sum(Column#17)->Column#14, funcs:sum(Column#18)->Column#5, funcs:firstrow(test.table_1.id)->test.table_1.id", - " └─ExchangeReceiver 2.00 batchCop[tiflash] ", - " └─ExchangeSender 2.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.id, collate: binary]", - " └─HashAgg 2.00 batchCop[tiflash] group by:Column#29, funcs:count(Column#25)->Column#15, funcs:sum(Column#26)->Column#16, funcs:count(Column#27)->Column#17, funcs:sum(Column#28)->Column#18", - " └─Projection 2.00 batchCop[tiflash] plus(test.table_1.value, 1)->Column#25, plus(test.table_1.value, 1)->Column#26, test.table_1.value, test.table_1.value, test.table_1.id", - " └─TableFullScan 2.00 batchCop[tiflash] table:table_1 keep order:false" + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 2.00 mpp[tiflash] div(Column#4, cast(case(eq(Column#13, 0), 1, Column#13), decimal(20,0) BINARY))->Column#4, div(Column#5, cast(case(eq(Column#14, 0), 1, Column#14), decimal(20,0) BINARY))->Column#5, test.table_1.id", + " └─HashAgg 2.00 mpp[tiflash] group by:test.table_1.id, funcs:sum(Column#15)->Column#13, funcs:sum(Column#16)->Column#4, funcs:sum(Column#17)->Column#14, funcs:sum(Column#18)->Column#5, funcs:firstrow(test.table_1.id)->test.table_1.id", + " └─ExchangeReceiver 2.00 mpp[tiflash] ", + " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.table_1.id, collate: binary]", + " └─HashAgg 2.00 mpp[tiflash] group by:Column#29, funcs:count(Column#25)->Column#15, funcs:sum(Column#26)->Column#16, funcs:count(Column#27)->Column#17, funcs:sum(Column#28)->Column#18", + " └─Projection 2.00 mpp[tiflash] plus(test.table_1.value, 1)->Column#25, plus(test.table_1.value, 1)->Column#26, test.table_1.value, test.table_1.value, test.table_1.id", + " └─TableFullScan 2.00 mpp[tiflash] table:table_1 keep order:false" ] } ] @@ -4346,8 +4343,8 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#8)->Column#6", "└─TableReader 1.00 root data:HashAgg", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(Column#10)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] plus(test.t.id, 1)->Column#10", + " └─HashAgg 1.00 batchCop[tiflash] funcs:count(Column#9)->Column#8", + " └─Projection 10000.00 batchCop[tiflash] plus(test.t.id, 1)->Column#9", " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" ] }, @@ -4365,8 +4362,8 @@ "Plan": [ "HashAgg 1.00 root funcs:sum(Column#8)->Column#6", "└─TableReader 1.00 root data:HashAgg", - " └─HashAgg 1.00 batchCop[tiflash] funcs:sum(Column#10)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#10", + " └─HashAgg 1.00 batchCop[tiflash] funcs:sum(Column#9)->Column#8", + " └─Projection 10000.00 batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#9", " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" ] }, @@ -4402,12 +4399,13 @@ { "SQL": "desc format = 'brief' select * from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b", "Plan": [ - "TableReader 10000.00 root data:HashJoin", - "└─HashJoin 10000.00 cop[tiflash] inner join, equal:[eq(Column#5, Column#10)]", - " ├─Projection(Build) 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#5", - " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo, global read", - " └─Projection(Probe) 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#10", + "HashJoin 10000.00 root inner join, equal:[eq(Column#5, Column#10)]", + "├─Projection(Build) 8000.00 root minus(test.t.id, 2)->Column#10", + "│ └─TableReader 8000.00 root data:Selection", + "│ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", + "│ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + "└─Projection(Probe) 8000.00 root minus(test.t.id, 2)->Column#5", + " └─TableReader 8000.00 root data:Selection", " └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" ] @@ -4415,34 +4413,37 @@ { "SQL": "desc format = 'brief' select * from t join (select id-2 as b from t) A on A.b=t.id", "Plan": [ - "TableReader 10000.00 root data:HashJoin", - "└─HashJoin 10000.00 cop[tiflash] inner join, equal:[eq(test.t.id, Column#9)]", - " ├─Projection(Build) 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#9", - " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo, global read", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.t.id))", + "HashJoin 10000.00 root inner join, equal:[eq(test.t.id, Column#9)]", + "├─Projection(Build) 8000.00 root minus(test.t.id, 2)->Column#9", + "│ └─TableReader 8000.00 root data:Selection", + "│ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", + "│ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + "└─TableReader(Probe) 9990.00 root data:Selection", + " └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t left join (select id-2 as b from t) A on A.b=t.id", "Plan": [ - "TableReader 10000.00 root data:HashJoin", - "└─HashJoin 10000.00 cop[tiflash] left outer join, equal:[eq(test.t.id, Column#9)]", - " ├─Projection(Build) 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#9", - " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo, global read", - " └─TableFullScan(Probe) 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "HashJoin 10000.00 root left outer join, equal:[eq(test.t.id, Column#9)]", + "├─Projection(Build) 8000.00 root minus(test.t.id, 2)->Column#9", + "│ └─TableReader 8000.00 root data:Selection", + "│ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", + "│ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + "└─TableReader(Probe) 10000.00 root data:TableFullScan", + " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t right join (select id-2 as b from t) A on A.b=t.id", "Plan": [ - "TableReader 12487.50 root data:HashJoin", - "└─HashJoin 12487.50 cop[tiflash] right outer join, equal:[eq(test.t.id, Column#9)]", - " ├─Selection(Build) 9990.00 cop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo, global read", - " └─Projection(Probe) 10000.00 cop[tiflash] minus(test.t.id, 2)->Column#9", + "HashJoin 12487.50 root right outer join, equal:[eq(test.t.id, Column#9)]", + "├─TableReader(Build) 9990.00 root data:Selection", + "│ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", + "│ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + "└─Projection(Probe) 10000.00 root minus(test.t.id, 2)->Column#9", + " └─TableReader 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" ] }, @@ -4450,12 +4451,13 @@ "SQL": "desc format = 'brief' select A.b, B.b from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b", "Plan": [ "Projection 10000.00 root Column#10, Column#5", - "└─TableReader 10000.00 root data:HashJoin", - " └─HashJoin 10000.00 cop[tiflash] inner join, equal:[eq(Column#5, Column#10)]", - " ├─Projection(Build) 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#5", - " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo, global read", - " └─Projection(Probe) 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#10", + "└─HashJoin 10000.00 root inner join, equal:[eq(Column#5, Column#10)]", + " ├─Projection(Build) 8000.00 root minus(test.t.id, 2)->Column#10", + " │ └─TableReader 8000.00 root data:Selection", + " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", + " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection(Probe) 8000.00 root minus(test.t.id, 2)->Column#5", + " └─TableReader 8000.00 root data:Selection", " └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" ] @@ -4463,21 +4465,23 @@ { "SQL": "desc format = 'brief' select A.id from t as A where exists (select 1 from t where t.id=A.id)", "Plan": [ - "TableReader 7992.00 root data:HashJoin", - "└─HashJoin 7992.00 cop[tiflash] semi join, equal:[eq(test.t.id, test.t.id)]", - " ├─Selection(Build) 9990.00 cop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo, global read", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.t.id))", + "HashJoin 7992.00 root semi join, equal:[eq(test.t.id, test.t.id)]", + "├─TableReader(Build) 9990.00 root data:Selection", + "│ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", + "│ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + "└─TableReader(Probe) 9990.00 root data:Selection", + " └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", " └─TableFullScan 10000.00 cop[tiflash] table:A keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select A.id from t as A where not exists (select 1 from t where t.id=A.id)", "Plan": [ - "TableReader 8000.00 root data:HashJoin", - "└─HashJoin 8000.00 cop[tiflash] anti semi join, equal:[eq(test.t.id, test.t.id)]", - " ├─TableFullScan(Build) 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo, global read", - " └─TableFullScan(Probe) 10000.00 cop[tiflash] table:A keep order:false, stats:pseudo" + "HashJoin 8000.00 root anti semi join, equal:[eq(test.t.id, test.t.id)]", + "├─TableReader(Build) 10000.00 root data:TableFullScan", + "│ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", + "└─TableReader(Probe) 10000.00 root data:TableFullScan", + " └─TableFullScan 10000.00 cop[tiflash] table:A keep order:false, stats:pseudo" ] }, { @@ -4498,10 +4502,10 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#9)->Column#6", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(Column#11)->Column#9", - " └─Projection 10000.00 batchCop[tiflash] plus(test.t.id, 1)->Column#11", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(Column#11)->Column#9", + " └─Projection 10000.00 mpp[tiflash] plus(test.t.id, 1)->Column#11", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4509,9 +4513,9 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#8)->Column#6", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#8", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#8", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4519,10 +4523,10 @@ "Plan": [ "HashAgg 1.00 root funcs:sum(Column#9)->Column#6", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:sum(Column#11)->Column#9", - " └─Projection 10000.00 batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#11", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:sum(Column#11)->Column#9", + " └─Projection 10000.00 mpp[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#11", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4530,10 +4534,10 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#10)->Column#6", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(Column#11)->Column#10", - " └─Projection 10000.00 batchCop[tiflash] plus(test.t.id, 1)->Column#11", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(Column#11)->Column#10", + " └─Projection 10000.00 mpp[tiflash] plus(test.t.id, 1)->Column#11", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4541,9 +4545,9 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#9)->Column#6", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#9", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#9", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4551,113 +4555,113 @@ "Plan": [ "HashAgg 1.00 root funcs:sum(Column#10)->Column#6", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:sum(Column#11)->Column#10", - " └─Projection 10000.00 batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#11", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:sum(Column#11)->Column#10", + " └─Projection 10000.00 mpp[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#11", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select B.b+A.b from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b", "Plan": [ "TableReader 10000.00 root data:ExchangeSender", - "└─ExchangeSender 10000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 10000.00 cop[tiflash] plus(Column#5, Column#10)->Column#11", - " └─HashJoin 10000.00 cop[tiflash] inner join, equal:[eq(Column#5, Column#10)]", - " ├─ExchangeReceiver(Build) 8000.00 cop[tiflash] ", - " │ └─ExchangeSender 8000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#5", - " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection(Probe) 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#10", - " └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 10000.00 mpp[tiflash] plus(Column#5, Column#10)->Column#11", + " └─HashJoin 10000.00 mpp[tiflash] inner join, equal:[eq(Column#5, Column#10)]", + " ├─ExchangeReceiver(Build) 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 8000.00 mpp[tiflash] minus(test.t.id, 2)->Column#5", + " │ └─Selection 8000.00 mpp[tiflash] not(isnull(minus(test.t.id, 2)))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection(Probe) 8000.00 mpp[tiflash] minus(test.t.id, 2)->Column#10", + " └─Selection 8000.00 mpp[tiflash] not(isnull(minus(test.t.id, 2)))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t join (select id-2 as b from t) A on A.b=t.id", "Plan": [ "TableReader 10000.00 root data:ExchangeSender", - "└─ExchangeSender 10000.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 10000.00 cop[tiflash] inner join, equal:[eq(test.t.id, Column#9)]", - " ├─ExchangeReceiver(Build) 8000.00 cop[tiflash] ", - " │ └─ExchangeSender 8000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#9", - " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 10000.00 mpp[tiflash] inner join, equal:[eq(test.t.id, Column#9)]", + " ├─ExchangeReceiver(Build) 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 8000.00 mpp[tiflash] minus(test.t.id, 2)->Column#9", + " │ └─Selection 8000.00 mpp[tiflash] not(isnull(minus(test.t.id, 2)))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t left join (select id-2 as b from t) A on A.b=t.id", "Plan": [ "TableReader 10000.00 root data:ExchangeSender", - "└─ExchangeSender 10000.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 10000.00 cop[tiflash] left outer join, equal:[eq(test.t.id, Column#9)]", - " ├─ExchangeReceiver(Build) 8000.00 cop[tiflash] ", - " │ └─ExchangeSender 8000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#9", - " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan(Probe) 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 10000.00 mpp[tiflash] left outer join, equal:[eq(test.t.id, Column#9)]", + " ├─ExchangeReceiver(Build) 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 8000.00 mpp[tiflash] minus(test.t.id, 2)->Column#9", + " │ └─Selection 8000.00 mpp[tiflash] not(isnull(minus(test.t.id, 2)))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan(Probe) 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t right join (select id-2 as b from t) A on A.b=t.id", "Plan": [ "TableReader 12487.50 root data:ExchangeSender", - "└─ExchangeSender 12487.50 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 cop[tiflash] right outer join, equal:[eq(test.t.id, Column#9)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection(Probe) 10000.00 cop[tiflash] minus(test.t.id, 2)->Column#9", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t.id, Column#9)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection(Probe) 10000.00 mpp[tiflash] minus(test.t.id, 2)->Column#9", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select A.b, B.b from (select id-2 as b from t) B join (select id-2 as b from t) A on A.b=B.b", "Plan": [ "TableReader 10000.00 root data:ExchangeSender", - "└─ExchangeSender 10000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 10000.00 cop[tiflash] Column#10, Column#5", - " └─HashJoin 10000.00 cop[tiflash] inner join, equal:[eq(Column#5, Column#10)]", - " ├─ExchangeReceiver(Build) 8000.00 cop[tiflash] ", - " │ └─ExchangeSender 8000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#5", - " │ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection(Probe) 8000.00 cop[tiflash] minus(test.t.id, 2)->Column#10", - " └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 10000.00 mpp[tiflash] Column#10, Column#5", + " └─HashJoin 10000.00 mpp[tiflash] inner join, equal:[eq(Column#5, Column#10)]", + " ├─ExchangeReceiver(Build) 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 8000.00 mpp[tiflash] minus(test.t.id, 2)->Column#5", + " │ └─Selection 8000.00 mpp[tiflash] not(isnull(minus(test.t.id, 2)))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection(Probe) 8000.00 mpp[tiflash] minus(test.t.id, 2)->Column#10", + " └─Selection 8000.00 mpp[tiflash] not(isnull(minus(test.t.id, 2)))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select id from t as A where exists (select 1 from t where t.id=A.id)", "Plan": [ "TableReader 7992.00 root data:ExchangeSender", - "└─ExchangeSender 7992.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 cop[tiflash] semi join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 cop[tiflash] table:A keep order:false, stats:pseudo" + "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 7992.00 mpp[tiflash] semi join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:A keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select id from t as A where not exists (select 1 from t where t.id=A.id)", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8000.00 cop[tiflash] anti semi join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─TableFullScan(Probe) 10000.00 cop[tiflash] table:A keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8000.00 mpp[tiflash] anti semi join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─TableFullScan(Probe) 10000.00 mpp[tiflash] table:A keep order:false, stats:pseudo" ] }, { @@ -4665,24 +4669,24 @@ "Plan": [ "Sort 8000.00 root test.t.id", "└─TableReader 8000.00 root data:ExchangeSender", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] mul(Column#5, 2)->Column#6, test.t.id", - " └─Projection 8000.00 batchCop[tiflash] div(Column#5, cast(case(eq(Column#20, 0), 1, Column#20), decimal(20,0) BINARY))->Column#5, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#21)->Column#20, funcs:sum(Column#22)->Column#5, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#26, funcs:count(Column#24)->Column#21, funcs:sum(Column#25)->Column#22", - " └─Projection 10000.00 batchCop[tiflash] plus(test.t.value, 2)->Column#24, plus(test.t.value, 2)->Column#25, test.t.id", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] mul(Column#5, 2)->Column#6, test.t.id", + " └─Projection 8000.00 mpp[tiflash] div(Column#5, cast(case(eq(Column#20, 0), 1, Column#20), decimal(20,0) BINARY))->Column#5, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#21)->Column#20, funcs:sum(Column#22)->Column#5, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#26, funcs:count(Column#24)->Column#21, funcs:sum(Column#25)->Column#22", + " └─Projection 10000.00 mpp[tiflash] plus(test.t.value, 2)->Column#24, plus(test.t.value, 2)->Column#25, test.t.id", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' SELECT FROM_UNIXTIME(name,'%Y-%m-%d') FROM t;", "Plan": [ "TableReader 10000.00 root data:ExchangeSender", - "└─ExchangeSender 10000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 10000.00 cop[tiflash] from_unixtime(cast(test.t.name, decimal(65,0) BINARY), %Y-%m-%d)->Column#5", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 10000.00 mpp[tiflash] from_unixtime(cast(test.t.name, decimal(65,0) BINARY), %Y-%m-%d)->Column#5", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] } ] @@ -4695,13 +4699,13 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#12)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 cop[tiflash] funcs:count(1)->Column#12", - " └─Union 20000.00 cop[tiflash] ", - " ├─Projection 10000.00 cop[tiflash] cast(test.t.a, int(11) BINARY)->Column#9, test.t.b", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection 10000.00 cop[tiflash] test.t1.a, cast(test.t1.b, int(11) BINARY)->Column#10", - " └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", + " └─Union 20000.00 mpp[tiflash] ", + " ├─Projection 10000.00 mpp[tiflash] cast(test.t.a, int(11) BINARY)->Column#9, test.t.b", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection 10000.00 mpp[tiflash] test.t1.a, cast(test.t1.b, int(11) BINARY)->Column#10", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -4709,13 +4713,13 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#16)->Column#15", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 cop[tiflash] funcs:count(1)->Column#16", - " └─Union 20000.00 cop[tiflash] ", - " ├─Projection 10000.00 cop[tiflash] cast(test.t.a, int(11) BINARY)->Column#13, test.t.b", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection 10000.00 cop[tiflash] test.t1.a, cast(test.t1.b, int(11) BINARY)->Column#14", - " └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#16", + " └─Union 20000.00 mpp[tiflash] ", + " ├─Projection 10000.00 mpp[tiflash] cast(test.t.a, int(11) BINARY)->Column#13, test.t.b", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection 10000.00 mpp[tiflash] test.t1.a, cast(test.t1.b, int(11) BINARY)->Column#14", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -4723,14 +4727,14 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#14)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 cop[tiflash] funcs:count(1)->Column#14", - " └─Union 20000.00 cop[tiflash] ", - " ├─Projection 10000.00 cop[tiflash] cast(Column#9, int(11) BINARY)->Column#9, Column#10", - " │ └─Projection 10000.00 cop[tiflash] test.t.a, cast(test.t.b, double BINARY)->Column#10", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection 10000.00 cop[tiflash] test.t1.a, cast(test.t1.c, double BINARY)->Column#10", - " └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#14", + " └─Union 20000.00 mpp[tiflash] ", + " ├─Projection 10000.00 mpp[tiflash] cast(Column#9, int(11) BINARY)->Column#9, Column#10", + " │ └─Projection 10000.00 mpp[tiflash] test.t.a, cast(test.t.b, double BINARY)->Column#10", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection 10000.00 mpp[tiflash] test.t1.a, cast(test.t1.c, double BINARY)->Column#10", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -4738,12 +4742,12 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#14)->Column#11", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#14", - " └─Union 10000.00 batchCop[tiflash] ", - " └─Projection 10000.00 batchCop[tiflash] cast(Column#9, int(11) BINARY)->Column#9, Column#10", - " └─Projection 10000.00 batchCop[tiflash] test.t.a, cast(test.t.b, double BINARY)->Column#10", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#14", + " └─Union 10000.00 mpp[tiflash] ", + " └─Projection 10000.00 mpp[tiflash] cast(Column#9, int(11) BINARY)->Column#9, Column#10", + " └─Projection 10000.00 mpp[tiflash] test.t.a, cast(test.t.b, double BINARY)->Column#10", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4767,17 +4771,17 @@ "Plan": [ "Projection 12500.00 root test.t.c1, test.t.c2, test.t.c1, test.t.c2, test.t.c3", "└─TableReader 12500.00 root data:ExchangeSender", - " └─ExchangeSender 12500.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12500.00 cop[tiflash] inner join, equal:[eq(Column#13, Column#14) eq(Column#15, Column#16)]", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#21, collate: binary], [name: Column#22, collate: binary]", - " │ └─Projection 10000.00 cop[tiflash] test.t.c1, test.t.c2, Column#13, Column#15, cast(Column#13, decimal(13,8) BINARY)->Column#21, cast(Column#15, decimal(10,5) BINARY)->Column#22", - " │ └─Projection 10000.00 cop[tiflash] test.t.c1, test.t.c2, mul(test.t.c1, 3)->Column#13, plus(test.t.c1, 1)->Column#15", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 10000.00 cop[tiflash] ", - " └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#14, collate: binary], [name: Column#16, collate: binary]", - " └─Projection 10000.00 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, div(test.t.c3, 2)->Column#14, minus(test.t.c2, 10)->Column#16", - " └─TableFullScan 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo" + " └─ExchangeSender 12500.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 12500.00 mpp[tiflash] inner join, equal:[eq(Column#13, Column#14) eq(Column#15, Column#16)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#21, collate: binary], [name: Column#22, collate: binary]", + " │ └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, Column#13, Column#15, cast(Column#13, decimal(13,8) BINARY)->Column#21, cast(Column#15, decimal(10,5) BINARY)->Column#22", + " │ └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, mul(test.t.c1, 3)->Column#13, plus(test.t.c1, 1)->Column#15", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#14, collate: binary], [name: Column#16, collate: binary]", + " └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, div(test.t.c3, 2)->Column#14, minus(test.t.c2, 10)->Column#16", + " └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo" ] }, { @@ -4785,44 +4789,44 @@ "Plan": [ "Projection 7976.02 root test.t.c1, test.t.c2, test.t.c5, Column#7, test.t.c1, test.t.c2, test.t.c3, Column#14", "└─TableReader 7976.02 root data:ExchangeSender", - " └─ExchangeSender 7976.02 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7976.02 batchCop[tiflash] inner join, equal:[eq(test.t.c1, test.t.c2) eq(test.t.c2, test.t.c3) eq(test.t.c5, test.t.c1)]", - " ├─ExchangeReceiver(Build) 7976.02 batchCop[tiflash] ", - " │ └─ExchangeSender 7976.02 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: Column#31, collate: binary], [name: test.t.c5, collate: binary]", - " │ └─Projection 7976.02 batchCop[tiflash] Column#7, test.t.c1, test.t.c2, test.t.c5, cast(test.t.c2, decimal(10,5))->Column#31", - " │ └─Projection 7976.02 batchCop[tiflash] Column#7, test.t.c1, test.t.c2, test.t.c5", - " │ └─HashAgg 7976.02 batchCop[tiflash] group by:test.t.c1, test.t.c2, test.t.c5, funcs:sum(Column#15)->Column#7, funcs:firstrow(test.t.c1)->test.t.c1, funcs:firstrow(test.t.c2)->test.t.c2, funcs:firstrow(test.t.c5)->test.t.c5", - " │ └─ExchangeReceiver 7976.02 batchCop[tiflash] ", - " │ └─ExchangeSender 7976.02 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: test.t.c2, collate: binary], [name: test.t.c5, collate: binary]", - " │ └─HashAgg 7976.02 batchCop[tiflash] group by:test.t.c1, test.t.c2, test.t.c5, funcs:count(1)->Column#15", - " │ └─Selection 9970.03 batchCop[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2)), not(isnull(test.t.c5))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 7984.01 batchCop[tiflash] ", - " └─ExchangeSender 7984.01 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: Column#32, collate: binary], [name: Column#33, collate: binary]", - " └─Projection 7984.01 batchCop[tiflash] Column#14, test.t.c1, test.t.c2, test.t.c3, cast(test.t.c3, decimal(10,5))->Column#32, cast(test.t.c1, decimal(40,20))->Column#33", - " └─Projection 7984.01 batchCop[tiflash] Column#14, test.t.c1, test.t.c2, test.t.c3", - " └─HashAgg 7984.01 batchCop[tiflash] group by:test.t.c1, test.t.c2, test.t.c3, funcs:sum(Column#23)->Column#14, funcs:firstrow(test.t.c1)->test.t.c1, funcs:firstrow(test.t.c2)->test.t.c2, funcs:firstrow(test.t.c3)->test.t.c3", - " └─ExchangeReceiver 7984.01 batchCop[tiflash] ", - " └─ExchangeSender 7984.01 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c1, collate: binary]", - " └─HashAgg 7984.01 batchCop[tiflash] group by:test.t.c1, test.t.c2, test.t.c3, funcs:count(1)->Column#23", - " └─Selection 9980.01 batchCop[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 7976.02 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 7976.02 mpp[tiflash] inner join, equal:[eq(test.t.c1, test.t.c2) eq(test.t.c2, test.t.c3) eq(test.t.c5, test.t.c1)]", + " ├─ExchangeReceiver(Build) 7976.02 mpp[tiflash] ", + " │ └─ExchangeSender 7976.02 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: Column#31, collate: binary], [name: test.t.c5, collate: binary]", + " │ └─Projection 7976.02 mpp[tiflash] Column#7, test.t.c1, test.t.c2, test.t.c5, cast(test.t.c2, decimal(10,5))->Column#31", + " │ └─Projection 7976.02 mpp[tiflash] Column#7, test.t.c1, test.t.c2, test.t.c5", + " │ └─HashAgg 7976.02 mpp[tiflash] group by:test.t.c1, test.t.c2, test.t.c5, funcs:sum(Column#15)->Column#7, funcs:firstrow(test.t.c1)->test.t.c1, funcs:firstrow(test.t.c2)->test.t.c2, funcs:firstrow(test.t.c5)->test.t.c5", + " │ └─ExchangeReceiver 7976.02 mpp[tiflash] ", + " │ └─ExchangeSender 7976.02 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: test.t.c2, collate: binary], [name: test.t.c5, collate: binary]", + " │ └─HashAgg 7976.02 mpp[tiflash] group by:test.t.c1, test.t.c2, test.t.c5, funcs:count(1)->Column#15", + " │ └─Selection 9970.03 mpp[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2)), not(isnull(test.t.c5))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 7984.01 mpp[tiflash] ", + " └─ExchangeSender 7984.01 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: Column#32, collate: binary], [name: Column#33, collate: binary]", + " └─Projection 7984.01 mpp[tiflash] Column#14, test.t.c1, test.t.c2, test.t.c3, cast(test.t.c3, decimal(10,5))->Column#32, cast(test.t.c1, decimal(40,20))->Column#33", + " └─Projection 7984.01 mpp[tiflash] Column#14, test.t.c1, test.t.c2, test.t.c3", + " └─HashAgg 7984.01 mpp[tiflash] group by:test.t.c1, test.t.c2, test.t.c3, funcs:sum(Column#23)->Column#14, funcs:firstrow(test.t.c1)->test.t.c1, funcs:firstrow(test.t.c2)->test.t.c2, funcs:firstrow(test.t.c3)->test.t.c3", + " └─ExchangeReceiver 7984.01 mpp[tiflash] ", + " └─ExchangeSender 7984.01 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c1, collate: binary]", + " └─HashAgg 7984.01 mpp[tiflash] group by:test.t.c1, test.t.c2, test.t.c3, funcs:count(1)->Column#23", + " └─Selection 9980.01 mpp[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t t1 join t t2 on t1.c1 = t2.c2 and t1.c2 = t2.c2 and t1.c3 = t2.c3 and t1.c4 = t2.c4 and t1.c5 = t2.c5", "Plan": [ "TableReader 12462.54 root data:ExchangeSender", - "└─ExchangeSender 12462.54 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12462.54 cop[tiflash] inner join, equal:[eq(test.t.c1, test.t.c2) eq(test.t.c2, test.t.c2) eq(test.t.c3, test.t.c3) eq(test.t.c4, test.t.c4) eq(test.t.c5, test.t.c5)]", - " ├─ExchangeReceiver(Build) 9970.03 cop[tiflash] ", - " │ └─ExchangeSender 9970.03 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: test.t.c2, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c4, collate: binary], [name: test.t.c5, collate: binary]", - " │ └─Selection 9970.03 cop[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2)), not(isnull(test.t.c5))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9980.01 cop[tiflash] ", - " └─ExchangeSender 9980.01 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: test.t.c2, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c4, collate: binary], [name: test.t.c5, collate: binary]", - " └─Selection 9980.01 cop[tiflash] not(isnull(test.t.c2)), not(isnull(test.t.c5))", - " └─TableFullScan 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo" + "└─ExchangeSender 12462.54 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 12462.54 mpp[tiflash] inner join, equal:[eq(test.t.c1, test.t.c2) eq(test.t.c2, test.t.c2) eq(test.t.c3, test.t.c3) eq(test.t.c4, test.t.c4) eq(test.t.c5, test.t.c5)]", + " ├─ExchangeReceiver(Build) 9970.03 mpp[tiflash] ", + " │ └─ExchangeSender 9970.03 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: test.t.c2, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c4, collate: binary], [name: test.t.c5, collate: binary]", + " │ └─Selection 9970.03 mpp[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2)), not(isnull(test.t.c5))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9980.01 mpp[tiflash] ", + " └─ExchangeSender 9980.01 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: test.t.c2, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c4, collate: binary], [name: test.t.c5, collate: binary]", + " └─Selection 9980.01 mpp[tiflash] not(isnull(test.t.c2)), not(isnull(test.t.c5))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo" ] }, { @@ -4830,18 +4834,18 @@ "Plan": [ "Projection 12462.54 root test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5", "└─TableReader 12462.54 root data:ExchangeSender", - " └─ExchangeSender 12462.54 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12462.54 cop[tiflash] inner join, equal:[eq(test.t.c2, test.t.c1) eq(test.t.c3, test.t.c2) eq(test.t.c1, test.t.c3) eq(test.t.c3, test.t.c4) eq(test.t.c5, test.t.c1)]", - " ├─ExchangeReceiver(Build) 9970.03 cop[tiflash] ", - " │ └─ExchangeSender 9970.03 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: Column#13, collate: binary], [name: Column#15, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c5, collate: binary]", - " │ └─Projection 9970.03 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c3, decimal(10,5))->Column#13, cast(test.t.c1, decimal(10,5))->Column#15", - " │ └─Selection 9970.03 cop[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2)), not(isnull(test.t.c5))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9980.01 cop[tiflash] ", - " └─ExchangeSender 9980.01 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: Column#14, collate: binary], [name: Column#16, collate: binary], [name: test.t.c4, collate: binary], [name: Column#17, collate: binary]", - " └─Projection 9980.01 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c2, decimal(10,5))->Column#14, cast(test.t.c3, decimal(10,5))->Column#16, cast(test.t.c1, decimal(40,20))->Column#17", - " └─Selection 9980.01 cop[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2))", - " └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 12462.54 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 12462.54 mpp[tiflash] inner join, equal:[eq(test.t.c2, test.t.c1) eq(test.t.c3, test.t.c2) eq(test.t.c1, test.t.c3) eq(test.t.c3, test.t.c4) eq(test.t.c5, test.t.c1)]", + " ├─ExchangeReceiver(Build) 9970.03 mpp[tiflash] ", + " │ └─ExchangeSender 9970.03 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: Column#13, collate: binary], [name: Column#15, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c5, collate: binary]", + " │ └─Projection 9970.03 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c3, decimal(10,5))->Column#13, cast(test.t.c1, decimal(10,5))->Column#15", + " │ └─Selection 9970.03 mpp[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2)), not(isnull(test.t.c5))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9980.01 mpp[tiflash] ", + " └─ExchangeSender 9980.01 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: Column#14, collate: binary], [name: Column#16, collate: binary], [name: test.t.c4, collate: binary], [name: Column#17, collate: binary]", + " └─Projection 9980.01 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c2, decimal(10,5))->Column#14, cast(test.t.c3, decimal(10,5))->Column#16, cast(test.t.c1, decimal(40,20))->Column#17", + " └─Selection 9980.01 mpp[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -4849,17 +4853,17 @@ "Plan": [ "Projection 12500.00 root test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5", "└─TableReader 12500.00 root data:ExchangeSender", - " └─ExchangeSender 12500.00 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12500.00 cop[tiflash] inner join, equal:[eq(Column#13, Column#14)]", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#17, collate: binary]", - " │ └─Projection 10000.00 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, Column#13, cast(Column#13, decimal(17,9) BINARY)->Column#17", - " │ └─Projection 10000.00 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, plus(test.t.c1, test.t.c2)->Column#13", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 10000.00 cop[tiflash] ", - " └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#14, collate: binary]", - " └─Projection 10000.00 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, div(test.t.c2, test.t.c3)->Column#14", - " └─TableFullScan 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo" + " └─ExchangeSender 12500.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 12500.00 mpp[tiflash] inner join, equal:[eq(Column#13, Column#14)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#17, collate: binary]", + " │ └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, Column#13, cast(Column#13, decimal(17,9) BINARY)->Column#17", + " │ └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, plus(test.t.c1, test.t.c2)->Column#13", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#14, collate: binary]", + " └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, div(test.t.c2, test.t.c3)->Column#14", + " └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo" ] }, { @@ -4867,18 +4871,18 @@ "Plan": [ "Projection 7984.01 root test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5", "└─TableReader 7984.01 root data:ExchangeSender", - " └─ExchangeSender 7984.01 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7984.01 cop[tiflash] semi join, equal:[eq(test.t.c1, test.t.c2) eq(test.t.c2, test.t.c3) eq(test.t.c3, test.t.c1) eq(test.t.c4, test.t.c3) eq(test.t.c1, test.t.c5)]", - " ├─ExchangeReceiver(Build) 9970.03 cop[tiflash] ", - " │ └─ExchangeSender 9970.03 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: Column#14, collate: binary], [name: Column#16, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c5, collate: binary]", - " │ └─Projection 9970.03 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c5, cast(test.t.c3, decimal(10,5))->Column#14, cast(test.t.c1, decimal(10,5))->Column#16", - " │ └─Selection 9970.03 cop[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2)), not(isnull(test.t.c5))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9980.01 cop[tiflash] ", - " └─ExchangeSender 9980.01 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: Column#13, collate: binary], [name: Column#15, collate: binary], [name: test.t.c4, collate: binary], [name: Column#17, collate: binary]", - " └─Projection 9980.01 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c2, decimal(10,5))->Column#13, cast(test.t.c3, decimal(10,5))->Column#15, cast(test.t.c1, decimal(40,20))->Column#17", - " └─Selection 9980.01 cop[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2))", - " └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 7984.01 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 7984.01 mpp[tiflash] semi join, equal:[eq(test.t.c1, test.t.c2) eq(test.t.c2, test.t.c3) eq(test.t.c3, test.t.c1) eq(test.t.c4, test.t.c3) eq(test.t.c1, test.t.c5)]", + " ├─ExchangeReceiver(Build) 9970.03 mpp[tiflash] ", + " │ └─ExchangeSender 9970.03 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary], [name: Column#14, collate: binary], [name: Column#16, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c5, collate: binary]", + " │ └─Projection 9970.03 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c5, cast(test.t.c3, decimal(10,5))->Column#14, cast(test.t.c1, decimal(10,5))->Column#16", + " │ └─Selection 9970.03 mpp[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2)), not(isnull(test.t.c5))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9980.01 mpp[tiflash] ", + " └─ExchangeSender 9980.01 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary], [name: Column#13, collate: binary], [name: Column#15, collate: binary], [name: test.t.c4, collate: binary], [name: Column#17, collate: binary]", + " └─Projection 9980.01 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c2, decimal(10,5))->Column#13, cast(test.t.c3, decimal(10,5))->Column#15, cast(test.t.c1, decimal(40,20))->Column#17", + " └─Selection 9980.01 mpp[tiflash] not(isnull(test.t.c1)), not(isnull(test.t.c2))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -4886,55 +4890,55 @@ "Plan": [ "Projection 19492.21 root test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5", "└─TableReader 19492.21 root data:ExchangeSender", - " └─ExchangeSender 19492.21 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 19492.21 cop[tiflash] right outer join, equal:[eq(test.t.c3, test.t.c4)]", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#27, collate: binary]", - " │ └─Projection 10000.00 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c4, decimal(40,20))->Column#27", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t4 keep order:false, stats:pseudo", - " └─Projection(Probe) 15593.77 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5", - " └─HashJoin 15593.77 cop[tiflash] inner join, equal:[eq(test.t.c5, test.t.c3)]", - " ├─ExchangeReceiver(Build) 10000.00 cop[tiflash] ", - " │ └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#25, collate: binary]", - " │ └─Projection 10000.00 cop[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c3, decimal(40,20))->Column#25", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t3 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 12475.01 cop[tiflash] ", - " └─ExchangeSender 12475.01 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c5, collate: binary]", - " └─HashJoin 12475.01 cop[tiflash] inner join, equal:[eq(test.t.c2, test.t.c1)]", - " ├─ExchangeReceiver(Build) 9980.01 cop[tiflash] ", - " │ └─ExchangeSender 9980.01 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary]", - " │ └─Selection 9980.01 cop[tiflash] not(isnull(test.t.c2)), not(isnull(test.t.c5))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t2 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 cop[tiflash] ", - " └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary]", - " └─Selection 9990.00 cop[tiflash] not(isnull(test.t.c1))", - " └─TableFullScan 10000.00 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 19492.21 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 19492.21 mpp[tiflash] right outer join, equal:[eq(test.t.c3, test.t.c4)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#27, collate: binary]", + " │ └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c4, decimal(40,20))->Column#27", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t4 keep order:false, stats:pseudo", + " └─Projection(Probe) 15593.77 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5", + " └─HashJoin 15593.77 mpp[tiflash] inner join, equal:[eq(test.t.c5, test.t.c3)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#25, collate: binary]", + " │ └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c3, decimal(40,20))->Column#25", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t3 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 12475.01 mpp[tiflash] ", + " └─ExchangeSender 12475.01 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c5, collate: binary]", + " └─HashJoin 12475.01 mpp[tiflash] inner join, equal:[eq(test.t.c2, test.t.c1)]", + " ├─ExchangeReceiver(Build) 9980.01 mpp[tiflash] ", + " │ └─ExchangeSender 9980.01 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c2, collate: binary]", + " │ └─Selection 9980.01 mpp[tiflash] not(isnull(test.t.c2)), not(isnull(test.t.c5))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.c1, collate: binary]", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.c1))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' SELECT STRAIGHT_JOIN t1 . col_varchar_64 , t1 . col_char_64_not_null FROM tt AS t1 INNER JOIN( tt AS t2 JOIN tt AS t3 ON(t3 . col_decimal_30_10_key = t2 . col_tinyint)) ON(t3 . col_varchar_64 = t2 . col_varchar_key) WHERE t3 . col_varchar_64 = t1 . col_char_64_not_null GROUP BY 1 , 2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] test.tt.col_varchar_64, test.tt.col_char_64_not_null", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.tt.col_char_64_not_null, test.tt.col_varchar_64, funcs:firstrow(test.tt.col_varchar_64)->test.tt.col_varchar_64, funcs:firstrow(test.tt.col_char_64_not_null)->test.tt.col_char_64_not_null", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.tt.col_varchar_64, collate: utf8mb4_bin], [name: test.tt.col_char_64_not_null, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.tt.col_char_64_not_null, test.tt.col_varchar_64, ", - " └─HashJoin 15609.38 batchCop[tiflash] inner join, equal:[eq(test.tt.col_char_64_not_null, test.tt.col_varchar_64)]", - " ├─ExchangeReceiver(Build) 10000.00 batchCop[tiflash] ", - " │ └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.tt.col_char_64_not_null, collate: utf8mb4_bin]", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t1 keep order:false, stats:pseudo", - " └─HashJoin(Probe) 12487.50 batchCop[tiflash] inner join, equal:[eq(test.tt.col_varchar_key, test.tt.col_varchar_64) eq(Column#19, test.tt.col_decimal_30_10_key)]", - " ├─ExchangeReceiver(Build) 9990.00 batchCop[tiflash] ", - " │ └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.tt.col_varchar_key, collate: utf8mb4_bin]", - " │ └─Projection 9990.00 batchCop[tiflash] test.tt.col_varchar_key, cast(test.tt.col_tinyint, decimal(20,0) BINARY)->Column#19", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.tt.col_varchar_key))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t2 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 batchCop[tiflash] ", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.tt.col_varchar_64, collate: utf8mb4_bin]", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.tt.col_varchar_64))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t3 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] test.tt.col_varchar_64, test.tt.col_char_64_not_null", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.tt.col_char_64_not_null, test.tt.col_varchar_64, funcs:firstrow(test.tt.col_varchar_64)->test.tt.col_varchar_64, funcs:firstrow(test.tt.col_char_64_not_null)->test.tt.col_char_64_not_null", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.tt.col_varchar_64, collate: utf8mb4_bin], [name: test.tt.col_char_64_not_null, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.tt.col_char_64_not_null, test.tt.col_varchar_64, ", + " └─HashJoin 15609.38 mpp[tiflash] inner join, equal:[eq(test.tt.col_char_64_not_null, test.tt.col_varchar_64)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.tt.col_char_64_not_null, collate: utf8mb4_bin]", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo", + " └─HashJoin(Probe) 12487.50 mpp[tiflash] inner join, equal:[eq(test.tt.col_varchar_key, test.tt.col_varchar_64) eq(Column#19, test.tt.col_decimal_30_10_key)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.tt.col_varchar_key, collate: utf8mb4_bin]", + " │ └─Projection 9990.00 mpp[tiflash] test.tt.col_varchar_key, cast(test.tt.col_tinyint, decimal(20,0) BINARY)->Column#19", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.tt.col_varchar_key))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.tt.col_varchar_64, collate: utf8mb4_bin]", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.tt.col_varchar_64))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t3 keep order:false, stats:pseudo" ] } ] @@ -4947,10 +4951,10 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#8)->Column#5", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(Column#9)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] plus(test.t.id, 1)->Column#9", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(Column#9)->Column#8", + " └─Projection 10000.00 mpp[tiflash] plus(test.t.id, 1)->Column#9", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4958,9 +4962,9 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#7)->Column#5", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#7", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#7", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4968,10 +4972,10 @@ "Plan": [ "HashAgg 1.00 root funcs:sum(Column#8)->Column#5", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:sum(Column#9)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#9", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:sum(Column#9)->Column#8", + " └─Projection 10000.00 mpp[tiflash] cast(plus(test.t.id, 1), decimal(20,0) BINARY)->Column#9", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -4979,22 +4983,22 @@ "Plan": [ "HashAgg 1.00 root funcs:count(Column#6)->Column#4", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#6", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#6", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select count(*), id from t group by id", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#4, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#7)->Column#4, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:count(1)->Column#7", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#4, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#7)->Column#4, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:count(1)->Column#7", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5002,33 +5006,33 @@ "Plan": [ "Projection 8000.00 root Column#4, plus(test.t.id, 1)->Column#5", "└─TableReader 8000.00 root data:ExchangeSender", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#4, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#10, funcs:sum(Column#11)->Column#4, funcs:firstrow(Column#12)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#10, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#17, funcs:count(1)->Column#11, funcs:firstrow(Column#16)->Column#12", - " └─Projection 10000.00 batchCop[tiflash] test.t.id, plus(test.t.id, 1)->Column#17", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#4, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#10, funcs:sum(Column#11)->Column#4, funcs:firstrow(Column#12)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#10, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#17, funcs:count(1)->Column#11, funcs:firstrow(Column#16)->Column#12", + " └─Projection 10000.00 mpp[tiflash] test.t.id, plus(test.t.id, 1)->Column#17", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t join ( select count(*), id from t group by id) as A on A.id = t.id", "Plan": [ "TableReader 9990.00 root data:ExchangeSender", - "└─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 9990.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─Projection(Build) 7992.00 batchCop[tiflash] Column#7, test.t.id", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#8)->Column#7, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:count(1)->Column#8", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 batchCop[tiflash] ", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 9990.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─Projection(Build) 7992.00 mpp[tiflash] Column#7, test.t.id", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#8)->Column#7, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:count(1)->Column#8", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5037,9 +5041,9 @@ "HashJoin 1.25 root inner join, equal:[eq(test.t.id, Column#7)]", "├─HashAgg(Build) 1.00 root funcs:count(Column#11)->Column#7", "│ └─TableReader 1.00 root data:ExchangeSender", - "│ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - "│ └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#11", - "│ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", + "│ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + "│ └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#11", + "│ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", "└─TableReader(Probe) 9990.00 root data:Selection", " └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" @@ -5049,28 +5053,28 @@ "SQL": "desc format = 'brief' select avg(value) as b,id from t group by id", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] div(Column#4, cast(case(eq(Column#9, 0), 1, Column#9), decimal(20,0) BINARY))->Column#4, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#10)->Column#9, funcs:sum(Column#11)->Column#4, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#10, funcs:sum(test.t.value)->Column#11", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] div(Column#4, cast(case(eq(Column#9, 0), 1, Column#9), decimal(20,0) BINARY))->Column#4, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#10)->Column#9, funcs:sum(Column#11)->Column#4, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#10, funcs:sum(test.t.value)->Column#11", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select /*+hash_agg()*/ sum(b) from (select avg(value) as b, id from t group by id)A", "Plan": [ - "HashAgg 1.00 root funcs:sum(Column#20)->Column#5", + "HashAgg 1.00 root funcs:sum(Column#18)->Column#5", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:sum(Column#4)->Column#20", - " └─Projection 8000.00 batchCop[tiflash] div(Column#4, cast(case(eq(Column#17, 0), 1, Column#17), decimal(20,0) BINARY))->Column#4", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#18)->Column#17, funcs:sum(Column#19)->Column#4", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#18, funcs:sum(test.t.value)->Column#19", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:sum(Column#4)->Column#18", + " └─Projection 8000.00 mpp[tiflash] div(Column#4, cast(case(eq(Column#15, 0), 1, Column#15), decimal(20,0) BINARY))->Column#4", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#16)->Column#15, funcs:sum(Column#17)->Column#4", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#16, funcs:sum(test.t.value)->Column#17", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5079,13 +5083,13 @@ "Projection 6400.00 root test.t.id", "└─Selection 6400.00 root gt(Column#4, 0)", " └─TableReader 8000.00 root data:ExchangeSender", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] div(Column#4, cast(case(eq(Column#10, 0), 1, Column#10), decimal(20,0) BINARY))->Column#4, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#11)->Column#10, funcs:sum(Column#12)->Column#4, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#11, funcs:sum(test.t.value)->Column#12", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] div(Column#4, cast(case(eq(Column#10, 0), 1, Column#10), decimal(20,0) BINARY))->Column#4, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#11)->Column#10, funcs:sum(Column#12)->Column#4, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#11, funcs:sum(test.t.value)->Column#12", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5093,13 +5097,13 @@ "Plan": [ "Selection 6400.00 root gt(Column#4, 0)", "└─TableReader 8000.00 root data:ExchangeSender", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] div(Column#4, cast(case(eq(Column#11, 0), 1, Column#11), decimal(20,0) BINARY))->Column#4, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#12)->Column#11, funcs:sum(Column#13)->Column#4, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#12, funcs:sum(test.t.value)->Column#13", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] div(Column#4, cast(case(eq(Column#11, 0), 1, Column#11), decimal(20,0) BINARY))->Column#4, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#12)->Column#11, funcs:sum(Column#13)->Column#4, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#12, funcs:sum(test.t.value)->Column#13", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5107,75 +5111,75 @@ "Plan": [ "Projection 8000.00 root plus(Column#4, 1)->Column#5, test.t.id", "└─TableReader 8000.00 root data:ExchangeSender", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] div(Column#4, cast(case(eq(Column#11, 0), 1, Column#11), decimal(20,0) BINARY))->Column#4, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#12)->Column#11, funcs:sum(Column#13)->Column#4, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#12, funcs:sum(test.t.value)->Column#13", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] div(Column#4, cast(case(eq(Column#11, 0), 1, Column#11), decimal(20,0) BINARY))->Column#4, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#12)->Column#11, funcs:sum(Column#13)->Column#4, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:count(test.t.value)->Column#12, funcs:sum(test.t.value)->Column#13", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select sum(b) from (select t.id, t1.id as b from t join t t1 on t.id=t1.id)A group by id", "Plan": [ "TableReader 7992.00 root data:ExchangeSender", - "└─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 7992.00 batchCop[tiflash] Column#7", - " └─HashAgg 7992.00 batchCop[tiflash] group by:Column#11, funcs:sum(Column#10)->Column#7", - " └─Projection 12487.50 batchCop[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#10, test.t.id", - " └─HashJoin 12487.50 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 batchCop[tiflash] ", - " │ └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 batchCop[tiflash] ", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t1 keep order:false, stats:pseudo" + "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 7992.00 mpp[tiflash] Column#7", + " └─HashAgg 7992.00 mpp[tiflash] group by:Column#11, funcs:sum(Column#10)->Column#7", + " └─Projection 12487.50 mpp[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#10, test.t.id", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from (select id from t group by id) C join (select sum(b),id from (select t.id, t1.id as b from t join (select id, count(*) as c from t group by id) t1 on t.id=t1.id)A group by id)B on C.id=b.id", "Plan": [ "TableReader 7992.00 root data:ExchangeSender", - "└─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─Projection(Build) 7992.00 batchCop[tiflash] test.t.id", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, ", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection(Probe) 7992.00 batchCop[tiflash] Column#11, test.t.id", - " └─HashAgg 7992.00 batchCop[tiflash] group by:Column#39, funcs:sum(Column#37)->Column#11, funcs:firstrow(Column#38)->test.t.id", - " └─Projection 9990.00 batchCop[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#37, test.t.id, test.t.id", - " └─HashJoin 9990.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─Projection(Build) 7992.00 batchCop[tiflash] test.t.id, Column#13", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id, funcs:sum(Column#17)->Column#13", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:count(1)->Column#17", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 batchCop[tiflash] ", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 7992.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─Projection(Build) 7992.00 mpp[tiflash] test.t.id", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, ", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection(Probe) 7992.00 mpp[tiflash] Column#11, test.t.id", + " └─HashAgg 7992.00 mpp[tiflash] group by:Column#39, funcs:sum(Column#37)->Column#11, funcs:firstrow(Column#38)->test.t.id", + " └─Projection 9990.00 mpp[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#37, test.t.id, test.t.id", + " └─HashJoin 9990.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─Projection(Build) 7992.00 mpp[tiflash] test.t.id, Column#13", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id, funcs:sum(Column#17)->Column#13", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:count(1)->Column#17", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select count(distinct value),id from t group by id", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#4, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:count(distinct test.t.value)->Column#4, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, test.t.value, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#4, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:count(distinct test.t.value)->Column#4, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, test.t.value, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5190,118 +5194,118 @@ "SQL": "desc format = 'brief' select * from t join ( select count(distinct value), id from t group by id) as A on A.id = t.id", "Plan": [ "TableReader 9990.00 root data:ExchangeSender", - "└─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 9990.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─Projection(Build) 7992.00 batchCop[tiflash] Column#7, test.t.id", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:count(distinct test.t.value)->Column#7, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, test.t.value, ", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 batchCop[tiflash] ", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 9990.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─Projection(Build) 7992.00 mpp[tiflash] Column#7, test.t.id", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:count(distinct test.t.value)->Column#7, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, test.t.value, ", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t join ( select count(1/value), id from t group by id) as A on A.id = t.id", "Plan": [ "TableReader 9990.00 root data:ExchangeSender", - "└─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 9990.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─Projection(Build) 7992.00 batchCop[tiflash] Column#7, test.t.id", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#8)->Column#7, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:Column#19, funcs:count(Column#18)->Column#8", - " │ └─Projection 9990.00 batchCop[tiflash] div(1, test.t.value)->Column#18, test.t.id", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 batchCop[tiflash] ", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 9990.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─Projection(Build) 7992.00 mpp[tiflash] Column#7, test.t.id", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#8)->Column#7, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:Column#19, funcs:count(Column#18)->Column#8", + " │ └─Projection 9990.00 mpp[tiflash] div(1, test.t.value)->Column#18, test.t.id", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select /*+hash_agg()*/ sum(id) from (select value, id from t where id > value group by id, value)A group by value /*the exchange should have only one partition column: test.t.value*/", "Plan": [ "TableReader 6400.00 root data:ExchangeSender", - "└─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 6400.00 batchCop[tiflash] Column#4", - " └─HashAgg 6400.00 batchCop[tiflash] group by:Column#22, funcs:sum(Column#21)->Column#4", - " └─Projection 6400.00 batchCop[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#21, test.t.value", - " └─Projection 6400.00 batchCop[tiflash] test.t.id, test.t.value", - " └─HashAgg 6400.00 batchCop[tiflash] group by:test.t.id, test.t.value, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.value)->test.t.value", - " └─ExchangeReceiver 6400.00 batchCop[tiflash] ", - " └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.value, collate: binary]", - " └─HashAgg 6400.00 batchCop[tiflash] group by:test.t.id, test.t.value, ", - " └─Selection 8000.00 batchCop[tiflash] gt(cast(test.t.id, decimal(20,0) BINARY), test.t.value)", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 6400.00 mpp[tiflash] Column#4", + " └─HashAgg 6400.00 mpp[tiflash] group by:Column#20, funcs:sum(Column#19)->Column#4", + " └─Projection 6400.00 mpp[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#19, test.t.value", + " └─Projection 6400.00 mpp[tiflash] test.t.id, test.t.value", + " └─HashAgg 6400.00 mpp[tiflash] group by:test.t.id, test.t.value, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.value)->test.t.value", + " └─ExchangeReceiver 6400.00 mpp[tiflash] ", + " └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.value, collate: binary]", + " └─HashAgg 6400.00 mpp[tiflash] group by:test.t.id, test.t.value, ", + " └─Selection 8000.00 mpp[tiflash] gt(cast(test.t.id, decimal(20,0) BINARY), test.t.value)", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select /*+hash_agg()*/ sum(B.value) from t as B where B.id+1 > (select count(*) from t where t.id= B.id and t.value=B.value) group by B.id /*the exchange should have only one partition column: test.t.id*/", "Plan": [ "TableReader 6400.00 root data:ExchangeSender", - "└─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 6400.00 batchCop[tiflash] Column#8", - " └─HashAgg 6400.00 batchCop[tiflash] group by:test.t.id, funcs:sum(test.t.value)->Column#8", - " └─Selection 8000.00 batchCop[tiflash] gt(plus(test.t.id, 1), ifnull(Column#7, 0))", - " └─HashJoin 10000.00 batchCop[tiflash] left outer join, equal:[eq(test.t.id, test.t.id) eq(test.t.value, test.t.value)]", - " ├─Projection(Build) 7984.01 batchCop[tiflash] Column#7, test.t.id, test.t.value", - " │ └─HashAgg 7984.01 batchCop[tiflash] group by:test.t.id, test.t.value, funcs:sum(Column#24)->Column#7, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.value)->test.t.value", - " │ └─ExchangeReceiver 7984.01 batchCop[tiflash] ", - " │ └─ExchangeSender 7984.01 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7984.01 batchCop[tiflash] group by:test.t.id, test.t.value, funcs:count(1)->Column#24", - " │ └─Selection 9980.01 batchCop[tiflash] not(isnull(test.t.id)), not(isnull(test.t.value))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─TableFullScan 10000.00 batchCop[tiflash] table:B keep order:false, stats:pseudo" + "└─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 6400.00 mpp[tiflash] Column#8", + " └─HashAgg 6400.00 mpp[tiflash] group by:test.t.id, funcs:sum(test.t.value)->Column#8", + " └─Selection 8000.00 mpp[tiflash] gt(plus(test.t.id, 1), ifnull(Column#7, 0))", + " └─HashJoin 10000.00 mpp[tiflash] left outer join, equal:[eq(test.t.id, test.t.id) eq(test.t.value, test.t.value)]", + " ├─Projection(Build) 7984.01 mpp[tiflash] Column#7, test.t.id, test.t.value", + " │ └─HashAgg 7984.01 mpp[tiflash] group by:test.t.id, test.t.value, funcs:sum(Column#24)->Column#7, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.value)->test.t.value", + " │ └─ExchangeReceiver 7984.01 mpp[tiflash] ", + " │ └─ExchangeSender 7984.01 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7984.01 mpp[tiflash] group by:test.t.id, test.t.value, funcs:count(1)->Column#24", + " │ └─Selection 9980.01 mpp[tiflash] not(isnull(test.t.id)), not(isnull(test.t.value))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─TableFullScan 10000.00 mpp[tiflash] table:B keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select count(distinct value) from t", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#4", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.t.value)->Column#4", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.t.value, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#4", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.t.value)->Column#4", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.t.value, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select count(distinct x ) from (select count(distinct value) x from t) t", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct Column#4)->Column#5", - " └─Projection 1.00 batchCop[tiflash] Column#4", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.t.value)->Column#4", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.t.value, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct Column#4)->Column#5", + " └─Projection 1.00 mpp[tiflash] Column#4", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.t.value)->Column#4", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.t.value, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select count(distinct value), count(value), avg(value) from t", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#4, Column#5, div(Column#6, cast(case(eq(Column#7, 0), 1, Column#7), decimal(20,0) BINARY))->Column#6", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.t.value)->Column#4, funcs:sum(Column#8)->Column#5, funcs:sum(Column#9)->Column#7, funcs:sum(Column#10)->Column#6", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.t.value, funcs:count(test.t.value)->Column#8, funcs:count(test.t.value)->Column#9, funcs:sum(test.t.value)->Column#10", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#4, Column#5, div(Column#6, cast(case(eq(Column#7, 0), 1, Column#7), decimal(20,0) BINARY))->Column#6", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.t.value)->Column#4, funcs:sum(Column#8)->Column#5, funcs:sum(Column#9)->Column#7, funcs:sum(Column#10)->Column#6", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.t.value, funcs:count(test.t.value)->Column#8, funcs:count(test.t.value)->Column#9, funcs:sum(test.t.value)->Column#10", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] } ] @@ -5313,39 +5317,39 @@ "SQL": "desc format = 'brief' select * from t join ( select count(*), id from t group by id) as A on A.id = t.id", "Plan": [ "TableReader 9990.00 root data:ExchangeSender", - "└─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 9990.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 7992.00 batchCop[tiflash] Column#7, test.t.id", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#8)->Column#7, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:count(1)->Column#8", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 9990.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 7992.00 mpp[tiflash] Column#7, test.t.id", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#8)->Column#7, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:count(1)->Column#8", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from t join ( select count(*)+id as v from t group by id) as A on A.v = t.id", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8000.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, Column#8)]", - " ├─ExchangeReceiver(Build) 6400.00 batchCop[tiflash] ", - " │ └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 6400.00 batchCop[tiflash] plus(Column#7, test.t.id)->Column#8", - " │ └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(Column#7, test.t.id)))", - " │ └─Projection 8000.00 batchCop[tiflash] Column#7, test.t.id", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#11)->Column#7, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " │ └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, funcs:count(1)->Column#11", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8000.00 mpp[tiflash] inner join, equal:[eq(test.t.id, Column#8)]", + " ├─ExchangeReceiver(Build) 6400.00 mpp[tiflash] ", + " │ └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 6400.00 mpp[tiflash] plus(Column#7, test.t.id)->Column#8", + " │ └─Selection 6400.00 mpp[tiflash] not(isnull(plus(Column#7, test.t.id)))", + " │ └─Projection 8000.00 mpp[tiflash] Column#7, test.t.id", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#11)->Column#7, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, funcs:count(1)->Column#11", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5353,20 +5357,20 @@ "Plan": [ "Projection 7992.00 root test.t.id, test.t.value, Column#7, test.t.id", "└─TableReader 7992.00 root data:ExchangeSender", - " └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 6393.60 batchCop[tiflash] ", - " │ └─ExchangeSender 6393.60 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 6393.60 batchCop[tiflash] lt(plus(test.t.value, cast(Column#7, decimal(20,0) BINARY)), 10)", - " │ └─Projection 7992.00 batchCop[tiflash] Column#7, test.t.id, test.t.value", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, test.t.value, funcs:sum(Column#10)->Column#7, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.value)->test.t.value", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.value, collate: binary], [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, test.t.value, funcs:count(1)->Column#10", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 7992.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 6393.60 mpp[tiflash] ", + " │ └─ExchangeSender 6393.60 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 6393.60 mpp[tiflash] lt(plus(test.t.value, cast(Column#7, decimal(20,0) BINARY)), 10)", + " │ └─Projection 7992.00 mpp[tiflash] Column#7, test.t.id, test.t.value", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, test.t.value, funcs:sum(Column#10)->Column#7, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.value)->test.t.value", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.value, collate: binary], [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, test.t.value, funcs:count(1)->Column#10", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5375,9 +5379,9 @@ "HashJoin 1.25 root inner join, equal:[eq(test.t.id, Column#7)]", "├─HashAgg(Build) 1.00 root funcs:count(Column#10)->Column#7", "│ └─TableReader 1.00 root data:ExchangeSender", - "│ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - "│ └─HashAgg 1.00 batchCop[tiflash] funcs:count(1)->Column#10", - "│ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", + "│ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + "│ └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#10", + "│ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", "└─TableReader(Probe) 9990.00 root data:Selection", " └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" @@ -5387,79 +5391,79 @@ "SQL": "desc format = 'brief' select sum(b) from (select t.id, t1.id as b from t join t t1 on t.id=t1.id)A group by id", "Plan": [ "TableReader 7992.00 root data:ExchangeSender", - "└─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 7992.00 batchCop[tiflash] Column#7", - " └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#8)->Column#7", - " └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 7992.00 batchCop[tiflash] group by:Column#11, funcs:sum(Column#10)->Column#8", - " └─Projection 12487.50 batchCop[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#10, test.t.id", - " └─HashJoin 12487.50 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 batchCop[tiflash] ", - " │ └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t1 keep order:false, stats:pseudo" + "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 7992.00 mpp[tiflash] Column#7", + " └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#8)->Column#7", + " └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 7992.00 mpp[tiflash] group by:Column#11, funcs:sum(Column#10)->Column#8", + " └─Projection 12487.50 mpp[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#10, test.t.id", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from (select id from t group by id) C join (select sum(value),id from t group by id)B on C.id=B.id", "Plan": [ "TableReader 7992.00 root data:ExchangeSender", - "└─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 7992.00 batchCop[tiflash] test.t.id", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, ", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection(Probe) 7992.00 batchCop[tiflash] Column#7, test.t.id", - " └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#9)->Column#7, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:sum(test.t.value)->Column#9", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 7992.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 7992.00 mpp[tiflash] test.t.id", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, ", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection(Probe) 7992.00 mpp[tiflash] Column#7, test.t.id", + " └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#9)->Column#7, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:sum(test.t.value)->Column#9", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from (select id from t group by id) C join (select sum(b),id from (select t.id, t1.id as b from t join (select id, count(*) as c from t group by id) t1 on t.id=t1.id)A group by id)B on C.id=b.id", "Plan": [ "TableReader 7992.00 root data:ExchangeSender", - "└─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 7992.00 batchCop[tiflash] test.t.id", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, ", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection(Probe) 7992.00 batchCop[tiflash] Column#11, test.t.id", - " └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:sum(Column#17)->Column#11, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " └─HashAgg 7992.00 batchCop[tiflash] group by:Column#33, funcs:sum(Column#32)->Column#17", - " └─Projection 9990.00 batchCop[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#32, test.t.id", - " └─HashJoin 9990.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 7992.00 batchCop[tiflash] test.t.id, Column#13", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id, funcs:sum(Column#16)->Column#13", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:count(1)->Column#16", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 7992.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 7992.00 mpp[tiflash] test.t.id", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, ", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection(Probe) 7992.00 mpp[tiflash] Column#11, test.t.id", + " └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:sum(Column#17)->Column#11, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " └─HashAgg 7992.00 mpp[tiflash] group by:Column#33, funcs:sum(Column#32)->Column#17", + " └─Projection 9990.00 mpp[tiflash] cast(test.t.id, decimal(10,0) BINARY)->Column#32, test.t.id", + " └─HashJoin 9990.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 7992.00 mpp[tiflash] test.t.id, Column#13", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id, funcs:sum(Column#16)->Column#13", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:count(1)->Column#16", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -5467,15 +5471,15 @@ "Plan": [ "TopN 1.00 root test.t.value, offset:0, count:1", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─TopN 1.00 batchCop[tiflash] test.t.value, offset:0, count:1", - " └─HashJoin 12487.50 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 batchCop[tiflash] ", - " │ └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─TopN 1.00 mpp[tiflash] test.t.value, offset:0, count:1", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -5485,17 +5489,17 @@ "└─TopN 1.00 root Column#8, offset:0, count:1", " └─Projection 1.00 root test.t.id, test.t.value, test.t.id, test.t.value, mod(test.t.value, 100)->Column#8", " └─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] test.t.id, test.t.value, test.t.id, test.t.value", - " └─TopN 1.00 batchCop[tiflash] Column#7, offset:0, count:1", - " └─Projection 12487.50 batchCop[tiflash] test.t.id, test.t.value, test.t.id, test.t.value, mod(test.t.value, 100)->Column#7", - " └─HashJoin 12487.50 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 batchCop[tiflash] ", - " │ └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] test.t.id, test.t.value, test.t.id, test.t.value", + " └─TopN 1.00 mpp[tiflash] Column#7, offset:0, count:1", + " └─Projection 12487.50 mpp[tiflash] test.t.id, test.t.value, test.t.id, test.t.value, mod(test.t.value, 100)->Column#7", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -5504,15 +5508,15 @@ "HashAgg 20.00 root group by:test.t.value, funcs:count(1)->Column#7", "└─TopN 20.00 root test.t.value, offset:0, count:20", " └─TableReader 20.00 root data:ExchangeSender", - " └─ExchangeSender 20.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─TopN 20.00 batchCop[tiflash] test.t.value, offset:0, count:20", - " └─HashJoin 12487.50 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 batchCop[tiflash] ", - " │ └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 20.00 mpp[tiflash] ExchangeType: PassThrough", + " └─TopN 20.00 mpp[tiflash] test.t.value, offset:0, count:20", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -5520,15 +5524,15 @@ "Plan": [ "Limit 1.00 root offset:0, count:1", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 cop[tiflash] ExchangeType: PassThrough", - " └─Limit 1.00 cop[tiflash] offset:0, count:1", - " └─HashJoin 12487.50 cop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 0.80 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Limit 1.00 mpp[tiflash] offset:0, count:1", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 0.80 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -5536,15 +5540,15 @@ "Plan": [ "Limit 1.00 root offset:0, count:1", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 cop[tiflash] ExchangeType: PassThrough", - " └─Limit 1.00 cop[tiflash] offset:0, count:1", - " └─HashJoin 12487.50 cop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 0.80 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Limit 1.00 mpp[tiflash] offset:0, count:1", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 0.80 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] }, { @@ -5553,15 +5557,15 @@ "HashAgg 20.00 root group by:test.t.value, funcs:count(1)->Column#7", "└─Limit 20.00 root offset:0, count:20", " └─TableReader 20.00 root data:ExchangeSender", - " └─ExchangeSender 20.00 cop[tiflash] ExchangeType: PassThrough", - " └─Limit 20.00 cop[tiflash] offset:0, count:20", - " └─HashJoin 12487.50 cop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 16.02 cop[tiflash] table:t1 keep order:false, stats:pseudo" + " └─ExchangeSender 20.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Limit 20.00 mpp[tiflash] offset:0, count:20", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 16.02 mpp[tiflash] table:t1 keep order:false, stats:pseudo" ] } ] @@ -5574,7 +5578,7 @@ "Plan": [ "IndexMerge 8.00 root ", "├─IndexRangeScan(Build) 1.00 cop[tikv] table:t, index:a(a) range:[1,1], keep order:false", - "├─Selection(Build) 0.80 cop[tikv] 1", + "├─Selection(Build) 1.00 cop[tikv] 1", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false", "└─TableRowIDScan(Probe) 8.00 cop[tikv] table:t keep order:false" ], @@ -5585,7 +5589,7 @@ "Plan": [ "IndexMerge 8.00 root ", "├─IndexRangeScan(Build) 1.00 cop[tikv] table:t, index:a(a) range:[1,1], keep order:false", - "├─Selection(Build) 0.80 cop[tikv] 1", + "├─Selection(Build) 1.00 cop[tikv] 1", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false", "└─TableRowIDScan(Probe) 8.00 cop[tikv] table:t keep order:false" ], @@ -5595,9 +5599,9 @@ "SQL": "desc format='brief' select /*+ use_index_merge(t) */ * from t where (a=1 and length(a)=1) or (b=1 and length(b)=1)", "Plan": [ "IndexMerge 8.00 root ", - "├─Selection(Build) 0.80 cop[tikv] 1", + "├─Selection(Build) 1.00 cop[tikv] 1", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, index:a(a) range:[1,1], keep order:false", - "├─Selection(Build) 0.80 cop[tikv] 1", + "├─Selection(Build) 1.00 cop[tikv] 1", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false", "└─TableRowIDScan(Probe) 8.00 cop[tikv] table:t keep order:false" ], @@ -5680,19 +5684,19 @@ " ├─Selection(Build) 0.80 root ne(Column#27, 0)", " │ └─HashAgg 1.00 root funcs:min(Column#36)->Column#25, funcs:sum(Column#37)->Column#26, funcs:count(Column#38)->Column#27", " │ └─TableReader 1.00 root data:ExchangeSender", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " │ └─HashAgg 1.00 batchCop[tiflash] funcs:min(Column#42)->Column#36, funcs:sum(Column#43)->Column#37, funcs:count(1)->Column#38", - " │ └─Projection 10000.00 batchCop[tiflash] test.ts.col_varchar_64, cast(isnull(test.ts.col_varchar_64), decimal(20,0) BINARY)->Column#43", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:SUBQUERY4_t1 keep order:false, stats:pseudo", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " │ └─HashAgg 1.00 mpp[tiflash] funcs:min(Column#42)->Column#36, funcs:sum(Column#43)->Column#37, funcs:count(1)->Column#38", + " │ └─Projection 10000.00 mpp[tiflash] test.ts.col_varchar_64, cast(isnull(test.ts.col_varchar_64), decimal(20,0) BINARY)->Column#43", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:SUBQUERY4_t1 keep order:false, stats:pseudo", " └─TableReader(Probe) 12487.50 root data:ExchangeSender", - " └─ExchangeSender 12487.50 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 cop[tiflash] inner join, equal:[eq(test.ts.col_varchar_64, test.ts.col_varchar_key)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.ts.col_varchar_64))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:table2 keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.ts.col_varchar_key))", - " └─TableFullScan 10000.00 cop[tiflash] table:SUBQUERY3_t1 keep order:false, stats:pseudo" + " └─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.ts.col_varchar_64, test.ts.col_varchar_key)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.ts.col_varchar_64))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:table2 keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.ts.col_varchar_key))", + " └─TableFullScan 10000.00 mpp[tiflash] table:SUBQUERY3_t1 keep order:false, stats:pseudo" ] } ] @@ -5705,10 +5709,10 @@ "Plan": [ "HashAgg 1.00 root funcs:group_concat(Column#7 separator \",\")->Column#5", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(Column#9, Column#10, Column#11 separator \",\")->Column#7", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#11", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(Column#9, Column#10, Column#11 separator \",\")->Column#7", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#11", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5718,14 +5722,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#6, Column#7, Column#8 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.id, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#6, Column#7, Column#8 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.id, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5735,13 +5739,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_1, id order by col_0) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(Column#6, Column#7, Column#8 order by Column#9 separator \",\")->Column#5", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_0", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(Column#6, Column#7, Column#8 order by Column#9 separator \",\")->Column#5", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_0", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5751,14 +5755,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id order by col_0) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#6, Column#7, Column#8 order by Column#9 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_0", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.id, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#6, Column#7, Column#8 order by Column#9 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_0", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.id, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5768,13 +5772,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_1, id order by col_0),count(*),min(col_1) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6, Column#7", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(Column#8, Column#9, Column#10 order by Column#11 separator \",\")->Column#5, funcs:count(1)->Column#6, funcs:min(Column#12)->Column#7", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#10, test.ts.col_0, test.ts.col_1", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6, Column#7", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(Column#8, Column#9, Column#10 order by Column#11 separator \",\")->Column#5, funcs:count(1)->Column#6, funcs:min(Column#12)->Column#7", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#10, test.ts.col_0, test.ts.col_1", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5784,14 +5788,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id order by col_0),count(*),max(col_0) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6, Column#7", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#14, Column#15, Column#16 order by Column#17 separator \",\")->Column#5, funcs:sum(Column#18)->Column#6, funcs:max(Column#19)->Column#7", - " └─Projection 1.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#16, test.ts.col_0, Column#12, Column#13", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.id, funcs:count(1)->Column#12, funcs:max(test.ts.col_0)->Column#13", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6, Column#7", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#12, Column#13, Column#14 order by Column#15 separator \",\")->Column#5, funcs:sum(Column#16)->Column#6, funcs:max(Column#17)->Column#7", + " └─Projection 1.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#14, test.ts.col_0, Column#10, Column#11", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.id, funcs:count(1)->Column#10, funcs:max(test.ts.col_0)->Column#11", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5801,14 +5805,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_1, id) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.col_2, funcs:group_concat(Column#9 separator \",\")->Column#5", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#13, funcs:group_concat(Column#10, Column#11, Column#12 separator \",\")->Column#9", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#12, test.ts.col_2", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.col_2, funcs:group_concat(Column#9 separator \",\")->Column#5", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#13, funcs:group_concat(Column#10, Column#11, Column#12 separator \",\")->Column#9", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#12, test.ts.col_2", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5818,14 +5822,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#9, funcs:group_concat(distinct Column#6, Column#7, Column#8 separator \",\")->Column#5", - " └─Projection 8000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_2", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.col_2, test.ts.id, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#9, funcs:group_concat(distinct Column#6, Column#7, Column#8 separator \",\")->Column#5", + " └─Projection 8000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_2", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.col_2, test.ts.id, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5835,13 +5839,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_1, id order by col_0) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#10, funcs:group_concat(Column#6, Column#7, Column#8 order by Column#9 separator \",\")->Column#5", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_0, test.ts.col_2", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#10, funcs:group_concat(Column#6, Column#7, Column#8 order by Column#9 separator \",\")->Column#5", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_0, test.ts.col_2", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5851,14 +5855,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id order by col_0) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#10, funcs:group_concat(distinct Column#6, Column#7, Column#8 order by Column#9 separator \",\")->Column#5", - " └─Projection 8000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_0, test.ts.col_2", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.col_2, test.ts.id, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#10, funcs:group_concat(distinct Column#6, Column#7, Column#8 order by Column#9 separator \",\")->Column#5", + " └─Projection 8000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#8, test.ts.col_0, test.ts.col_2", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.col_0, test.ts.col_1, test.ts.col_2, test.ts.id, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5868,13 +5872,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_1, id order by col_0) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#9, funcs:group_concat(Column#6, Column#7 order by Column#8 separator \",\")->Column#5", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_1, cast(test.ts.id, var_string(20))->Column#7, test.ts.col_0, test.ts.col_2", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#9, funcs:group_concat(Column#6, Column#7 order by Column#8 separator \",\")->Column#5", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_1, cast(test.ts.id, var_string(20))->Column#7, test.ts.col_0, test.ts.col_2", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5884,14 +5888,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_1, id order by col_0) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#9, funcs:group_concat(distinct Column#6, Column#7 order by Column#8 separator \",\")->Column#5", - " └─Projection 8000.00 batchCop[tiflash] test.ts.col_1, cast(test.ts.id, var_string(20))->Column#7, test.ts.col_0, test.ts.col_2", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.col_1, test.ts.col_2, test.ts.id, funcs:firstrow(test.ts.col_0)->test.ts.col_0", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#9, funcs:group_concat(distinct Column#6, Column#7 order by Column#8 separator \",\")->Column#5", + " └─Projection 8000.00 mpp[tiflash] test.ts.col_1, cast(test.ts.id, var_string(20))->Column#7, test.ts.col_0, test.ts.col_2", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.col_1, test.ts.col_2, test.ts.id, funcs:firstrow(test.ts.col_0)->test.ts.col_0", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5901,13 +5905,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_1, id order by col_0),count(*),min(col_0),avg(id) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#11, 0), 1, Column#11), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#20, funcs:group_concat(Column#13, Column#14, Column#15 order by Column#16 separator \",\")->Column#5, funcs:count(1)->Column#6, funcs:min(Column#17)->Column#7, funcs:count(Column#18)->Column#11, funcs:sum(Column#19)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#15, test.ts.col_0, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#19, test.ts.col_2", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#11, 0), 1, Column#11), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#20, funcs:group_concat(Column#13, Column#14, Column#15 order by Column#16 separator \",\")->Column#5, funcs:count(1)->Column#6, funcs:min(Column#17)->Column#7, funcs:count(Column#18)->Column#11, funcs:sum(Column#19)->Column#8", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#15, test.ts.col_0, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#19, test.ts.col_2", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5917,15 +5921,15 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id order by col_0),count(*),max(col_1),avg(id) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#24, 0), 1, Column#24), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#44, funcs:group_concat(distinct Column#36, Column#37, Column#38 order by Column#39 separator \",\")->Column#5, funcs:sum(Column#40)->Column#6, funcs:max(Column#41)->Column#7, funcs:sum(Column#42)->Column#24, funcs:sum(Column#43)->Column#8", - " └─Projection 8000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#38, test.ts.col_0, Column#25, Column#26, Column#27, Column#28, test.ts.col_2", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#32, Column#33, Column#34, Column#35, funcs:count(1)->Column#25, funcs:max(Column#29)->Column#26, funcs:count(Column#30)->Column#27, funcs:sum(Column#31)->Column#28", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#31, test.ts.col_2, test.ts.col_0, test.ts.col_1, test.ts.id", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#20, 0), 1, Column#20), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#40, funcs:group_concat(distinct Column#32, Column#33, Column#34 order by Column#35 separator \",\")->Column#5, funcs:sum(Column#36)->Column#6, funcs:max(Column#37)->Column#7, funcs:sum(Column#38)->Column#20, funcs:sum(Column#39)->Column#8", + " └─Projection 8000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#34, test.ts.col_0, Column#21, Column#22, Column#23, Column#24, test.ts.col_2", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#28, Column#29, Column#30, Column#31, funcs:count(1)->Column#21, funcs:max(Column#25)->Column#22, funcs:count(Column#26)->Column#23, funcs:sum(Column#27)->Column#24", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#27, test.ts.col_2, test.ts.col_0, test.ts.col_1, test.ts.id", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5935,13 +5939,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_1, id order by col_0),count(distinct id),min(col_0),avg(id) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#10, 0), 1, Column#10), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(Column#11, Column#12, Column#13 order by Column#14 separator \",\")->Column#5, funcs:count(Column#15)->Column#6, funcs:min(Column#16)->Column#7, funcs:count(Column#17)->Column#10, funcs:sum(Column#18)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#13, test.ts.col_0, test.ts.id, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#18", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#10, 0), 1, Column#10), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(Column#11, Column#12, Column#13 order by Column#14 separator \",\")->Column#5, funcs:count(Column#15)->Column#6, funcs:min(Column#16)->Column#7, funcs:count(Column#17)->Column#10, funcs:sum(Column#18)->Column#8", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#13, test.ts.col_0, test.ts.id, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#18", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5951,15 +5955,15 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id order by col_0),count(distinct id),max(col_1),avg(id) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#18, 0), 1, Column#18), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#30, Column#31, Column#32 order by Column#33 separator \",\")->Column#5, funcs:sum(Column#34)->Column#6, funcs:max(Column#35)->Column#7, funcs:sum(Column#36)->Column#18, funcs:sum(Column#37)->Column#8", - " └─Projection 1.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#32, test.ts.col_0, Column#19, Column#20, Column#21, Column#22", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#27, Column#28, Column#29, funcs:count(Column#23)->Column#19, funcs:max(Column#24)->Column#20, funcs:count(Column#25)->Column#21, funcs:sum(Column#26)->Column#22", - " └─Projection 10000.00 batchCop[tiflash] test.ts.id, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#26, test.ts.col_0, test.ts.col_1, test.ts.id", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#14, 0), 1, Column#14), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#26, Column#27, Column#28 order by Column#29 separator \",\")->Column#5, funcs:sum(Column#30)->Column#6, funcs:max(Column#31)->Column#7, funcs:sum(Column#32)->Column#14, funcs:sum(Column#33)->Column#8", + " └─Projection 1.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#28, test.ts.col_0, Column#15, Column#16, Column#17, Column#18", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#23, Column#24, Column#25, funcs:count(Column#19)->Column#15, funcs:max(Column#20)->Column#16, funcs:count(Column#21)->Column#17, funcs:sum(Column#22)->Column#18", + " └─Projection 10000.00 mpp[tiflash] test.ts.id, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#22, test.ts.col_0, test.ts.col_1, test.ts.id", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5969,14 +5973,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_1, id),count(distinct id),min(col_0),avg(id) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#27, 0), 1, Column#27), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.col_2, funcs:group_concat(Column#28 separator \",\")->Column#5, funcs:sum(Column#29)->Column#6, funcs:min(Column#30)->Column#7, funcs:sum(Column#31)->Column#27, funcs:sum(Column#32)->Column#8", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#40, funcs:group_concat(Column#33, Column#34, Column#35 separator \",\")->Column#28, funcs:count(Column#36)->Column#29, funcs:min(Column#37)->Column#30, funcs:count(Column#38)->Column#31, funcs:sum(Column#39)->Column#32", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#35, test.ts.id, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#39, test.ts.col_2", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#27, 0), 1, Column#27), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.col_2, funcs:group_concat(Column#28 separator \",\")->Column#5, funcs:sum(Column#29)->Column#6, funcs:min(Column#30)->Column#7, funcs:sum(Column#31)->Column#27, funcs:sum(Column#32)->Column#8", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#40, funcs:group_concat(Column#33, Column#34, Column#35 separator \",\")->Column#28, funcs:count(Column#36)->Column#29, funcs:min(Column#37)->Column#30, funcs:count(Column#38)->Column#31, funcs:sum(Column#39)->Column#32", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#35, test.ts.id, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#39, test.ts.col_2", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -5986,15 +5990,15 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id),count(distinct id),max(col_1),avg(id) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#24, 0), 1, Column#24), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#44, funcs:group_concat(distinct Column#37, Column#38, Column#39 separator \",\")->Column#5, funcs:sum(Column#40)->Column#6, funcs:max(Column#41)->Column#7, funcs:sum(Column#42)->Column#24, funcs:sum(Column#43)->Column#8", - " └─Projection 8000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#39, Column#25, Column#26, Column#27, Column#28, test.ts.col_2", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#33, Column#34, Column#35, Column#36, funcs:count(Column#29)->Column#25, funcs:max(Column#30)->Column#26, funcs:count(Column#31)->Column#27, funcs:sum(Column#32)->Column#28", - " └─Projection 10000.00 batchCop[tiflash] test.ts.id, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#32, test.ts.col_2, test.ts.col_0, test.ts.col_1, test.ts.id", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#20, 0), 1, Column#20), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#40, funcs:group_concat(distinct Column#33, Column#34, Column#35 separator \",\")->Column#5, funcs:sum(Column#36)->Column#6, funcs:max(Column#37)->Column#7, funcs:sum(Column#38)->Column#20, funcs:sum(Column#39)->Column#8", + " └─Projection 8000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#35, Column#21, Column#22, Column#23, Column#24, test.ts.col_2", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#29, Column#30, Column#31, Column#32, funcs:count(Column#25)->Column#21, funcs:max(Column#26)->Column#22, funcs:count(Column#27)->Column#23, funcs:sum(Column#28)->Column#24", + " └─Projection 10000.00 mpp[tiflash] test.ts.id, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#28, test.ts.col_2, test.ts.col_0, test.ts.col_1, test.ts.id", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6005,10 +6009,10 @@ "Plan": [ "HashAgg 1.00 root funcs:group_concat(Column#14 separator \",\")->Column#5, funcs:count(Column#15)->Column#6, funcs:min(Column#16)->Column#7, funcs:avg(Column#17, Column#18)->Column#8", "└─TableReader 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(Column#24, Column#25, Column#26 separator \",\")->Column#14, funcs:count(Column#27)->Column#15, funcs:min(Column#28)->Column#16, funcs:count(Column#29)->Column#17, funcs:sum(Column#30)->Column#18", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#26, test.ts.id, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#30", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(Column#24, Column#25, Column#26 separator \",\")->Column#14, funcs:count(Column#27)->Column#15, funcs:min(Column#28)->Column#16, funcs:count(Column#29)->Column#17, funcs:sum(Column#30)->Column#18", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#26, test.ts.id, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#30", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6018,15 +6022,15 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id),count(distinct id),max(col_1),avg(id) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#18, 0), 1, Column#18), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#30, Column#31, Column#32 separator \",\")->Column#5, funcs:sum(Column#33)->Column#6, funcs:max(Column#34)->Column#7, funcs:sum(Column#35)->Column#18, funcs:sum(Column#36)->Column#8", - " └─Projection 1.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#32, Column#19, Column#20, Column#21, Column#22", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#27, Column#28, Column#29, funcs:count(Column#23)->Column#19, funcs:max(Column#24)->Column#20, funcs:count(Column#25)->Column#21, funcs:sum(Column#26)->Column#22", - " └─Projection 10000.00 batchCop[tiflash] test.ts.id, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#26, test.ts.col_0, test.ts.col_1, test.ts.id", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#14, 0), 1, Column#14), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#26, Column#27, Column#28 separator \",\")->Column#5, funcs:sum(Column#29)->Column#6, funcs:max(Column#30)->Column#7, funcs:sum(Column#31)->Column#14, funcs:sum(Column#32)->Column#8", + " └─Projection 1.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#28, Column#15, Column#16, Column#17, Column#18", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#23, Column#24, Column#25, funcs:count(Column#19)->Column#15, funcs:max(Column#20)->Column#16, funcs:count(Column#21)->Column#17, funcs:sum(Column#22)->Column#18", + " └─Projection 10000.00 mpp[tiflash] test.ts.id, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#22, test.ts.col_0, test.ts.col_1, test.ts.id", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6036,13 +6040,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_1, id),count(distinct id),group_concat(col_0 order by 1),avg(id) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#17, 0), 1, Column#17), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#29, funcs:group_concat(Column#21, Column#22, Column#23 separator \",\")->Column#5, funcs:count(Column#24)->Column#6, funcs:group_concat(Column#25 order by Column#26 separator \",\")->Column#7, funcs:count(Column#27)->Column#17, funcs:sum(Column#28)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#23, test.ts.id, test.ts.col_0, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#28, test.ts.col_2", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#17, 0), 1, Column#17), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#29, funcs:group_concat(Column#21, Column#22, Column#23 separator \",\")->Column#5, funcs:count(Column#24)->Column#6, funcs:group_concat(Column#25 order by Column#26 separator \",\")->Column#7, funcs:count(Column#27)->Column#17, funcs:sum(Column#28)->Column#8", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#23, test.ts.id, test.ts.col_0, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#28, test.ts.col_2", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6052,13 +6056,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0),count(distinct id),group_concat(col_1, id order by 1,2),avg(id) from ts group by col_2", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#14, 0), 1, Column#14), decimal(20,0) BINARY))->Column#8", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#25, funcs:group_concat(distinct Column#17 separator \",\")->Column#5, funcs:count(Column#18)->Column#6, funcs:group_concat(Column#19, Column#20 order by Column#21, Column#22 separator \",\")->Column#7, funcs:count(Column#23)->Column#14, funcs:sum(Column#24)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.id, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#20, test.ts.col_1, test.ts.id, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#24, test.ts.col_2", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5, Column#6, Column#7, div(Column#8, cast(case(eq(Column#13, 0), 1, Column#13), decimal(20,0) BINARY))->Column#8", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#24, funcs:group_concat(distinct Column#16 separator \",\")->Column#5, funcs:count(Column#17)->Column#6, funcs:group_concat(Column#18, Column#19 order by Column#20, Column#21 separator \",\")->Column#7, funcs:count(Column#22)->Column#13, funcs:sum(Column#23)->Column#8", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.id, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#19, test.ts.col_1, test.ts.id, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#23, test.ts.col_2", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_2, collate: utf8mb4_bin]", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6068,13 +6072,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, id),count(distinct id),group_concat(col_1, id order by 1,2),min(col_0),avg(id) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6, Column#7, Column#8, div(Column#9, cast(case(eq(Column#15, 0), 1, Column#15), decimal(20,0) BINARY))->Column#9", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(Column#18, Column#19 separator \",\")->Column#5, funcs:count(Column#20)->Column#6, funcs:group_concat(Column#21, Column#22 order by Column#23, Column#24 separator \",\")->Column#7, funcs:min(Column#25)->Column#8, funcs:count(Column#26)->Column#15, funcs:sum(Column#27)->Column#9", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, cast(test.ts.id, var_string(20))->Column#19, test.ts.id, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#22, test.ts.col_1, test.ts.id, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#27", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6, Column#7, Column#8, div(Column#9, cast(case(eq(Column#15, 0), 1, Column#15), decimal(20,0) BINARY))->Column#9", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(Column#18, Column#19 separator \",\")->Column#5, funcs:count(Column#20)->Column#6, funcs:group_concat(Column#21, Column#22 order by Column#23, Column#24 separator \",\")->Column#7, funcs:min(Column#25)->Column#8, funcs:count(Column#26)->Column#15, funcs:sum(Column#27)->Column#9", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, cast(test.ts.id, var_string(20))->Column#19, test.ts.id, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#22, test.ts.col_1, test.ts.id, test.ts.col_0, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#27", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6084,13 +6088,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id),count(distinct id),group_concat(col_1, id order by 1,2),max(col_1),avg(id) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6, Column#7, Column#8, div(Column#9, cast(case(eq(Column#13, 0), 1, Column#13), decimal(20,0) BINARY))->Column#9", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#15, Column#16, Column#17 separator \",\")->Column#5, funcs:count(Column#18)->Column#6, funcs:group_concat(Column#19, Column#20 order by Column#21, Column#22 separator \",\")->Column#7, funcs:max(Column#23)->Column#8, funcs:count(Column#24)->Column#13, funcs:sum(Column#25)->Column#9", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#17, test.ts.id, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#20, test.ts.col_1, test.ts.id, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#25", - " └─ExchangeReceiver 10000.00 batchCop[tiflash] ", - " └─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6, Column#7, Column#8, div(Column#9, cast(case(eq(Column#12, 0), 1, Column#12), decimal(20,0) BINARY))->Column#9", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#14, Column#15, Column#16 separator \",\")->Column#5, funcs:count(Column#17)->Column#6, funcs:group_concat(Column#18, Column#19 order by Column#20, Column#21 separator \",\")->Column#7, funcs:max(Column#22)->Column#8, funcs:count(Column#23)->Column#12, funcs:sum(Column#24)->Column#9", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#16, test.ts.id, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#19, test.ts.col_1, test.ts.id, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#24", + " └─ExchangeReceiver 10000.00 mpp[tiflash] ", + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6100,15 +6104,15 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id),count(distinct col_2),group_concat(col_1, id),max(col_1),avg(id) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6, Column#7, Column#8, div(Column#9, cast(case(eq(Column#19, 0), 1, Column#19), decimal(20,0) BINARY))->Column#9", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#33, Column#34, Column#35 separator \",\")->Column#5, funcs:count(distinct Column#36)->Column#6, funcs:group_concat(Column#37 separator \",\")->Column#7, funcs:max(Column#38)->Column#8, funcs:sum(Column#39)->Column#19, funcs:sum(Column#40)->Column#9", - " └─Projection 1.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#35, test.ts.col_2, Column#20, Column#21, Column#22, Column#23", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#29, Column#30, Column#31, Column#32, funcs:group_concat(Column#24, Column#25 separator \",\")->Column#20, funcs:max(Column#26)->Column#21, funcs:count(Column#27)->Column#22, funcs:sum(Column#28)->Column#23", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_1, cast(test.ts.id, var_string(20))->Column#25, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#28, test.ts.col_0, test.ts.col_1, test.ts.id, test.ts.col_2", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6, Column#7, Column#8, div(Column#9, cast(case(eq(Column#15, 0), 1, Column#15), decimal(20,0) BINARY))->Column#9", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#29, Column#30, Column#31 separator \",\")->Column#5, funcs:count(distinct Column#32)->Column#6, funcs:group_concat(Column#33 separator \",\")->Column#7, funcs:max(Column#34)->Column#8, funcs:sum(Column#35)->Column#15, funcs:sum(Column#36)->Column#9", + " └─Projection 1.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#31, test.ts.col_2, Column#16, Column#17, Column#18, Column#19", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#25, Column#26, Column#27, Column#28, funcs:group_concat(Column#20, Column#21 separator \",\")->Column#16, funcs:max(Column#22)->Column#17, funcs:count(Column#23)->Column#18, funcs:sum(Column#24)->Column#19", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_1, cast(test.ts.id, var_string(20))->Column#21, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#24, test.ts.col_0, test.ts.col_1, test.ts.id, test.ts.col_2", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6118,15 +6122,15 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0, col_1, id),count(distinct col_2),group_concat(col_1, id),max(col_1),avg(id) from ts group by col_0", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5, Column#6, Column#7, Column#8, div(Column#9, cast(case(eq(Column#25, 0), 1, Column#25), decimal(20,0) BINARY))->Column#9", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#47, funcs:group_concat(distinct Column#39, Column#40, Column#41 separator \",\")->Column#5, funcs:count(distinct Column#42)->Column#6, funcs:group_concat(Column#43 separator \",\")->Column#7, funcs:max(Column#44)->Column#8, funcs:sum(Column#45)->Column#25, funcs:sum(Column#46)->Column#9", - " └─Projection 8000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#41, test.ts.col_2, Column#26, Column#27, Column#28, Column#29, test.ts.col_0", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_0, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#35, Column#36, Column#37, Column#38, funcs:group_concat(Column#30, Column#31 separator \",\")->Column#26, funcs:max(Column#32)->Column#27, funcs:count(Column#33)->Column#28, funcs:sum(Column#34)->Column#29", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_1, cast(test.ts.id, var_string(20))->Column#31, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#34, test.ts.col_0, test.ts.col_1, test.ts.id, test.ts.col_2", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5, Column#6, Column#7, Column#8, div(Column#9, cast(case(eq(Column#21, 0), 1, Column#21), decimal(20,0) BINARY))->Column#9", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#43, funcs:group_concat(distinct Column#35, Column#36, Column#37 separator \",\")->Column#5, funcs:count(distinct Column#38)->Column#6, funcs:group_concat(Column#39 separator \",\")->Column#7, funcs:max(Column#40)->Column#8, funcs:sum(Column#41)->Column#21, funcs:sum(Column#42)->Column#9", + " └─Projection 8000.00 mpp[tiflash] test.ts.col_0, test.ts.col_1, cast(test.ts.id, var_string(20))->Column#37, test.ts.col_2, Column#22, Column#23, Column#24, Column#25, test.ts.col_0", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_0, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#31, Column#32, Column#33, Column#34, funcs:group_concat(Column#26, Column#27 separator \",\")->Column#22, funcs:max(Column#28)->Column#23, funcs:count(Column#29)->Column#24, funcs:sum(Column#30)->Column#25", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_1, cast(test.ts.id, var_string(20))->Column#27, test.ts.col_1, test.ts.id, cast(test.ts.id, decimal(14,4) BINARY)->Column#30, test.ts.col_0, test.ts.col_1, test.ts.id, test.ts.col_2", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6136,19 +6140,18 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 0,'GG') from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#12, Column#13 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] cast(Column#10, var_string(20))->Column#12, Column#11", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:\"GG\", 0, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#10, Column#11 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] cast(Column#8, var_string(20))->Column#10, Column#9", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:\"GG\", 0, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable", "[types:1292]Truncated incorrect DOUBLE value: 'GG'", - "[types:1292]Truncated incorrect DOUBLE value: 'GG'", "[types:1292]Truncated incorrect DOUBLE value: 'GG'" ] }, @@ -6156,14 +6159,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 0,'01') from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#12, Column#13 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] cast(Column#10, var_string(20))->Column#12, Column#11", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:\"01\", 0, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#10, Column#11 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] cast(Column#8, var_string(20))->Column#10, Column#9", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:\"01\", 0, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6173,14 +6176,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 0,1) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#12, Column#13 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] cast(Column#10, var_string(20))->Column#12, cast(Column#11, var_string(20))->Column#13", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:0, 1, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#10, Column#11 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] cast(Column#8, var_string(20))->Column#10, cast(Column#9, var_string(20))->Column#11", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:0, 1, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6190,14 +6193,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 0,0) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#9, Column#10 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] cast(Column#8, var_string(20))->Column#9, cast(Column#8, var_string(20))->Column#10", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:0, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#8, Column#9 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] cast(Column#7, var_string(20))->Column#8, cast(Column#7, var_string(20))->Column#9", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:0, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6207,14 +6210,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 0,10) from ts group by '010'", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#20, funcs:group_concat(distinct Column#18, Column#19 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] cast(Column#16, var_string(20))->Column#18, cast(Column#17, var_string(20))->Column#19, Column#15", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#15, collate: binary]", - " └─HashAgg 1.00 batchCop[tiflash] group by:0, 1, 10, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#17, funcs:group_concat(distinct Column#15, Column#16 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] cast(Column#13, var_string(20))->Column#15, cast(Column#14, var_string(20))->Column#16, Column#12", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", + " └─HashAgg 1.00 mpp[tiflash] group by:0, 1, 10, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6224,14 +6227,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 0,0) from ts group by '011'", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#16, funcs:group_concat(distinct Column#14, Column#15 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] cast(Column#13, var_string(20))->Column#14, cast(Column#13, var_string(20))->Column#15, Column#12", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", - " └─HashAgg 1.00 batchCop[tiflash] group by:0, 1, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#14, funcs:group_concat(distinct Column#12, Column#13 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] cast(Column#11, var_string(20))->Column#12, cast(Column#11, var_string(20))->Column#13, Column#10", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#10, collate: binary]", + " └─HashAgg 1.00 mpp[tiflash] group by:0, 1, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6241,14 +6244,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 0,'GG') from ts group by 'GG'", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#20, funcs:group_concat(distinct Column#18, Column#19 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] cast(Column#16, var_string(20))->Column#18, Column#17, Column#15", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#15, collate: binary]", - " └─HashAgg 1.00 batchCop[tiflash] group by:\"GG\", 0, 1, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#17, funcs:group_concat(distinct Column#15, Column#16 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] cast(Column#13, var_string(20))->Column#15, Column#14, Column#12", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", + " └─HashAgg 1.00 mpp[tiflash] group by:\"GG\", 0, 1, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable", @@ -6257,8 +6260,6 @@ "[types:1292]Truncated incorrect DOUBLE value: 'GG'", "[types:1292]Truncated incorrect DOUBLE value: 'GG'", "[types:1292]Truncated incorrect DOUBLE value: 'GG'", - "[types:1292]Truncated incorrect DOUBLE value: 'GG'", - "[types:1292]Truncated incorrect DOUBLE value: 'GG'", "[types:1292]Truncated incorrect DOUBLE value: 'GG'" ] }, @@ -6266,13 +6267,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 'GG','GG') from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#8, Column#8 separator \",\")->Column#5", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:\"GG\", ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#7, Column#7 separator \",\")->Column#5", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:\"GG\", ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6282,13 +6283,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 'Gg','GG') from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#10, Column#11 separator \",\")->Column#5", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:\"GG\", \"Gg\", ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#8, Column#9 separator \",\")->Column#5", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:\"GG\", \"Gg\", ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6298,13 +6299,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct 'GG-10','GG') from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#10, Column#11 separator \",\")->Column#5", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:\"GG\", \"GG-10\", ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#8, Column#9 separator \",\")->Column#5", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:\"GG\", \"GG-10\", ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6314,19 +6315,18 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct '1200-01-01 00:00:00.023',1200) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct Column#12, Column#13 separator \",\")->Column#5", - " └─Projection 1.00 batchCop[tiflash] Column#10, cast(Column#11, var_string(20))->Column#13", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:\"1200-01-01 00:00:00.023\", 1200, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct Column#10, Column#11 separator \",\")->Column#5", + " └─Projection 1.00 mpp[tiflash] Column#8, cast(Column#9, var_string(20))->Column#11", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:\"1200-01-01 00:00:00.023\", 1200, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable", "[types:1292]Truncated incorrect DOUBLE value: '1200-01-01 00:00:00.023'", - "[types:1292]Truncated incorrect DOUBLE value: '1200-01-01 00:00:00.023'", "[types:1292]Truncated incorrect DOUBLE value: '1200-01-01 00:00:00.023'" ] }, @@ -6334,13 +6334,13 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_0) from ts group by id", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.id, funcs:group_concat(Column#9 separator \",\")->Column#5", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.id, funcs:group_concat(test.ts.col_0, test.ts.col_0 separator \",\")->Column#9", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.id, funcs:group_concat(Column#9 separator \",\")->Column#5", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.id, funcs:group_concat(test.ts.col_0, test.ts.col_0 separator \",\")->Column#9", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6350,14 +6350,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(col_0, col_0,id) from ts group by id", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.id, funcs:group_concat(Column#9 separator \",\")->Column#5", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#13, funcs:group_concat(Column#10, Column#11, Column#12 separator \",\")->Column#9", - " └─Projection 10000.00 batchCop[tiflash] test.ts.col_0, test.ts.col_0, cast(test.ts.id, var_string(20))->Column#12, test.ts.id", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.id, funcs:group_concat(Column#9 separator \",\")->Column#5", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#13, funcs:group_concat(Column#10, Column#11, Column#12 separator \",\")->Column#9", + " └─Projection 10000.00 mpp[tiflash] test.ts.col_0, test.ts.col_0, cast(test.ts.id, var_string(20))->Column#12, test.ts.id", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6367,14 +6367,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0 order by id<10) from ts", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:group_concat(distinct test.ts.col_0 order by Column#8 separator \",\")->Column#5", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#10, funcs:firstrow(Column#9)->Column#8", - " └─Projection 10000.00 batchCop[tiflash] lt(test.ts.id, 10)->Column#9, test.ts.col_0", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:group_concat(distinct test.ts.col_0 order by Column#7 separator \",\")->Column#5", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#9, funcs:firstrow(Column#8)->Column#7", + " └─Projection 10000.00 mpp[tiflash] lt(test.ts.id, 10)->Column#8, test.ts.col_0", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6384,14 +6384,14 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0 order by id<10) from ts group by col_1", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.ts.col_1, funcs:group_concat(distinct test.ts.col_0 order by Column#9 separator \",\")->Column#5", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_1, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#11, Column#12, funcs:firstrow(Column#10)->Column#9", - " └─Projection 10000.00 batchCop[tiflash] lt(test.ts.id, 10)->Column#10, test.ts.col_1, test.ts.col_0", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.ts.col_1, funcs:group_concat(distinct test.ts.col_0 order by Column#8 separator \",\")->Column#5", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_1, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#10, Column#11, funcs:firstrow(Column#9)->Column#8", + " └─Projection 10000.00 mpp[tiflash] lt(test.ts.id, 10)->Column#9, test.ts.col_1, test.ts.col_0", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6401,15 +6401,15 @@ "SQL": "desc format = 'brief' select /*+ hash_agg(),agg_to_cop() */ group_concat(distinct col_0>10 order by id<10) from ts group by col_1", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#19, funcs:group_concat(distinct Column#17 order by Column#18 separator \",\")->Column#5", - " └─Projection 8000.00 batchCop[tiflash] cast(Column#12, var_string(20))->Column#17, Column#13, test.ts.col_1", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_1, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#15, Column#16, funcs:firstrow(Column#14)->Column#13", - " └─Projection 10000.00 batchCop[tiflash] lt(test.ts.id, 10)->Column#14, test.ts.col_1, gt(cast(test.ts.col_0, double BINARY), 10)->Column#16", - " └─TableFullScan 10000.00 batchCop[tiflash] table:ts keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#17, funcs:group_concat(distinct Column#15 order by Column#16 separator \",\")->Column#5", + " └─Projection 8000.00 mpp[tiflash] cast(Column#10, var_string(20))->Column#15, Column#11, test.ts.col_1", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.ts.col_1, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#13, Column#14, funcs:firstrow(Column#12)->Column#11", + " └─Projection 10000.00 mpp[tiflash] lt(test.ts.id, 10)->Column#12, test.ts.col_1, gt(cast(test.ts.col_0, double BINARY), 10)->Column#14", + " └─TableFullScan 10000.00 mpp[tiflash] table:ts keep order:false, stats:pseudo" ], "Warning": [ "[planner:1815]Optimizer Hint AGG_TO_COP is inapplicable" @@ -6428,8 +6428,6 @@ "Scalar function 'nulleq'(signature: NullEQString, return type: bigint(1)) is not supported to push down to tiflash now.", "Aggregation can not be pushed to tiflash because arguments of AggFunc `group_concat` contains unsupported exprs in order-by clause", "Scalar function 'nulleq'(signature: NullEQString, return type: bigint(1)) is not supported to push down to tiflash now.", - "Aggregation can not be pushed to tiflash because arguments of AggFunc `group_concat` contains unsupported exprs in order-by clause", - "Scalar function 'nulleq'(signature: NullEQString, return type: bigint(1)) is not supported to push down to tiflash now.", "Aggregation can not be pushed to tiflash because arguments of AggFunc `group_concat` contains unsupported exprs in order-by clause" ] } @@ -6444,13 +6442,13 @@ "Projection 8000.00 root Column#5", "└─Sort 8000.00 root test.t.id", " └─TableReader 8000.00 root data:ExchangeSender", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5, test.t.id", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, test.t.name, funcs:sum(Column#7)->Column#5, funcs:firstrow(test.t.id)->test.t.id", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.name, collate: utf8mb4_bin], [name: test.t.id, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, test.t.name, funcs:count(1)->Column#7", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5, test.t.id", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, test.t.name, funcs:sum(Column#7)->Column#5, funcs:firstrow(test.t.id)->test.t.id", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.name, collate: utf8mb4_bin], [name: test.t.id, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, test.t.name, funcs:count(1)->Column#7", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -6458,13 +6456,13 @@ "Plan": [ "Sort 8000.00 root Column#5", "└─TableReader 8000.00 root data:ExchangeSender", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.name, funcs:sum(Column#8)->Column#5", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.name, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.name, funcs:count(1)->Column#8", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.name, funcs:sum(Column#8)->Column#5", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.name, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.name, funcs:count(1)->Column#8", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -6472,15 +6470,15 @@ "Plan": [ "Sort 8000.00 root Column#5", "└─TableReader 8000.00 root data:ExchangeSender", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.name, funcs:count(1)->Column#5", - " └─Projection 8000.00 batchCop[tiflash] test.t.id, test.t.name", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, test.t.name, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.name)->test.t.name", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.name, collate: utf8mb4_bin]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:test.t.id, test.t.name, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.name, funcs:count(1)->Column#5", + " └─Projection 8000.00 mpp[tiflash] test.t.id, test.t.name", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, test.t.name, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.name)->test.t.name", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.name, collate: utf8mb4_bin]", + " └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, test.t.name, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -6488,20 +6486,20 @@ "Plan": [ "Sort 9990.00 root test.t.id", "└─TableReader 9990.00 root data:ExchangeSender", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 9990.00 batchCop[tiflash] test.t.id, test.t.id, test.t.value, test.t.name", - " └─HashJoin 9990.00 batchCop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 7992.00 batchCop[tiflash] test.t.id", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 7992.00 batchCop[tiflash] ", - " │ └─ExchangeSender 7992.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", - " │ └─HashAgg 7992.00 batchCop[tiflash] group by:test.t.id, ", - " │ └─Selection 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 9990.00 mpp[tiflash] test.t.id, test.t.id, test.t.value, test.t.name", + " └─HashJoin 9990.00 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 7992.00 mpp[tiflash] test.t.id", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 7992.00 mpp[tiflash] ", + " │ └─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.id, collate: binary]", + " │ └─HashAgg 7992.00 mpp[tiflash] group by:test.t.id, ", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -6509,46 +6507,46 @@ "Plan": [ "Sort 12487.50 root test.t.id", "└─TableReader 12487.50 root data:ExchangeSender", - " └─ExchangeSender 12487.50 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 12487.50 cop[tiflash] test.t.id, test.t.value, test.t.name, test.t.id, test.t.value, test.t.name", - " └─HashJoin 12487.50 cop[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.t.id))", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 12487.50 mpp[tiflash] test.t.id, test.t.value, test.t.name, test.t.id, test.t.value, test.t.name", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t.id, test.t.id)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.t.id))", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from ((select id from t order by 1) union all (select id+1 from t order by 1))c", "Plan": [ "TableReader 20000.00 root data:ExchangeSender", - "└─ExchangeSender 20000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Union 20000.00 cop[tiflash] ", - " ├─Projection 10000.00 cop[tiflash] cast(test.t.id, bigint(20) BINARY)->Column#10", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection 10000.00 cop[tiflash] plus(test.t.id, 1)->Column#10", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 20000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Union 20000.00 mpp[tiflash] ", + " ├─Projection 10000.00 mpp[tiflash] cast(test.t.id, bigint(20) BINARY)->Column#10", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection 10000.00 mpp[tiflash] plus(test.t.id, 1)->Column#10", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { "SQL": "desc format = 'brief' select * from ((select count(*) from (select id,name from t order by id)a group by name,id order by id) union all (select id+1 from t order by 1))c", "Plan": [ "TableReader 18000.00 root data:ExchangeSender", - "└─ExchangeSender 18000.00 cop[tiflash] ExchangeType: PassThrough", - " └─Union 18000.00 cop[tiflash] ", - " ├─Projection 8000.00 cop[tiflash] cast(Column#12, bigint(21) BINARY)->Column#12", - " │ └─Projection 8000.00 cop[tiflash] Column#5", - " │ └─Projection 8000.00 cop[tiflash] Column#5, test.t.id", - " │ └─HashAgg 8000.00 cop[tiflash] group by:test.t.id, test.t.name, funcs:sum(Column#19)->Column#5, funcs:firstrow(test.t.id)->test.t.id", - " │ └─ExchangeReceiver 8000.00 cop[tiflash] ", - " │ └─ExchangeSender 8000.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.name, collate: utf8mb4_bin], [name: test.t.id, collate: binary]", - " │ └─HashAgg 8000.00 cop[tiflash] group by:test.t.id, test.t.name, funcs:count(1)->Column#19", - " │ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", - " └─Projection 10000.00 cop[tiflash] cast(Column#11, bigint(21) BINARY)->Column#12", - " └─Projection 10000.00 cop[tiflash] plus(test.t.id, 1)->Column#11", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + "└─ExchangeSender 18000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Union 18000.00 mpp[tiflash] ", + " ├─Projection 8000.00 mpp[tiflash] cast(Column#12, bigint(21) BINARY)->Column#12", + " │ └─Projection 8000.00 mpp[tiflash] Column#5", + " │ └─Projection 8000.00 mpp[tiflash] Column#5, test.t.id", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, test.t.name, funcs:sum(Column#19)->Column#5, funcs:firstrow(test.t.id)->test.t.id", + " │ └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.t.name, collate: utf8mb4_bin], [name: test.t.id, collate: binary]", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:test.t.id, test.t.name, funcs:count(1)->Column#19", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", + " └─Projection 10000.00 mpp[tiflash] cast(Column#11, bigint(21) BINARY)->Column#12", + " └─Projection 10000.00 mpp[tiflash] plus(test.t.id, 1)->Column#11", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" ] }, { @@ -6556,8 +6554,73 @@ "Plan": [ "Sort 10000.00 root test.t.name", "└─TableReader 10000.00 root data:ExchangeSender", - " └─ExchangeSender 10000.00 cop[tiflash] ExchangeType: PassThrough", - " └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo" + " └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo" + ] + } + ] + }, + { + "Name": "TestIssue32632", + "Cases": [ + { + "SQL": "explain format = 'brief' select sum(ps_supplycost) from partsupp, supplier where ps_suppkey = s_suppkey;", + "Plan": [ + "HashAgg 1.00 root funcs:sum(Column#15)->Column#14", + "└─TableReader 1.00 root data:ExchangeSender", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:sum(test.partsupp.ps_supplycost)->Column#15", + " └─Projection 12500.00 mpp[tiflash] test.partsupp.ps_supplycost", + " └─HashJoin 12500.00 mpp[tiflash] inner join, equal:[eq(test.supplier.s_suppkey, test.partsupp.ps_suppkey)]", + " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", + " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:supplier keep order:false", + " └─TableFullScan(Probe) 800000.00 mpp[tiflash] table:partsupp keep order:false" + ] + } + ] + }, + { + "Name": "TestTiFlashPartitionTableScan", + "Cases": [ + { + "SQL": "explain format = 'brief' select * from rp_t where a = 1 or a = 20", + "Plan": [ + "TableReader 20.00 root partition:p0,p3 data:ExchangeSender", + "└─ExchangeSender 20.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Selection 20.00 mpp[tiflash] or(eq(test.rp_t.a, 1), eq(test.rp_t.a, 20))", + " └─TableFullScan 10000.00 mpp[tiflash] table:rp_t keep order:false, stats:pseudo, PartitionTableScan:true" + ] + }, + { + "SQL": "explain format = 'brief' select * from hp_t where a = 1 or a = 20", + "Plan": [ + "TableReader 20.00 root partition:p0,p1 data:ExchangeSender", + "└─ExchangeSender 20.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Selection 20.00 mpp[tiflash] or(eq(test.hp_t.a, 1), eq(test.hp_t.a, 20))", + " └─TableFullScan 10000.00 mpp[tiflash] table:hp_t keep order:false, stats:pseudo, PartitionTableScan:true" + ] + }, + { + "SQL": "explain format = 'brief' select count(*) from rp_t where a = 1 or a = 20", + "Plan": [ + "HashAgg 1.00 root funcs:count(Column#5)->Column#3", + "└─TableReader 1.00 root partition:p0,p3 data:ExchangeSender", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#5", + " └─Selection 20.00 mpp[tiflash] or(eq(test.rp_t.a, 1), eq(test.rp_t.a, 20))", + " └─TableFullScan 10000.00 mpp[tiflash] table:rp_t keep order:false, stats:pseudo, PartitionTableScan:true" + ] + }, + { + "SQL": "explain format = 'brief' select count(*) from hp_t where a = 1 or a = 20", + "Plan": [ + "HashAgg 1.00 root funcs:count(Column#5)->Column#3", + "└─TableReader 1.00 root partition:p0,p1 data:ExchangeSender", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#5", + " └─Selection 20.00 mpp[tiflash] or(eq(test.hp_t.a, 1), eq(test.hp_t.a, 20))", + " └─TableFullScan 10000.00 mpp[tiflash] table:hp_t keep order:false, stats:pseudo, PartitionTableScan:true" ] } ] diff --git a/planner/core/testdata/ordered_result_mode_suite_out.json b/planner/core/testdata/ordered_result_mode_suite_out.json index 8016c33bed6f4..2047c8542e776 100644 --- a/planner/core/testdata/ordered_result_mode_suite_out.json +++ b/planner/core/testdata/ordered_result_mode_suite_out.json @@ -417,12 +417,12 @@ }, { "Plan": [ - "Selection_8 6400.00 root lt(Column#6, 20)", - "└─Sort_9 8000.00 root Column#5, Column#6, Column#7", - " └─HashAgg_15 8000.00 root group by:test.t1.d, funcs:min(Column#11)->Column#5, funcs:max(Column#12)->Column#6, funcs:sum(Column#13)->Column#7", - " └─TableReader_16 8000.00 root data:HashAgg_11", - " └─HashAgg_11 8000.00 cop[tikv] group by:test.t1.d, funcs:min(test.t1.a)->Column#11, funcs:max(test.t1.b)->Column#12, funcs:sum(test.t1.c)->Column#13", - " └─TableFullScan_14 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" + "Sort_9 6400.00 root Column#5, Column#6, Column#7", + "└─Selection_11 6400.00 root lt(Column#6, 20)", + " └─HashAgg_16 8000.00 root group by:test.t1.d, funcs:min(Column#11)->Column#5, funcs:max(Column#12)->Column#6, funcs:sum(Column#13)->Column#7", + " └─TableReader_17 8000.00 root data:HashAgg_12", + " └─HashAgg_12 8000.00 cop[tikv] group by:test.t1.d, funcs:min(test.t1.a)->Column#11, funcs:max(test.t1.b)->Column#12, funcs:sum(test.t1.c)->Column#13", + " └─TableFullScan_15 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" ] }, { diff --git a/planner/core/testdata/partition_pruner_out.json b/planner/core/testdata/partition_pruner_out.json index 7977fc780453d..db74202a1459b 100644 --- a/planner/core/testdata/partition_pruner_out.json +++ b/planner/core/testdata/partition_pruner_out.json @@ -1485,10 +1485,10 @@ "SQL": "select * from t1 where a in (1,6) and (a=3 and b =3)", "Result": null, "Plan": [ - "TableDual 8000.00 root rows:0" + "TableDual 0.00 root rows:0" ], "IndexPlan": [ - "TableDual 8000.00 root rows:0" + "TableDual 0.00 root rows:0" ] }, { @@ -2488,10 +2488,10 @@ "SQL": "select * from t1 where a in (1,6) and (a=3 and b =3)", "Result": null, "Plan": [ - "TableDual 8000.00 root rows:0" + "TableDual 0.00 root rows:0" ], "IndexPlan": [ - "TableDual 8000.00 root rows:0" + "TableDual 0.00 root rows:0" ] }, { diff --git a/planner/core/testdata/plan_suite_out.json b/planner/core/testdata/plan_suite_out.json index df15027594cd4..95fc30592645e 100644 --- a/planner/core/testdata/plan_suite_out.json +++ b/planner/core/testdata/plan_suite_out.json @@ -566,7 +566,7 @@ }, { "SQL": "select /*+ TIDB_SMJ(t1,t2,t3)*/ * from t t1 left outer join t t2 on t1.a = t2.a left outer join t t3 on t2.a = t3.a", - "Best": "MergeLeftOuterJoin{MergeLeftOuterJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)->TableReader(Table(t))}(test.t.a,test.t.a)" + "Best": "MergeLeftOuterJoin{MergeLeftOuterJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)->Sort->TableReader(Table(t))}(test.t.a,test.t.a)" }, { "SQL": "select /*+ TIDB_SMJ(t1,t2,t3)*/ * from t t1 left outer join t t2 on t1.a = t2.a left outer join t t3 on t1.a = t3.a", @@ -886,7 +886,7 @@ }, { "SQL": "select sum(to_base64(e)) from t where c = 1", - "Best": "IndexReader(Index(t.c_d_e)[[1,1]]->StreamAgg)->StreamAgg" + "Best": "IndexReader(Index(t.c_d_e)[[1,1]])->Projection->StreamAgg" }, { "SQL": "select (select count(1) k from t s where s.a = t.a having k != 0) from t", @@ -894,7 +894,7 @@ }, { "SQL": "select sum(to_base64(e)) from t group by e,d,c order by c", - "Best": "IndexReader(Index(t.c_d_e)[[NULL,+inf]]->StreamAgg)->StreamAgg->Projection" + "Best": "IndexReader(Index(t.c_d_e)[[NULL,+inf]])->Projection->StreamAgg->Projection" }, { "SQL": "select sum(e+1) from t group by e,d,c order by c", @@ -902,7 +902,7 @@ }, { "SQL": "select sum(to_base64(e)) from t group by e,d,c order by c,e", - "Best": "IndexReader(Index(t.c_d_e)[[NULL,+inf]]->StreamAgg)->StreamAgg->Sort->Projection" + "Best": "IndexReader(Index(t.c_d_e)[[NULL,+inf]])->Projection->StreamAgg->Sort->Projection" }, { "SQL": "select sum(e+1) from t group by e,d,c order by c,e", @@ -2685,252 +2685,252 @@ "SQL": "select count(*) from employee group by deptid+1", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#5", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#12, funcs:sum(Column#13)->Column#5", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#14, funcs:count(1)->Column#13", - " └─Projection 10000.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#14", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#5", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#12, funcs:sum(Column#13)->Column#5", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#14, funcs:count(1)->Column#13", + " └─Projection 10000.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#14", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { "SQL": "select count(distinct deptid) a from employee", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { "SQL": "select * from employee join employee e1 using(deptid)", "Plan": [ "TableReader 12487.50 root data:ExchangeSender", - "└─ExchangeSender 12487.50 cop[tiflash] ExchangeType: PassThrough", - " └─Projection 12487.50 cop[tiflash] test.employee.deptid, test.employee.empid, test.employee.salary, test.employee.empid, test.employee.salary", - " └─HashJoin 12487.50 cop[tiflash] inner join, equal:[eq(test.employee.deptid, test.employee.deptid)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.employee.deptid))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:employee keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 cop[tiflash] table:e1 keep order:false, stats:pseudo" + "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 12487.50 mpp[tiflash] test.employee.deptid, test.employee.empid, test.employee.salary, test.employee.empid, test.employee.salary", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, test.employee.deptid)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e1 keep order:false, stats:pseudo" ] }, { "SQL": "select count(distinct a) from (select count(distinct deptid) a from employee) x", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#6", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct Column#5)->Column#6", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#6", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct Column#5)->Column#6", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { "SQL": "select count(a) from (select count(distinct deptid) a, count(distinct empid) b from employee) x group by b+1", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#7", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#12, funcs:sum(Column#13)->Column#7", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#15, funcs:count(Column#14)->Column#13", - " └─Projection 1.00 batchCop[tiflash] Column#5, plus(Column#6, 1)->Column#15", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#5, funcs:count(distinct test.employee.empid)->Column#6", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, test.employee.empid, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#7", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#12, funcs:sum(Column#13)->Column#7", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#15, funcs:count(Column#14)->Column#13", + " └─Projection 1.00 mpp[tiflash] Column#5, plus(Column#6, 1)->Column#15", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#5, funcs:count(distinct test.employee.empid)->Column#6", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, test.employee.empid, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { "SQL": "select count(a) from (select count(distinct deptid) a, count(distinct empid) b from employee) x group by b", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#7", - " └─HashAgg 1.00 batchCop[tiflash] group by:Column#6, funcs:count(Column#5)->Column#7", - " └─Projection 1.00 batchCop[tiflash] Column#5, Column#6", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#5, funcs:count(distinct test.employee.empid)->Column#6", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, test.employee.empid, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#7", + " └─HashAgg 1.00 mpp[tiflash] group by:Column#6, funcs:count(Column#5)->Column#7", + " └─Projection 1.00 mpp[tiflash] Column#5, Column#6", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#5, funcs:count(distinct test.employee.empid)->Column#6", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, test.employee.empid, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { "SQL": "select * from employee join (select count(distinct deptid) a, count(distinct empid) b from employee) e1", "Plan": [ "TableReader 10000.00 root data:ExchangeSender", - "└─ExchangeSender 10000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 10000.00 batchCop[tiflash] CARTESIAN inner join", - " ├─ExchangeReceiver(Build) 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 1.00 batchCop[tiflash] Column#9, Column#10", - " │ └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#9, funcs:count(distinct test.employee.empid)->Column#10", - " │ └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " │ └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, test.employee.empid, ", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─TableFullScan(Probe) 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN inner join", + " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 1.00 mpp[tiflash] Column#9, Column#10", + " │ └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#9, funcs:count(distinct test.employee.empid)->Column#10", + " │ └─ExchangeReceiver 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " │ └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, test.employee.empid, ", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─TableFullScan(Probe) 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { "SQL": "select * from employee e1 join (select count(distinct deptid) a from employee) e2 on e1.deptid = e2.a", "Plan": [ "TableReader 1.25 root data:ExchangeSender", - "└─ExchangeSender 1.25 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 1.25 batchCop[tiflash] inner join, equal:[eq(test.employee.deptid, Column#9)]", - " ├─ExchangeReceiver(Build) 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 1.00 batchCop[tiflash] Column#9", - " │ └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#9", - " │ └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " │ └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:e1 keep order:false, stats:pseudo" + "└─ExchangeSender 1.25 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 1.25 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, Column#9)]", + " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 1.00 mpp[tiflash] Column#9", + " │ └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#9", + " │ └─ExchangeReceiver 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " │ └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e1 keep order:false, stats:pseudo" ] }, { "SQL": "select * from (select count(distinct deptid) a from employee) e1 join employee e2 on e1.a = e2.deptid", "Plan": [ "TableReader 1.25 root data:ExchangeSender", - "└─ExchangeSender 1.25 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.25 batchCop[tiflash] Column#5, test.employee.empid, test.employee.deptid, test.employee.salary", - " └─HashJoin 1.25 batchCop[tiflash] inner join, equal:[eq(test.employee.deptid, Column#5)]", - " ├─ExchangeReceiver(Build) 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 1.00 batchCop[tiflash] Column#5", - " │ └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", - " │ └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " │ └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:e2 keep order:false, stats:pseudo" + "└─ExchangeSender 1.25 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.25 mpp[tiflash] Column#5, test.employee.empid, test.employee.deptid, test.employee.salary", + " └─HashJoin 1.25 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, Column#5)]", + " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 1.00 mpp[tiflash] Column#5", + " │ └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", + " │ └─ExchangeReceiver 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " │ └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e2 keep order:false, stats:pseudo" ] }, { "SQL": "select * from (select count(distinct deptid) a from employee) e1 join (select count(distinct deptid) b from employee) e2 on e1.a=e2.b", "Plan": [ "TableReader 1.00 root data:ExchangeSender", - "└─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 1.00 batchCop[tiflash] inner join, equal:[eq(Column#5, Column#10)]", - " ├─ExchangeReceiver(Build) 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 1.00 batchCop[tiflash] Column#5", - " │ └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", - " │ └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " │ └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─Projection(Probe) 1.00 batchCop[tiflash] Column#10", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#10", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 1.00 mpp[tiflash] inner join, equal:[eq(Column#5, Column#10)]", + " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 1.00 mpp[tiflash] Column#5", + " │ └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", + " │ └─ExchangeReceiver 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " │ └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─Projection(Probe) 1.00 mpp[tiflash] Column#10", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#10", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { "SQL": "select * from employee e1 join employee e2 on e1.deptid = e2.deptid", "Plan": [ "TableReader 12487.50 root data:ExchangeSender", - "└─ExchangeSender 12487.50 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 cop[tiflash] inner join, equal:[eq(test.employee.deptid, test.employee.deptid)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: Broadcast", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.employee.deptid))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:e1 keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 cop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 cop[tiflash] table:e2 keep order:false, stats:pseudo" + "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, test.employee.deptid)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:e1 keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e2 keep order:false, stats:pseudo" ] }, { "SQL": "select * from (select deptid+1 d, count(empid) a from employee group by d) e1 join employee e2 on e1.d = e2.deptid", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#6, Column#5, test.employee.empid, test.employee.deptid, test.employee.salary", - " └─HashJoin 8000.00 batchCop[tiflash] inner join, equal:[eq(test.employee.deptid, Column#6)]", - " ├─ExchangeReceiver(Build) 6400.00 batchCop[tiflash] ", - " │ └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 6400.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#6, Column#5", - " │ └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(test.employee.deptid, 1)))", - " │ └─Projection 8000.00 batchCop[tiflash] Column#5, test.employee.deptid", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#13, funcs:sum(Column#14)->Column#5, funcs:firstrow(Column#15)->test.employee.deptid", - " │ └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " │ └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#13, collate: binary]", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#27, funcs:count(Column#25)->Column#14, funcs:firstrow(Column#26)->Column#15", - " │ └─Projection 10000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#27", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:e2 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#6, Column#5, test.employee.empid, test.employee.deptid, test.employee.salary", + " └─HashJoin 8000.00 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, Column#6)]", + " ├─ExchangeReceiver(Build) 6400.00 mpp[tiflash] ", + " │ └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 6400.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#6, Column#5", + " │ └─Selection 6400.00 mpp[tiflash] not(isnull(plus(test.employee.deptid, 1)))", + " │ └─Projection 8000.00 mpp[tiflash] Column#5, test.employee.deptid", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#13, funcs:sum(Column#14)->Column#5, funcs:firstrow(Column#15)->test.employee.deptid", + " │ └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#13, collate: binary]", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#27, funcs:count(Column#25)->Column#14, funcs:firstrow(Column#26)->Column#15", + " │ └─Projection 10000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#27", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e2 keep order:false, stats:pseudo" ] }, { "SQL": "select * from employee e1 join (select deptid+1 d, count(empid) a from employee group by d) e2 on e1.deptid = e2.d", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8000.00 batchCop[tiflash] inner join, equal:[eq(test.employee.deptid, Column#10)]", - " ├─ExchangeReceiver(Build) 6400.00 batchCop[tiflash] ", - " │ └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 6400.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#10, Column#9", - " │ └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(test.employee.deptid, 1)))", - " │ └─Projection 8000.00 batchCop[tiflash] Column#9, test.employee.deptid", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#13, funcs:sum(Column#14)->Column#9, funcs:firstrow(Column#15)->test.employee.deptid", - " │ └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " │ └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#13, collate: binary]", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#27, funcs:count(Column#25)->Column#14, funcs:firstrow(Column#26)->Column#15", - " │ └─Projection 10000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#27", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─Selection(Probe) 9990.00 batchCop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:e1 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 8000.00 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, Column#10)]", + " ├─ExchangeReceiver(Build) 6400.00 mpp[tiflash] ", + " │ └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 6400.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#10, Column#9", + " │ └─Selection 6400.00 mpp[tiflash] not(isnull(plus(test.employee.deptid, 1)))", + " │ └─Projection 8000.00 mpp[tiflash] Column#9, test.employee.deptid", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#13, funcs:sum(Column#14)->Column#9, funcs:firstrow(Column#15)->test.employee.deptid", + " │ └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#13, collate: binary]", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#27, funcs:count(Column#25)->Column#14, funcs:firstrow(Column#26)->Column#15", + " │ └─Projection 10000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#27", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─Selection(Probe) 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e1 keep order:false, stats:pseudo" ] }, { "SQL": "select * from (select deptid+1 d, count(empid) a from employee group by d) e1 join (select deptid+1 d, count(empid) a from employee group by d) e2 on e1.d = e2.d", "Plan": [ "TableReader 6400.00 root data:ExchangeSender", - "└─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6400.00 batchCop[tiflash] inner join, equal:[eq(Column#6, Column#12)]", - " ├─ExchangeReceiver(Build) 6400.00 batchCop[tiflash] ", - " │ └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: Broadcast", - " │ └─Projection 6400.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#6, Column#5", - " │ └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(test.employee.deptid, 1)))", - " │ └─Projection 8000.00 batchCop[tiflash] Column#5, test.employee.deptid", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#17, funcs:sum(Column#18)->Column#5, funcs:firstrow(Column#19)->test.employee.deptid", - " │ └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " │ └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#17, collate: binary]", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#43, funcs:count(Column#41)->Column#18, funcs:firstrow(Column#42)->Column#19", - " │ └─Projection 10000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#43", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─Projection(Probe) 6400.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#12, Column#11", - " └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(test.employee.deptid, 1)))", - " └─Projection 8000.00 batchCop[tiflash] Column#11, test.employee.deptid", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#20, funcs:sum(Column#21)->Column#11, funcs:firstrow(Column#22)->test.employee.deptid", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#20, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#46, funcs:count(Column#44)->Column#21, funcs:firstrow(Column#45)->Column#22", - " └─Projection 10000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#46", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 6400.00 mpp[tiflash] inner join, equal:[eq(Column#6, Column#12)]", + " ├─ExchangeReceiver(Build) 6400.00 mpp[tiflash] ", + " │ └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: Broadcast", + " │ └─Projection 6400.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#6, Column#5", + " │ └─Selection 6400.00 mpp[tiflash] not(isnull(plus(test.employee.deptid, 1)))", + " │ └─Projection 8000.00 mpp[tiflash] Column#5, test.employee.deptid", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#17, funcs:sum(Column#18)->Column#5, funcs:firstrow(Column#19)->test.employee.deptid", + " │ └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#17, collate: binary]", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#43, funcs:count(Column#41)->Column#18, funcs:firstrow(Column#42)->Column#19", + " │ └─Projection 10000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#43", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─Projection(Probe) 6400.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#12, Column#11", + " └─Selection 6400.00 mpp[tiflash] not(isnull(plus(test.employee.deptid, 1)))", + " └─Projection 8000.00 mpp[tiflash] Column#11, test.employee.deptid", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#20, funcs:sum(Column#21)->Column#11, funcs:firstrow(Column#22)->test.employee.deptid", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#20, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#46, funcs:count(Column#44)->Column#21, funcs:firstrow(Column#45)->Column#22", + " └─Projection 10000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#46", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { @@ -2947,13 +2947,13 @@ "Projection 1.25 root Column#5, test.employee.empid, test.employee.deptid, test.employee.salary", "└─HashJoin 1.25 root inner join, equal:[eq(test.employee.deptid, Column#5)]", " ├─TableReader(Build) 1.00 root data:ExchangeSender", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " │ └─Projection 1.00 batchCop[tiflash] Column#5", - " │ └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", - " │ └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " │ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " │ └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " │ └─Projection 1.00 mpp[tiflash] Column#5", + " │ └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", + " │ └─ExchangeReceiver 1.00 mpp[tiflash] ", + " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " │ └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", " └─TableReader(Probe) 9990.00 root data:Selection", " └─Selection 9990.00 cop[tiflash] not(isnull(test.employee.deptid))", " └─TableFullScan 10000.00 cop[tiflash] table:e2 keep order:false, stats:pseudo" @@ -2964,117 +2964,117 @@ "Plan": [ "HashJoin 1.00 root inner join, equal:[eq(Column#5, Column#10)]", "├─TableReader(Build) 1.00 root data:ExchangeSender", - "│ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - "│ └─Projection 1.00 batchCop[tiflash] Column#10", - "│ └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#10", - "│ └─ExchangeReceiver 1.00 batchCop[tiflash] ", - "│ └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - "│ └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - "│ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", + "│ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + "│ └─Projection 1.00 mpp[tiflash] Column#10", + "│ └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#10", + "│ └─ExchangeReceiver 1.00 mpp[tiflash] ", + "│ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + "│ └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + "│ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", "└─TableReader(Probe) 1.00 root data:ExchangeSender", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 1.00 batchCop[tiflash] Column#5", - " └─HashAgg 1.00 batchCop[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", - " └─ExchangeReceiver 1.00 batchCop[tiflash] ", - " └─ExchangeSender 1.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 batchCop[tiflash] group by:test.employee.deptid, ", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 1.00 mpp[tiflash] Column#5", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(distinct test.employee.deptid)->Column#5", + " └─ExchangeReceiver 1.00 mpp[tiflash] ", + " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashAgg 1.00 mpp[tiflash] group by:test.employee.deptid, ", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] }, { "SQL": "select * from employee e1 join employee e2 on e1.deptid = e2.deptid", "Plan": [ "TableReader 12487.50 root data:ExchangeSender", - "└─ExchangeSender 12487.50 cop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 cop[tiflash] inner join, equal:[eq(test.employee.deptid, test.employee.deptid)]", - " ├─ExchangeReceiver(Build) 9990.00 cop[tiflash] ", - " │ └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.employee.deptid, collate: binary]", - " │ └─Selection 9990.00 cop[tiflash] not(isnull(test.employee.deptid))", - " │ └─TableFullScan 10000.00 cop[tiflash] table:e1 keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 cop[tiflash] ", - " └─ExchangeSender 9990.00 cop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.employee.deptid, collate: binary]", - " └─Selection 9990.00 cop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 cop[tiflash] table:e2 keep order:false, stats:pseudo" + "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, test.employee.deptid)]", + " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", + " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.employee.deptid, collate: binary]", + " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:e1 keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: test.employee.deptid, collate: binary]", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e2 keep order:false, stats:pseudo" ] }, { "SQL": "select * from (select deptid+1 d, count(empid) a from employee group by d) e1 join employee e2 on e1.d = e2.deptid", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] Column#6, Column#5, test.employee.empid, test.employee.deptid, test.employee.salary", - " └─HashJoin 8000.00 batchCop[tiflash] inner join, equal:[eq(test.employee.deptid, Column#6)]", - " ├─ExchangeReceiver(Build) 6400.00 batchCop[tiflash] ", - " │ └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#6, collate: binary]", - " │ └─Projection 6400.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#6, Column#5", - " │ └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(test.employee.deptid, 1)))", - " │ └─Projection 8000.00 batchCop[tiflash] Column#5, test.employee.deptid", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#13, funcs:sum(Column#14)->Column#5, funcs:firstrow(Column#15)->test.employee.deptid", - " │ └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " │ └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#13, collate: binary]", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#29, funcs:count(Column#27)->Column#14, funcs:firstrow(Column#28)->Column#15", - " │ └─Projection 10000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#29", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 batchCop[tiflash] ", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#26, collate: binary]", - " └─Projection 9990.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, test.employee.salary, cast(test.employee.deptid, bigint(20))->Column#26", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:e2 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] Column#6, Column#5, test.employee.empid, test.employee.deptid, test.employee.salary", + " └─HashJoin 8000.00 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, Column#6)]", + " ├─ExchangeReceiver(Build) 6400.00 mpp[tiflash] ", + " │ └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#6, collate: binary]", + " │ └─Projection 6400.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#6, Column#5", + " │ └─Selection 6400.00 mpp[tiflash] not(isnull(plus(test.employee.deptid, 1)))", + " │ └─Projection 8000.00 mpp[tiflash] Column#5, test.employee.deptid", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#13, funcs:sum(Column#14)->Column#5, funcs:firstrow(Column#15)->test.employee.deptid", + " │ └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#13, collate: binary]", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#29, funcs:count(Column#27)->Column#14, funcs:firstrow(Column#28)->Column#15", + " │ └─Projection 10000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#29", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#26, collate: binary]", + " └─Projection 9990.00 mpp[tiflash] test.employee.empid, test.employee.deptid, test.employee.salary, cast(test.employee.deptid, bigint(20))->Column#26", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e2 keep order:false, stats:pseudo" ] }, { "SQL": "select * from employee e1 join (select deptid+1 d, count(empid) a from employee group by d) e2 on e1.deptid = e2.d", "Plan": [ "TableReader 8000.00 root data:ExchangeSender", - "└─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─Projection 8000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, test.employee.salary, Column#10, Column#9", - " └─HashJoin 8000.00 batchCop[tiflash] inner join, equal:[eq(test.employee.deptid, Column#10)]", - " ├─ExchangeReceiver(Build) 6400.00 batchCop[tiflash] ", - " │ └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#10, collate: binary]", - " │ └─Projection 6400.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#10, Column#9", - " │ └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(test.employee.deptid, 1)))", - " │ └─Projection 8000.00 batchCop[tiflash] Column#9, test.employee.deptid", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#13, funcs:sum(Column#14)->Column#9, funcs:firstrow(Column#15)->test.employee.deptid", - " │ └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " │ └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#13, collate: binary]", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#29, funcs:count(Column#27)->Column#14, funcs:firstrow(Column#28)->Column#15", - " │ └─Projection 10000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#29", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 9990.00 batchCop[tiflash] ", - " └─ExchangeSender 9990.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#26, collate: binary]", - " └─Projection 9990.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, test.employee.salary, cast(test.employee.deptid, bigint(20))->Column#26", - " └─Selection 9990.00 batchCop[tiflash] not(isnull(test.employee.deptid))", - " └─TableFullScan 10000.00 batchCop[tiflash] table:e1 keep order:false, stats:pseudo" + "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Projection 8000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, test.employee.salary, Column#10, Column#9", + " └─HashJoin 8000.00 mpp[tiflash] inner join, equal:[eq(test.employee.deptid, Column#10)]", + " ├─ExchangeReceiver(Build) 6400.00 mpp[tiflash] ", + " │ └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#10, collate: binary]", + " │ └─Projection 6400.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#10, Column#9", + " │ └─Selection 6400.00 mpp[tiflash] not(isnull(plus(test.employee.deptid, 1)))", + " │ └─Projection 8000.00 mpp[tiflash] Column#9, test.employee.deptid", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#13, funcs:sum(Column#14)->Column#9, funcs:firstrow(Column#15)->test.employee.deptid", + " │ └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#13, collate: binary]", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#29, funcs:count(Column#27)->Column#14, funcs:firstrow(Column#28)->Column#15", + " │ └─Projection 10000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#29", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 9990.00 mpp[tiflash] ", + " └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#26, collate: binary]", + " └─Projection 9990.00 mpp[tiflash] test.employee.empid, test.employee.deptid, test.employee.salary, cast(test.employee.deptid, bigint(20))->Column#26", + " └─Selection 9990.00 mpp[tiflash] not(isnull(test.employee.deptid))", + " └─TableFullScan 10000.00 mpp[tiflash] table:e1 keep order:false, stats:pseudo" ] }, { "SQL": "select * from (select deptid+1 d, count(empid) a from employee group by d) e1 join (select deptid+1 d, count(empid) a from employee group by d) e2 on e1.d = e2.d", "Plan": [ "TableReader 6400.00 root data:ExchangeSender", - "└─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6400.00 batchCop[tiflash] inner join, equal:[eq(Column#6, Column#12)]", - " ├─ExchangeReceiver(Build) 6400.00 batchCop[tiflash] ", - " │ └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#6, collate: binary]", - " │ └─Projection 6400.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#6, Column#5", - " │ └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(test.employee.deptid, 1)))", - " │ └─Projection 8000.00 batchCop[tiflash] Column#5, test.employee.deptid", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#17, funcs:sum(Column#18)->Column#5, funcs:firstrow(Column#19)->test.employee.deptid", - " │ └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " │ └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#17, collate: binary]", - " │ └─HashAgg 8000.00 batchCop[tiflash] group by:Column#43, funcs:count(Column#41)->Column#18, funcs:firstrow(Column#42)->Column#19", - " │ └─Projection 10000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#43", - " │ └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo", - " └─ExchangeReceiver(Probe) 6400.00 batchCop[tiflash] ", - " └─ExchangeSender 6400.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", - " └─Projection 6400.00 batchCop[tiflash] plus(test.employee.deptid, 1)->Column#12, Column#11", - " └─Selection 6400.00 batchCop[tiflash] not(isnull(plus(test.employee.deptid, 1)))", - " └─Projection 8000.00 batchCop[tiflash] Column#11, test.employee.deptid", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#20, funcs:sum(Column#21)->Column#11, funcs:firstrow(Column#22)->test.employee.deptid", - " └─ExchangeReceiver 8000.00 batchCop[tiflash] ", - " └─ExchangeSender 8000.00 batchCop[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#20, collate: binary]", - " └─HashAgg 8000.00 batchCop[tiflash] group by:Column#46, funcs:count(Column#44)->Column#21, funcs:firstrow(Column#45)->Column#22", - " └─Projection 10000.00 batchCop[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#46", - " └─TableFullScan 10000.00 batchCop[tiflash] table:employee keep order:false, stats:pseudo" + "└─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin 6400.00 mpp[tiflash] inner join, equal:[eq(Column#6, Column#12)]", + " ├─ExchangeReceiver(Build) 6400.00 mpp[tiflash] ", + " │ └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#6, collate: binary]", + " │ └─Projection 6400.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#6, Column#5", + " │ └─Selection 6400.00 mpp[tiflash] not(isnull(plus(test.employee.deptid, 1)))", + " │ └─Projection 8000.00 mpp[tiflash] Column#5, test.employee.deptid", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#17, funcs:sum(Column#18)->Column#5, funcs:firstrow(Column#19)->test.employee.deptid", + " │ └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#17, collate: binary]", + " │ └─HashAgg 8000.00 mpp[tiflash] group by:Column#43, funcs:count(Column#41)->Column#18, funcs:firstrow(Column#42)->Column#19", + " │ └─Projection 10000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#43", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo", + " └─ExchangeReceiver(Probe) 6400.00 mpp[tiflash] ", + " └─ExchangeSender 6400.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#12, collate: binary]", + " └─Projection 6400.00 mpp[tiflash] plus(test.employee.deptid, 1)->Column#12, Column#11", + " └─Selection 6400.00 mpp[tiflash] not(isnull(plus(test.employee.deptid, 1)))", + " └─Projection 8000.00 mpp[tiflash] Column#11, test.employee.deptid", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#20, funcs:sum(Column#21)->Column#11, funcs:firstrow(Column#22)->test.employee.deptid", + " └─ExchangeReceiver 8000.00 mpp[tiflash] ", + " └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Hash Cols: [name: Column#20, collate: binary]", + " └─HashAgg 8000.00 mpp[tiflash] group by:Column#46, funcs:count(Column#44)->Column#21, funcs:firstrow(Column#45)->Column#22", + " └─Projection 10000.00 mpp[tiflash] test.employee.empid, test.employee.deptid, plus(test.employee.deptid, 1)->Column#46", + " └─TableFullScan 10000.00 mpp[tiflash] table:employee keep order:false, stats:pseudo" ] } ] diff --git a/planner/core/testdata/plan_suite_unexported_out.json b/planner/core/testdata/plan_suite_unexported_out.json index 44b29b2594347..218880d0aa713 100644 --- a/planner/core/testdata/plan_suite_unexported_out.json +++ b/planner/core/testdata/plan_suite_unexported_out.json @@ -3,7 +3,7 @@ "Name": "TestEagerAggregation", "Cases": [ "DataScan(t)->Aggr(sum(test.t.a),sum(plus(test.t.a, 1)),count(test.t.a))->Projection", - "DataScan(t)->Aggr(sum(plus(test.t.a, test.t.b)),sum(plus(test.t.a, test.t.c)),count(test.t.a))->Projection->Sel([gt(Column#13, 0)])->Sort->Projection", + "DataScan(t)->Aggr(sum(plus(test.t.a, test.t.b)),sum(plus(test.t.a, test.t.c)),count(test.t.a))->Sel([gt(Column#13, 0)])->Projection->Sort->Projection", "Join{DataScan(a)->Aggr(sum(test.t.a),firstrow(test.t.c))->DataScan(b)}(test.t.c,test.t.c)->Aggr(sum(Column#26))->Projection", "Join{DataScan(a)->DataScan(b)->Aggr(sum(test.t.a),firstrow(test.t.c))}(test.t.c,test.t.c)->Aggr(sum(Column#26))->Projection", "Join{DataScan(a)->DataScan(b)->Aggr(sum(test.t.a),firstrow(test.t.c))}(test.t.c,test.t.c)->Aggr(sum(Column#26),firstrow(test.t.a))->Projection", @@ -89,7 +89,7 @@ "DataScan(t)->Aggr(sum(test.t.b),firstrow(test.t.a))->Sel([gt(cast(test.t.a, decimal(20,0) BINARY), Column#13)])->Projection->Projection", "DataScan(t)->Aggr(sum(test.t.b),firstrow(test.t.a))->Sel([gt(test.t.a, 1)])->Projection->Projection", "Dual->Sel([gt(test.t.a, 1)])->Projection", - "DataScan(t)->Aggr(count(test.t.a),firstrow(test.t.a))->Projection->Sel([lt(Column#13, 1)])", + "DataScan(t)->Aggr(count(test.t.a),firstrow(test.t.a))->Sel([lt(Column#13, 1)])->Projection", "Join{DataScan(t1)->DataScan(t2)}(test.t.a,test.t.a)->Projection", "Dual->Projection", "DataScan(t)->Projection->Projection->Window(min(test.t.a)->Column#14)->Sel([lt(test.t.a, 10) eq(test.t.b, Column#14)])->Projection->Projection", @@ -195,7 +195,7 @@ "TableReader(Table(t))->Window(sum(cast(test.t.a, decimal(10,0) BINARY))->Column#14 over())->Sort->Projection", "TableReader(Table(t))->Window(sum(cast(test.t.a, decimal(10,0) BINARY))->Column#14 over(partition by test.t.a))->Sort->Projection", "TableReader(Table(t)->StreamAgg)->StreamAgg->Window(sum(Column#13)->Column#15 over())->Sort->Projection", - "Apply{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.f)[[NULL,+inf]]->Sel([gt(test.t.a, test.t.a)]))->Window(sum(cast(test.t.a, decimal(10,0) BINARY))->Column#38 over())->MaxOneRow}->Sel([Column#38])->Projection", + "Apply{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.f)[[NULL,+inf]]->Sel([gt(test.t.a, test.t.a)]))->Window(sum(cast(test.t.a, decimal(10,0) BINARY))->Column#38 over())->MaxOneRow->Sel([Column#38])}->Projection", "[planner:3594]You cannot use the alias 'w' of an expression containing a window function in this context.'", "[planner:1247]Reference 'sum_a' not supported (reference to window function)", "[planner:3579]Window name 'w2' is not defined.", @@ -268,7 +268,7 @@ "TableReader(Table(t))->Window(sum(cast(test.t.a, decimal(10,0) BINARY))->Column#14 over())->Sort->Projection", "TableReader(Table(t))->Window(sum(cast(test.t.a, decimal(10,0) BINARY))->Column#14 over(partition by test.t.a))->Sort->Projection", "TableReader(Table(t)->StreamAgg)->StreamAgg->Window(sum(Column#13)->Column#15 over())->Sort->Projection", - "Apply{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.f)[[NULL,+inf]]->Sel([gt(test.t.a, test.t.a)]))->Window(sum(cast(test.t.a, decimal(10,0) BINARY))->Column#38 over())->MaxOneRow}->Sel([Column#38])->Projection", + "Apply{IndexReader(Index(t.f)[[NULL,+inf]])->IndexReader(Index(t.f)[[NULL,+inf]]->Sel([gt(test.t.a, test.t.a)]))->Window(sum(cast(test.t.a, decimal(10,0) BINARY))->Column#38 over())->MaxOneRow->Sel([Column#38])}->Projection", "[planner:3594]You cannot use the alias 'w' of an expression containing a window function in this context.'", "[planner:1247]Reference 'sum_a' not supported (reference to window function)", "[planner:3579]Window name 'w2' is not defined.", @@ -483,12 +483,12 @@ "test.t.f" ] ], - "4": [ + "5": [ [ "test.t.f" ] ], - "5": [ + "6": [ [ "test.t.f" ] diff --git a/planner/funcdep/extract_fd_test.go b/planner/funcdep/extract_fd_test.go new file mode 100644 index 0000000000000..eefabff9bd6a2 --- /dev/null +++ b/planner/funcdep/extract_fd_test.go @@ -0,0 +1,332 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 funcdep_test + +import ( + "context" + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/parser" + plannercore "github.com/pingcap/tidb/planner/core" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/util/hint" +) + +func testGetIS(t *testing.T, ctx sessionctx.Context) infoschema.InfoSchema { + dom := domain.GetDomain(ctx) + // Make sure the table schema is the new schema. + err := dom.Reload() + require.NoError(t, err) + return dom.InfoSchema() +} + +func TestFDSet_ExtractFD(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + par := parser.New() + par.SetParserConfig(parser.ParserConfig{EnableWindowFunction: true, EnableStrictDoubleTypeCheck: true}) + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set sql_mode = ''") + tk.MustExec("set @@session.tidb_enable_new_only_full_group_by_check = 'on';") + tk.MustExec("create table t1(a int key, b int, c int, unique(b,c))") + tk.MustExec("create table t2(m int key, n int, p int, unique(m,n))") + tk.MustExec("create table x1(a int not null primary key, b int not null, c int default null, d int not null, unique key I_b_c (b,c), unique key I_b_d (b,d))") + tk.MustExec("create table x2(a int not null primary key, b int not null, c int default null, d int not null, unique key I_b_c (b,c), unique key I_b_d (b,d))") + + tests := []struct { + sql string + best string + fd string + }{ + { + sql: "select a from t1", + best: "DataScan(t1)->Projection", + fd: "{(1)-->(2,3), (2,3)~~>(1)} >>> {}", + }, + { + sql: "select a,b from t1", + best: "DataScan(t1)->Projection", + fd: "{(1)-->(2,3), (2,3)~~>(1)} >>> {(1)-->(2)}", + }, + { + sql: "select a,c,b+1 from t1", + best: "DataScan(t1)->Projection", + // 4 is the extended column from (b+1) determined by b, also determined by a. + // since b is also projected in the b+1, so 2 is kept. + fd: "{(1)-->(2,3), (2,3)~~>(1)} >>> {(1)-->(2,3), (2,3)~~>(1), (2)-->(4)}", + }, + { + sql: "select a,b+1,c+b from t1", + best: "DataScan(t1)->Projection", + // 4, 5 is the extended column from (b+1),(c+b) determined by b,c, also determined by a. + fd: "{(1)-->(2,3), (2,3)~~>(1)} >>> {(1)-->(2,3), (2,3)~~>(1), (2)-->(4), (2,3)-->(5)}", + }, + { + sql: "select a,a+b,1 from t1", + best: "DataScan(t1)->Projection", + // 4 is the extended column from (b+1) determined by b, also determined by a. + fd: "{(1)-->(2,3), (2,3)~~>(1)} >>> {(1)-->(2,4), ()-->(5)}", + }, + { + sql: "select b+1, sum(a) from t1 group by(b)", + // The final ones are b -> (b+1), b -> sum(a) + best: "DataScan(t1)->Aggr(sum(test.t1.a),firstrow(test.t1.b))->Projection", + fd: "{(1)-->(2,3), (2,3)~~>(1)} >>> {(2)-->(4)} >>> {(2)-->(4,5)}", + }, + { + sql: "select b+1, b, sum(a) from t1 group by(b)", + // The final ones are b -> (b+1), b -> sum(a) + best: "DataScan(t1)->Aggr(sum(test.t1.a),firstrow(test.t1.b))->Projection", + fd: "{(1)-->(2,3), (2,3)~~>(1)} >>> {(2)-->(4)} >>> {(2)-->(4,5)}", + }, + // test for table x1 and x2 + { + sql: "select a from x1 group by a,b,c", + best: "DataScan(x1)->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {}", + }, + { + sql: "select b from x1 group by b", + best: "DataScan(x1)->Aggr(firstrow(test.x1.b))->Projection", + // b --> b is natural existed, so it won't exist in fd. + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {} >>> {}", + }, + { + sql: "select b as e from x1 group by b", + best: "DataScan(x1)->Aggr(firstrow(test.x1.b))->Projection", + // b --> b is naturally existed, so it won't exist in fd. + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {} >>> {}", + }, + { + sql: "select b+c from x1 group by b+c", + best: "DataScan(x1)->Aggr(firstrow(test.x1.b),firstrow(test.x1.c))->Projection", + // avoid allocating unique ID 7 from fd temporarily, and substituted by unique ID 5 + // attention: + // b+c is an expr assigned with new plan ID when building upper-layer projection. + // when extracting FD after build phase is done, we should be able to recognize a+b in lower-layer group by item with the same unique ID. + // that's why we introduce session variable MapHashCode2UniqueID4ExtendedCol in. + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {(2,3)-->(5)} >>> {(2,3)-->(5)}", + }, + { + sql: "select b+c, min(a) from x1 group by b+c, b-c", + best: "DataScan(x1)->Aggr(min(test.x1.a),firstrow(test.x1.b),firstrow(test.x1.c))->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {(2,3)-->(6,8), (6,8)-->(5)} >>> {(2,3)-->(6,8), (6,8)-->(5)}", + }, + { + sql: "select b+c, min(a) from x1 group by b, c", + best: "DataScan(x1)->Aggr(min(test.x1.a),firstrow(test.x1.b),firstrow(test.x1.c))->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {(2,3)-->(5)} >>> {(2,3)-->(5,6)}", + }, + { + sql: "select b+c from x1 group by b,c", + best: "DataScan(x1)->Aggr(firstrow(test.x1.b),firstrow(test.x1.c))->Projection", + // b --> b is naturally existed, so it won't exist in fd. + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {} >>> {(2,3)-->(5)}", + }, + { + sql: "select case b when 1 then c when 2 then d else d end from x1 group by b,c,d", + best: "DataScan(x1)->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {(2,3)~~>(4), (2,4)-->(3,5)}", + }, + { + // scalar sub query will be substituted with constant datum. + sql: "select c > (select b from x1) from x1 group by c", + best: "DataScan(x1)->Aggr(firstrow(test.x1.c))->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {} >>> {(3)-->(15)}", + }, + { + sql: "select exists (select * from x1) from x1 group by d", + best: "DataScan(x1)->Aggr(firstrow(1))->Projection", + // 14 is added in the logicAgg pruning process cause all the columns of agg has been pruned. + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {} >>> {()-->(13)}", + }, + { + sql: "select c is null from x1 group by c", + best: "DataScan(x1)->Aggr(firstrow(test.x1.c))->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {} >>> {(3)-->(5)}", + }, + { + sql: "select c is true from x1 group by c", + best: "DataScan(x1)->Aggr(firstrow(test.x1.c))->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {} >>> {(3)-->(5)}", + }, + { + sql: "select (c+b)*d from x1 group by c,b,d", + // agg elimination. + best: "DataScan(x1)->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {(2,3)~~>(4), (2,4)-->(3,5)}", + }, + { + sql: "select b in (c,d) from x1 group by b,c,d", + best: "DataScan(x1)->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {(2,3)~~>(4), (2,4)-->(3,5)}", + }, + { + sql: "select b like '%a' from x1 group by b", + best: "DataScan(x1)->Aggr(firstrow(test.x1.b))->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {} >>> {(2)-->(5)}", + }, + // test functional dependency on primary key + { + sql: "select * from x1 group by a", + // agg eliminated by primary key. + best: "DataScan(x1)->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)}", + }, + // test functional dependency on unique key with not null + { + sql: "select * from x1 group by b,d", + best: "DataScan(x1)->Projection", + fd: "{(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)} >>> {(1)-->(2-4), (2,3)~~>(1,4), (2,4)-->(1,3)}", + }, + // test functional dependency derived from keys in where condition + { + sql: "select * from x1 where c = d group by b, c", + best: "DataScan(x1)->Aggr(firstrow(test.x1.a),firstrow(test.x1.b),firstrow(test.x1.c),firstrow(test.x1.d))->Projection", + // c = d derives: + // 1: c and d are not null, make lax FD (2,3)~~>(1,4) to be strict one. + // 2: c and d are equivalent. + fd: "{(1)-->(2-4), (2,3)-->(1,4), (2,4)-->(1,3), (3,4)==(3,4)} >>> {(1)-->(2-4), (2,3)-->(1,4), (2,4)-->(1,3), (3,4)==(3,4)} >>> {(1)-->(2-4), (2,3)-->(1,4), (2,4)-->(1,3), (3,4)==(3,4)}", + }, + } + + ctx := context.TODO() + is := testGetIS(t, tk.Session()) + for i, tt := range tests { + comment := fmt.Sprintf("case:%v sql:%s", i, tt.sql) + stmt, err := par.ParseOneStmt(tt.sql, "", "") + require.NoError(t, err, comment) + tk.Session().GetSessionVars().PlanID = 0 + tk.Session().GetSessionVars().PlanColumnID = 0 + err = plannercore.Preprocess(tk.Session(), stmt, plannercore.WithPreprocessorReturn(&plannercore.PreprocessorReturn{InfoSchema: is})) + require.NoError(t, err) + tk.Session().PrepareTSFuture(ctx) + builder, _ := plannercore.NewPlanBuilder().Init(tk.Session(), is, &hint.BlockHintProcessor{}) + // extract FD to every OP + p, err := builder.Build(ctx, stmt) + require.NoError(t, err) + p, err = plannercore.LogicalOptimizeTest(ctx, builder.GetOptFlag(), p.(plannercore.LogicalPlan)) + require.NoError(t, err) + require.Equal(t, tt.best, plannercore.ToString(p), comment) + // extract FD to every OP + p.(plannercore.LogicalPlan).ExtractFD() + require.Equal(t, tt.fd, plannercore.FDToString(p.(plannercore.LogicalPlan)), comment) + } +} + +func TestFDSet_ExtractFDForApply(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + par := parser.New() + par.SetParserConfig(parser.ParserConfig{EnableWindowFunction: true, EnableStrictDoubleTypeCheck: true}) + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@session.tidb_enable_new_only_full_group_by_check = 'on';") + tk.MustExec("CREATE TABLE X (a INT PRIMARY KEY, b INT, c INT, d INT, e INT)") + tk.MustExec("CREATE UNIQUE INDEX uni ON X (b, c)") + tk.MustExec("CREATE TABLE Y (m INT, n INT, p INT, q INT, PRIMARY KEY (m, n))") + + tests := []struct { + sql string + best string + fd string + }{ + { + sql: "select * from X where exists (select * from Y where m=a limit 1)", + // For this Apply, it's essentially a semi join, for every `a` in X, do the inner loop once. + // +- datasource(x) + // +- limit + // +- datasource(Y) + best: "Apply{DataScan(X)->DataScan(Y)->Limit}->Projection", + // Since semi join will keep the **all** rows of the outer table, it's FD can be derived. + fd: "{(1)-->(2-5), (2,3)~~>(1,4,5)} >>> {(1)-->(2-5), (2,3)~~>(1,4,5)}", + }, + { + sql: "select a, b from X where exists (select * from Y where m=a limit 1)", + // For this Apply, it's essentially a semi join, for every `a` in X, do the inner loop once. + // +- datasource(x) + // +- limit + // +- datasource(Y) + best: "Apply{DataScan(X)->DataScan(Y)->Limit}->Projection", // semi join + // Since semi join will keep the **part** rows of the outer table, it's FD can be derived. + fd: "{(1)-->(2-5), (2,3)~~>(1,4,5)} >>> {(1)-->(2)}", + }, + { + // Limit will refuse to de-correlate apply to join while this won't. + sql: "select * from X where exists (select * from Y where m=a and p=1)", + best: "Join{DataScan(X)->DataScan(Y)}(test.x.a,test.y.m)->Projection", // semi join + fd: "{(1)-->(2-5), (2,3)~~>(1,4,5)} >>> {(1)-->(2-5), (2,3)~~>(1,4,5)}", + }, + { + sql: "select * from X where exists (select * from Y where m=a and p=q)", + best: "Join{DataScan(X)->DataScan(Y)}(test.x.a,test.y.m)->Projection", // semi join + fd: "{(1)-->(2-5), (2,3)~~>(1,4,5)} >>> {(1)-->(2-5), (2,3)~~>(1,4,5)}", + }, + { + sql: "select * from X where exists (select * from Y where m=a and b=1)", + best: "Join{DataScan(X)->DataScan(Y)}(test.x.a,test.y.m)->Projection", // semi join + // b=1 is semi join's left condition which should be conserved. + fd: "{(1)-->(3-5), (2,3)~~>(1,4,5), ()-->(2)} >>> {(1)-->(3-5), (2,3)~~>(1,4,5), ()-->(2)}", + }, + { + sql: "select * from (select b,c,d,e from X) X1 where exists (select * from Y where p=q and n=1) ", + best: "Dual->Projection", + fd: "{}", + }, + { + sql: "select * from (select b,c,d,e from X) X1 where exists (select * from Y where p=b and n=1) ", + best: "Join{DataScan(X)->DataScan(Y)}(test.x.b,test.y.p)->Projection", // semi join + fd: "{(1)-->(2-5), (2,3)~~>(1,4,5)} >>> {(2,3)~~>(4,5)}", + }, + { + sql: "select * from X where exists (select m, p, q from Y where n=a and p=1)", + best: "Join{DataScan(X)->DataScan(Y)}(test.x.a,test.y.n)->Projection", + // p=1 is semi join's right condition which should **NOT** be conserved. + fd: "{(1)-->(2-5), (2,3)~~>(1,4,5)} >>> {(1)-->(2-5), (2,3)~~>(1,4,5)}", + }, + } + + ctx := context.TODO() + is := testGetIS(t, tk.Session()) + for i, tt := range tests { + comment := fmt.Sprintf("case:%v sql:%s", i, tt.sql) + stmt, err := par.ParseOneStmt(tt.sql, "", "") + require.NoError(t, err, comment) + tk.Session().GetSessionVars().PlanID = 0 + tk.Session().GetSessionVars().PlanColumnID = 0 + err = plannercore.Preprocess(tk.Session(), stmt, plannercore.WithPreprocessorReturn(&plannercore.PreprocessorReturn{InfoSchema: is})) + require.NoError(t, err, comment) + tk.Session().PrepareTSFuture(ctx) + builder, _ := plannercore.NewPlanBuilder().Init(tk.Session(), is, &hint.BlockHintProcessor{}) + // extract FD to every OP + p, err := builder.Build(ctx, stmt) + require.NoError(t, err, comment) + p, err = plannercore.LogicalOptimizeTest(ctx, builder.GetOptFlag(), p.(plannercore.LogicalPlan)) + require.NoError(t, err, comment) + require.Equal(t, tt.best, plannercore.ToString(p), comment) + // extract FD to every OP + p.(plannercore.LogicalPlan).ExtractFD() + require.Equal(t, tt.fd, plannercore.FDToString(p.(plannercore.LogicalPlan)), comment) + } +} diff --git a/planner/funcdep/fast_int_set.go b/planner/funcdep/fast_int_set.go new file mode 100644 index 0000000000000..b089f102fcd83 --- /dev/null +++ b/planner/funcdep/fast_int_set.go @@ -0,0 +1,390 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 funcdep + +import ( + "bytes" + "fmt" + "math/bits" + + "golang.org/x/tools/container/intsets" +) + +const smallCutOff = 64 + +// FastIntSet is wrapper of sparse with an optimization that number [0 ~ 64) can be cached for quick access. +// From the benchmark in fd_graph_test.go, we choose to use sparse to accelerate int set. And when the set +// size is quite small we can just skip the block allocation in the sparse chain list. +type FastIntSet struct { + // an uint64 used like quick-small bitmap of 0~63. + small uint64 + // when some is bigger than 64, then all that previous inserted will be dumped into sparse. + large *intsets.Sparse +} + +// NewFastIntSet is used to make the instance of FastIntSet with initial values. +func NewFastIntSet(values ...int) FastIntSet { + var res FastIntSet + for _, v := range values { + res.Insert(v) + } + return res +} + +// Len return the size of the int set. +func (s FastIntSet) Len() int { + if s.large == nil { + return bits.OnesCount64(s.small) + } + return s.large.Len() +} + +// Only1Zero is a usage function for convenience judgement. +func (s FastIntSet) Only1Zero() bool { + return s.Len() == 1 && s.Has(0) +} + +// Insert is used to insert a value into int-set. +func (s *FastIntSet) Insert(i int) { + isSmall := i >= 0 && i < smallCutOff + if isSmall { + s.small |= 1 << uint64(i) + } + if !isSmall && s.large == nil { + // first encounter a larger/smaller number, dump all that in `small` into `large`. + s.large = s.toLarge() + } + if s.large != nil { + s.large.Insert(i) + } +} + +func (s FastIntSet) toLarge() *intsets.Sparse { + if s.large != nil { + return s.large + } + large := new(intsets.Sparse) + for i, ok := s.Next(0); ok; i, ok = s.Next(i + 1) { + large.Insert(i) + } + return large +} + +// Next returns the next existing number in the Set. If there's no larger one than the given start val, return (MaxInt, false). +func (s FastIntSet) Next(startVal int) (int, bool) { + if startVal < smallCutOff { + if startVal < 0 { + startVal = 0 + } + // x=0, gap=64, which means there is no `1` after right shift. + if gap := bits.TrailingZeros64(s.small >> uint64(startVal)); gap < 64 { + return gap + startVal, true + } + } + if s.large != nil { + res := s.large.LowerBound(startVal) + return res, res != intsets.MaxInt + } + return intsets.MaxInt, false +} + +// Remove is used to remove a value from the set. Nothing done if the value is not in the set. +func (s *FastIntSet) Remove(i int) { + if i >= 0 && i < smallCutOff { + s.small &^= 1 << uint64(i) + } + if s.large != nil { + s.large.Remove(i) + } +} + +// Clear is used to clear a fastIntSet and reuse it as an empty one. +func (s *FastIntSet) Clear() { + s.small = 0 + if s.large != nil { + s.large.Clear() + } +} + +// Has is used ot judge whether a value is in the set. +func (s FastIntSet) Has(i int) bool { + if i >= 0 && i < smallCutOff { + return (s.small & (1 << uint64(i))) != 0 + } + if s.large != nil { + return s.large.Has(i) + } + return false +} + +// IsEmpty is used to judge whether the int-set is empty. +func (s FastIntSet) IsEmpty() bool { + return s.small == 0 && (s.large == nil || s.large.IsEmpty()) +} + +// SortedArray is used to return the in array of the set. +func (s FastIntSet) SortedArray() []int { + if s.IsEmpty() { + return nil + } + if s.large != nil { + return s.large.AppendTo([]int(nil)) + } + res := make([]int, 0, s.Len()) + s.ForEach(func(i int) { + res = append(res, i) + }) + return res +} + +// ForEach call a function for each value in the int-set. (Ascend) +func (s FastIntSet) ForEach(f func(i int)) { + if s.large != nil { + for x := s.large.Min(); x != intsets.MaxInt; x = s.large.LowerBound(x + 1) { + f(x) + } + return + } + for v := s.small; v != 0; { + // from the left to right. + i := bits.TrailingZeros64(v) + f(i) + v &^= 1 << uint(i) + } +} + +// Copy returns a copy of s. +func (s FastIntSet) Copy() FastIntSet { + c := FastIntSet{} + c.small = s.small + if s.large != nil { + c.large = new(intsets.Sparse) + c.large.Copy(s.large) + } + return c +} + +// CopyFrom clear the receiver to be a copy of the param. +func (s *FastIntSet) CopyFrom(target FastIntSet) { + s.small = target.small + if target.large != nil { + if s.large == nil { + s.large = new(intsets.Sparse) + } + s.large.Copy(target.large) + } else { + if s.large != nil { + s.large.Clear() + } + } +} + +// Equals returns whether two int-set are identical. +func (s FastIntSet) Equals(rhs FastIntSet) bool { + if s.large == nil && rhs.large == nil { + return s.small == rhs.small + } + if s.large != nil && rhs.large != nil { + return s.large.Equals(rhs.large) + } + // how come to this? eg: a set operates like: {insert:1, insert:65, remove:65}, resulting a large int-set with only small numbers. + // so we need calculate the exact numbers. + var excess bool + s1 := s.small + s2 := rhs.small + if s.large != nil { + s1, excess = s.largeToSmall() + } else { + s2, excess = rhs.largeToSmall() + } + return !excess && s1 == s2 +} + +func (s FastIntSet) largeToSmall() (small uint64, otherValues bool) { + if s.large == nil { + panic("set contains no large") + } + return s.small, s.large.Min() < 0 || s.large.Max() >= smallCutOff +} + +// ************************************************************************* +// * Logic Operators * +// ************************************************************************* + +// Difference is used to return the s without elements in rhs. +func (s FastIntSet) Difference(rhs FastIntSet) FastIntSet { + r := s.Copy() + r.DifferenceWith(rhs) + return r +} + +// DifferenceWith removes any elements in rhs from source. +func (s *FastIntSet) DifferenceWith(rhs FastIntSet) { + s.small &^= rhs.small + if s.large == nil { + return + } + s.large.DifferenceWith(rhs.toLarge()) +} + +// Union is used to return a union of s and rhs as new set. +func (s FastIntSet) Union(rhs FastIntSet) FastIntSet { + cps := s.Copy() + cps.UnionWith(rhs) + return cps +} + +// UnionWith is used to copy all the elements of rhs to source. +func (s *FastIntSet) UnionWith(rhs FastIntSet) { + s.small |= rhs.small + if s.large == nil && rhs.large == nil { + return + } + if s.large == nil { + s.large = s.toLarge() + } + if rhs.large == nil { + for i, ok := rhs.Next(0); ok; i, ok = rhs.Next(i + 1) { + s.large.Insert(i) + } + } else { + s.large.UnionWith(rhs.large) + } +} + +// Intersection is used to return the intersection of s and rhs. +func (s FastIntSet) Intersection(rhs FastIntSet) FastIntSet { + r := s.Copy() + r.IntersectionWith(rhs) + return r +} + +// IntersectionWith removes any elements not in rhs from source. +func (s *FastIntSet) IntersectionWith(rhs FastIntSet) { + s.small &= rhs.small + if rhs.large == nil { + s.large = nil + } + if s.large == nil { + return + } + s.large.IntersectionWith(rhs.toLarge()) +} + +// Intersects is used to judge whether two set has something in common. +func (s FastIntSet) Intersects(rhs FastIntSet) bool { + if (s.small & rhs.small) != 0 { + return true + } + if s.large == nil || rhs.large == nil { + return false + } + return s.large.Intersects(rhs.toLarge()) +} + +// SubsetOf is used to judge whether rhs contains source set. +func (s FastIntSet) SubsetOf(rhs FastIntSet) bool { + if s.large == nil { + return (s.small & rhs.small) == s.small + } + if s.large != nil && rhs.large != nil { + return s.large.SubsetOf(rhs.large) + } + // s is large and rhs is small. + if _, excess := s.largeToSmall(); excess { + // couldn't map s to small. + return false + } + // how come to this? eg: a set operates like: {insert:1, insert:65, remove:65}, resulting a large + // int-set with only small numbers. + return (s.small & rhs.small) == s.small +} + +// Shift generates a new set which contains elements i+delta for elements i in +// the original set. +func (s *FastIntSet) Shift(delta int) FastIntSet { + if s.large == nil { + // Fast path. + if delta > 0 { + if bits.LeadingZeros64(s.small)-(64-smallCutOff) >= delta { + return FastIntSet{small: s.small << uint32(delta)} + } + } else { + if bits.TrailingZeros64(s.small) >= -delta { + return FastIntSet{small: s.small >> uint32(-delta)} + } + } + } + // Do the slow thing. + var result FastIntSet + s.ForEach(func(i int) { + result.Insert(i + delta) + }) + return result +} + +// AddRange adds the interval [from, to] to the Set. +func (s *FastIntSet) AddRange(from, to int) { + if to < from { + panic("invalid range when adding range to FastIntSet") + } + + withinSmallBounds := from >= 0 && to < smallCutOff + if withinSmallBounds && s.large == nil { + nValues := to - from + 1 + s.small |= (1< 1 { + buf.WriteByte(',') + } + if start == end { + fmt.Fprintf(&buf, "%d", start) + } else if start+1 == end { + fmt.Fprintf(&buf, "%d,%d", start, end) + } else { + fmt.Fprintf(&buf, "%d-%d", start, end) + } + } + rangeStart, rangeEnd := -1, -1 + s.ForEach(func(i int) { + if i < 0 { + appendRange(i, i) + return + } + if rangeStart != -1 && rangeEnd == i-1 { + rangeEnd = i + } else { + if rangeStart != -1 { + appendRange(rangeStart, rangeEnd) + } + rangeStart, rangeEnd = i, i + } + }) + if rangeStart != -1 { + appendRange(rangeStart, rangeEnd) + } + buf.WriteByte(')') + return buf.String() +} diff --git a/planner/funcdep/fast_int_set_bench_test.go b/planner/funcdep/fast_int_set_bench_test.go new file mode 100644 index 0000000000000..a81c607a4c9af --- /dev/null +++ b/planner/funcdep/fast_int_set_bench_test.go @@ -0,0 +1,158 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 funcdep + +import ( + "testing" + + "golang.org/x/tools/container/intsets" +) + +func BenchmarkMapIntSet_Difference(b *testing.B) { + intSetA := NewIntSet() + for i := 0; i < 200000; i++ { + intSetA[i] = struct{}{} + } + intSetB := NewIntSet() + for i := 100000; i < 300000; i++ { + intSetB[i] = struct{}{} + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + tmp := NewIntSet() + tmp.Difference2(intSetA, intSetB) + //intSetA.SubsetOf(intSetB) + } +} + +func BenchmarkIntSet_Difference(b *testing.B) { + intSetA := &intsets.Sparse{} + for i := 0; i < 200000; i++ { + intSetA.Insert(i) + } + intSetB := &intsets.Sparse{} + for i := 100000; i < 300000; i++ { + intSetA.Insert(i) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + tmp := &intsets.Sparse{} + tmp.Difference(intSetA, intSetB) + //intSetA.SubsetOf(intSetB) + } +} + +func BenchmarkFastIntSet_Difference(b *testing.B) { + intSetA := NewFastIntSet() + for i := 0; i < 200000; i++ { + intSetA.Insert(i) + } + intSetB := NewFastIntSet() + for i := 100000; i < 300000; i++ { + intSetA.Insert(i) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + intSetA.Difference(intSetB) + //intSetA.SubsetOf(intSetB) + } +} + +func BenchmarkIntSet_Insert(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + intSet := NewIntSet() + for j := 0; j < 64; j++ { + intSet.Insert(j) + } + } +} + +func BenchmarkSparse_Insert(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + intSet := &intsets.Sparse{} + for j := 0; j < 64; j++ { + intSet.Insert(j) + } + } +} + +func BenchmarkFastIntSet_Insert(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + intSet := NewFastIntSet() + for j := 0; j < 64; j++ { + intSet.Insert(j) + } + } +} + +// BenchMarkResult +// +// Test with Difference (traverse and allocation) (size means the intersection size) +// +--------------------------------------------------------------------------------+ +// | size | map int set | basic sparse int set | fast sparse int set | +// +------------+-----------------+------------------------+------------------------+ +// | 64 | 3203 ns/op | 64 ns/op | 5.750 ns/op | +// | 1000 | 244284 ns/op | 822 ns/op | 919.8 ns/op | +// | 10000 | 2940130 ns/op | 8071 ns/op | 8686 ns/op | +// | 100000 | 41283606 ns/op | 83320 ns/op | 85563 ns/op | +// +------------+-----------------+------------------------+------------------------+ +// +// This test is under same operation with same data with following analysis: +// MapInt and Sparse are all temporarily allocated for intermediate result. Since +// MapInt need to reallocate the capacity with unit as int(64) which is expensive +// than a bit of occupation in Sparse reallocation. +// +// From the space utilization and allocation times, here in favour of sparse. +// +// Test with Insert (allocation) +// +----------------------------------------------------------------------------+ +// | size | map int set | basic sparse int set | fast sparse int set | +// +--------+-----------------+------------------------+------------------------+ +// | 64 | 5705 ns/op | 580 ns/op | 234 ns/op | +// | 1000 | 122906 ns/op | 7991 ns/op | 10606 ns/op | +// | 10000 | 845961 ns/op | 281134 ns/op | 303006 ns/op | +// | 100000 | 15529859 ns/op | 31273573 ns/op | 30752177 ns/op | +// +--------------------------+------------------------+------------------------+ +// +// From insert, map insert take much time than sparse does when insert size is under +// 100 thousand. While when the size grows bigger, map insert take less time to do that +// (maybe cost more memory usage), that because sparse need to traverse the chain to +// find the suitable block to insert. +// +// From insert, if set size is larger than 100 thousand, map-set is preferred, otherwise, sparse is good. +// +// Test with Subset (traverse) (sizes means the size A / B) +// +---------------------------------------------------------------------------------+ +// | size | map int set | basic sparse int set | fast sparse int set | +// +--------+-----------------+------------------------+------------------------+ +// | 64 | 59.47 ns/op | 3.775 ns/op | 2.727 ns/op | +// | 1000 | 68.9 ns/op | 3.561 ns/op | 22.64 ns/op | +// | 20000 | 104.7 ns/op | 3.502 ns/op | 23.92 ns/op | +// | 200000 | 249.8 ns/op | 3.504 ns/op | 22.11 ns/op | +// +--------------------------+------------------------+------------------------+ +// +// This is the most amazing part we have been tested. Map set need to compute the equality +// about the every key int in the map with others. While sparse only need to do is just to +// fetch every bitmap (every bit implies a number) and to the bit operation together. +// +// FastIntSet's performance is quite like Sparse IntSet, because they have the same implementation +// inside. While FastIntSet have some optimizations with small range (0-63), so we add an +// extra test for size with 64, from the number above, they did have some effects, especially +// in computing the difference (bit | technically). +// +// From all above, we are in favour of sparse. sparse to store fast-int-set instead of using map. diff --git a/planner/funcdep/fast_int_set_test.go b/planner/funcdep/fast_int_set_test.go new file mode 100644 index 0000000000000..8fef7ffa36a49 --- /dev/null +++ b/planner/funcdep/fast_int_set_test.go @@ -0,0 +1,516 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 funcdep + +import ( + "fmt" + "math/rand" + "reflect" + "runtime" + "sort" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + "golang.org/x/tools/container/intsets" +) + +// IntSet is used to hold set of vertexes of one side of an edge. +type IntSet map[int]struct{} + +// SubsetOf is used to judge whether IntSet itself is a subset of others. +func (is IntSet) SubsetOf(target IntSet) bool { + for i := range is { + if _, ok := target[i]; ok { + continue + } + return false + } + return true +} + +// Intersects is used to judge whether IntSet itself intersects with others. +func (is IntSet) Intersects(target IntSet) bool { + for i := range is { + if _, ok := target[i]; ok { + return true + } + } + return false +} + +// Difference is used to exclude the intersection sector away from itself. +func (is IntSet) Difference(target IntSet) { + for i := range target { + delete(is, i) + } +} + +func (is IntSet) Difference2(target1, target2 IntSet) { + for i := range target1 { + if _, ok := target2[i]; ok { + delete(is, i) + } else { + is[i] = struct{}{} + } + } +} + +// Union is used to union the IntSet itself with others +func (is IntSet) Union(target IntSet) { + // deduplicate + for i := range target { + if _, ok := is[i]; ok { + continue + } + is[i] = struct{}{} + } +} + +// Equals is used to judge whether two IntSet are semantically equal. +func (is IntSet) Equals(target IntSet) bool { + if len(is) != len(target) { + return false + } + for i := range target { + if _, ok := is[i]; !ok { + return false + } + } + return true +} + +func (is *IntSet) CopyFrom(target IntSet) { + *is = NewIntSetWithCap(len(target)) + for k, v := range target { + (*is)[k] = v + } +} + +func (is IntSet) SortedArray() []int { + arr := make([]int, 0, len(is)) + for k := range is { + arr = append(arr, k) + } + sort.Slice(arr, func(i, j int) bool { return arr[i] < arr[j] }) + return arr +} + +func (is IntSet) Insert(k int) { + is[k] = struct{}{} +} + +func NewIntSet() IntSet { + return make(map[int]struct{}) +} + +func NewIntSetWithCap(c int) IntSet { + return make(map[int]struct{}, c) +} + +func TestFastIntSetBasic(t *testing.T) { + // Test Insert, Remove, Len, Has. + fis := FastIntSet{} + fis.Insert(1) + fis.Insert(2) + fis.Insert(3) + require.Equal(t, fis.Len(), 3) + require.True(t, fis.Has(1)) + require.True(t, fis.Has(2)) + require.True(t, fis.Has(3)) + fis.Remove(2) + require.Equal(t, fis.Len(), 2) + require.True(t, fis.Has(1)) + require.True(t, fis.Has(3)) + fis.Remove(3) + require.Equal(t, fis.Len(), 1) + require.True(t, fis.Has(1)) + fis.Remove(1) + require.Equal(t, fis.Len(), 0) + + // Test Next (only seek non-neg) + fis.Insert(6) + fis.Insert(3) + fis.Insert(0) + fis.Insert(-1) + fis.Insert(77) + n, ok := fis.Next(intsets.MinInt) + require.True(t, ok) + require.Equal(t, n, 0) + n, ok = fis.Next(n + 1) + require.True(t, ok) + require.Equal(t, n, 3) + n, ok = fis.Next(n + 1) + require.True(t, ok) + require.Equal(t, n, 6) + n, ok = fis.Next(n + 1) + require.True(t, ok) + require.Equal(t, n, 77) + n, ok = fis.Next(n + 1) + require.False(t, ok) + require.Equal(t, n, intsets.MaxInt) + + // Test Clear and IsEmpty. + fis.Clear() + require.Equal(t, fis.Len(), 0) + require.True(t, fis.IsEmpty()) + + // Test ForEach (seek all) and SortedArray. + fis.Insert(1) + fis.Insert(-1) + fis.Insert(77) + var res []int + fis.ForEach(func(i int) { + res = append(res, i) + }) + res1 := fis.SortedArray() + require.Equal(t, len(res), 3) + require.Equal(t, len(res1), 3) + require.Equal(t, res, res1) + + // Test Copy, CopyFrom and Equal + cp := fis.Copy() + require.Equal(t, fis.Len(), cp.Len()) + require.Equal(t, fis.SortedArray(), cp.SortedArray()) + require.True(t, fis.Equals(cp)) + + cpf := FastIntSet{} + intervene := 100 + cpf.Insert(intervene) + cpf.CopyFrom(fis) + require.Equal(t, cpf.Len(), cp.Len()) + require.Equal(t, cpf.SortedArray(), cp.SortedArray()) + require.True(t, cpf.Equals(cp)) +} + +func getTestName() string { + pcs := make([]uintptr, 10) + n := runtime.Callers(2, pcs) + frames := runtime.CallersFrames(pcs[:n]) + for { + frame, more := frames.Next() + fxn := frame.Function + if strings.Contains(fxn, ".Test") { + return fxn + } + if !more { + break + } + } + return "" +} + +var lastTestName string +var rng *rand.Rand + +func NewTestRand() (*rand.Rand, int64) { + fxn := getTestName() + if fxn != "" && lastTestName != fxn { + // Re-seed rng (the source of seeds for test random number generators) with + // the global seed so that individual tests are reproducible using the + // random seed. + lastTestName = fxn + rng = rand.New(rand.NewSource(time.Now().Unix())) + } + seed := rng.Int63() + return rand.New(rand.NewSource(seed)), seed +} + +func TestFastIntSet(t *testing.T) { + for _, mVal := range []int{1, 8, 30, smallCutOff, 2 * smallCutOff, 4 * smallCutOff} { + m := mVal + t.Run(fmt.Sprintf("%d", m), func(t *testing.T) { + rng, _ := NewTestRand() + in := make([]bool, m) + forEachRes := make([]bool, m) + + var s FastIntSet + for i := 0; i < 1000; i++ { + v := rng.Intn(m) + if rng.Intn(2) == 0 { + in[v] = true + s.Insert(v) + } else { + in[v] = false + s.Remove(v) + } + empty := true + for j := 0; j < m; j++ { + empty = empty && !in[j] + if in[j] != s.Has(j) { + t.Fatalf("incorrect result for Contains(%d), expected %t", j, in[j]) + } + } + if empty != s.IsEmpty() { + t.Fatalf("incorrect result for Empty(), expected %t", empty) + } + // Test ForEach + for j := range forEachRes { + forEachRes[j] = false + } + s.ForEach(func(j int) { + forEachRes[j] = true + }) + for j := 0; j < m; j++ { + if in[j] != forEachRes[j] { + t.Fatalf("incorrect ForEachResult for %d (%t, expected %t)", j, forEachRes[j], in[j]) + } + } + // Cross-check Ordered and Next(). + var vals []int + for i, ok := s.Next(0); ok; i, ok = s.Next(i + 1) { + vals = append(vals, i) + } + if o := s.SortedArray(); !reflect.DeepEqual(vals, o) { + t.Fatalf("set built with Next doesn't match Ordered: %v vs %v", vals, o) + } + assertSame := func(orig, copied FastIntSet) { + t.Helper() + if !orig.Equals(copied) || !copied.Equals(orig) { + t.Fatalf("expected equality: %v, %v", orig, copied) + } + if col, ok := copied.Next(0); ok { + copied.Remove(col) + if orig.Equals(copied) || copied.Equals(orig) { + t.Fatalf("unexpected equality: %v, %v", orig, copied) + } + copied.Insert(col) + if !orig.Equals(copied) || !copied.Equals(orig) { + t.Fatalf("expected equality: %v, %v", orig, copied) + } + } + } + // Test Copy. + s2 := s.Copy() + assertSame(s, s2) + // Test CopyFrom. + var s3 FastIntSet + s3.CopyFrom(s) + assertSame(s, s3) + // Make sure CopyFrom into a non-empty set still works. + s.Shift(100) + s.CopyFrom(s3) + assertSame(s, s3) + } + }) + } +} + +func TestFastIntSetTwoSetOps(t *testing.T) { + rng, _ := NewTestRand() + // genSet creates a set of numElem values in [minVal, minVal + valRange) + // It also adds and then removes numRemoved elements. + genSet := func(numElem, numRemoved, minVal, valRange int) (FastIntSet, map[int]bool) { + var s FastIntSet + vals := rng.Perm(valRange)[:numElem+numRemoved] + used := make(map[int]bool, len(vals)) + for _, i := range vals { + used[i] = true + } + for k := range used { + s.Insert(k) + } + p := rng.Perm(len(vals)) + for i := 0; i < numRemoved; i++ { + k := vals[p[i]] + s.Remove(k) + delete(used, k) + } + return s, used + } + + // returns true if a is a subset of b + subset := func(a, b map[int]bool) bool { + for k := range a { + if !b[k] { + return false + } + } + return true + } + + for _, minVal := range []int{-10, -1, 0, smallCutOff, 2 * smallCutOff} { + for _, valRange := range []int{0, 20, 200} { + for _, num1 := range []int{0, 1, 5, 10, 20} { + for _, removed1 := range []int{0, 1, 3, 8} { + s1, m1 := genSet(num1, removed1, minVal, num1+removed1+valRange) + for _, shift := range []int{-100, -10, -1, 1, 2, 10, 100} { + shifted := s1.Shift(shift) + failed := false + s1.ForEach(func(i int) { + failed = failed || !shifted.Has(i+shift) + }) + shifted.ForEach(func(i int) { + failed = failed || !s1.Has(i-shift) + }) + if failed { + t.Errorf("invalid shifted result: %s shifted by %d: %s", &s1, shift, &shifted) + } + } + for _, num2 := range []int{0, 1, 5, 10, 20} { + for _, removed2 := range []int{0, 1, 4, 10} { + s2, m2 := genSet(num2, removed2, minVal, num2+removed2+valRange) + + subset1 := subset(m1, m2) + if subset1 != s1.SubsetOf(s2) { + t.Errorf("SubsetOf result incorrect: %s, %s", &s1, &s2) + } + subset2 := subset(m2, m1) + if subset2 != s2.SubsetOf(s1) { + t.Errorf("SubsetOf result incorrect: %s, %s", &s2, &s1) + } + eq := subset1 && subset2 + if eq != s1.Equals(s2) || eq != s2.Equals(s1) { + t.Errorf("Equals result incorrect: %s, %s", &s1, &s2) + } + + // Test union. + + u := s1.Copy() + u.UnionWith(s2) + + if !u.Equals(s1.Union(s2)) { + t.Errorf("inconsistency between UnionWith and Union on %s %s\n", s1, s2) + } + // Verify all elements from m1 and m2 are in u. + for _, m := range []map[int]bool{m1, m2} { + for x := range m { + if !u.Has(x) { + t.Errorf("incorrect union result %s union %s = %s", &s1, &s2, &u) + break + } + } + } + // Verify all elements from u are in m2 or m1. + for x, ok := u.Next(minVal); ok; x, ok = u.Next(x + 1) { + if !(m1[x] || m2[x]) { + t.Errorf("incorrect union result %s union %s = %s", &s1, &s2, &u) + break + } + } + + // Test intersection. + u = s1.Copy() + u.IntersectionWith(s2) + if s1.Intersects(s2) != !u.IsEmpty() || + s2.Intersects(s1) != !u.IsEmpty() { + t.Errorf("inconsistency between IntersectionWith and Intersect on %s %s\n", s1, s2) + } + if !u.Equals(s1.Intersection(s2)) { + t.Errorf("inconsistency between IntersectionWith and Intersection on %s %s\n", s1, s2) + } + // Verify all elements from m1 and m2 are in u. + for x := range m1 { + if m2[x] && !u.Has(x) { + t.Errorf("incorrect intersection result %s union %s = %s x=%d", &s1, &s2, &u, x) + break + } + } + // Verify all elements from u are in m2 and m1. + for x, ok := u.Next(minVal); ok; x, ok = u.Next(x + 1) { + if !(m1[x] && m2[x]) { + t.Errorf("incorrect intersection result %s intersect %s = %s", &s1, &s2, &u) + break + } + } + + // Test difference. + u = s1.Copy() + u.DifferenceWith(s2) + + if !u.Equals(s1.Difference(s2)) { + t.Errorf("inconsistency between DifferenceWith and Difference on %s %s\n", s1, s2) + } + + // Verify all elements in m1 but not in m2 are in u. + for x := range m1 { + if !m2[x] && !u.Has(x) { + t.Errorf("incorrect difference result %s \\ %s = %s x=%d", &s1, &s2, &u, x) + break + } + } + // Verify all elements from u are in m1. + for x, ok := u.Next(minVal); ok; x, ok = u.Next(x + 1) { + if !m1[x] { + t.Errorf("incorrect difference result %s \\ %s = %s", &s1, &s2, &u) + break + } + } + } + } + } + } + } + } +} + +func TestFastIntSetAddRange(t *testing.T) { + assertSet := func(set *FastIntSet, from, to int) { + t.Helper() + // Iterate through the set and ensure that the values + // it contain are the values from 'from' to 'to' (inclusively). + expected := from + set.ForEach(func(actual int) { + t.Helper() + if actual > to { + t.Fatalf("expected last value in FastIntSet to be %d, got %d", to, actual) + } + if expected != actual { + t.Fatalf("expected next value in FastIntSet to be %d, got %d", expected, actual) + } + expected++ + }) + } + + max := smallCutOff + 20 + // Test all O(n^2) sub-intervals of [from,to] in the interval + // [-5, smallCutoff + 20]. + for from := -5; from <= max; from++ { + for to := from; to <= max; to++ { + var set FastIntSet + set.AddRange(from, to) + assertSet(&set, from, to) + } + } +} + +func TestFastIntSetString(t *testing.T) { + testCases := []struct { + vals []int + exp string + }{ + { + vals: []int{}, + exp: "()", + }, + { + vals: []int{-5, -3, -2, -1, 0, 1, 2, 3, 4, 5}, + exp: "(-5,-3,-2,-1,0-5)", + }, + { + vals: []int{0, 1, 3, 4, 5}, + exp: "(0,1,3-5)", + }, + } + for i, tc := range testCases { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + s := NewFastIntSet(tc.vals...) + if str := s.String(); str != tc.exp { + t.Errorf("expected %s, got %s", tc.exp, str) + } + }) + } +} diff --git a/planner/funcdep/fd_graph.go b/planner/funcdep/fd_graph.go new file mode 100644 index 0000000000000..f103429ca4728 --- /dev/null +++ b/planner/funcdep/fd_graph.go @@ -0,0 +1,909 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 funcdep + +import ( + "fmt" + "strings" + + "github.com/pingcap/tidb/util/logutil" +) + +type fdEdge struct { + // functional dependency = determinants -> dependencies + // determinants = from + // dependencies = to + from FastIntSet + to FastIntSet + // The value of the strict and eq bool forms the four kind of edges: + // functional dependency, lax functional dependency, strict equivalence constraint, lax equivalence constraint. + // And if there's a functional dependency `const` -> `column` exists. We would let the from side be empty. + strict bool + equiv bool +} + +// FDSet is the main portal of functional dependency, it stores the relationship between (extended table / physical table)'s +// columns. For more theory about this design, ref the head comments in the funcdep/doc.go. +type FDSet struct { + fdEdges []*fdEdge + // NotNullCols is used to record the columns with not-null attributes applied. + // eg: {1} ~~> {2,3}, when {2,3} not null is applied, it actually does nothing. + // but we should record {2,3} as not-null down for the convenience of transferring + // Lax FD: {1} ~~> {2,3} to strict FD: {1} --> {2,3} with {1} as not-null next time. + NotNullCols FastIntSet + // HashCodeToUniqueID map the expression's hashcode to a statement allocated unique + // ID quite like the unique ID bounded with column. It's mainly used to add the expr + // to the fdSet as an extended column. + HashCodeToUniqueID map[string]int + // GroupByCols is used to record columns / expressions that under the group by phrase. + GroupByCols FastIntSet + HasAggBuilt bool + // after left join, according to rule 3.3.3, it may create a lax FD from inner equivalence + // cols pointing to outer equivalence cols. eg: t left join t1 on t.a = t1.b, leading a + // lax FD from t1.b ~> t.a, this lax attribute is coming from supplied null value to all + // left rows, once there is a null-refusing predicate on the inner side on upper layer, this + // can be equivalence again. (the outer rows left are all coming from equal matching) + // + // why not just makeNotNull of them, because even a non-equiv-related inner col can also + // refuse supplied null values. + Rule333Equiv struct { + Edges []*fdEdge + InnerCols FastIntSet + } +} + +// ClosureOfStrict is exported for outer usage. +func (s *FDSet) ClosureOfStrict(colSet FastIntSet) FastIntSet { + return s.closureOfStrict(colSet) +} + +// closureOfStrict is to find strict fd closure of X with respect to F. +// A -> B = colSet -> { resultIntSet } +// eg: considering closure F: {A-> CD, B -> E}, and input is {AB} +// res: AB -> {CDE} (AB is included in trivial FD) +// The time complexity is O(n^2). +func (s *FDSet) closureOfStrict(colSet FastIntSet) FastIntSet { + resultSet := NewFastIntSet() + // self included. + resultSet.UnionWith(colSet) + for i := 0; i < len(s.fdEdges); i++ { + fd := s.fdEdges[i] + if fd.strict && fd.from.SubsetOf(resultSet) && !fd.to.SubsetOf(resultSet) { + resultSet.UnionWith(fd.to) + // If the closure is updated, we redo from the beginning. + i = -1 + } + // why this? it is caused by our definition of equivalence as {superset} == {superset}, + // which is also seen as {superset} --> {superset}. but when we compute the transitive + // closure, `fd.from.SubsetOf(resultSet)` is not transitive here. Actually, we can also + // see the equivalence as {single element} == {superset} / {single element} --> {superset}. + if fd.equiv && fd.from.Intersects(resultSet) && !fd.to.SubsetOf(resultSet) { + resultSet.UnionWith(fd.to) + i = -1 + } + } + return resultSet +} + +// ClosureOfLax is exported for outer usage. +func (s *FDSet) ClosureOfLax(colSet FastIntSet) FastIntSet { + return s.closureOfLax(colSet) +} + +// ClosureOfLax is used to find lax fd closure of X with respect to F. +func (s *FDSet) closureOfLax(colSet FastIntSet) FastIntSet { + // Lax dependencies are not transitive (see figure 2.1 in the paper for + // properties that hold for lax dependencies), so only include them if they + // are reachable in a single lax dependency step from the input set. + laxOneStepReached := NewFastIntSet() + // self included. + laxOneStepReached.UnionWith(colSet) + for i := 0; i < len(s.fdEdges); i++ { + fd := s.fdEdges[i] + // A ~~> B && A == C && C ~~> D: given A, BD can be included via Lax FDs (plus self A and equiv C). + // A ~~> B && B == C: given A, BC can be included via Lax FDs (plus self A). + // which means both dependency and determinant can extend Lax exploration via equivalence. + // + // Besides, strict is a kind of strong lax FDs, result computed above should be unionised with strict FDs closure. + if fd.equiv && fd.from.Intersects(laxOneStepReached) && !fd.to.SubsetOf(laxOneStepReached) { + // equiv can extend the lax-set's access paths. + laxOneStepReached.UnionWith(fd.to) + i = -1 + } + if !fd.strict && !fd.equiv && fd.from.SubsetOf(laxOneStepReached) && !fd.to.SubsetOf(laxOneStepReached) { + // lax FDs. + laxOneStepReached.UnionWith(fd.to) + } + } + // Unionised strict FDs + laxOneStepReached.UnionWith(s.closureOfStrict(colSet)) + return laxOneStepReached +} + +// closureOfEquivalence is to find strict equivalence closure of X with respect to F. +func (s *FDSet) closureOfEquivalence(colSet FastIntSet) FastIntSet { + resultSet := NewFastIntSet() + // self included. + resultSet.UnionWith(colSet) + for i := 0; i < len(s.fdEdges); i++ { + // equivalence is maintained as {superset} == {superset}, we don't need to do transitive computation. + // but they may multi equivalence closure, eg: {a,b}=={a,b}, {c,d} =={c,d}, when adding b=c, we need traverse them all. + fd := s.fdEdges[i] + if fd.equiv { + if fd.from.Intersects(resultSet) && !fd.to.SubsetOf(resultSet) { + resultSet.UnionWith(fd.to) + } + } + } + return resultSet +} + +// InClosure is used to judge whether fd: setA -> setB can be inferred from closure s. +// It's a short-circuit version of the `closureOf`. +func (s *FDSet) InClosure(setA, setB FastIntSet) bool { + if setB.SubsetOf(setA) { + return true + } + currentClosure := NewFastIntSet() + // self included. + currentClosure.UnionWith(setA) + for i := 0; i < len(s.fdEdges); i++ { + fd := s.fdEdges[i] + if fd.strict && fd.from.SubsetOf(currentClosure) && !fd.to.SubsetOf(currentClosure) { + // once fd.from is subset of setA, which means fd is part of our closure; + // when fd.to is not subset of setA itself, it means inference result is necessary to add; (closure extending) + currentClosure.UnionWith(fd.to) + if setB.SubsetOf(currentClosure) { + return true + } + // If the closure is updated, we redo from the beginning. + i = -1 + } + // why this? it is caused by our definition of equivalence as {superset} == {superset}, + // which is also seen as {superset} --> {superset}. but when we compute the transitive + // closure, `fd.from.SubsetOf(resultSet)` is not transitive here. Actually, we can also + // see the equivalence as {single element} == {superset} / {single element} --> {superset}. + if fd.equiv && fd.from.Intersects(currentClosure) && !fd.to.SubsetOf(currentClosure) { + currentClosure.UnionWith(fd.to) + if setB.SubsetOf(currentClosure) { + return true + } + i = -1 + } + } + return false +} + +// ReduceCols is used to minimize the determinants in one fd input. +// function dependency = determinants -> dependencies +// given: AB -> XY, once B can be inferred from current closure when inserting, take A -> XY instead. +func (s *FDSet) ReduceCols(colSet FastIntSet) FastIntSet { + // Suppose the colSet is A and B, we have A --> B. Then we only need A since B' value is always determined by A. + var removed, result = NewFastIntSet(), NewFastIntSet() + result.CopyFrom(colSet) + for k, ok := colSet.Next(0); ok; k, ok = colSet.Next(k + 1) { + removed.Insert(k) + result.Remove(k) + // If the removed one is not dependent with the result. We add the bit back. + if !s.InClosure(result, removed) { + removed.Remove(k) + result.Insert(k) + } + } + return result +} + +// AddStrictFunctionalDependency is to add `STRICT` functional dependency to the fdGraph. +func (s *FDSet) AddStrictFunctionalDependency(from, to FastIntSet) { + s.addFunctionalDependency(from, to, true, false) +} + +// AddLaxFunctionalDependency is to add `LAX` functional dependency to the fdGraph. +func (s *FDSet) AddLaxFunctionalDependency(from, to FastIntSet) { + s.addFunctionalDependency(from, to, false, false) +} + +// addFunctionalDependency will add strict/lax functional dependency to the fdGraph. +// eg: +// CREATE TABLE t (a int key, b int, c int, d int, e int, UNIQUE (b,c)) +// strict FD: {a} --> {a,b,c,d,e} && lax FD: {b,c} ~~> {a,b,c,d,e} will be added. +// stored FD: {a} --> {b,c,d,e} && lax FD: {b,c} ~~> {a,d,e} is determinant eliminated. +// +// To reduce the edge number, we limit the functional dependency when we insert into the +// set. The key code of insert is like the following codes. +func (s *FDSet) addFunctionalDependency(from, to FastIntSet, strict, equiv bool) { + // trivial FD, refused. + if to.SubsetOf(from) { + return + } + + // exclude the intersection part. + if to.Intersects(from) { + to.DifferenceWith(from) + } + + // reduce the determinants. + from = s.ReduceCols(from) + + newFD := &fdEdge{ + from: from, + to: to, + strict: strict, + equiv: equiv, + } + + swapPointer := 0 + added := false + // the newFD couldn't be superSet of existed one A and be subset of the other existed one B at same time. + // Because the subset relationship between A and B will be replaced previously. + for i := range s.fdEdges { + fd := s.fdEdges[i] + // If the new one is stronger than the old one. Just replace it. + if newFD.implies(fd) { + if added { + continue + } + fd.from = from + fd.to = to + fd.strict = strict + fd.equiv = equiv + added = true + } else if !added { + // There's a strong one. No need to add. + if fd.implies(newFD) { + added = true + } else if fd.strict && !fd.equiv && fd.from.Equals(from) { + // We can use the new FD to extend the current one. + // eg: A -> BC, A -> CE, they couldn't be the subset of each other, union them. + // res: A -> BCE + fd.to.UnionWith(to) + added = true + } + } + // If the current one is not eliminated, add it to the result. + s.fdEdges[swapPointer] = s.fdEdges[i] + swapPointer++ + } + s.fdEdges = s.fdEdges[:swapPointer] + + // If it's still not added. + if !added { + s.fdEdges = append(s.fdEdges, newFD) + } +} + +// implies is used to shrink the edge size, keeping the minimum of the functional dependency set size. +func (e *fdEdge) implies(otherEdge *fdEdge) bool { + // The given one's from should be larger than the current one and the current one's to should be larger than the given one. + // STRICT FD: + // A --> C is stronger than AB --> C. --- YES + // A --> BC is stronger than A --> C. --- YES + // + // LAX FD: + // 1: A ~~> C is stronger than AB ~~> C. --- YES + // 2: A ~~> BC is stronger than A ~~> C. --- NO + // The precondition for 2 to be strict FD is much easier to satisfied than 1, only to + // need {a,c} is not null. So we couldn't merge this two to be one lax FD. + // but for strict/equiv FD implies lax FD, 1 & 2 is implied both reasonably. + lhsIsLax := !e.equiv && !e.strict + rhsIsLax := !otherEdge.equiv && !otherEdge.strict + if lhsIsLax && rhsIsLax { + if e.from.SubsetOf(otherEdge.from) && e.to.Equals(otherEdge.to) { + return true + } + return false + } + if e.from.SubsetOf(otherEdge.from) && otherEdge.to.SubsetOf(e.to) { + // The given one should be weaker than the current one. + // So the given one should not be more strict than the current one. + // The given one should not be equivalence constraint if the given one is not equivalence constraint. + if (e.strict || !otherEdge.strict) && (e.equiv || !otherEdge.equiv) { + return true + } + // 1: e.strict + e.equiv => e > o + // 2: e.strict + !o.equiv => e >= o + // 3: !o.strict + e.equiv => e > o + // 4: !o.strict + !o.equiv => o.lax + } + return false +} + +// addEquivalence add an equivalence set to fdSet. +// when adding an equivalence between column a and b: +// 1: they may be integrated into the origin equivalence superset if this two enclosure have some id in common. +// 2: they can be used to extend the existed constant closure, consequently leading some reduce work: see addConstant. +// 3: they self can be used to eliminate existed strict/lax FDs, see comments below. +func (s *FDSet) addEquivalence(eqs FastIntSet) { + var addConst bool + // get equivalence closure. + eqClosure := s.closureOfEquivalence(eqs) + s.fdEdges = append(s.fdEdges, &fdEdge{from: eqClosure.Copy(), to: eqClosure.Copy(), strict: true, equiv: true}) + + for i := 0; i < len(s.fdEdges)-1; i++ { + fd := s.fdEdges[i] + + if fd.isConstant() { + // If any equivalent column is a constant, then all are constants. + if fd.to.Intersects(eqClosure) && !eqClosure.SubsetOf(fd.to) { + // new non-constant-subset columns need to be merged to the constant closure. + // Since adding constant wil induce extra FD reshapes, we call addConstant directly. + addConst = true + } + } else if fd.from.SubsetOf(eqClosure) { + if fd.equiv { + // this equivalence is enclosed in the super closure appended above, remove it. + s.fdEdges = append(s.fdEdges[:i], s.fdEdges[i+1:]...) + i-- + } else { + // Since from side are all in equivalence closure, we can eliminate some + // columns of dependencies in equivalence closure. because equivalence is + // a stronger relationship than a strict or lax dependency. + // eg: {A,B} --> {C,D}, {A,B,D} in equivalence, FD can be shortly as {A,B} --> {C} + if fd.removeColumnsToSide(eqClosure) { + // Once the to side is empty, remove the FD. + s.fdEdges = append(s.fdEdges[:i], s.fdEdges[i+1:]...) + i-- + } + } + } + } + // addConstant logic won't induce recomputing of the logic above recursively, so do it here. + if addConst { + // {} --> {a} + {a,b,c} --> {a,b,c} leading to extension {} --> {a,b,c} + s.AddConstants(eqClosure) + } +} + +// AddEquivalence take two column id as parameters, establish a strict equivalence between +// this two column which may be enclosed a superset of equivalence closure in the fdSet. +// +// For the equivalence storage, for simplicity, we only keep the superset relationship of +// equivalence since equivalence has the reflexivity. +// +// eg: a==b, b==c, a==e +// +// in our fdSet, the equivalence will be stored like: {a, b, c, e} == {a, b, c,e} +// According and characteristic and reflexivity, each element in the equivalence enclosure +// can derive whatever in the same enclosure. +func (s *FDSet) AddEquivalence(from, to FastIntSet) { + // trivial equivalence, refused. + if to.SubsetOf(from) { + return + } + s.addEquivalence(from.Union(to)) +} + +// AddConstants adds a strict FD to the source which indicates that each of the given column +// have the same constant value for all rows, or same null value for all rows if it's nullable. +// +// {} --> {a} +// +// there are several usage for this kind of FD, for example, constant FD column can exist in the +// select fields not matter whatever the group by column is; distinct predicate can be eliminated +// for these columns as well. +// +// when adding columns, be cautious that +// 1: constant can be propagated in the equivalence/strict closure, turning strict FD as a constant one. +// 2: constant can simplify the strict FD both in determinants side and dependencies side. +// 3: constant can simplify the lax FD in the dependencies side. +func (s *FDSet) AddConstants(cons FastIntSet) { + if cons.IsEmpty() { + return + } + // 1: {} --> {a}, {} --> {b}, when counting the closure, it will collect all constant FD if it has. + // 2: {m,n} --> {x, y}, once the m,n is subset of constant closure, x,y must be constant as well. + // 3: {a,b,c} == {a,b,c}, equiv dependency is also strict FD included int the closure computation here. + cols := s.closureOfStrict(cons) + s.fdEdges = append(s.fdEdges, &fdEdge{to: cols.Copy(), strict: true}) + + // skip the last, newly append one. + for i := 0; i < len(s.fdEdges)-1; i++ { + shouldRemoved := false + fd := s.fdEdges[i] + + if !fd.equiv { + if fd.strict { + // Constant columns can be removed from the determinant of a strict + // FD. If all determinant columns are constant, then the entire FD + // can be removed, since this means that the dependant columns must + // also be constant (and were part of constant closure added to the + // constant FD above). + if fd.removeColumnsFromSide(cols) { + // transfer to constant FD which is enclosed in cols above. + shouldRemoved = true + } + } + // for strict or lax FDs, both can reduce the dependencies side columns with constant closure. + if fd.removeColumnsToSide(cols) { + shouldRemoved = true + } + } + if shouldRemoved { + s.fdEdges = append(s.fdEdges[:i], s.fdEdges[i+1:]...) + i-- + } + } +} + +// removeColumnsFromSide remove the columns from determinant side of FDs in source. +// +// eg: {A B} --> {C} +// +// once B is a constant, whether values of c in difference rows have the same values or are all +// null is only determined by A, which can be used to simplify the strict FDs. +// +// Attention: why this reduction can not be applied to lax FDs? +// +// According to the lax definition, once determinant side have the null value, whatever dependencies +// would be. So let B be null value, once two row like: <1, null> and <1, null> (false interpreted), +// their dependencies may would be <3>, <4>, once we eliminate B here, FDs looks like: <1>,<1> lax +// determinate <3>,<4>. +func (e *fdEdge) removeColumnsFromSide(cons FastIntSet) bool { + if e.from.Intersects(cons) { + e.from = e.from.Difference(cons) + } + return e.isConstant() +} + +// isConstant returns whether this FD indicates a constant FD which means {} --> {...} +func (e *fdEdge) isConstant() bool { + return e.from.IsEmpty() +} + +// isEquivalence returns whether this FD indicates an equivalence FD which means {xyz...} == {xyz...} +func (e *fdEdge) isEquivalence() bool { + return e.equiv && e.from.Equals(e.to) +} + +// removeColumnsToSide remove the columns from dependencies side of FDs in source. +// +// eg: {A} --> {B, C} +// +// once B is a constant, only the C's value can be determined by A, this kind of irrelevant coefficient +// can be removed in the to side both for strict and lax FDs. +func (e *fdEdge) removeColumnsToSide(cons FastIntSet) bool { + if e.to.Intersects(cons) { + e.to = e.to.Difference(cons) + } + return e.to.IsEmpty() +} + +// ConstantCols returns the set of columns that will always have the same value for all rows in table. +func (s *FDSet) ConstantCols() FastIntSet { + for i := 0; i < len(s.fdEdges); i++ { + if s.fdEdges[i].isConstant() { + return s.fdEdges[i].to + } + } + return FastIntSet{} +} + +// EquivalenceCols returns the set of columns that are constrained to equal to each other. +func (s *FDSet) EquivalenceCols() (eqs []*FastIntSet) { + for i := 0; i < len(s.fdEdges); i++ { + if s.fdEdges[i].isEquivalence() { + // return either side is the same. + eqs = append(eqs, &s.fdEdges[i].from) + } + } + return eqs +} + +// MakeNotNull modify the FD set based the listed column with NOT NULL flags. +// Most of the case is used in the derived process after predicate evaluation, +// which can upgrade lax FDs to strict ones. +func (s *FDSet) MakeNotNull(notNullCols FastIntSet) { + notNullCols.UnionWith(s.NotNullCols) + notNullColsSet := s.closureOfEquivalence(notNullCols) + for i := 0; i < len(s.fdEdges); i++ { + fd := s.fdEdges[i] + if fd.strict { + continue + } + // unique lax can be made strict only if determinant are not null. + if fd.from.SubsetOf(notNullColsSet) { + // we don't need to clean the old lax FD because when adding the corresponding strict one, the lax + // one will be implied by that and itself is removed. + s.AddStrictFunctionalDependency(fd.from, fd.to) + // add strict FDs will cause reconstruction of FDSet, re-traverse it. + i = -1 + } + } + s.NotNullCols = notNullColsSet +} + +// MakeNullable make the fd's NotNullCols to be cleaned, after the both side fds are handled it can be nullable. +func (s *FDSet) MakeNullable(nullableCols FastIntSet) { + s.NotNullCols.DifferenceWith(nullableCols) +} + +// MakeCartesianProduct records fdSet after the impact of Cartesian Product of (T1 x T2) is made. +// 1: left FD is reserved. +// 2: right FD is reserved. +// Actually, for two independent table, FDs won't affect (implies or something) each other, appending +// them together is adequate. But for constant FDs, according to our definition, we should merge them +// as a larger superset pointing themselves. +func (s *FDSet) MakeCartesianProduct(rhs *FDSet) { + for i := 0; i < len(rhs.fdEdges); i++ { + fd := rhs.fdEdges[i] + if fd.isConstant() { + // both from or to side is ok since {superset} --> {superset}. + s.AddConstants(fd.to) + } else { + s.fdEdges = append(s.fdEdges, fd) + } + } + // todo: add strict FD: (left key + right key) -> all cols. + // maintain a key? +} + +// MakeRestoreRule333 reset the status of how we deal with this rule. +func (s *FDSet) MakeRestoreRule333() { + for _, eg := range s.Rule333Equiv.Edges { + if eg.isConstant() { + s.AddConstants(eg.to) + } else { + s.AddEquivalence(eg.from, eg.to) + } + } + s.Rule333Equiv.Edges = nil + s.Rule333Equiv.InnerCols.Clear() +} + +// ArgOpts contains some arg used for FD maintenance. +type ArgOpts struct { + SkipFDRule331 bool + TypeFDRule331 TypeFilterFD331 + OnlyInnerFilter bool + InnerIsFalse bool +} + +// TypeFilterFD331 describes the type of the filter used in this rule. +type TypeFilterFD331 byte + +// Here's the two specific type. +const ( + SingleFD TypeFilterFD331 = 0 + CombinedFD TypeFilterFD331 = 1 +) + +// FindPrimaryKey checks whether there's a key in the current set which implies key -> all cols. +func (s FDSet) FindPrimaryKey() (*FastIntSet, bool) { + allCols := s.AllCols() + for i := 0; i < len(s.fdEdges); i++ { + fd := s.fdEdges[i] + // Since we haven't maintained the key column, let's traverse every strict FD to judge with. + if fd.strict && !fd.equiv { + closure := s.closureOfStrict(fd.from) + if allCols.SubsetOf(closure) { + pk := NewFastIntSet() + pk.CopyFrom(fd.from) + return &pk, true + } + } + } + return nil, false +} + +// AllCols returns all columns in the current set. +func (s FDSet) AllCols() FastIntSet { + allCols := NewFastIntSet() + for i := 0; i < len(s.fdEdges); i++ { + allCols.UnionWith(s.fdEdges[i].from) + if !s.fdEdges[i].equiv { + allCols.UnionWith(s.fdEdges[i].to) + } + } + return allCols +} + +// AddFrom merges two FD sets by adding each FD from the given set to this set. +// Since two different tables may have some column ID overlap, we better use +// column unique ID to build the FDSet instead. +func (s *FDSet) AddFrom(fds *FDSet) { + for i := range fds.fdEdges { + fd := fds.fdEdges[i] + if fd.equiv { + s.addEquivalence(fd.from) + } else if fd.isConstant() { + s.AddConstants(fd.to) + } else if fd.strict { + s.AddStrictFunctionalDependency(fd.from, fd.to) + } else { + s.AddLaxFunctionalDependency(fd.from, fd.to) + } + } + s.NotNullCols.UnionWith(fds.NotNullCols) + if s.HashCodeToUniqueID == nil { + s.HashCodeToUniqueID = fds.HashCodeToUniqueID + } else { + for k, v := range fds.HashCodeToUniqueID { + if _, ok := s.HashCodeToUniqueID[k]; ok { + logutil.BgLogger().Warn("Error occurred when building the functional dependency") + continue + } + s.HashCodeToUniqueID[k] = v + } + } + for i, ok := fds.GroupByCols.Next(0); ok; i, ok = fds.GroupByCols.Next(i + 1) { + s.GroupByCols.Insert(i) + } + s.HasAggBuilt = fds.HasAggBuilt + s.Rule333Equiv = fds.Rule333Equiv +} + +// MaxOneRow will regard every column in the fdSet as a constant. Since constant is stronger that strict FD, it will +// take over all existed strict/lax FD, only keeping the equivalence. Because equivalence is stronger than constant. +// +// f: {a}--> {b,c}, {abc} == {abc} +// cols: {a,c} +// result: {} --> {a,c}, {a,c} == {a,c} +func (s *FDSet) MaxOneRow(cols FastIntSet) { + cnt := 0 + for i := 0; i < len(s.fdEdges); i++ { + fd := s.fdEdges[i] + // non-equivalence FD, skip it. + if !fd.equiv { + continue + } + // equivalence: {superset} --> {superset} + if cols.Intersects(fd.from) { + s.fdEdges[cnt] = &fdEdge{ + from: fd.from.Intersection(cols), + to: fd.to.Intersection(cols), + strict: true, + equiv: true, + } + cnt++ + } + } + s.fdEdges = s.fdEdges[:cnt] + // At last, add the constant FD, {} --> {cols} + if !cols.IsEmpty() { + s.fdEdges = append(s.fdEdges, &fdEdge{ + to: cols, + strict: true, + }) + } +} + +// ProjectCols projects FDSet to the target columns +// Formula: +// Strict decomposition FD4A: If X −→ Y Z then X −→ Y and X −→ Z. +// Lax decomposition FD4B: If X ~→ Y Z and I(R) is Y-definite then X ~→ Z. +func (s *FDSet) ProjectCols(cols FastIntSet) { + // **************************************** START LOOP 1 ******************************************** + // Ensure the transitive relationship between remaining columns won't be lost. + // 1: record all the constant columns + // 2: if an FD's to side contain un-projected column, substitute it with its closure. + // fd1: {a} --> {b,c} + // fd2: {b} --> {d} + // when b is un-projected, the fd1 should be {a} --> {b,c's closure} which is {a} --> {b,c,d} + // 3: track all columns that have equivalent alternates that are part of the projection. + // fd1: {a} --> {c} + // fd2: {a,b} == {a,b} + // if only a is un-projected, the fd1 can actually be kept as {b} --> {c}. + var constCols, detCols, equivCols FastIntSet + for i := 0; i < len(s.fdEdges); i++ { + fd := s.fdEdges[i] + + if fd.isConstant() { + constCols = fd.to + } + + if !fd.to.SubsetOf(cols) { + // equivalence FD has been the closure as {superset} == {superset}. + if !fd.equiv && fd.strict { + // extended the `to` as it's complete closure, in case of missing some transitive FDs. + fd.to = s.closureOfStrict(fd.to.Union(fd.from)) + fd.to.DifferenceWith(fd.from) + } + } + + // {a,b} --> {c}, when b is un-projected, this FD should be handled latter, recording `b` here. + if !fd.equiv && !fd.from.SubsetOf(cols) { + detCols.UnionWith(fd.from.Difference(cols)) + } + + // equivalence {superset} == {superset} + if fd.equiv && fd.from.Intersects(cols) { + equivCols.UnionWith(fd.from) + } + } + // ****************************************** END LOOP 1 ******************************************** + + // find deleted columns with equivalence. + detCols.IntersectionWith(equivCols) + equivMap := s.makeEquivMap(detCols, cols) + + // it's actually maintained already. + if !constCols.IsEmpty() { + s.AddConstants(constCols) + } + + // **************************************** START LOOP 2 ******************************************** + // leverage the information collected in the loop1 above and try to do some FD substitution. + var ( + cnt int + newFDs []*fdEdge + ) + for i := range s.fdEdges { + fd := s.fdEdges[i] + + // step1: clear the `to` side + // subtract out un-projected columns from dependants. + // subtract out strict constant columns from dependants. + if !fd.to.SubsetOf(cols) { + // since loop 1 has computed the complete transitive closure for strict FD, now as: + // 1: equivalence FD: {superset} == {superset} + // 2: strict FD: {xxx} --> {complete closure} + // 3: lax FD: {xxx} ~~> {yyy} + if fd.equiv { + // As formula FD4A above, delete from un-projected column from `to` side directly. + fd.to = fd.to.Intersection(cols) + // Since from are the same, delete it too here. + fd.from = fd.from.Intersection(cols) + } else if fd.strict { + // As formula FD4A above, delete from un-projected column from `to` side directly. + fd.to = fd.to.Intersection(cols) + } else { + // As formula FD4B above, only if the deleted columns are definite, then we can keep it. + deletedCols := fd.to.Difference(cols) + if deletedCols.SubsetOf(constCols) { + fd.to = fd.to.Intersection(cols) + } else if deletedCols.SubsetOf(s.NotNullCols) { + fd.to = fd.to.Intersection(cols) + } else { + continue + } + } + + if !fd.isConstant() { + // clear the constant columns in the dependency of FD. + if fd.removeColumnsToSide(constCols) { + continue + } + } + if fd.removeColumnsToSide(fd.from) { + // fd.to side is empty, remove this FD. + continue + } + } + + // step2: clear the `from` side + // substitute the equivalence columns for removed determinant columns. + if !fd.from.SubsetOf(cols) { + // equivalence and constant FD couldn't be here. + deletedCols := fd.from.Difference(cols) + substitutedCols := NewFastIntSet() + foundAll := true + for c, ok := deletedCols.Next(0); ok; c, ok = deletedCols.Next(c + 1) { + // For every un-projected column, try to found their substituted column in projection list. + var id int + if id, foundAll = equivMap[c]; !foundAll { + break + } + substitutedCols.Insert(id) + } + if foundAll { + // deleted columns can be remapped using equivalencies. + from := fd.from.Union(substitutedCols) + from.DifferenceWith(deletedCols) + newFDs = append(newFDs, &fdEdge{ + from: from, + to: fd.to, + strict: fd.strict, + equiv: fd.equiv, + }) + } + continue + } + + if cnt != i { + s.fdEdges[cnt] = s.fdEdges[i] + } + cnt++ + } + s.fdEdges = s.fdEdges[:cnt] + // ****************************************** END LOOP 2 ******************************************** + + for i := range newFDs { + fd := newFDs[i] + if fd.equiv { + s.addEquivalence(fd.from) + } else if fd.isConstant() { + s.AddConstants(fd.to) + } else if fd.strict { + s.AddStrictFunctionalDependency(fd.from, fd.to) + } else { + s.AddLaxFunctionalDependency(fd.from, fd.to) + } + } +} + +// makeEquivMap try to find the equivalence column of every deleted column in the project list. +func (s *FDSet) makeEquivMap(detCols, projectedCols FastIntSet) map[int]int { + var equivMap map[int]int + for i, ok := detCols.Next(0); ok; i, ok = detCols.Next(i + 1) { + var oneCol FastIntSet + oneCol.Insert(i) + closure := s.closureOfEquivalence(oneCol) + closure.IntersectionWith(projectedCols) + // the column to be deleted has an equivalence column exactly in the project list. + if !closure.IsEmpty() { + if equivMap == nil { + equivMap = make(map[int]int) + } + id, _ := closure.Next(0) // We can record more equiv columns. + equivMap[i] = id + } + } + return equivMap +} + +// String returns format string of this FDSet. +func (s *FDSet) String() string { + var builder strings.Builder + + for i := range s.fdEdges { + if i != 0 { + builder.WriteString(", ") + } + builder.WriteString(s.fdEdges[i].String()) + } + return builder.String() +} + +// String returns format string of this FD. +func (e *fdEdge) String() string { + var b strings.Builder + if e.equiv { + if !e.strict { + logutil.BgLogger().Warn("Error occurred when building the functional dependency. We don't support lax equivalent columns") + return "Wrong functional dependency" + } + _, _ = fmt.Fprintf(&b, "%s==%s", e.from, e.to) + } else { + if e.strict { + _, _ = fmt.Fprintf(&b, "%s-->%s", e.from, e.to) + } else { + _, _ = fmt.Fprintf(&b, "%s~~>%s", e.from, e.to) + } + } + return b.String() +} + +// RegisterUniqueID is used to record the map relationship between expr and allocated uniqueID. +func (s *FDSet) RegisterUniqueID(hashCode string, uniqueID int) { + if len(hashCode) == 0 { + // shouldn't be here. + logutil.BgLogger().Warn("Error occurred when building the functional dependency") + return + } + if _, ok := s.HashCodeToUniqueID[hashCode]; ok { + // shouldn't be here. + logutil.BgLogger().Warn("Error occurred when building the functional dependency") + return + } + s.HashCodeToUniqueID[hashCode] = uniqueID +} + +// IsHashCodeRegistered checks whether the given hashcode has been registered in the current set. +func (s *FDSet) IsHashCodeRegistered(hashCode string) (int, bool) { + if uniqueID, ok := s.HashCodeToUniqueID[hashCode]; ok { + return uniqueID, true + } + return -1, false +} diff --git a/planner/funcdep/fd_graph_test.go b/planner/funcdep/fd_graph_test.go new file mode 100644 index 0000000000000..dbe49fb2d7103 --- /dev/null +++ b/planner/funcdep/fd_graph_test.go @@ -0,0 +1,333 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 funcdep + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestAddStrictFunctionalDependency(t *testing.T) { + fd := FDSet{ + fdEdges: []*fdEdge{}, + } + fe1 := &fdEdge{ + from: NewFastIntSet(1, 2), // AB -> CDEFG + to: NewFastIntSet(3, 4, 5, 6, 7), + strict: true, + equiv: false, + } + fe2 := &fdEdge{ + from: NewFastIntSet(1, 2), // AB -> CD + to: NewFastIntSet(3, 4), + strict: true, + equiv: false, + } + fe3 := &fdEdge{ + from: NewFastIntSet(1, 2), // AB -> EF + to: NewFastIntSet(5, 6), + strict: true, + equiv: false, + } + // fd: AB -> CDEFG implies all of others. + assertF := func() { + require.Equal(t, len(fd.fdEdges), 1) + from := fd.fdEdges[0].from.SortedArray() + require.Equal(t, len(from), 2) + require.Equal(t, from[0], 1) + require.Equal(t, from[1], 2) + to := fd.fdEdges[0].to.SortedArray() + require.Equal(t, len(to), 5) + require.Equal(t, to[0], 3) + require.Equal(t, to[1], 4) + require.Equal(t, to[2], 5) + require.Equal(t, to[3], 6) + require.Equal(t, to[4], 7) + } + fd.AddStrictFunctionalDependency(fe1.from, fe1.to) + fd.AddStrictFunctionalDependency(fe2.from, fe2.to) + fd.AddStrictFunctionalDependency(fe3.from, fe3.to) + assertF() + + fd.fdEdges = fd.fdEdges[:0] + fd.AddStrictFunctionalDependency(fe2.from, fe2.to) + fd.AddStrictFunctionalDependency(fe1.from, fe1.to) + fd.AddStrictFunctionalDependency(fe3.from, fe3.to) + assertF() + + // TODO: + // test reduce col + // test more edges +} + +// Preface Notice: +// For test convenience, we add fdEdge to fdSet directly which is not valid in the procedure. +// Because two difference fdEdge in the fdSet may imply each other which is strictly not permitted in the procedure. +// Use `AddStrictFunctionalDependency` to add the fdEdge to the fdSet in the formal way . +func TestFDSet_ClosureOf(t *testing.T) { + fd := FDSet{ + fdEdges: []*fdEdge{}, + } + fe1 := &fdEdge{ + from: NewFastIntSet(1, 2), // AB -> CD + to: NewFastIntSet(3, 4), + strict: true, + equiv: false, + } + fe2 := &fdEdge{ + from: NewFastIntSet(1, 2), // AB -> EF + to: NewFastIntSet(5, 6), + strict: true, + equiv: false, + } + fe3 := &fdEdge{ + from: NewFastIntSet(2), // B -> FG + to: NewFastIntSet(6, 7), + strict: true, + equiv: false, + } + fe4 := &fdEdge{ + from: NewFastIntSet(1), // A -> DEH + to: NewFastIntSet(4, 5, 8), + strict: true, + equiv: false, + } + fd.fdEdges = append(fd.fdEdges, fe1, fe2, fe3, fe4) + // A -> ADEH + closure := fd.closureOfStrict(NewFastIntSet(1)).SortedArray() + require.Equal(t, len(closure), 4) + require.Equal(t, closure[0], 1) + require.Equal(t, closure[1], 4) + require.Equal(t, closure[2], 5) + require.Equal(t, closure[3], 8) + // AB -> ABCDEFGH + fd.fdEdges = append(fd.fdEdges, fe1, fe2, fe3, fe4) + closure = fd.closureOfStrict(NewFastIntSet(1, 2)).SortedArray() + require.Equal(t, len(closure), 8) + require.Equal(t, closure[0], 1) + require.Equal(t, closure[1], 2) + require.Equal(t, closure[2], 3) + require.Equal(t, closure[3], 4) + require.Equal(t, closure[4], 5) + require.Equal(t, closure[5], 6) + require.Equal(t, closure[6], 7) + require.Equal(t, closure[7], 8) +} + +func TestFDSet_ReduceCols(t *testing.T) { + fd := FDSet{ + fdEdges: []*fdEdge{}, + } + fe1 := &fdEdge{ + from: NewFastIntSet(1), // A -> CD + to: NewFastIntSet(3, 4), + strict: true, + equiv: false, + } + fe2 := &fdEdge{ + from: NewFastIntSet(3), // C -> DE + to: NewFastIntSet(4, 5), + strict: true, + equiv: false, + } + fe3 := &fdEdge{ + from: NewFastIntSet(3, 5), // CE -> B + to: NewFastIntSet(2), + strict: true, + equiv: false, + } + fd.fdEdges = append(fd.fdEdges, fe1, fe2, fe3) + res := fd.ReduceCols(NewFastIntSet(1, 2)).SortedArray() + require.Equal(t, len(res), 1) + require.Equal(t, res[0], 1) +} + +func TestFDSet_InClosure(t *testing.T) { + fd := FDSet{ + fdEdges: []*fdEdge{}, + } + fe1 := &fdEdge{ + from: NewFastIntSet(1, 2), // AB -> CD + to: NewFastIntSet(3, 4), + strict: true, + equiv: false, + } + fe2 := &fdEdge{ + from: NewFastIntSet(1, 2), // AB -> EF + to: NewFastIntSet(5, 6), + strict: true, + equiv: false, + } + fe3 := &fdEdge{ + from: NewFastIntSet(2), // B -> FG + to: NewFastIntSet(6, 7), + strict: true, + equiv: false, + } + fd.fdEdges = append(fd.fdEdges, fe1, fe2, fe3) + // A -> F : false (determinants should not be torn apart) + require.False(t, fd.InClosure(NewFastIntSet(1), NewFastIntSet(6))) + // B -> G : true (dependency can be torn apart) + require.True(t, fd.InClosure(NewFastIntSet(2), NewFastIntSet(7))) + // AB -> E : true (dependency can be torn apart) + require.True(t, fd.InClosure(NewFastIntSet(1, 2), NewFastIntSet(5))) + // AB -> FG: true (in closure node set) + require.True(t, fd.InClosure(NewFastIntSet(1, 2), NewFastIntSet(6, 7))) + // AB -> DF: true (in closure node set) + require.True(t, fd.InClosure(NewFastIntSet(1, 2), NewFastIntSet(4, 6))) + // AB -> EG: true (in closure node set) + require.True(t, fd.InClosure(NewFastIntSet(1, 2), NewFastIntSet(5, 7))) + // AB -> EGH: false (H is not in closure node set) + require.False(t, fd.InClosure(NewFastIntSet(1, 2), NewFastIntSet(5, 7, 8))) + + fe4 := &fdEdge{ + from: NewFastIntSet(2), // B -> CH + to: NewFastIntSet(3, 8), + strict: true, + equiv: false, + } + fd.fdEdges = append(fd.fdEdges, fe4) + // AB -> EGH: true (in closure node set) + require.True(t, fd.InClosure(NewFastIntSet(1, 2), NewFastIntSet(5, 7, 8))) +} + +func TestFDSet_AddConstant(t *testing.T) { + fd := FDSet{} + require.Equal(t, "()", fd.ConstantCols().String()) + + fd.AddConstants(NewFastIntSet(1, 2)) // {} --> {a,b} + require.Equal(t, len(fd.fdEdges), 1) + require.True(t, fd.fdEdges[0].strict) + require.False(t, fd.fdEdges[0].equiv) + require.Equal(t, "()", fd.fdEdges[0].from.String()) + require.Equal(t, "(1,2)", fd.fdEdges[0].to.String()) + require.Equal(t, "(1,2)", fd.ConstantCols().String()) + + fd.AddConstants(NewFastIntSet(3)) // c, {} --> {a,b,c} + require.Equal(t, len(fd.fdEdges), 1) + require.True(t, fd.fdEdges[0].strict) + require.False(t, fd.fdEdges[0].equiv) + require.Equal(t, "()", fd.fdEdges[0].from.String()) + require.Equal(t, "(1-3)", fd.fdEdges[0].to.String()) + require.Equal(t, "(1-3)", fd.ConstantCols().String()) + + fd.AddStrictFunctionalDependency(NewFastIntSet(3, 4), NewFastIntSet(5, 6)) // {c,d} --> {e,f} + require.Equal(t, len(fd.fdEdges), 2) + require.True(t, fd.fdEdges[0].strict) + require.False(t, fd.fdEdges[0].equiv) + require.Equal(t, "()", fd.fdEdges[0].from.String()) + require.Equal(t, "(1-3)", fd.fdEdges[0].to.String()) + require.Equal(t, "(1-3)", fd.ConstantCols().String()) + require.True(t, fd.fdEdges[1].strict) + require.False(t, fd.fdEdges[1].equiv) + require.Equal(t, "(4)", fd.fdEdges[1].from.String()) // determinant 3 reduced as constant, leaving FD {d} --> {f,g}. + require.Equal(t, "(5,6)", fd.fdEdges[1].to.String()) + + fd.AddLaxFunctionalDependency(NewFastIntSet(7), NewFastIntSet(5, 6)) // {g} ~~> {e,f} + require.Equal(t, len(fd.fdEdges), 3) + require.False(t, fd.fdEdges[2].strict) + require.False(t, fd.fdEdges[2].equiv) + require.Equal(t, "(7)", fd.fdEdges[2].from.String()) + require.Equal(t, "(5,6)", fd.fdEdges[2].to.String()) + + fd.AddConstants(NewFastIntSet(4)) // add d, {} --> {a,b,c,d}, and FD {d} --> {f,g} is transferred to constant closure. + require.Equal(t, 1, len(fd.fdEdges)) // => {} --> {a,b,c,d,e,f}, for lax FD {g} ~~> {e,f}, dependencies are constants, removed. + require.True(t, fd.fdEdges[0].strict) + require.False(t, fd.fdEdges[0].equiv) + require.Equal(t, "()", fd.fdEdges[0].from.String()) + require.Equal(t, "(1-6)", fd.fdEdges[0].to.String()) + require.Equal(t, "(1-6)", fd.ConstantCols().String()) +} + +func TestFDSet_LaxImplies(t *testing.T) { + fd := FDSet{} + fd.AddLaxFunctionalDependency(NewFastIntSet(1), NewFastIntSet(2, 3)) + fd.AddLaxFunctionalDependency(NewFastIntSet(1), NewFastIntSet(2)) + // lax FD won't imply each other once they have the different to side. + require.Equal(t, "(1)~~>(2,3), (1)~~>(2)", fd.String()) + + fd = FDSet{} + fd.AddLaxFunctionalDependency(NewFastIntSet(1), NewFastIntSet(2)) + fd.AddLaxFunctionalDependency(NewFastIntSet(1), NewFastIntSet(2, 3)) + require.Equal(t, "(1)~~>(2), (1)~~>(2,3)", fd.String()) + + fd = FDSet{} + fd.AddLaxFunctionalDependency(NewFastIntSet(1), NewFastIntSet(3)) + fd.AddLaxFunctionalDependency(NewFastIntSet(1, 2), NewFastIntSet(3)) + // lax FD can imply each other once they have the same to side. {1,2} ~~> {3} implies {1} ~~> {3} + require.Equal(t, "(1)~~>(3)", fd.String()) + + fd = FDSet{} + fd.AddLaxFunctionalDependency(NewFastIntSet(1), NewFastIntSet(3, 4)) + fd.AddLaxFunctionalDependency(NewFastIntSet(1, 2), NewFastIntSet(3)) + // lax FD won't imply each other once they have the different to side. {1,2} ~~> {3} implies {1} ~~> {3} + require.Equal(t, "(1)~~>(3,4), (1,2)~~>(3)", fd.String()) +} + +func TestFDSet_AddEquivalence(t *testing.T) { + fd := FDSet{} + require.Equal(t, 0, len(fd.EquivalenceCols())) + + fd.AddEquivalence(NewFastIntSet(1), NewFastIntSet(2)) // {a} == {b} + require.Equal(t, 1, len(fd.fdEdges)) // res: {a} == {b} + require.Equal(t, 1, len(fd.EquivalenceCols())) + require.True(t, fd.fdEdges[0].strict) + require.True(t, fd.fdEdges[0].equiv) + require.Equal(t, "(1,2)", fd.fdEdges[0].from.String()) + require.Equal(t, "(1,2)", fd.fdEdges[0].to.String()) + require.Equal(t, "(1,2)", fd.EquivalenceCols()[0].String()) + + fd.AddEquivalence(NewFastIntSet(3), NewFastIntSet(4)) // {c} == {d} + require.Equal(t, 2, len(fd.fdEdges)) // res: {a,b} == {a,b}, {c,d} == {c,d} + require.Equal(t, 2, len(fd.EquivalenceCols())) + require.True(t, fd.fdEdges[0].strict) + require.True(t, fd.fdEdges[0].equiv) + require.Equal(t, "(1,2)", fd.fdEdges[0].from.String()) + require.Equal(t, "(1,2)", fd.fdEdges[0].to.String()) + require.Equal(t, "(1,2)", fd.EquivalenceCols()[0].String()) + require.True(t, fd.fdEdges[1].strict) + require.True(t, fd.fdEdges[1].equiv) + require.Equal(t, "(3,4)", fd.fdEdges[1].from.String()) + require.Equal(t, "(3,4)", fd.fdEdges[1].to.String()) + require.Equal(t, "(3,4)", fd.EquivalenceCols()[1].String()) + + fd.AddConstants(NewFastIntSet(4, 5)) // {} --> {d,e} + require.Equal(t, 3, len(fd.fdEdges)) // res: {a,b} == {a,b}, {c,d} == {c,d},{} --> {c,d,e} + require.True(t, fd.fdEdges[2].strict) // explain: constant closure is extended by equivalence {c,d} == {c,d} + require.False(t, fd.fdEdges[2].equiv) + require.Equal(t, "()", fd.fdEdges[2].from.String()) + require.Equal(t, "(3-5)", fd.fdEdges[2].to.String()) + require.Equal(t, "(3-5)", fd.ConstantCols().String()) + + fd.AddStrictFunctionalDependency(NewFastIntSet(2, 3), NewFastIntSet(5, 6)) // {b,c} --> {e,f} + require.Equal(t, 4, len(fd.fdEdges)) // res: {a,b} == {a,b}, {c,d} == {c,d},{} --> {c,d,e}, {b} --> {e,f} + require.True(t, fd.fdEdges[3].strict) // explain: strict FD's from side c is eliminated by constant closure. + require.False(t, fd.fdEdges[3].equiv) + require.Equal(t, "(2)", fd.fdEdges[3].from.String()) + require.Equal(t, "(5,6)", fd.fdEdges[3].to.String()) + + fd.AddEquivalence(NewFastIntSet(2), NewFastIntSet(3)) // {b} == {d} + // res: {a,b,c,d} == {a,b,c,d}, {} --> {a,b,c,d,e,f} + // explain: + // b = d build the connection between {a,b} == {a,b}, {c,d} == {c,d}, make the superset of equivalence closure. + // the superset equivalence closure extend the existed constant closure in turn, resulting {} --> {a,b,c,d,e} + // the superset constant closure eliminate existed strict FD, since determinants is constant, so the dependencies must be constant as well. + // so extending the current constant closure as to {} --> {a,b,c,d,e,f} + require.Equal(t, 2, len(fd.fdEdges)) + require.Equal(t, 1, len(fd.EquivalenceCols())) + require.Equal(t, "(1-4)", fd.EquivalenceCols()[0].String()) + require.Equal(t, "(1-6)", fd.ConstantCols().String()) +} diff --git a/planner/funcdep/main_test.go b/planner/funcdep/main_test.go new file mode 100644 index 0000000000000..0a3b3828fda20 --- /dev/null +++ b/planner/funcdep/main_test.go @@ -0,0 +1,32 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 funcdep + +import ( + "testing" + + "github.com/pingcap/tidb/util/testbridge" + "go.uber.org/goleak" +) + +func TestMain(m *testing.M) { + testbridge.SetupForCommonTest() + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) +} diff --git a/planner/implementation/main_test.go b/planner/implementation/main_test.go index 2e4cb46332f0f..167a9c51880ac 100644 --- a/planner/implementation/main_test.go +++ b/planner/implementation/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/planner/memo/main_test.go b/planner/memo/main_test.go index 6072aab036844..404c80d45df11 100644 --- a/planner/memo/main_test.go +++ b/planner/memo/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/planner/optimize.go b/planner/optimize.go index 83824af121199..fcf58000a2976 100644 --- a/planner/optimize.go +++ b/planner/optimize.go @@ -46,6 +46,7 @@ import ( "github.com/pingcap/tidb/util/hint" "github.com/pingcap/tidb/util/logutil" utilparser "github.com/pingcap/tidb/util/parser" + "github.com/pingcap/tidb/util/topsql" "go.uber.org/zap" ) @@ -176,7 +177,7 @@ func Optimize(ctx context.Context, sctx sessionctx.Context, node ast.Node, is in originHints := hint.CollectHint(stmtNode) // bindRecord must be not nil when coming here, try to find the best binding. for _, binding := range bindRecord.Bindings { - if binding.Status != bindinfo.Using { + if !binding.IsBindingEnabled() { continue } metrics.BindUsageCounter.WithLabelValues(scope).Inc() @@ -321,9 +322,15 @@ func optimize(ctx context.Context, sctx sessionctx.Context, node ast.Node, is in failpoint.Return(nil, nil, 0, errors.New("gofail wrong optimizerCnt error")) } }) + failpoint.Inject("mockHighLoadForOptimize", func() { + sqlPrefixes := []string{"select"} + topsql.MockHighCPULoad(sctx.GetSessionVars().StmtCtx.OriginalSQL, sqlPrefixes, 10) + }) + // build logical plan sctx.GetSessionVars().PlanID = 0 sctx.GetSessionVars().PlanColumnID = 0 + sctx.GetSessionVars().MapHashCode2UniqueID4ExtendedCol = nil hintProcessor := &hint.BlockHintProcessor{Ctx: sctx} node.Accept(hintProcessor) @@ -450,7 +457,7 @@ func getBindRecord(ctx sessionctx.Context, stmt ast.StmtNode) (*bindinfo.BindRec sessionHandle := ctx.Value(bindinfo.SessionBindInfoKeyType).(*bindinfo.SessionHandle) bindRecord := sessionHandle.GetBindRecord(hash, normalizedSQL, "") if bindRecord != nil { - if bindRecord.HasUsingBinding() { + if bindRecord.HasEnabledBinding() { return bindRecord, metrics.ScopeSession, nil } return nil, "", nil @@ -596,6 +603,7 @@ func handleStmtHints(hints []*ast.TableOptimizerHint) (stmtHints stmtctx.StmtHin setVarsOffs = append(setVarsOffs, i) } } + stmtHints.OriginalTableHints = hints stmtHints.SetVars = setVars // Handle MEMORY_QUOTA @@ -675,7 +683,7 @@ func handleStmtHints(hints []*ast.TableOptimizerHint) (stmtHints stmtctx.StmtHin stmtHints.ForceNthPlan = forceNthPlan.HintData.(int64) if stmtHints.ForceNthPlan < 1 { stmtHints.ForceNthPlan = -1 - warn := errors.Errorf("the hintdata for NTH_PLAN() is too small, hint ignored.") + warn := errors.Errorf("the hintdata for NTH_PLAN() is too small, hint ignored") warns = append(warns, warn) } } else { diff --git a/planner/property/physical_property.go b/planner/property/physical_property.go index 1b15a965eb245..04c91fe664bbd 100644 --- a/planner/property/physical_property.go +++ b/planner/property/physical_property.go @@ -224,7 +224,7 @@ func (p *PhysicalProperty) AllColsFromSchema(schema *expression.Schema) bool { // IsFlashProp return true if this physical property is only allowed to generate flash related task func (p *PhysicalProperty) IsFlashProp() bool { - return p.TaskTp == CopTiFlashLocalReadTaskType || p.TaskTp == CopTiFlashGlobalReadTaskType || p.TaskTp == MppTaskType + return p.TaskTp == MppTaskType } // GetAllPossibleChildTaskTypes enumrates the possible types of tasks for children. diff --git a/planner/property/task_type.go b/planner/property/task_type.go index 1bc825795ed5f..a4c16d4a51d2e 100644 --- a/planner/property/task_type.go +++ b/planner/property/task_type.go @@ -29,17 +29,6 @@ const ( // coprocessor layer. CopDoubleReadTaskType - // CopTiFlashLocalReadTaskType stands for flash coprocessor that read data locally, - // and only a part of the data is read in one cop task, if the current task type is - // CopTiFlashLocalReadTaskType, all its children prop's task type is CopTiFlashLocalReadTaskType - CopTiFlashLocalReadTaskType - - // CopTiFlashGlobalReadTaskType stands for flash coprocessor that read data globally - // and all the data of given table will be read in one cop task, if the current task - // type is CopTiFlashGlobalReadTaskType, all its children prop's task type is - // CopTiFlashGlobalReadTaskType - CopTiFlashGlobalReadTaskType - // MppTaskType stands for task that would run on Mpp nodes, currently meaning the tiflash node. MppTaskType ) @@ -53,10 +42,6 @@ func (t TaskType) String() string { return "copSingleReadTask" case CopDoubleReadTaskType: return "copDoubleReadTask" - case CopTiFlashLocalReadTaskType: - return "copTiFlashLocalReadTask" - case CopTiFlashGlobalReadTaskType: - return "copTiFlashGlobalReadTask" case MppTaskType: return "mppTask" } diff --git a/planner/util/main_test.go b/planner/util/main_test.go index 0a5c3ac1a47da..d78129a7fa1b3 100644 --- a/planner/util/main_test.go +++ b/planner/util/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/planner/util/path.go b/planner/util/path.go index a25d8a0696034..0c0783926ff28 100644 --- a/planner/util/path.go +++ b/planner/util/path.go @@ -54,9 +54,6 @@ type AccessPath struct { IsDNFCond bool - // IsTiFlashGlobalRead indicates whether this path is a remote read path for tiflash - IsTiFlashGlobalRead bool - // IsIntHandlePath indicates whether this path is table path. IsIntHandlePath bool IsCommonHandlePath bool diff --git a/planner/util/path_test.go b/planner/util/path_test.go index 9268ad81f6a23..d3603845aa737 100644 --- a/planner/util/path_test.go +++ b/planner/util/path_test.go @@ -71,9 +71,9 @@ func TestCompareCol2Len(t *testing.T) { }, } for _, tt := range tests { - res, comparable := util.CompareCol2Len(tt.c1, tt.c2) + res, comparable1 := util.CompareCol2Len(tt.c1, tt.c2) require.Equal(t, tt.res, res) - require.Equal(t, tt.comparable, comparable) + require.Equal(t, tt.comparable, comparable1) } } diff --git a/plugin/conn_ip_example/main_test.go b/plugin/conn_ip_example/main_test.go index 24c8bc9dcec4e..fb7995913f593 100644 --- a/plugin/conn_ip_example/main_test.go +++ b/plugin/conn_ip_example/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/plugin/main_test.go b/plugin/main_test.go index c06337b40927c..b6091ff667b40 100644 --- a/plugin/main_test.go +++ b/plugin/main_test.go @@ -25,6 +25,7 @@ func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), goleak.IgnoreTopFunction("time.Sleep"), diff --git a/privilege/privileges/cache.go b/privilege/privileges/cache.go index 990a6deabef67..4e6d4633d0832 100644 --- a/privilege/privileges/cache.go +++ b/privilege/privileges/cache.go @@ -54,7 +54,7 @@ const globalDBVisible = mysql.CreatePriv | mysql.SelectPriv | mysql.InsertPriv | const ( sqlLoadRoleGraph = "SELECT HIGH_PRIORITY FROM_USER, FROM_HOST, TO_USER, TO_HOST FROM mysql.role_edges" sqlLoadGlobalPrivTable = "SELECT HIGH_PRIORITY Host,User,Priv FROM mysql.global_priv" - sqlLoadDBTable = "SELECT HIGH_PRIORITY Host,DB,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Grant_priv,Index_priv,References_priv,Lock_tables_priv,Create_tmp_table_priv,Event_priv,Create_routine_priv,Alter_routine_priv,Alter_priv,Execute_priv,Create_view_priv,Show_view_priv FROM mysql.db ORDER BY host, db, user" + sqlLoadDBTable = "SELECT HIGH_PRIORITY Host,DB,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Grant_priv,Index_priv,References_priv,Lock_tables_priv,Create_tmp_table_priv,Event_priv,Create_routine_priv,Alter_routine_priv,Alter_priv,Execute_priv,Create_view_priv,Show_view_priv,Trigger_priv FROM mysql.db ORDER BY host, db, user" sqlLoadTablePrivTable = "SELECT HIGH_PRIORITY Host,DB,User,Table_name,Grantor,Timestamp,Table_priv,Column_priv FROM mysql.tables_priv" sqlLoadColumnsPrivTable = "SELECT HIGH_PRIORITY Host,DB,User,Table_name,Column_name,Timestamp,Column_priv FROM mysql.columns_priv" sqlLoadDefaultRoles = "SELECT HIGH_PRIORITY HOST, USER, DEFAULT_ROLE_HOST, DEFAULT_ROLE_USER FROM mysql.default_roles" diff --git a/privilege/privileges/main_test.go b/privilege/privileges/main_test.go index 6e31a437983aa..d530daf09bd56 100644 --- a/privilege/privileges/main_test.go +++ b/privilege/privileges/main_test.go @@ -24,8 +24,11 @@ import ( func TestMain(m *testing.M) { opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("net/http.(*persistConn).writeLoop"), + goleak.IgnoreTopFunction("internal/poll.runtime_pollWait"), } testbridge.SetupForCommonTest() diff --git a/privilege/privileges/privileges_test.go b/privilege/privileges/privileges_test.go index 54c6f22e38d1a..a59c4c79f3c0e 100644 --- a/privilege/privileges/privileges_test.go +++ b/privilege/privileges/privileges_test.go @@ -38,11 +38,12 @@ import ( "github.com/pingcap/tidb/privilege/privileges" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/testutil" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/sem" "github.com/pingcap/tidb/util/sqlexec" - "github.com/pingcap/tidb/util/testutil" "github.com/stretchr/testify/require" ) @@ -1929,42 +1930,48 @@ func TestRenameUser(t *testing.T) { rootTk.MustExec("CREATE USER 'ru1'@'localhost'") rootTk.MustExec("CREATE USER ru3") rootTk.MustExec("CREATE USER ru6@localhost") - tk1 := testkit.NewTestKit(t, store) - require.True(t, tk1.Session().Auth(&auth.UserIdentity{Username: "ru1", Hostname: "localhost"}, nil, nil)) + tk := testkit.NewTestKit(t, store) + require.True(t, tk.Session().Auth(&auth.UserIdentity{Username: "ru1", Hostname: "localhost"}, nil, nil)) // Check privileges (need CREATE USER) - err := tk1.ExecToErr("RENAME USER ru3 TO ru4") + err := tk.ExecToErr("RENAME USER ru3 TO ru4") require.Error(t, err) require.Regexp(t, "Access denied; you need .at least one of. the CREATE USER privilege.s. for this operation$", err.Error()) rootTk.MustExec("GRANT UPDATE ON mysql.user TO 'ru1'@'localhost'") - err = tk1.ExecToErr("RENAME USER ru3 TO ru4") + err = tk.ExecToErr("RENAME USER ru3 TO ru4") require.Error(t, err) require.Regexp(t, "Access denied; you need .at least one of. the CREATE USER privilege.s. for this operation$", err.Error()) rootTk.MustExec("GRANT CREATE USER ON *.* TO 'ru1'@'localhost'") - tk1.MustExec("RENAME USER ru3 TO ru4") + tk.MustExec("RENAME USER ru3 TO ru4") // Test a few single rename (both Username and Hostname) - tk1.MustExec("RENAME USER 'ru4'@'%' TO 'ru3'@'localhost'") - tk1.MustExec("RENAME USER 'ru3'@'localhost' TO 'ru3'@'%'") + tk.MustExec("RENAME USER 'ru4'@'%' TO 'ru3'@'localhost'") + tk.MustExec("RENAME USER 'ru3'@'localhost' TO 'ru3'@'%'") // Including negative tests, i.e. non-existing from user and existing to user err = rootTk.ExecToErr("RENAME USER ru3 TO ru1@localhost") require.Error(t, err) require.Contains(t, err.Error(), "Operation RENAME USER failed for ru3@%") - err = tk1.ExecToErr("RENAME USER ru4 TO ru5@localhost") + err = tk.ExecToErr("RENAME USER ru4 TO ru5@localhost") require.Error(t, err) require.Contains(t, err.Error(), "Operation RENAME USER failed for ru4@%") - err = tk1.ExecToErr("RENAME USER ru3 TO ru3") + err = tk.ExecToErr("RENAME USER ru3 TO ru3") require.Error(t, err) require.Contains(t, err.Error(), "Operation RENAME USER failed for ru3@%") - err = tk1.ExecToErr("RENAME USER ru3 TO ru5@localhost, ru4 TO ru7") + err = tk.ExecToErr("RENAME USER ru3 TO ru5@localhost, ru4 TO ru7") require.Error(t, err) require.Contains(t, err.Error(), "Operation RENAME USER failed for ru4@%") - err = tk1.ExecToErr("RENAME USER ru3 TO ru5@localhost, ru6@localhost TO ru1@localhost") + err = tk.ExecToErr("RENAME USER ru3 TO ru5@localhost, ru6@localhost TO ru1@localhost") require.Error(t, err) require.Contains(t, err.Error(), "Operation RENAME USER failed for ru6@localhost") // Test multi rename, this is a full swap of ru3 and ru6, i.e. need to read its previous state in the same transaction. - tk1.MustExec("RENAME USER 'ru3' TO 'ru3_tmp', ru6@localhost TO ru3, 'ru3_tmp' to ru6@localhost") + tk.MustExec("RENAME USER 'ru3' TO 'ru3_tmp', ru6@localhost TO ru3, 'ru3_tmp' to ru6@localhost") + + // Test rename to a too long name + err = tk.ExecToErr("RENAME USER 'ru6@localhost' TO '1234567890abcdefGHIKL1234567890abcdefGHIKL@localhost'") + require.Truef(t, terror.ErrorEqual(err, executor.ErrWrongStringLength), "ERROR 1470 (HY000): String '1234567890abcdefGHIKL1234567890abcdefGHIKL' is too long for user name (should be no longer than 32)") + err = tk.ExecToErr("RENAME USER 'ru6@localhost' TO 'some_user_name@host_1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890X'") + require.Truef(t, terror.ErrorEqual(err, executor.ErrWrongStringLength), "ERROR 1470 (HY000): String 'host_1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij12345' is too long for host name (should be no longer than 255)") // Cleanup rootTk.MustExec("DROP USER ru6@localhost") @@ -2027,6 +2034,12 @@ func TestSecurityEnhancedModeSysVars(t *testing.T) { tk.MustQuery(`SELECT @@session.tidb_force_priority`).Check(testkit.Rows("NO_PRIORITY")) tk.MustQuery(`SELECT @@global.tidb_enable_telemetry`).Check(testkit.Rows("1")) + + tk.MustQuery(`SELECT @@hostname`).Check(testkit.Rows(variable.DefHostname)) + sem.Disable() + if hostname, err := os.Hostname(); err == nil { + tk.MustQuery(`SELECT @@hostname`).Check(testkit.Rows(hostname)) + } } // TestViewDefiner tests that default roles are correctly applied in the algorithm definer @@ -2875,6 +2888,22 @@ func TestSkipGrantTable(t *testing.T) { tk.MustExec(`GRANT RESTRICTED_USER_ADMIN ON *.* TO 'test2'@'%';`) } +// https://github.com/pingcap/tidb/issues/32891 +func TestIncorrectUsageDBGrant(t *testing.T) { + store, clean := createStoreAndPrepareDB(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec(`CREATE USER ucorrect1, ucorrect2;`) + tk.MustExec(`CREATE TABLE test.trigger_table (a int)`) + tk.MustExec(`GRANT CREATE TEMPORARY TABLES,DELETE,EXECUTE,INSERT,SELECT,SHOW VIEW,TRIGGER,UPDATE ON test.* TO ucorrect1;`) + tk.MustExec(`GRANT TRIGGER ON test.trigger_table TO ucorrect2;`) + tk.MustExec(`DROP TABLE test.trigger_table`) + + err := tk.ExecToErr(`GRANT CREATE TEMPORARY TABLES,DELETE,EXECUTE,INSERT,SELECT,SHOW VIEW,TRIGGER,UPDATE ON test.* TO uincorrect;`) + require.EqualError(t, err, "[executor:1410]You are not allowed to create a user with GRANT") +} + func TestIssue29823(t *testing.T) { store, clean := createStoreAndPrepareDB(t) defer clean() diff --git a/server/conn.go b/server/conn.go index 2b38edf7a1128..ee6fd0225125d 100644 --- a/server/conn.go +++ b/server/conn.go @@ -1065,12 +1065,16 @@ func (cc *clientConn) Run(ctx context.Context) { if err != nil { if terror.ErrorNotEqual(err, io.EOF) { if netErr, isNetErr := errors.Cause(err).(net.Error); isNetErr && netErr.Timeout() { - idleTime := time.Since(start) - logutil.Logger(ctx).Info("read packet timeout, close this connection", - zap.Duration("idle", idleTime), - zap.Uint64("waitTimeout", waitTimeout), - zap.Error(err), - ) + if atomic.LoadInt32(&cc.status) == connStatusWaitShutdown { + logutil.Logger(ctx).Info("read packet timeout because of killed connection") + } else { + idleTime := time.Since(start) + logutil.Logger(ctx).Info("read packet timeout, close this connection", + zap.Duration("idle", idleTime), + zap.Uint64("waitTimeout", waitTimeout), + zap.Error(err), + ) + } } else { errStack := errors.ErrorStack(err) if !strings.Contains(errStack, "use of closed network connection") { @@ -1845,6 +1849,17 @@ func (cc *clientConn) handleQuery(ctx context.Context, sql string) (err error) { } retryable, err = cc.handleStmt(ctx, stmt, parserWarns, i == len(stmts)-1) if err != nil { + if retryable && cc.ctx.GetSessionVars().IsRcCheckTsRetryable(err) { + cc.ctx.GetSessionVars().RetryInfo.Retrying = true + logutil.Logger(ctx).Info("RC read with ts checking has failed, retry RC read", + zap.String("sql", cc.ctx.GetSessionVars().StmtCtx.OriginalSQL)) + _, err = cc.handleStmt(ctx, stmt, parserWarns, i == len(stmts)-1) + cc.ctx.GetSessionVars().RetryInfo.Retrying = false + if err != nil { + break + } + continue + } if !retryable || !errors.ErrorEqual(err, storeerr.ErrTiFlashServerTimeout) { break } diff --git a/server/conn_stmt.go b/server/conn_stmt.go index bae93a54ef768..5d76adefbc6b4 100644 --- a/server/conn_stmt.go +++ b/server/conn_stmt.go @@ -55,9 +55,11 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/hack" + "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/topsql" topsqlstate "github.com/pingcap/tidb/util/topsql/state" "github.com/tikv/client-go/v2/util" + "go.uber.org/zap" ) func (cc *clientConn) handleStmtPrepare(ctx context.Context, sql string) error { @@ -205,6 +207,14 @@ func (cc *clientConn) handleStmtExecute(ctx context.Context, data []byte) (err e ctx = context.WithValue(ctx, execdetails.StmtExecDetailKey, &execdetails.StmtExecDetails{}) ctx = context.WithValue(ctx, util.ExecDetailsKey, &util.ExecDetails{}) retryable, err := cc.executePreparedStmtAndWriteResult(ctx, stmt, args, useCursor) + if retryable && err != nil && cc.ctx.GetSessionVars().IsRcCheckTsRetryable(err) { + logutil.Logger(ctx).Info("RC read using start_ts has failed, retry RC read", + zap.String("sql", cc.ctx.GetSessionVars().StmtCtx.OriginalSQL)) + cc.ctx.GetSessionVars().RetryInfo.Retrying = true + _, err = cc.executePreparedStmtAndWriteResult(ctx, stmt, args, useCursor) + cc.ctx.GetSessionVars().RetryInfo.Retrying = false + return err + } _, allowTiFlashFallback := cc.ctx.GetSessionVars().AllowFallbackToTiKV[kv.TiFlash] if allowTiFlashFallback && err != nil && errors.ErrorEqual(err, storeerr.ErrTiFlashServerTimeout) && retryable { // When the TiFlash server seems down, we append a warning to remind the user to check the status of the TiFlash diff --git a/server/conn_test.go b/server/conn_test.go index c7b1804a84eea..2560ebcdc0df9 100644 --- a/server/conn_test.go +++ b/server/conn_test.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/mockstore/unistore" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/util/arena" "github.com/pingcap/tidb/util/chunk" "github.com/stretchr/testify/require" @@ -744,7 +745,7 @@ func TestTiFlashFallback(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int not null primary key, b int not null)") tk.MustExec("alter table t set tiflash replica 1") - tb := tk.GetTableByName("test", "t") + tb := external.GetTableByName(t, tk, "test", "t") err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) require.NoError(t, err) diff --git a/server/driver_tidb.go b/server/driver_tidb.go index 58469e10dd43a..3092b3b4df37c 100644 --- a/server/driver_tidb.go +++ b/server/driver_tidb.go @@ -165,8 +165,13 @@ func (ts *TiDBStatement) Close() error { if !ok { return errors.Errorf("invalid CachedPrepareStmt type") } - ts.ctx.PreparedPlanCache().Delete(core.NewPlanCacheKey( - ts.ctx.GetSessionVars(), ts.id, preparedObj.PreparedAst.SchemaVersion)) + cacheKey, err := core.NewPlanCacheKey(ts.ctx.GetSessionVars(), preparedObj.StmtText, preparedObj.StmtDB, preparedObj.PreparedAst.SchemaVersion) + if err != nil { + return err + } + if !ts.ctx.GetSessionVars().IgnorePreparedCacheCloseStmt { // keep the plan in cache + ts.ctx.PreparedPlanCache().Delete(cacheKey) + } } ts.ctx.GetSessionVars().RemovePreparedStmt(ts.id) } diff --git a/server/http_handler.go b/server/http_handler.go index 23df8471533e2..9e9d6e204bc33 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -1295,7 +1295,7 @@ func (h ddlResignOwnerHandler) resignDDLOwner() error { // ServeHTTP handles request of resigning ddl owner. func (h ddlResignOwnerHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { if req.Method != http.MethodPost { - writeError(w, errors.Errorf("This api only support POST method.")) + writeError(w, errors.Errorf("This api only support POST method")) return } @@ -2110,7 +2110,7 @@ func (h *testHandler) handleGCResolveLocks(w http.ResponseWriter, req *http.Requ // ServeHTTP handles request of resigning ddl owner. func (h ddlHookHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { if req.Method != http.MethodPost { - writeError(w, errors.Errorf("This api only support POST method.")) + writeError(w, errors.Errorf("This api only support POST method")) return } diff --git a/server/http_handler_serial_test.go b/server/http_handler_serial_test.go index 4776e54af7281..befbdcbfa1109 100644 --- a/server/http_handler_serial_test.go +++ b/server/http_handler_serial_test.go @@ -32,7 +32,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/log" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/ddl" + ddlutil "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" @@ -264,15 +264,15 @@ func TestTiFlashReplica(t *testing.T) { defer func(originGC bool) { if originGC { - ddl.EmulatorGCEnable() + ddlutil.EmulatorGCEnable() } else { - ddl.EmulatorGCDisable() + ddlutil.EmulatorGCDisable() } - }(ddl.IsEmulatorGCEnable()) + }(ddlutil.IsEmulatorGCEnable()) // Disable emulator GC. // Otherwise emulator GC will delete table record as soon as possible after execute drop table DDL. - ddl.EmulatorGCDisable() + ddlutil.EmulatorGCDisable() gcTimeFormat := "20060102-15:04:05 -0700 MST" timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) safePointSQL := `INSERT HIGH_PRIORITY INTO mysql.tidb VALUES ('tikv_gc_safe_point', '%[1]s', ''),('tikv_gc_enable','true','') diff --git a/server/http_handler_test.go b/server/http_handler_test.go index 52970cc13b426..37dfdfd280562 100644 --- a/server/http_handler_test.go +++ b/server/http_handler_test.go @@ -50,6 +50,7 @@ import ( "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/deadlockhistory" @@ -847,8 +848,12 @@ func TestGetSchema(t *testing.T) { } sort.Strings(names) require.Equal(t, expects, names) + store, clean := testkit.CreateMockStore(t) + defer clean() - resp, err = ts.fetchStatus("/schema?table_id=5") + tk := testkit.NewTestKit(t, store) + userTbl := external.GetTableByName(t, tk, "mysql", "user") + resp, err = ts.fetchStatus(fmt.Sprintf("/schema?table_id=%d", userTbl.Meta().ID)) require.NoError(t, err) var ti *model.TableInfo decoder = json.NewDecoder(resp.Body) @@ -894,7 +899,7 @@ func TestGetSchema(t *testing.T) { require.NoError(t, err) require.NoError(t, resp.Body.Close()) - resp, err = ts.fetchStatus("/db-table/5") + resp, err = ts.fetchStatus(fmt.Sprintf("/db-table/%d", userTbl.Meta().ID)) require.NoError(t, err) var dbtbl *dbTableInfo decoder = json.NewDecoder(resp.Body) diff --git a/server/main_test.go b/server/main_test.go index 8d6ef39bb7c33..315ab4b859d21 100644 --- a/server/main_test.go +++ b/server/main_test.go @@ -51,6 +51,7 @@ func TestMain(m *testing.M) { } opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("time.Sleep"), goleak.IgnoreTopFunction("database/sql.(*Tx).awaitDone"), goleak.IgnoreTopFunction("internal/poll.runtime_pollWait"), diff --git a/server/optimize_trace.go b/server/optimize_trace.go index dcd0184fd87e9..9363ad6c7f2b3 100644 --- a/server/optimize_trace.go +++ b/server/optimize_trace.go @@ -30,6 +30,7 @@ type OptimizeTraceHandler struct { infoGetter *infosync.InfoSyncer address string statusPort uint + scheme string } func (s *Server) newOptimizeTraceHandler() *OptimizeTraceHandler { @@ -37,10 +38,14 @@ func (s *Server) newOptimizeTraceHandler() *OptimizeTraceHandler { oth := &OptimizeTraceHandler{ address: cfg.AdvertiseAddress, statusPort: cfg.Status.StatusPort, + scheme: "http", } if s.dom != nil && s.dom.InfoSyncer() != nil { oth.infoGetter = s.dom.InfoSyncer() } + if len(cfg.Security.ClusterSSLCA) > 0 { + oth.scheme = "https" + } return oth } @@ -55,6 +60,7 @@ func (oth OptimizeTraceHandler) ServeHTTP(w http.ResponseWriter, req *http.Reque statusPort: oth.statusPort, urlPath: fmt.Sprintf("optimize_trace/dump/%s", name), downloadedFilename: "optimize_trace", + scheme: oth.scheme, } handleDownloadFile(handler, w, req) } diff --git a/server/plan_replayer.go b/server/plan_replayer.go index 1d9a6a957f06e..b783fad87f66f 100644 --- a/server/plan_replayer.go +++ b/server/plan_replayer.go @@ -22,11 +22,9 @@ import ( "path/filepath" "github.com/gorilla/mux" - "github.com/pingcap/errors" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/domain/infosync" - "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" ) @@ -36,6 +34,7 @@ type PlanReplayerHandler struct { infoGetter *infosync.InfoSyncer address string statusPort uint + scheme string } func (s *Server) newPlanReplayerHandler() *PlanReplayerHandler { @@ -43,10 +42,14 @@ func (s *Server) newPlanReplayerHandler() *PlanReplayerHandler { prh := &PlanReplayerHandler{ address: cfg.AdvertiseAddress, statusPort: cfg.Status.StatusPort, + scheme: "http", } if s.dom != nil && s.dom.InfoSyncer() != nil { prh.infoGetter = s.dom.InfoSyncer() } + if len(cfg.Security.ClusterSSLCA) > 0 { + prh.scheme = "https" + } return prh } @@ -61,6 +64,7 @@ func (prh PlanReplayerHandler) ServeHTTP(w http.ResponseWriter, req *http.Reques statusPort: prh.statusPort, urlPath: fmt.Sprintf("plan_replyaer/dump/%s", name), downloadedFilename: "plan_replayer", + scheme: prh.scheme, } handleDownloadFile(handler, w, req) } @@ -69,6 +73,8 @@ func handleDownloadFile(handler downloadFileHandler, w http.ResponseWriter, req params := mux.Vars(req) name := params[pFileName] path := handler.filePath + isForwarded := len(req.URL.Query().Get("forward")) > 0 + localAddr := fmt.Sprintf("%s:%v", handler.address, handler.statusPort) exist, err := isExists(path) if err != nil { writeError(w, err) @@ -90,11 +96,6 @@ func handleDownloadFile(handler downloadFileHandler, w http.ResponseWriter, req writeError(w, err) return } - err = os.Remove(path) - if err != nil { - writeError(w, err) - return - } _, err = w.Write(content) if err != nil { writeError(w, err) @@ -102,15 +103,15 @@ func handleDownloadFile(handler downloadFileHandler, w http.ResponseWriter, req } w.Header().Set("Content-Type", "application/zip") w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s.zip\"", handler.downloadedFilename)) + logutil.BgLogger().Info("return dump file successfully", zap.String("filename", name), + zap.String("address", localAddr), zap.Bool("forwarded", isForwarded)) return } - if handler.infoGetter == nil { - w.WriteHeader(http.StatusNotFound) - return - } - // we didn't find file for forward request, return 404 - forwarded := req.URL.Query().Get("forward") - if len(forwarded) > 0 { + // handler.infoGetter will be nil only in unit test + // or we couldn't find file for forward request, return 404 + if handler.infoGetter == nil || isForwarded { + logutil.BgLogger().Info("failed to find dump file", zap.String("filename", name), + zap.String("address", localAddr), zap.Bool("forwarded", isForwarded)) w.WriteHeader(http.StatusNotFound) return } @@ -125,14 +126,17 @@ func handleDownloadFile(handler downloadFileHandler, w http.ResponseWriter, req if topo.IP == handler.address && topo.StatusPort == handler.statusPort { continue } - url := fmt.Sprintf("http://%s:%v/%s?forward=true", topo.IP, topo.StatusPort, handler.urlPath) + remoteAddr := fmt.Sprintf("%s/%v", topo.IP, topo.StatusPort) + url := fmt.Sprintf("%s://%s/%s?forward=true", handler.scheme, remoteAddr, handler.urlPath) resp, err := http.Get(url) // #nosec G107 if err != nil { - terror.Log(errors.Trace(err)) - logutil.BgLogger().Error("forward request failed", zap.String("addr", topo.IP), zap.Uint("port", topo.StatusPort), zap.Error(err)) + logutil.BgLogger().Error("forward request failed", + zap.String("remote-addr", remoteAddr), zap.Error(err)) continue } if resp.StatusCode != http.StatusOK { + logutil.BgLogger().Info("can't find file in remote server", zap.String("filename", name), + zap.String("remote-addr", remoteAddr), zap.Int("status-code", resp.StatusCode)) continue } content, err := ioutil.ReadAll(resp.Body) @@ -153,14 +157,19 @@ func handleDownloadFile(handler downloadFileHandler, w http.ResponseWriter, req // find dump file in one remote tidb-server, return file directly w.Header().Set("Content-Type", "application/zip") w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s.zip\"", handler.downloadedFilename)) + logutil.BgLogger().Info("return dump file successfully in remote server", + zap.String("filename", name), zap.String("remote-addr", remoteAddr)) return } // we can't find dump file in any tidb-server, return 404 directly - logutil.BgLogger().Error("can't find dump file in any remote server", zap.String("filename", name)) + logutil.BgLogger().Info("can't find dump file in any remote server", zap.String("filename", name)) w.WriteHeader(http.StatusNotFound) + _, err = w.Write([]byte(fmt.Sprintf("can't find dump file %s in any remote server", name))) + writeError(w, err) } type downloadFileHandler struct { + scheme string filePath string fileName string infoGetter *infosync.InfoSyncer diff --git a/server/server.go b/server/server.go index 7d8cc59f29c52..3da7b823d025b 100644 --- a/server/server.go +++ b/server/server.go @@ -163,10 +163,7 @@ func (s *Server) SetDomain(dom *domain.Domain) { // InitGlobalConnID initialize global connection id. func (s *Server) InitGlobalConnID(serverIDGetter func() uint64) { - s.globalConnID = util.GlobalConnID{ - ServerIDGetter: serverIDGetter, - Is64bits: true, - } + s.globalConnID = util.NewGlobalConnIDWithGetter(serverIDGetter, true) } // newConn creates a new *clientConn from a net.Conn. @@ -193,7 +190,7 @@ func NewServer(cfg *config.Config, driver IDriver) (*Server, error) { driver: driver, concurrentLimiter: NewTokenLimiter(cfg.TokenLimit), clients: make(map[uint64]*clientConn), - globalConnID: util.GlobalConnID{ServerID: 0, Is64bits: true}, + globalConnID: util.NewGlobalConnID(0, true), } s.capability = defaultCapability setTxnScope() @@ -619,13 +616,23 @@ func (s *Server) checkConnectionCount() error { // ShowProcessList implements the SessionManager interface. func (s *Server) ShowProcessList() map[uint64]*util.ProcessInfo { + rs := make(map[uint64]*util.ProcessInfo) + for connID, pi := range s.getUserProcessList() { + rs[connID] = pi + } + if s.dom != nil { + for connID, pi := range s.dom.SysProcTracker().GetSysProcessList() { + rs[connID] = pi + } + } + return rs +} + +func (s *Server) getUserProcessList() map[uint64]*util.ProcessInfo { s.rwlock.RLock() defer s.rwlock.RUnlock() - rs := make(map[uint64]*util.ProcessInfo, len(s.clients)) + rs := make(map[uint64]*util.ProcessInfo) for _, client := range s.clients { - if atomic.LoadInt32(&client.status) == connStatusWaitShutdown { - continue - } if pi := client.ctx.ShowProcess(); pi != nil { rs[pi.ID] = pi } @@ -668,7 +675,8 @@ func (s *Server) Kill(connectionID uint64, query bool) { s.rwlock.RLock() defer s.rwlock.RUnlock() conn, ok := s.clients[connectionID] - if !ok { + if !ok && s.dom != nil { + s.dom.SysProcTracker().KillSysProcess(connectionID) return } @@ -698,6 +706,11 @@ func killConn(conn *clientConn) { if cancelFunc != nil { cancelFunc() } + if conn.bufReadConn != nil { + if err := conn.bufReadConn.SetReadDeadline(time.Now()); err != nil { + logutil.BgLogger().Warn("error setting read deadline for kill.", zap.Error(err)) + } + } } // KillAllConnections kills all connections when server is not gracefully shutdown. diff --git a/server/stat_test.go b/server/stat_test.go index 88fc2e0081a43..66c974a3deeea 100644 --- a/server/stat_test.go +++ b/server/stat_test.go @@ -52,6 +52,8 @@ func TestUptime(t *testing.T) { tidbdrv := NewTiDBDriver(store) cfg := newTestConfig() cfg.Socket = "" + cfg.Port = 0 + cfg.Status.StatusPort = 0 server, err := NewServer(cfg, tidbdrv) require.NoError(t, err) diff --git a/server/tidb_test.go b/server/tidb_test.go index 77f7f8317afc5..cd718bb819601 100644 --- a/server/tidb_test.go +++ b/server/tidb_test.go @@ -17,7 +17,6 @@ package server import ( - "bytes" "context" "crypto/rand" "crypto/rsa" @@ -46,16 +45,19 @@ import ( tmysql "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" + "github.com/pingcap/tidb/store/mockstore/unistore" "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/cpuprofile" "github.com/pingcap/tidb/util/plancodec" + "github.com/pingcap/tidb/util/resourcegrouptag" "github.com/pingcap/tidb/util/topsql" "github.com/pingcap/tidb/util/topsql/collector" mockTopSQLTraceCPU "github.com/pingcap/tidb/util/topsql/collector/mock" topsqlstate "github.com/pingcap/tidb/util/topsql/state" "github.com/pingcap/tidb/util/topsql/stmtstats" "github.com/stretchr/testify/require" + "github.com/tikv/client-go/v2/tikvrpc" ) type tidbTestSuite struct { @@ -131,8 +133,7 @@ func createTidbTestTopSQLSuite(t *testing.T) (*tidbTestTopSQLSuite, func()) { topsqlstate.GlobalState.ReportIntervalSeconds.Store(2) dbt.MustExec("set @@global.tidb_top_sql_max_time_series_count=5;") - err = cpuprofile.StartCPUProfiler() - require.NoError(t, err) + require.NoError(t, cpuprofile.StartCPUProfiler()) cleanFn := func() { cleanup() cpuprofile.StopCPUProfiler() @@ -1260,20 +1261,19 @@ func TestTopSQLCPUProfile(t *testing.T) { db, err := sql.Open("mysql", ts.getDSN()) require.NoError(t, err) defer func() { - err := db.Close() - require.NoError(t, err) + require.NoError(t, db.Close()) }() - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/domain/skipLoadSysVarCacheLoop", `return(true)`)) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/util/topsql/mockHighLoadForEachSQL", `return(true)`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/domain/skipLoadSysVarCacheLoop", `return(true)`)) defer func() { - err = failpoint.Disable("github.com/pingcap/tidb/domain/skipLoadSysVarCacheLoop") - require.NoError(t, err) - err = failpoint.Disable("github.com/pingcap/tidb/util/topsql/mockHighLoadForEachSQL") - require.NoError(t, err) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/util/topsql/mockHighLoadForEachSQL")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/domain/skipLoadSysVarCacheLoop")) }() topsqlstate.EnableTopSQL() + defer topsqlstate.DisableTopSQL() + mc := mockTopSQLTraceCPU.NewTopSQLCollector() topsql.SetupTopSQLForTest(mc) sqlCPUCollector := collector.NewSQLCPUCollector(mc) @@ -1287,53 +1287,15 @@ func TestTopSQLCPUProfile(t *testing.T) { dbt.MustExec("create table t (a int auto_increment, b int, unique index idx(a));") dbt.MustExec("create table t1 (a int auto_increment, b int, unique index idx(a));") dbt.MustExec("create table t2 (a int auto_increment, b int, unique index idx(a));") - config.UpdateGlobal(func(conf *config.Config) { - conf.TopSQL.ReceiverAddress = "127.0.0.1:4001" - }) - topsqlstate.GlobalState.PrecisionSeconds.Store(1) dbt.MustExec("set @@global.tidb_txn_mode = 'pessimistic'") - // Test case 1: DML query: insert/update/replace/delete/select - cases1 := []struct { - sql string - planRegexp string - cancel func() - }{ - {sql: "insert into t () values (),(),(),(),(),(),();", planRegexp: ""}, - {sql: "insert into t (b) values (1),(1),(1),(1),(1),(1),(1),(1);", planRegexp: ""}, - {sql: "update t set b=a where b is null limit 1;", planRegexp: ".*Limit.*TableReader.*"}, - {sql: "delete from t where b = a limit 2;", planRegexp: ".*Limit.*TableReader.*"}, - {sql: "replace into t (b) values (1),(1),(1),(1),(1),(1),(1),(1);", planRegexp: ""}, - {sql: "select * from t use index(idx) where a<10;", planRegexp: ".*IndexLookUp.*"}, - {sql: "select * from t ignore index(idx) where a>1000000000;", planRegexp: ".*TableReader.*"}, - {sql: "select /*+ HASH_JOIN(t1, t2) */ * from t t1 join t t2 on t1.a=t2.a where t1.b is not null;", planRegexp: ".*HashJoin.*"}, - {sql: "select /*+ INL_HASH_JOIN(t1, t2) */ * from t t1 join t t2 on t2.a=t1.a where t1.b is not null;", planRegexp: ".*IndexHashJoin.*"}, - {sql: "select * from t where a=1;", planRegexp: ".*Point_Get.*"}, - {sql: "select * from t where a in (1,2,3,4)", planRegexp: ".*Batch_Point_Get.*"}, - } - for i, ca := range cases1 { - ctx, cancel := context.WithCancel(context.Background()) - cases1[i].cancel = cancel - sqlStr := ca.sql - go ts.loopExec(ctx, t, func(db *sql.DB) { - dbt := testkit.NewDBTestKit(t, db) - if strings.HasPrefix(sqlStr, "select") { - rows := dbt.MustQuery(sqlStr) - require.NoError(t, rows.Close()) - } else { - // Ignore error here since the error may be write conflict. - db.Exec(sqlStr) - } - }) - } - timeoutCtx, cancel := context.WithTimeout(context.Background(), time.Second*20) defer cancel() checkFn := func(sql, planRegexp string) { require.NoError(t, timeoutCtx.Err()) stats := mc.GetSQLStatsBySQLWithRetry(sql, len(planRegexp) > 0) // since 1 sql may has many plan, check `len(stats) > 0` instead of `len(stats) == 1`. - require.Greaterf(t, len(stats), 0, "sql: %v", sql) + require.Greaterf(t, len(stats), 0, "sql: "+sql) for _, s := range stats { sqlStr := mc.GetSQL(s.SQLDigest) @@ -1350,20 +1312,47 @@ func TestTopSQLCPUProfile(t *testing.T) { require.Regexpf(t, planRegexp, normalizedPlan, "sql: %v", sql) } } - // Wait the top sql collector to collect profile data. - mc.WaitCollectCnt(1) - // Check result of test case 1. - for _, ca := range cases1 { - checkFn(ca.sql, ca.planRegexp) - ca.cancel() + + // Test case 1: DML query: insert/update/replace/delete/select + cases1 := []struct { + sql string + planRegexp string + }{ + {sql: "insert into t () values (),(),(),(),(),(),();", planRegexp: ""}, + {sql: "insert into t (b) values (1),(1),(1),(1),(1),(1),(1),(1);", planRegexp: ""}, + {sql: "update t set b=a where b is null limit 1;", planRegexp: ".*Limit.*TableReader.*"}, + {sql: "delete from t where b = a limit 2;", planRegexp: ".*Limit.*TableReader.*"}, + {sql: "replace into t (b) values (1),(1),(1),(1),(1),(1),(1),(1);", planRegexp: ""}, + {sql: "select * from t use index(idx) where a<10;", planRegexp: ".*IndexLookUp.*"}, + {sql: "select * from t ignore index(idx) where a>1000000000;", planRegexp: ".*TableReader.*"}, + {sql: "select /*+ HASH_JOIN(t1, t2) */ * from t t1 join t t2 on t1.a=t2.a where t1.b is not null;", planRegexp: ".*HashJoin.*"}, + {sql: "select /*+ INL_HASH_JOIN(t1, t2) */ * from t t1 join t t2 on t2.a=t1.a where t1.b is not null;", planRegexp: ".*IndexHashJoin.*"}, + {sql: "select * from t where a=1;", planRegexp: ".*Point_Get.*"}, + {sql: "select * from t where a in (1,2,3,4)", planRegexp: ".*Batch_Point_Get.*"}, } + execFn := func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + for _, ca := range cases1 { + sqlStr := ca.sql + if strings.HasPrefix(sqlStr, "select") { + mustQuery(t, dbt, sqlStr) + } else { + dbt.MustExec(sqlStr) + } + } + } + check := func() { + for _, ca := range cases1 { + checkFn(ca.sql, ca.planRegexp) + } + } + ts.testCase(t, mc, execFn, check) // Test case 2: prepare/execute sql cases2 := []struct { prepare string args []interface{} planRegexp string - cancel func() }{ {prepare: "insert into t1 (b) values (?);", args: []interface{}{1}, planRegexp: ""}, {prepare: "replace into t1 (b) values (?);", args: []interface{}{1}, planRegexp: ""}, @@ -1377,41 +1366,35 @@ func TestTopSQLCPUProfile(t *testing.T) { {prepare: "select * from t1 where a=?;", args: []interface{}{1}, planRegexp: ".*Point_Get.*"}, {prepare: "select * from t1 where a in (?,?,?,?)", args: []interface{}{1, 2, 3, 4}, planRegexp: ".*Batch_Point_Get.*"}, } - for i, ca := range cases2 { - ctx, cancel := context.WithCancel(context.Background()) - cases2[i].cancel = cancel - prepare, args := ca.prepare, ca.args - var stmt *sql.Stmt - go ts.loopExec(ctx, t, func(db *sql.DB) { - if stmt == nil { - stmt, err = db.Prepare(prepare) - require.NoError(t, err) - } + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + for _, ca := range cases2 { + prepare, args := ca.prepare, ca.args + stmt := dbt.MustPrepare(prepare) if strings.HasPrefix(prepare, "select") { rows, err := stmt.Query(args...) require.NoError(t, err) + for rows.Next() { + } require.NoError(t, rows.Close()) } else { - // Ignore error here since the error may be write conflict. _, err = stmt.Exec(args...) require.NoError(t, err) } - }) + } } - // Wait the top sql collector to collect profile data. - mc.WaitCollectCnt(1) - // Check result of test case 2. - for _, ca := range cases2 { - checkFn(ca.prepare, ca.planRegexp) - ca.cancel() + check = func() { + for _, ca := range cases2 { + checkFn(ca.prepare, ca.planRegexp) + } } + ts.testCase(t, mc, execFn, check) // Test case 3: prepare, execute stmt using @val... cases3 := []struct { prepare string args []interface{} planRegexp string - cancel func() }{ {prepare: "insert into t2 (b) values (?);", args: []interface{}{1}, planRegexp: ""}, {prepare: "update t2 set b=a where b is null limit ?;", args: []interface{}{1}, planRegexp: ".*Limit.*TableReader.*"}, @@ -1424,60 +1407,218 @@ func TestTopSQLCPUProfile(t *testing.T) { {prepare: "select * from t2 where a=?;", args: []interface{}{1}, planRegexp: ".*Point_Get.*"}, {prepare: "select * from t2 where a in (?,?,?,?)", args: []interface{}{1, 2, 3, 4}, planRegexp: ".*Batch_Point_Get.*"}, } - for i, ca := range cases3 { - ctx, cancel := context.WithCancel(context.Background()) - cases3[i].cancel = cancel - prepare, args := ca.prepare, ca.args - doPrepare := true - go ts.loopExec(ctx, t, func(db *sql.DB) { - if doPrepare { - doPrepare = false - _, err := db.Exec(fmt.Sprintf("prepare stmt from '%v'", prepare)) - require.NoError(t, err) - } - sqlBuf := bytes.NewBuffer(nil) - sqlBuf.WriteString("execute stmt ") + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + for _, ca := range cases3 { + prepare, args := ca.prepare, ca.args + dbt.MustExec(fmt.Sprintf("prepare stmt from '%v'", prepare)) + + var params []string for i := range args { - _, err = db.Exec(fmt.Sprintf("set @%c=%v", 'a'+i, args[i])) - require.NoError(t, err) - if i == 0 { - sqlBuf.WriteString("using ") - } else { - sqlBuf.WriteByte(',') - } - sqlBuf.WriteByte('@') - sqlBuf.WriteByte('a' + byte(i)) + param := 'a' + i + dbt.MustExec(fmt.Sprintf("set @%c=%v", param, args[i])) + params = append(params, fmt.Sprintf("@%c", param)) + } + + sqlStr := "execute stmt" + if len(params) > 0 { + sqlStr += " using " + sqlStr += strings.Join(params, ",") } if strings.HasPrefix(prepare, "select") { - rows, err := db.Query(sqlBuf.String()) - require.NoErrorf(t, err, "%v", sqlBuf.String()) - require.NoError(t, rows.Close()) + mustQuery(t, dbt, sqlStr) } else { - // Ignore error here since the error may be write conflict. - _, err = db.Exec(sqlBuf.String()) - require.NoError(t, err) + dbt.MustExec(sqlStr) } - }) + } } + check = func() { + for _, ca := range cases3 { + checkFn(ca.prepare, ca.planRegexp) + } + } + ts.testCase(t, mc, execFn, check) - // Wait the top sql collector to collect profile data. - mc.WaitCollectCnt(1) - // Check result of test case 3. - for _, ca := range cases3 { - checkFn(ca.prepare, ca.planRegexp) - ca.cancel() + // Test case for other statements + cases4 := []struct { + sql string + plan string + isQuery bool + }{ + {"begin", "", false}, + {"insert into t () values (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),()", "", false}, + {"commit", "", false}, + {"analyze table t", "", false}, + {"explain analyze select sum(a+b) from t", ".*TableReader.*", true}, + {"trace select sum(b*a), sum(a+b) from t", "", true}, + {"set global tidb_stmt_summary_history_size=5;", "", false}, } + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + for _, ca := range cases4 { + if ca.isQuery { + mustQuery(t, dbt, ca.sql) + } else { + dbt.MustExec(ca.sql) + } + } + } + check = func() { + for _, ca := range cases4 { + checkFn(ca.sql, ca.plan) + } + // check for internal SQL. + checkFn("replace into mysql.global_variables (variable_name,variable_value) values ('tidb_stmt_summary_history_size', '5')", "") + } + ts.testCase(t, mc, execFn, check) - // Test case 4: transaction commit - ctx4, cancel4 := context.WithCancel(context.Background()) - defer cancel4() - go ts.loopExec(ctx4, t, func(db *sql.DB) { - db.Exec("begin") - db.Exec("insert into t () values (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),()") - db.Exec("commit") - }) - // Check result of test case 4. - checkFn("commit", "") + // Test case for multi-statement. + cases5 := []string{ + "delete from t limit 1;", + "update t set b=1 where b is null limit 1;", + "select sum(a+b*2) from t;", + } + multiStatement5 := strings.Join(cases5, "") + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("SET tidb_multi_statement_mode='ON'") + dbt.MustExec(multiStatement5) + } + check = func() { + for _, sqlStr := range cases5 { + checkFn(sqlStr, ".*TableReader.*") + } + } + ts.testCase(t, mc, execFn, check) + + // Test case for multi-statement, but first statements execute failed + cases6 := []string{ + "delete from t_not_exist;", + "update t set a=1 where a is null limit 1;", + } + multiStatement6 := strings.Join(cases6, "") + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("SET tidb_multi_statement_mode='ON'") + _, err := db.Exec(multiStatement6) + require.NotNil(t, err) + require.Equal(t, "Error 1146: Table 'topsql.t_not_exist' doesn't exist", err.Error()) + } + check = func() { + for i := 1; i < len(cases6); i++ { + sqlStr := cases6[i] + stats := mc.GetSQLStatsBySQL(sqlStr, false) + require.Equal(t, 0, len(stats), sqlStr) + } + } + ts.testCase(t, mc, execFn, check) + + // Test case for multi-statement, the first statements execute success but the second statement execute failed. + cases7 := []string{ + "update t set a=1 where a <0 limit 1;", + "delete from t_not_exist;", + } + multiStatement7 := strings.Join(cases7, "") + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("SET tidb_multi_statement_mode='ON'") + _, err = db.Exec(multiStatement7) + require.NotNil(t, err) + require.Equal(t, "Error 1146: Table 'topsql.t_not_exist' doesn't exist", err.Error()) + } + check = func() { + checkFn(cases7[0], "") // the first statement execute success, should have topsql data. + } + ts.testCase(t, mc, execFn, check) + + // Test case for statement with wrong syntax. + wrongSyntaxSQL := "select * froms t" + execFn = func(db *sql.DB) { + _, err = db.Exec(wrongSyntaxSQL) + require.NotNil(t, err) + require.Regexp(t, "Error 1064: You have an error in your SQL syntax...", err.Error()) + } + check = func() { + stats := mc.GetSQLStatsBySQL(wrongSyntaxSQL, false) + require.Equal(t, 0, len(stats), wrongSyntaxSQL) + } + ts.testCase(t, mc, execFn, check) + + // Test case for high cost of plan optimize. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/planner/mockHighLoadForOptimize", "return")) + selectSQL := "select sum(a+b), count(distinct b) from t where a+b >0" + updateSQL := "update t set a=a+100 where a > 10000000" + selectInPlanSQL := "select * from t where exists (select 1 from t1 where t1.a = 1);" + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + mustQuery(t, dbt, selectSQL) + dbt.MustExec(updateSQL) + mustQuery(t, dbt, selectInPlanSQL) + } + check = func() { + checkFn(selectSQL, "") + checkFn(updateSQL, "") + selectCPUTime := mc.GetSQLCPUTimeBySQL(selectSQL) + updateCPUTime := mc.GetSQLCPUTimeBySQL(updateSQL) + require.Less(t, updateCPUTime, selectCPUTime) + checkFn(selectInPlanSQL, "") + } + ts.testCase(t, mc, execFn, check) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/planner/mockHighLoadForOptimize")) + + // Test case for DDL execute failed but should still have CPU data. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockHighLoadForAddIndex", "return")) + dbt.MustExec(fmt.Sprintf("insert into t values (%v,%v), (%v, %v);", 2000, 1, 2001, 1)) + addIndexStr := "alter table t add unique index idx_b (b)" + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("alter table t drop index if exists idx_b") + _, err := db.Exec(addIndexStr) + require.NotNil(t, err) + require.Equal(t, "Error 1062: Duplicate entry '1' for key 'idx_b'", err.Error()) + } + check = func() { + checkFn(addIndexStr, "") + } + ts.testCase(t, mc, execFn, check) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockHighLoadForAddIndex")) + + // Test case for execute failed cause by storage error. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/store/copr/handleTaskOnceError", `return(true)`)) + execFailedQuery := "select * from t where a*b < 1000" + execFn = func(db *sql.DB) { + _, err = db.Query(execFailedQuery) + require.NotNil(t, err) + require.Equal(t, "Error 1105: mock handleTaskOnce error", err.Error()) + } + check = func() { + checkFn(execFailedQuery, "") + } + ts.testCase(t, mc, execFn, check) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/copr/handleTaskOnceError")) +} + +func (ts *tidbTestTopSQLSuite) testCase(t *testing.T, mc *mockTopSQLTraceCPU.TopSQLCollector, execFn func(db *sql.DB), checkFn func()) { + var wg sync.WaitGroup + ctx, cancel := context.WithCancel(context.Background()) + wg.Add(1) + go func() { + defer wg.Done() + ts.loopExec(ctx, t, execFn) + }() + + checkFn() + cancel() + wg.Wait() + mc.Reset() +} + +func mustQuery(t *testing.T, dbt *testkit.DBTestKit, query string) { + rows := dbt.MustQuery(query) + for rows.Next() { + } + err := rows.Close() + require.NoError(t, err) } type mockCollector struct { @@ -1492,52 +1633,18 @@ func (c *mockCollector) CollectStmtStatsMap(data stmtstats.StatementStatsMap) { c.f(data) } -func TestTopSQLStatementStats(t *testing.T) { - // Prepare stmt stats. - stmtstats.SetupAggregator() - defer stmtstats.CloseAggregator() - - // Register stmt stats collector. - var mu sync.Mutex - total := stmtstats.StatementStatsMap{} - stmtstats.RegisterCollector(newMockCollector(func(data stmtstats.StatementStatsMap) { - mu.Lock() - defer mu.Unlock() - total.Merge(data) - })) - - ts, cleanup := createTidbTestSuite(t) - defer cleanup() - - db, err := sql.Open("mysql", ts.getDSN()) - require.NoError(t, err) - defer func() { - err := db.Close() - require.NoError(t, err) - }() - - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/domain/skipLoadSysVarCacheLoop", `return(true)`)) - defer func() { - err = failpoint.Disable("github.com/pingcap/tidb/domain/skipLoadSysVarCacheLoop") - require.NoError(t, err) - }() - - dbt := testkit.NewDBTestKit(t, db) - dbt.MustExec("drop database if exists stmtstats") - dbt.MustExec("create database stmtstats") - dbt.MustExec("use stmtstats;") - dbt.MustExec("create table t (a int, b int, unique index idx(a));") - dbt.MustExec("create table t2 (a int, b int, unique index idx(a));") - dbt.MustExec("create table t3 (a int, b int, unique index idx(a));") - - // Enable TopSQL - topsqlstate.EnableTopSQL() - config.UpdateGlobal(func(conf *config.Config) { - conf.TopSQL.ReceiverAddress = "mock-agent" - }) +func waitCollected(ch chan struct{}) { + select { + case <-ch: + case <-time.After(time.Second * 3): + } +} - const ExecCountPerSQL = 3 +func TestTopSQLStatementStats(t *testing.T) { + ts, total, tagChecker, collectedNotifyCh, cleanFn := setupForTestTopSQLStatementStats(t) + defer cleanFn() + const ExecCountPerSQL = 2 // Test for CRUD. cases1 := []string{ "insert into t values (%d, sleep(0.1))", @@ -1547,28 +1654,33 @@ func TestTopSQLStatementStats(t *testing.T) { "delete from t where a = %d and sleep(0.1);", "insert into t values (%d, sleep(0.1)) on duplicate key update b = b+1", } + var wg sync.WaitGroup sqlDigests := map[stmtstats.BinaryDigest]string{} for i, ca := range cases1 { sqlStr := fmt.Sprintf(ca, i) _, digest := parser.NormalizeDigest(sqlStr) sqlDigests[stmtstats.BinaryDigest(digest.Bytes())] = sqlStr - db, err := sql.Open("mysql", ts.getDSN()) - require.NoError(t, err) - dbt := testkit.NewDBTestKit(t, db) - dbt.MustExec("use stmtstats;") - for n := 0; n < ExecCountPerSQL; n++ { - sqlStr := fmt.Sprintf(ca, n) - if strings.HasPrefix(strings.ToLower(sqlStr), "select") { - row := dbt.MustQuery(sqlStr) - err := row.Close() - require.NoError(t, err) - } else { - dbt.MustExec(sqlStr) + } + wg.Add(1) + go func() { + defer wg.Done() + for _, ca := range cases1 { + db, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("use stmtstats;") + for n := 0; n < ExecCountPerSQL; n++ { + sqlStr := fmt.Sprintf(ca, n) + if strings.HasPrefix(strings.ToLower(sqlStr), "select") { + mustQuery(t, dbt, sqlStr) + } else { + dbt.MustExec(sqlStr) + } } + err = db.Close() + require.NoError(t, err) } - err = db.Close() - require.NoError(t, err) - } + }() // Test for prepare stmt/execute stmt cases2 := []struct { @@ -1638,28 +1750,32 @@ func TestTopSQLStatementStats(t *testing.T) { for _, ca := range cases2 { _, digest := parser.NormalizeDigest(ca.execStmt) sqlDigests[stmtstats.BinaryDigest(digest.Bytes())] = ca.execStmt - db, err := sql.Open("mysql", ts.getDSN()) - require.NoError(t, err) - dbt := testkit.NewDBTestKit(t, db) - dbt.MustExec("use stmtstats;") - // prepare stmt - dbt.MustExec(ca.prepare) - for n := 0; n < ExecCountPerSQL; n++ { - setSQLs := ca.setSQLsGen(n) - for _, setSQL := range setSQLs { - dbt.MustExec(setSQL) - } - if strings.HasPrefix(strings.ToLower(ca.execStmt), "select") { - row := dbt.MustQuery(ca.execSQL) - err := row.Close() - require.NoError(t, err) - } else { - dbt.MustExec(ca.execSQL) + } + wg.Add(1) + go func() { + defer wg.Done() + for _, ca := range cases2 { + db, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("use stmtstats;") + // prepare stmt + dbt.MustExec(ca.prepare) + for n := 0; n < ExecCountPerSQL; n++ { + setSQLs := ca.setSQLsGen(n) + for _, setSQL := range setSQLs { + dbt.MustExec(setSQL) + } + if strings.HasPrefix(strings.ToLower(ca.execStmt), "select") { + mustQuery(t, dbt, ca.execSQL) + } else { + dbt.MustExec(ca.execSQL) + } } + err = db.Close() + require.NoError(t, err) } - err = db.Close() - require.NoError(t, err) - } + }() // Test for prepare by db client prepare/exec interface. cases3 := []struct { @@ -1714,31 +1830,38 @@ func TestTopSQLStatementStats(t *testing.T) { for _, ca := range cases3 { _, digest := parser.NormalizeDigest(ca.prepare) sqlDigests[stmtstats.BinaryDigest(digest.Bytes())] = ca.prepare - db, err := sql.Open("mysql", ts.getDSN()) - require.NoError(t, err) - dbt := testkit.NewDBTestKit(t, db) - dbt.MustExec("use stmtstats;") - // prepare stmt - stmt, err := db.Prepare(ca.prepare) - require.NoError(t, err) - for n := 0; n < ExecCountPerSQL; n++ { - args := ca.argsGen(n) - if strings.HasPrefix(strings.ToLower(ca.prepare), "select") { - row, err := stmt.Query(args...) - require.NoError(t, err) - err = row.Close() - require.NoError(t, err) - } else { - _, err := stmt.Exec(args...) - require.NoError(t, err) + } + wg.Add(1) + go func() { + defer wg.Done() + for _, ca := range cases3 { + db, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("use stmtstats;") + // prepare stmt + stmt, err := db.Prepare(ca.prepare) + require.NoError(t, err) + for n := 0; n < ExecCountPerSQL; n++ { + args := ca.argsGen(n) + if strings.HasPrefix(strings.ToLower(ca.prepare), "select") { + row, err := stmt.Query(args...) + require.NoError(t, err) + err = row.Close() + require.NoError(t, err) + } else { + _, err := stmt.Exec(args...) + require.NoError(t, err) + } } + err = db.Close() + require.NoError(t, err) } - err = db.Close() - require.NoError(t, err) - } + }() + wg.Wait() // Wait for collect. - time.Sleep(2 * time.Second) + waitCollected(collectedNotifyCh) found := 0 for digest, item := range total { @@ -1747,7 +1870,7 @@ func TestTopSQLStatementStats(t *testing.T) { require.Equal(t, uint64(ExecCountPerSQL), item.ExecCount, sqlStr) require.Equal(t, uint64(ExecCountPerSQL), item.DurationCount, sqlStr) require.True(t, item.SumDurationNs > uint64(time.Millisecond*100*ExecCountPerSQL), sqlStr) - require.True(t, item.SumDurationNs < uint64(time.Millisecond*150*ExecCountPerSQL), sqlStr) + require.True(t, item.SumDurationNs < uint64(time.Millisecond*300*ExecCountPerSQL), sqlStr) if strings.HasPrefix(sqlStr, "set global") { // set global statement use internal SQL to change global variable, so itself doesn't have KV request. continue @@ -1757,12 +1880,370 @@ func TestTopSQLStatementStats(t *testing.T) { kvSum += kvCount } require.Equal(t, uint64(ExecCountPerSQL), kvSum) + tagChecker.checkExist(t, digest.SQLDigest, sqlStr) } } require.Equal(t, len(sqlDigests), found) require.Equal(t, 20, found) } +type resourceTagChecker struct { + sync.Mutex + sqlDigests map[stmtstats.BinaryDigest]struct{} +} + +func (c *resourceTagChecker) checkExist(t *testing.T, digest stmtstats.BinaryDigest, sqlStr string) { + if strings.HasPrefix(sqlStr, "set global") { + // `set global` statement will use another internal sql to execute, so `set global` statement won't + // send RPC request. + return + } + if strings.HasPrefix(sqlStr, "trace") { + // `trace` statement will use another internal sql to execute, so remove the `trace` prefix before check. + _, sqlDigest := parser.NormalizeDigest(strings.TrimPrefix(sqlStr, "trace")) + digest = stmtstats.BinaryDigest(sqlDigest.Bytes()) + } + + c.Lock() + defer c.Unlock() + _, ok := c.sqlDigests[digest] + require.True(t, ok, sqlStr) +} + +func setupForTestTopSQLStatementStats(t *testing.T) (*tidbTestSuite, stmtstats.StatementStatsMap, *resourceTagChecker, chan struct{}, func()) { + // Prepare stmt stats. + stmtstats.SetupAggregator() + + // Register stmt stats collector. + var mu sync.Mutex + collectedNotifyCh := make(chan struct{}) + total := stmtstats.StatementStatsMap{} + mockCollector := newMockCollector(func(data stmtstats.StatementStatsMap) { + mu.Lock() + defer mu.Unlock() + total.Merge(data) + select { + case collectedNotifyCh <- struct{}{}: + default: + } + }) + stmtstats.RegisterCollector(mockCollector) + + ts, cleanup := createTidbTestSuite(t) + + db, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + defer func() { + err := db.Close() + require.NoError(t, err) + }() + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/domain/skipLoadSysVarCacheLoop", `return(true)`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/store/mockstore/unistore/unistoreRPCClientSendHook", `return(true)`)) + + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("drop database if exists stmtstats") + dbt.MustExec("create database stmtstats") + dbt.MustExec("use stmtstats;") + dbt.MustExec("create table t (a int, b int, unique index idx(a));") + dbt.MustExec("create table t2 (a int, b int, unique index idx(a));") + dbt.MustExec("create table t3 (a int, b int, unique index idx(a));") + + // Enable TopSQL + topsqlstate.EnableTopSQL() + config.UpdateGlobal(func(conf *config.Config) { + conf.TopSQL.ReceiverAddress = "mock-agent" + }) + + tagChecker := &resourceTagChecker{ + sqlDigests: make(map[stmtstats.BinaryDigest]struct{}), + } + unistore.UnistoreRPCClientSendHook = func(req *tikvrpc.Request) { + tag := req.GetResourceGroupTag() + if len(tag) == 0 { + return + } + sqlDigest, err := resourcegrouptag.DecodeResourceGroupTag(tag) + require.NoError(t, err) + tagChecker.Lock() + defer tagChecker.Unlock() + tagChecker.sqlDigests[stmtstats.BinaryDigest(sqlDigest)] = struct{}{} + } + + cleanFn := func() { + stmtstats.UnregisterCollector(mockCollector) + cleanup() + err = failpoint.Disable("github.com/pingcap/tidb/domain/skipLoadSysVarCacheLoop") + require.NoError(t, err) + err = failpoint.Disable("github.com/pingcap/tidb/store/mockstore/unistore/unistoreRPCClientSendHook") + require.NoError(t, err) + stmtstats.CloseAggregator() + + } + return ts, total, tagChecker, collectedNotifyCh, cleanFn +} + +func TestTopSQLStatementStats2(t *testing.T) { + ts, total, tagChecker, collectedNotifyCh, cleanFn := setupForTestTopSQLStatementStats(t) + defer cleanFn() + + const ExecCountPerSQL = 3 + sqlDigests := map[stmtstats.BinaryDigest]string{} + + // Test case for other statements + cases4 := []struct { + sql string + plan string + isQuery bool + }{ + {"insert into t () values (),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),()", "", false}, + {"analyze table t", "", false}, + {"explain analyze select sum(a+b) from t", ".*TableReader.*", true}, + {"trace select sum(b*a), sum(a+b) from t", "", true}, + {"set global tidb_stmt_summary_history_size=5;", "", false}, + {"select * from stmtstats.t where exists (select 1 from stmtstats.t2 where t2.a = 1);", ".*TableReader.*", true}, + } + executeCaseFn := func(execFn func(db *sql.DB)) { + db, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("use stmtstats;") + require.NoError(t, err) + + for n := 0; n < ExecCountPerSQL; n++ { + execFn(db) + } + err = db.Close() + require.NoError(t, err) + } + execFn := func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + for _, ca := range cases4 { + if ca.isQuery { + mustQuery(t, dbt, ca.sql) + } else { + dbt.MustExec(ca.sql) + } + } + } + for _, ca := range cases4 { + _, digest := parser.NormalizeDigest(ca.sql) + sqlDigests[stmtstats.BinaryDigest(digest.Bytes())] = ca.sql + } + executeCaseFn(execFn) + + // Test case for multi-statement. + cases5 := []string{ + "delete from t limit 1;", + "update t set b=1 where b is null limit 1;", + "select sum(a+b*2) from t;", + } + multiStatement5 := strings.Join(cases5, "") + // Test case for multi-statement, but first statements execute failed + cases6 := []string{ + "delete from t6_not_exist;", + "update t set a=1 where a is null limit 1;", + } + multiStatement6 := strings.Join(cases6, "") + // Test case for multi-statement, the first statements execute success but the second statement execute failed. + cases7 := []string{ + "update t set a=1 where a <0 limit 1;", + "delete from t7_not_exist;", + } + // Test case for DDL. + cases8 := []string{ + "create table if not exists t10 (a int, b int)", + "alter table t drop index if exists idx_b", + "alter table t add index idx_b (b)", + } + multiStatement7 := strings.Join(cases7, "") + execFn = func(db *sql.DB) { + dbt := testkit.NewDBTestKit(t, db) + dbt.MustExec("SET tidb_multi_statement_mode='ON'") + dbt.MustExec(multiStatement5) + + _, err := db.Exec(multiStatement6) + require.NotNil(t, err) + require.Equal(t, "Error 1146: Table 'stmtstats.t6_not_exist' doesn't exist", err.Error()) + + _, err = db.Exec(multiStatement7) + require.NotNil(t, err) + require.Equal(t, "Error 1146: Table 'stmtstats.t7_not_exist' doesn't exist", err.Error()) + + for _, ca := range cases8 { + dbt.MustExec(ca) + } + } + executeCaseFn(execFn) + sqlStrs := append([]string{}, cases5...) + sqlStrs = append(sqlStrs, cases7[0]) + sqlStrs = append(sqlStrs, cases8...) + for _, sqlStr := range sqlStrs { + _, digest := parser.NormalizeDigest(sqlStr) + sqlDigests[stmtstats.BinaryDigest(digest.Bytes())] = sqlStr + } + + // Wait for collect. + waitCollected(collectedNotifyCh) + + foundMap := map[stmtstats.BinaryDigest]string{} + for digest, item := range total { + if sqlStr, ok := sqlDigests[digest.SQLDigest]; ok { + require.Equal(t, uint64(ExecCountPerSQL), item.ExecCount, sqlStr) + require.True(t, item.SumDurationNs > 1, sqlStr) + foundMap[digest.SQLDigest] = sqlStr + tagChecker.checkExist(t, digest.SQLDigest, sqlStr) + } + } + require.Equal(t, len(sqlDigests), len(foundMap), fmt.Sprintf("%v !=\n %v", sqlDigests, foundMap)) +} + +func TestTopSQLStatementStats3(t *testing.T) { + ts, total, tagChecker, collectedNotifyCh, cleanFn := setupForTestTopSQLStatementStats(t) + defer cleanFn() + + err := failpoint.Enable("github.com/pingcap/tidb/executor/mockSleepInTableReaderNext", "return(2000)") + require.NoError(t, err) + defer func() { + _ = failpoint.Disable("github.com/pingcap/tidb/executor/mockSleepInTableReaderNext") + }() + + cases := []string{ + "select count(a+b) from stmtstats.t", + "select * from stmtstats.t where b is null", + "update stmtstats.t set b = 1 limit 10", + "delete from stmtstats.t limit 1", + } + var wg sync.WaitGroup + sqlDigests := map[stmtstats.BinaryDigest]string{} + for _, ca := range cases { + wg.Add(1) + go func(sqlStr string) { + defer wg.Done() + db, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + dbt := testkit.NewDBTestKit(t, db) + require.NoError(t, err) + if strings.HasPrefix(sqlStr, "select") { + mustQuery(t, dbt, sqlStr) + } else { + dbt.MustExec(sqlStr) + } + err = db.Close() + require.NoError(t, err) + }(ca) + _, digest := parser.NormalizeDigest(ca) + sqlDigests[stmtstats.BinaryDigest(digest.Bytes())] = ca + } + // Wait for collect. + waitCollected(collectedNotifyCh) + + foundMap := map[stmtstats.BinaryDigest]string{} + for digest, item := range total { + if sqlStr, ok := sqlDigests[digest.SQLDigest]; ok { + // since the SQL doesn't execute finish, the ExecCount should be recorded, + // but the DurationCount and SumDurationNs should be 0. + require.Equal(t, uint64(1), item.ExecCount, sqlStr) + require.Equal(t, uint64(0), item.DurationCount, sqlStr) + require.Equal(t, uint64(0), item.SumDurationNs, sqlStr) + foundMap[digest.SQLDigest] = sqlStr + } + } + + // wait sql execute finish. + wg.Wait() + // Wait for collect. + waitCollected(collectedNotifyCh) + + for digest, item := range total { + if sqlStr, ok := sqlDigests[digest.SQLDigest]; ok { + require.Equal(t, uint64(1), item.ExecCount, sqlStr) + require.Equal(t, uint64(1), item.DurationCount, sqlStr) + require.Less(t, uint64(0), item.SumDurationNs, sqlStr) + foundMap[digest.SQLDigest] = sqlStr + tagChecker.checkExist(t, digest.SQLDigest, sqlStr) + } + } +} + +func TestTopSQLStatementStats4(t *testing.T) { + ts, total, tagChecker, collectedNotifyCh, cleanFn := setupForTestTopSQLStatementStats(t) + defer cleanFn() + + err := failpoint.Enable("github.com/pingcap/tidb/executor/mockSleepInTableReaderNext", "return(2000)") + require.NoError(t, err) + defer func() { + _ = failpoint.Disable("github.com/pingcap/tidb/executor/mockSleepInTableReaderNext") + }() + + cases := []struct { + prepare string + sql string + args []interface{} + }{ + {prepare: "select count(a+b) from stmtstats.t", sql: "select count(a+b) from stmtstats.t"}, + {prepare: "select * from stmtstats.t where b is null", sql: "select * from stmtstats.t where b is null"}, + {prepare: "update stmtstats.t set b = ? limit ?", sql: "update stmtstats.t set b = 1 limit 10", args: []interface{}{1, 10}}, + {prepare: "delete from stmtstats.t limit ?", sql: "delete from stmtstats.t limit 1", args: []interface{}{1}}, + } + var wg sync.WaitGroup + sqlDigests := map[stmtstats.BinaryDigest]string{} + for _, ca := range cases { + wg.Add(1) + go func(prepare string, args []interface{}) { + defer wg.Done() + db, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + stmt, err := db.Prepare(prepare) + require.NoError(t, err) + if strings.HasPrefix(prepare, "select") { + rows, err := stmt.Query(args...) + require.NoError(t, err) + for rows.Next() { + } + err = rows.Close() + require.NoError(t, err) + } else { + _, err := stmt.Exec(args...) + require.NoError(t, err) + } + err = db.Close() + require.NoError(t, err) + }(ca.prepare, ca.args) + _, digest := parser.NormalizeDigest(ca.sql) + sqlDigests[stmtstats.BinaryDigest(digest.Bytes())] = ca.sql + } + // Wait for collect. + waitCollected(collectedNotifyCh) + + foundMap := map[stmtstats.BinaryDigest]string{} + for digest, item := range total { + if sqlStr, ok := sqlDigests[digest.SQLDigest]; ok { + // since the SQL doesn't execute finish, the ExecCount should be recorded, + // but the DurationCount and SumDurationNs should be 0. + require.Equal(t, uint64(1), item.ExecCount, sqlStr) + require.Equal(t, uint64(0), item.DurationCount, sqlStr) + require.Equal(t, uint64(0), item.SumDurationNs, sqlStr) + foundMap[digest.SQLDigest] = sqlStr + } + } + + // wait sql execute finish. + wg.Wait() + // Wait for collect. + waitCollected(collectedNotifyCh) + + for digest, item := range total { + if sqlStr, ok := sqlDigests[digest.SQLDigest]; ok { + require.Equal(t, uint64(1), item.ExecCount, sqlStr) + require.Equal(t, uint64(1), item.DurationCount, sqlStr) + require.Less(t, uint64(0), item.SumDurationNs, sqlStr) + foundMap[digest.SQLDigest] = sqlStr + tagChecker.checkExist(t, digest.SQLDigest, sqlStr) + } + } +} + func (ts *tidbTestTopSQLSuite) loopExec(ctx context.Context, t *testing.T, fn func(db *sql.DB)) { db, err := sql.Open("mysql", ts.getDSN()) require.NoError(t, err, "Error connecting") @@ -1883,3 +2364,64 @@ func TestLocalhostClientMapping(t *testing.T) { err = dbSocket.Ping() require.Errorf(t, err, "Connection successful without matching host for unix domain socket!") } + +func TestRcReadCheckTS(t *testing.T) { + ts, cleanup := createTidbTestSuite(t) + defer cleanup() + + db, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + defer func() { + err := db.Close() + require.NoError(t, err) + }() + + db2, err := sql.Open("mysql", ts.getDSN()) + require.NoError(t, err) + defer func() { + err := db2.Close() + require.NoError(t, err) + }() + tk2 := testkit.NewDBTestKit(t, db2) + tk2.MustExec("set @@tidb_enable_async_commit = 0") + tk2.MustExec("set @@tidb_enable_1pc = 0") + + cli := newTestServerClient() + + tk := testkit.NewDBTestKit(t, db) + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1(c1 int key, c2 int)") + tk.MustExec("insert into t1 values(1, 10), (2, 20), (3, 30)") + + tk.MustExec(`set tidb_rc_read_check_ts = 'on';`) + tk.MustExec(`set tx_isolation = 'READ-COMMITTED';`) + tk.MustExec("begin pessimistic") + // Test point get retry. + rows := tk.MustQuery("select * from t1 where c1 = 1") + cli.checkRows(t, rows, "1 10") + tk2.MustExec("update t1 set c2 = c2 + 1") + rows = tk.MustQuery("select * from t1 where c1 = 1") + cli.checkRows(t, rows, "1 11") + // Test batch point get retry. + rows = tk.MustQuery("select * from t1 where c1 in (1, 3)") + cli.checkRows(t, rows, "1 11", "3 31") + tk2.MustExec("update t1 set c2 = c2 + 1") + rows = tk.MustQuery("select * from t1 where c1 in (1, 3)") + cli.checkRows(t, rows, "1 12", "3 32") + // Test scan retry. + rows = tk.MustQuery("select * from t1") + cli.checkRows(t, rows, "1 12", "2 22", "3 32") + tk2.MustExec("update t1 set c2 = c2 + 1") + rows = tk.MustQuery("select * from t1") + cli.checkRows(t, rows, "1 13", "2 23", "3 33") + // Test reverse scan retry. + rows = tk.MustQuery("select * from t1 order by c1 desc") + cli.checkRows(t, rows, "3 33", "2 23", "1 13") + tk2.MustExec("update t1 set c2 = c2 + 1") + rows = tk.MustQuery("select * from t1 order by c1 desc") + cli.checkRows(t, rows, "3 34", "2 24", "1 14") + + // Test retry caused by ongoing prewrite lock. + // As the `defaultLockTTL` is 3s and it's difficult to change it here, the lock + // test is implemented in the uft test cases. +} diff --git a/session/bootstrap.go b/session/bootstrap.go index 214ba3174564d..5afcba11ae4a2 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -32,7 +32,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/bindinfo" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" @@ -44,6 +43,7 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" + "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/logutil" utilparser "github.com/pingcap/tidb/util/parser" "github.com/pingcap/tidb/util/sqlexec" @@ -386,6 +386,16 @@ const ( UNIQUE KEY table_version_seq (table_id, version, seq_no), KEY table_create_time (table_id, create_time, seq_no) );` + // CreateStatsMetaHistory stores the historical meta stats. + CreateStatsMetaHistory = `CREATE TABLE IF NOT EXISTS mysql.stats_meta_history ( + table_id bigint(64) NOT NULL, + modify_count bigint(64) NOT NULL, + count bigint(64) NOT NULL, + version bigint(64) NOT NULL comment 'stats version which corresponding to stats:version in EXPLAIN', + create_time datetime(6) NOT NULL, + UNIQUE KEY table_version (table_id, version), + KEY table_create_time (table_id, create_time) + );` ) // bootstrap initiates system DB for a store. @@ -569,11 +579,15 @@ const ( version82 = 82 // version83 adds the tables mysql.stats_history version83 = 83 + // version84 adds the tables mysql.stats_meta_history + version84 = 84 + // version85 updates bindings with status 'using' in mysql.bind_info table to 'enabled' status + version85 = 85 ) // currentBootstrapVersion is defined as a variable, so we can modify its value for testing. // please make sure this is the largest version -var currentBootstrapVersion int64 = version83 +var currentBootstrapVersion int64 = version85 var ( bootstrapVersion = []func(Session, int64){ @@ -660,6 +674,8 @@ var ( upgradeToVer81, upgradeToVer82, upgradeToVer83, + upgradeToVer84, + upgradeToVer85, } ) @@ -854,8 +870,8 @@ func upgradeToVer10(s Session, ver int64) { doReentrantDDL(s, "ALTER TABLE mysql.stats_buckets CHANGE COLUMN `value` `upper_bound` BLOB NOT NULL", infoschema.ErrColumnNotExists, infoschema.ErrColumnExists) doReentrantDDL(s, "ALTER TABLE mysql.stats_buckets ADD COLUMN `lower_bound` BLOB", infoschema.ErrColumnExists) doReentrantDDL(s, "ALTER TABLE mysql.stats_histograms ADD COLUMN `null_count` BIGINT(64) NOT NULL DEFAULT 0", infoschema.ErrColumnExists) - doReentrantDDL(s, "ALTER TABLE mysql.stats_histograms DROP COLUMN distinct_ratio", ddl.ErrCantDropFieldOrKey) - doReentrantDDL(s, "ALTER TABLE mysql.stats_histograms DROP COLUMN use_count_to_estimate", ddl.ErrCantDropFieldOrKey) + doReentrantDDL(s, "ALTER TABLE mysql.stats_histograms DROP COLUMN distinct_ratio", dbterror.ErrCantDropFieldOrKey) + doReentrantDDL(s, "ALTER TABLE mysql.stats_histograms DROP COLUMN use_count_to_estimate", dbterror.ErrCantDropFieldOrKey) } func upgradeToVer11(s Session, ver int64) { @@ -1025,9 +1041,9 @@ func upgradeToVer21(s Session, ver int64) { } mustExecute(s, CreateGCDeleteRangeDoneTable) - doReentrantDDL(s, "ALTER TABLE mysql.gc_delete_range DROP INDEX job_id", ddl.ErrCantDropFieldOrKey) - doReentrantDDL(s, "ALTER TABLE mysql.gc_delete_range ADD UNIQUE INDEX delete_range_index (job_id, element_id)", ddl.ErrDupKeyName) - doReentrantDDL(s, "ALTER TABLE mysql.gc_delete_range DROP INDEX element_id", ddl.ErrCantDropFieldOrKey) + doReentrantDDL(s, "ALTER TABLE mysql.gc_delete_range DROP INDEX job_id", dbterror.ErrCantDropFieldOrKey) + doReentrantDDL(s, "ALTER TABLE mysql.gc_delete_range ADD UNIQUE INDEX delete_range_index (job_id, element_id)", dbterror.ErrDupKeyName) + doReentrantDDL(s, "ALTER TABLE mysql.gc_delete_range DROP INDEX element_id", dbterror.ErrCantDropFieldOrKey) } func upgradeToVer22(s Session, ver int64) { @@ -1109,7 +1125,7 @@ func upgradeToVer29(s Session, ver int64) { } doReentrantDDL(s, "ALTER TABLE mysql.bind_info CHANGE create_time create_time TIMESTAMP(3)") doReentrantDDL(s, "ALTER TABLE mysql.bind_info CHANGE update_time update_time TIMESTAMP(3)") - doReentrantDDL(s, "ALTER TABLE mysql.bind_info ADD INDEX sql_index (original_sql(1024),default_db(1024))", ddl.ErrDupKeyName) + doReentrantDDL(s, "ALTER TABLE mysql.bind_info ADD INDEX sql_index (original_sql(1024),default_db(1024))", dbterror.ErrDupKeyName) } func upgradeToVer30(s Session, ver int64) { @@ -1496,7 +1512,7 @@ func updateBindInfo(iter *chunk.Iterator4Chunk, p *parser.Parser, bindMap map[st db := row.GetString(1) status := row.GetString(2) - if status != "using" && status != "builtin" { + if status != bindinfo.Enabled && status != bindinfo.Using && status != bindinfo.Builtin { continue } @@ -1722,6 +1738,20 @@ func upgradeToVer83(s Session, ver int64) { doReentrantDDL(s, CreateStatsHistory) } +func upgradeToVer84(s Session, ver int64) { + if ver >= version84 { + return + } + doReentrantDDL(s, CreateStatsMetaHistory) +} + +func upgradeToVer85(s Session, ver int64) { + if ver >= version85 { + return + } + mustExecute(s, fmt.Sprintf("UPDATE HIGH_PRIORITY mysql.bind_info SET status= '%s' WHERE status = '%s'", bindinfo.Enabled, bindinfo.Using)) +} + func writeOOMAction(s Session) { comment := "oom-action is `log` by default in v3.0.x, `cancel` by default in v4.0.11+" mustExecute(s, `INSERT HIGH_PRIORITY INTO %n.%n VALUES (%?, %?, %?) ON DUPLICATE KEY UPDATE VARIABLE_VALUE= %?`, @@ -1810,6 +1840,8 @@ func doDDLWorks(s Session) { mustExecute(s, CreateAnalyzeOptionsTable) // Create stats_history table. mustExecute(s, CreateStatsHistory) + // Create stats_meta_history table. + mustExecute(s, CreateStatsMetaHistory) } // doDMLWorks executes DML statements in bootstrap stage. diff --git a/session/bootstrap_test.go b/session/bootstrap_test.go index 338cb0cb9a793..581068a9f56bd 100644 --- a/session/bootstrap_test.go +++ b/session/bootstrap_test.go @@ -21,6 +21,7 @@ import ( "strings" "testing" + "github.com/pingcap/tidb/bindinfo" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/meta" @@ -582,7 +583,7 @@ func TestUpdateBindInfo(t *testing.T) { defer dom.Close() se := createSessionAndSetID(t, store) for _, bindCase := range bindCases { - sql := fmt.Sprintf("insert into mysql.bind_info values('%s', '%s', '%s', 'using', '2021-01-04 14:50:58.257', '2021-01-04 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')", + sql := fmt.Sprintf("insert into mysql.bind_info values('%s', '%s', '%s', 'enabled', '2021-01-04 14:50:58.257', '2021-01-04 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')", bindCase.originText, bindCase.bindText, bindCase.db, @@ -597,7 +598,7 @@ func TestUpdateBindInfo(t *testing.T) { require.Equal(t, bindCase.originWithDB, row.GetString(0)) require.Equal(t, bindCase.bindWithDB, row.GetString(1)) require.Equal(t, "", row.GetString(2)) - require.Equal(t, "using", row.GetString(3)) + require.Equal(t, bindinfo.Enabled, row.GetString(3)) require.NoError(t, r.Close()) sql = fmt.Sprintf("drop global binding for %s", bindCase.deleteText) mustExec(t, se, sql) @@ -619,14 +620,14 @@ func TestUpdateDuplicateBindInfo(t *testing.T) { defer func() { require.NoError(t, store.Close()) }() defer dom.Close() se := createSessionAndSetID(t, store) - mustExec(t, se, `insert into mysql.bind_info values('select * from t', 'select /*+ use_index(t, idx_a)*/ * from t', 'test', 'using', '2021-01-04 14:50:58.257', '2021-01-04 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) + mustExec(t, se, `insert into mysql.bind_info values('select * from t', 'select /*+ use_index(t, idx_a)*/ * from t', 'test', 'enabled', '2021-01-04 14:50:58.257', '2021-01-04 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) // The latest one. - mustExec(t, se, `insert into mysql.bind_info values('select * from test . t', 'select /*+ use_index(t, idx_b)*/ * from test.t', 'test', 'using', '2021-01-04 14:50:58.257', '2021-01-09 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) + mustExec(t, se, `insert into mysql.bind_info values('select * from test . t', 'select /*+ use_index(t, idx_b)*/ * from test.t', 'test', 'enabled', '2021-01-04 14:50:58.257', '2021-01-09 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) mustExec(t, se, `insert into mysql.bind_info values('select * from t where a < ?', 'select * from t use index(idx) where a < 1', 'test', 'deleted', '2021-06-04 17:04:43.333', '2021-06-04 17:04:43.335', 'utf8', 'utf8_general_ci', 'manual')`) - mustExec(t, se, `insert into mysql.bind_info values('select * from t where a < ?', 'select * from t ignore index(idx) where a < 1', 'test', 'using', '2021-06-04 17:04:43.335', '2021-06-04 17:04:43.335', 'utf8', 'utf8_general_ci', 'manual')`) + mustExec(t, se, `insert into mysql.bind_info values('select * from t where a < ?', 'select * from t ignore index(idx) where a < 1', 'test', 'enabled', '2021-06-04 17:04:43.335', '2021-06-04 17:04:43.335', 'utf8', 'utf8_general_ci', 'manual')`) mustExec(t, se, `insert into mysql.bind_info values('select * from test . t where a <= ?', 'select * from test.t use index(idx) where a <= 1', '', 'deleted', '2021-06-04 17:04:43.345', '2021-06-04 17:04:45.334', 'utf8', 'utf8_general_ci', 'manual')`) - mustExec(t, se, `insert into mysql.bind_info values('select * from test . t where a <= ?', 'select * from test.t ignore index(idx) where a <= 1', '', 'using', '2021-06-04 17:04:45.334', '2021-06-04 17:04:45.334', 'utf8', 'utf8_general_ci', 'manual')`) + mustExec(t, se, `insert into mysql.bind_info values('select * from test . t where a <= ?', 'select * from test.t ignore index(idx) where a <= 1', '', 'enabled', '2021-06-04 17:04:45.334', '2021-06-04 17:04:45.334', 'utf8', 'utf8_general_ci', 'manual')`) upgradeToVer67(se, version66) @@ -638,19 +639,19 @@ func TestUpdateDuplicateBindInfo(t *testing.T) { require.Equal(t, "select * from `test` . `t`", row.GetString(0)) require.Equal(t, "SELECT /*+ use_index(`t` `idx_b`)*/ * FROM `test`.`t`", row.GetString(1)) require.Equal(t, "", row.GetString(2)) - require.Equal(t, "using", row.GetString(3)) + require.Equal(t, bindinfo.Enabled, row.GetString(3)) require.Equal(t, "2021-01-04 14:50:58.257", row.GetTime(4).String()) row = req.GetRow(1) require.Equal(t, "select * from `test` . `t` where `a` < ?", row.GetString(0)) require.Equal(t, "SELECT * FROM `test`.`t` IGNORE INDEX (`idx`) WHERE `a` < 1", row.GetString(1)) require.Equal(t, "", row.GetString(2)) - require.Equal(t, "using", row.GetString(3)) + require.Equal(t, bindinfo.Enabled, row.GetString(3)) require.Equal(t, "2021-06-04 17:04:43.335", row.GetTime(4).String()) row = req.GetRow(2) require.Equal(t, "select * from `test` . `t` where `a` <= ?", row.GetString(0)) require.Equal(t, "SELECT * FROM `test`.`t` IGNORE INDEX (`idx`) WHERE `a` <= 1", row.GetString(1)) require.Equal(t, "", row.GetString(2)) - require.Equal(t, "using", row.GetString(3)) + require.Equal(t, bindinfo.Enabled, row.GetString(3)) require.Equal(t, "2021-06-04 17:04:45.334", row.GetTime(4).String()) require.NoError(t, r.Close()) @@ -1069,3 +1070,27 @@ func TestIndexMergeUpgradeFrom400To540(t *testing.T) { }() } } + +func TestUpgradeToVer85(t *testing.T) { + ctx := context.Background() + store, dom := createStoreAndBootstrap(t) + defer func() { require.NoError(t, store.Close()) }() + defer dom.Close() + se := createSessionAndSetID(t, store) + mustExec(t, se, `insert into mysql.bind_info values('select * from t', 'select /*+ use_index(t, idx_a)*/ * from t', 'test', 'using', '2021-01-04 14:50:58.257', '2021-01-04 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) + mustExec(t, se, `insert into mysql.bind_info values('select * from t1', 'select /*+ use_index(t1, idx_a)*/ * from t1', 'test', 'enabled', '2021-01-05 14:50:58.257', '2021-01-05 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) + mustExec(t, se, `insert into mysql.bind_info values('select * from t2', 'select /*+ use_index(t2, idx_a)*/ * from t2', 'test', 'disabled', '2021-01-06 14:50:58.257', '2021-01-06 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) + mustExec(t, se, `insert into mysql.bind_info values('select * from t3', 'select /*+ use_index(t3, idx_a)*/ * from t3', 'test', 'deleted', '2021-01-07 14:50:58.257', '2021-01-07 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) + mustExec(t, se, `insert into mysql.bind_info values('select * from t4', 'select /*+ use_index(t4, idx_a)*/ * from t4', 'test', 'invalid', '2021-01-08 14:50:58.257', '2021-01-08 14:50:58.257', 'utf8', 'utf8_general_ci', 'manual')`) + upgradeToVer85(se, version84) + + r := mustExec(t, se, `select count(*) from mysql.bind_info where status = 'enabled'`) + req := r.NewChunk(nil) + require.NoError(t, r.Next(ctx, req)) + require.Equal(t, 1, req.NumRows()) + row := req.GetRow(0) + require.Equal(t, int64(2), row.GetInt64(0)) + + require.NoError(t, r.Close()) + mustExec(t, se, "delete from mysql.bind_info where default_db = 'test'") +} diff --git a/session/bootstrap_upgrade_test.go b/session/bootstrap_upgrade_test.go index 815bfebc08b75..15981329b4e98 100644 --- a/session/bootstrap_upgrade_test.go +++ b/session/bootstrap_upgrade_test.go @@ -55,3 +55,35 @@ func TestUpgradeVersion83(t *testing.T) { require.Equal(t, statsHistoryTblFields[i].tp, strings.ToLower(row.GetString(1))) } } + +func TestUpgradeVersion84(t *testing.T) { + ctx := context.Background() + store, _, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + ver, err := session.GetBootstrapVersion(tk.Session()) + require.NoError(t, err) + require.Equal(t, session.CurrentBootstrapVersion, ver) + + statsHistoryTblFields := []struct { + field string + tp string + }{ + {"table_id", "bigint(64)"}, + {"modify_count", "bigint(64)"}, + {"count", "bigint(64)"}, + {"version", "bigint(64)"}, + {"create_time", "datetime(6)"}, + } + rStatsHistoryTbl, err := tk.Exec(`desc mysql.stats_meta_history`) + require.NoError(t, err) + req := rStatsHistoryTbl.NewChunk(nil) + require.NoError(t, rStatsHistoryTbl.Next(ctx, req)) + require.Equal(t, 5, req.NumRows()) + for i := 0; i < 5; i++ { + row := req.GetRow(i) + require.Equal(t, statsHistoryTblFields[i].field, strings.ToLower(row.GetString(0))) + require.Equal(t, statsHistoryTblFields[i].tp, strings.ToLower(row.GetString(1))) + } +} diff --git a/session/isolation_test.go b/session/isolation_test.go index ec8aa6a7fa9ae..eafeee4ca0f97 100644 --- a/session/isolation_test.go +++ b/session/isolation_test.go @@ -15,22 +15,26 @@ package session_test import ( - . "github.com/pingcap/check" + "testing" + + "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/testkit" + "github.com/stretchr/testify/require" ) -type testIsolationSuite struct { - testSessionSuiteBase -} - /* These test cases come from the paper . The sign 'P0', 'P1'.... can be found in the paper. These cases will run under snapshot isolation. */ -func (s *testIsolationSuite) TestP0DirtyWrite(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestP0DirtyWrite(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("create table x (id int primary key, c int);") @@ -42,7 +46,7 @@ func (s *testIsolationSuite) TestP0DirtyWrite(c *C) { session2.MustExec("update x set c = c+1 where id = 1;") session1.MustExec("commit;") _, err := session2.Exec("commit;") - c.Assert(err, NotNil) + require.Error(t, err) session1.MustExec("set tidb_txn_mode = 'pessimistic'") session2.MustExec("set tidb_txn_mode = 'pessimistic'") @@ -81,9 +85,15 @@ func (s *testIsolationSuite) TestP0DirtyWrite(c *C) { session2.MustQuery("select * from x").Check(testkit.Rows("1 3")) } -func (s *testIsolationSuite) TestP1DirtyRead(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestP1DirtyRead(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("create table x (id int primary key, c int);") @@ -125,9 +135,15 @@ func (s *testIsolationSuite) TestP1DirtyRead(c *C) { session2.MustExec("commit;") } -func (s *testIsolationSuite) TestP2NonRepeatableRead(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestP2NonRepeatableRead(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("drop table if exists y;") @@ -190,9 +206,15 @@ func (s *testIsolationSuite) TestP2NonRepeatableRead(c *C) { session1.MustExec("commit;") } -func (s *testIsolationSuite) TestP3Phantom(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestP3Phantom(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("drop table if exists z;") @@ -252,9 +274,15 @@ func (s *testIsolationSuite) TestP3Phantom(c *C) { session1.MustExec("commit;") } -func (s *testIsolationSuite) TestP4LostUpdate(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestP4LostUpdate(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("create table x (id int primary key, c int);") @@ -268,7 +296,7 @@ func (s *testIsolationSuite) TestP4LostUpdate(c *C) { session2.MustExec("commit;") session1.MustExec("update x set c = c+1 where id = 1;") _, err := session1.Exec("commit;") - c.Assert(err, NotNil) + require.Error(t, err) session1.MustExec("set tidb_txn_mode = 'pessimistic'") session2.MustExec("set tidb_txn_mode = 'pessimistic'") @@ -305,11 +333,17 @@ func (s *testIsolationSuite) TestP4LostUpdate(c *C) { } // cursor is not supported -func (s *testIsolationSuite) TestP4CLostUpdate(c *C) {} - -func (s *testIsolationSuite) TestA3Phantom(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestP4CLostUpdate(t *testing.T) {} + +func TestA3Phantom(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("create table x (id int primary key, c int);") @@ -354,9 +388,15 @@ func (s *testIsolationSuite) TestA3Phantom(c *C) { session2.MustExec("commit;") } -func (s *testIsolationSuite) TestA5AReadSkew(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestA5AReadSkew(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("drop table if exists y;") @@ -413,9 +453,15 @@ func (s *testIsolationSuite) TestA5AReadSkew(c *C) { session1.MustExec("commit;") } -func (s *testIsolationSuite) TestA5BWriteSkew(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestA5BWriteSkew(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("drop table if exists y;") @@ -504,9 +550,15 @@ func (s *testIsolationSuite) TestA5BWriteSkew(c *C) { These test cases come from the paper for tidb, we support read-after-write on cluster level. */ -func (s *testIsolationSuite) TestReadAfterWrite(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestReadAfterWrite(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("create table x (id int primary key, c int);") @@ -551,9 +603,15 @@ func (s *testIsolationSuite) TestReadAfterWrite(c *C) { /* This case will do harm in Innodb, even if in snapshot isolation, but harmless in tidb. */ -func (s *testIsolationSuite) TestPhantomReadInInnodb(c *C) { - session1 := testkit.NewTestKitWithInit(c, s.store) - session2 := testkit.NewTestKitWithInit(c, s.store) +func TestPhantomReadInInnodb(t *testing.T) { + store, clean := createStorage(t) + defer clean() + session1 := testkit.NewTestKit(t, store) + session2 := testkit.NewTestKit(t, store) + session1.MustExec("use test;") + session2.MustExec("use test;") + session1.MustExec("set tidb_txn_mode = 'optimistic'") + session2.MustExec("set tidb_txn_mode = 'optimistic'") session1.MustExec("drop table if exists x;") session1.MustExec("create table x (id int primary key, c int);") diff --git a/session/main_test.go b/session/main_test.go index ec0cb1ede5d81..5acc2d4bf2de0 100644 --- a/session/main_test.go +++ b/session/main_test.go @@ -55,6 +55,7 @@ func TestMain(m *testing.M) { tikv.EnableFailpoints() opts := []goleak.Option{ // TODO: figure the reason and shorten this list + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("github.com/tikv/client-go/v2/internal/retry.newBackoffFn.func1"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/v3.waitRetryBackoff"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), diff --git a/session/pessimistic_test.go b/session/pessimistic_test.go index 14636177b7153..bda96b4878031 100644 --- a/session/pessimistic_test.go +++ b/session/pessimistic_test.go @@ -44,7 +44,6 @@ import ( "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/deadlockhistory" "github.com/pingcap/tidb/util/testkit" - "github.com/pingcap/tidb/util/testutil" ) var _ = SerialSuites(&testPessimisticSuite{}) @@ -240,7 +239,7 @@ func (s *testPessimisticSuite) TestDeadlock(c *C) { expectedDeadlockInfo[0], expectedDeadlockInfo[1] = expectedDeadlockInfo[1], expectedDeadlockInfo[0] } res := tk1.MustQuery("select deadlock_id, try_lock_trx_id, trx_holding_lock, current_sql_digest, current_sql_digest_text from information_schema.deadlocks") - res.CheckAt([]int{1, 2, 3, 4}, testutil.RowsWithSep("/", expectedDeadlockInfo...)) + res.CheckAt([]int{1, 2, 3, 4}, testkit.RowsWithSep("/", expectedDeadlockInfo...)) c.Assert(res.Rows()[0][0], Equals, res.Rows()[1][0]) } @@ -258,10 +257,10 @@ func (s *testPessimisticSuite) TestSingleStatementRollback(c *C) { tableStart := tablecodec.GenTableRecordPrefix(tblID) s.cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 2) region1Key := codec.EncodeBytes(nil, tablecodec.EncodeRowKeyWithHandle(tblID, kv.IntHandle(1))) - region1, _ := s.cluster.GetRegionByKey(region1Key) + region1, _, _ := s.cluster.GetRegionByKey(region1Key) region1ID := region1.Id region2Key := codec.EncodeBytes(nil, tablecodec.EncodeRowKeyWithHandle(tblID, kv.IntHandle(3))) - region2, _ := s.cluster.GetRegionByKey(region2Key) + region2, _, _ := s.cluster.GetRegionByKey(region2Key) region2ID := region2.Id syncCh := make(chan bool) @@ -733,6 +732,10 @@ func (s *testPessimisticSuite) TestInnodbLockWaitTimeout(c *C) { tk2.MustQuery(`show variables like "innodb_lock_wait_timeout"`).Check(testkit.Rows("innodb_lock_wait_timeout 3")) tk2.MustExec("set innodb_lock_wait_timeout = 2") tk2.MustQuery(`show variables like "innodb_lock_wait_timeout"`).Check(testkit.Rows("innodb_lock_wait_timeout 2")) + // to check whether it will set to innodb_lock_wait_timeout to max value + tk2.MustExec("set innodb_lock_wait_timeout = 3602") + tk2.MustQuery(`show variables like "innodb_lock_wait_timeout"`).Check(testkit.Rows("innodb_lock_wait_timeout 3600")) + tk2.MustExec("set innodb_lock_wait_timeout = 2") tk3 := testkit.NewTestKitWithInit(c, s.store) tk3.MustQuery(`show variables like "innodb_lock_wait_timeout"`).Check(testkit.Rows("innodb_lock_wait_timeout 3")) @@ -2465,6 +2468,7 @@ func (s *testPessimisticSuite) TestIssue21498(c *C) { tk.MustQuery("select * from t s, t t1 where s.v = 23 and s.id = t1.id").Check(testkit.Rows("2 23 200 2 23 200")) tk.MustQuery("select * from t s, t t1 where s.v = 24 and s.id = t1.id").Check(testkit.Rows()) tk.MustQuery("select * from t s, t t1 where s.v = 23 and s.id = t1.id for update").Check(testkit.Rows()) + // TODO: Do the same with Partitioned Table!!! Since this query leads to two columns in SelectLocExec.tblID2Handle!!! tk.MustQuery("select * from t s, t t1 where s.v = 24 and s.id = t1.id for update").Check(testkit.Rows("2 24 200 2 24 200")) tk.MustExec("delete from t where v = 24") tk.CheckExecResult(1, 0) diff --git a/session/schema_amender.go b/session/schema_amender.go index 9275ee4ae08d7..2cfc0db358aae 100644 --- a/session/schema_amender.go +++ b/session/schema_amender.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" @@ -172,7 +171,7 @@ func colChangeAmendable(colAtStart *model.ColumnInfo, colAtCommit *model.ColumnI if colAtStart.Charset != colAtCommit.Charset || colAtStart.Collate != colAtCommit.Collate { return errors.Trace(errors.Errorf("charset or collate is not matched for column=%v", colAtCommit.Name.String())) } - _, err := ddl.CheckModifyTypeCompatible(&colAtStart.FieldType, &colAtCommit.FieldType) + _, err := types.CheckModifyTypeCompatible(&colAtStart.FieldType, &colAtCommit.FieldType) if err != nil { return errors.Trace(err) } diff --git a/session/session.go b/session/session.go index daa9b6a442d88..3c71446f9b2b9 100644 --- a/session/session.go +++ b/session/session.go @@ -61,7 +61,6 @@ import ( "github.com/pingcap/tidb/bindinfo" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/ddl/placement" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/errno" @@ -157,7 +156,6 @@ type Session interface { AuthWithoutVerification(user *auth.UserIdentity) bool AuthPluginForUser(user *auth.UserIdentity) (string, error) MatchIdentity(username, remoteHost string) (*auth.UserIdentity, error) - ShowProcess() *util.ProcessInfo // Return the information of the txn current running TxnInfo() *txninfo.TxnInfo // PrepareTxnCtx is exported for test. @@ -234,7 +232,10 @@ type session struct { cache [1]ast.StmtNode - builtinFunctionUsage telemetry.BuiltinFunctionsUsage + functionUsageMu struct { + sync.RWMutex + builtinFunctionUsage telemetry.BuiltinFunctionsUsage + } // allowed when tikv disk full happened. diskFullOpt kvrpcpb.DiskFullOpt @@ -320,23 +321,32 @@ func (s *session) cleanRetryInfo() { planCacheEnabled := plannercore.PreparedPlanCacheEnabled() var cacheKey kvcache.Key + var err error var preparedAst *ast.Prepared + var stmtText, stmtDB string if planCacheEnabled { firstStmtID := retryInfo.DroppedPreparedStmtIDs[0] if preparedPointer, ok := s.sessionVars.PreparedStmts[firstStmtID]; ok { preparedObj, ok := preparedPointer.(*plannercore.CachedPrepareStmt) if ok { preparedAst = preparedObj.PreparedAst - cacheKey = plannercore.NewPlanCacheKey(s.sessionVars, firstStmtID, preparedAst.SchemaVersion) + stmtText, stmtDB = preparedObj.StmtText, preparedObj.StmtDB + cacheKey, err = plannercore.NewPlanCacheKey(s.sessionVars, stmtText, stmtDB, preparedAst.SchemaVersion) + if err != nil { + logutil.Logger(s.currentCtx).Warn("clean cached plan failed", zap.Error(err)) + return + } } } } for i, stmtID := range retryInfo.DroppedPreparedStmtIDs { if planCacheEnabled { if i > 0 && preparedAst != nil { - plannercore.SetPstmtIDSchemaVersion(cacheKey, stmtID, preparedAst.SchemaVersion, s.sessionVars.IsolationReadEngines) + plannercore.SetPstmtIDSchemaVersion(cacheKey, stmtText, preparedAst.SchemaVersion, s.sessionVars.IsolationReadEngines) + } + if !s.sessionVars.IgnorePreparedCacheCloseStmt { // keep the plan in cache + s.PreparedPlanCache().Delete(cacheKey) } - s.PreparedPlanCache().Delete(cacheKey) } s.sessionVars.RemovePreparedStmt(stmtID) } @@ -669,7 +679,7 @@ func (c *cachedTableRenewLease) renew(ctx context.Context, handle tables.StateRe physicalTime := oracle.GetTimeFromTS(oldLease) newLease := oracle.GoTimeToTS(physicalTime.Add(cacheTableWriteLease)) - succ, err := handle.RenewLease(ctx, tid, newLease, tables.RenewWriteLease) + succ, err := handle.RenewWriteLease(ctx, tid, newLease) if err != nil { return errors.Trace(err) } @@ -1311,10 +1321,17 @@ func (s *session) GetGlobalSysVar(name string) (string, error) { } // It might have been written from an earlier TiDB version, so we should do type validation // See https://github.com/pingcap/tidb/issues/30255 for why we don't do full validation. - return sv.ValidateFromType(s.GetSessionVars(), sysVar, variable.ScopeGlobal) + // If validation fails, we should return the default value: + // See: https://github.com/pingcap/tidb/pull/31566 + sysVar, err = sv.ValidateFromType(s.GetSessionVars(), sysVar, variable.ScopeGlobal) + if err != nil { + return sv.Value, nil + } + return sysVar, nil } // SetGlobalSysVar implements GlobalVarAccessor.SetGlobalSysVar interface. +// it is called (but skipped) when setting instance scope func (s *session) SetGlobalSysVar(name, value string) (err error) { sv := variable.GetSysVar(name) if sv == nil { @@ -1326,6 +1343,9 @@ func (s *session) SetGlobalSysVar(name, value string) (err error) { if err = sv.SetGlobalFromHook(s.sessionVars, value, false); err != nil { return err } + if sv.HasInstanceScope() { // skip for INSTANCE scope + return nil + } if sv.GlobalConfigName != "" { domain.GetDomain(s).NotifyGlobalConfigChange(sv.GlobalConfigName, variable.OnOffToTrueFalse(value)) } @@ -1342,6 +1362,9 @@ func (s *session) SetGlobalSysVarOnly(name, value string) (err error) { if err = sv.SetGlobalFromHook(s.sessionVars, value, true); err != nil { return err } + if sv.HasInstanceScope() { // skip for INSTANCE scope + return nil + } return s.replaceGlobalVariablesTableValue(context.TODO(), sv.Name, value) } @@ -1755,6 +1778,14 @@ func (s *session) withRestrictedSQLExecutor(ctx context.Context, opts []sqlexec. return nil, nil, errors.Trace(err) } defer clean() + if execOption.TrackSysProcID > 0 { + err = execOption.TrackSysProc(execOption.TrackSysProcID, se) + if err != nil { + return nil, nil, errors.Trace(err) + } + // unTrack should be called before clean (return sys session) + defer execOption.UnTrackSysProc(execOption.TrackSysProcID) + } return fn(ctx, se) } @@ -2215,23 +2246,17 @@ func (s *session) cachedPlanExec(ctx context.Context, // IsPointGetWithPKOrUniqueKeyByAutoCommit func (s *session) IsCachedExecOk(ctx context.Context, preparedStmt *plannercore.CachedPrepareStmt) (bool, error) { prepared := preparedStmt.PreparedAst - if prepared.CachedPlan == nil { + if prepared.CachedPlan == nil || preparedStmt.SnapshotTSEvaluator != nil { return false, nil } // check auto commit if !plannercore.IsAutoCommitTxn(s) { return false, nil } - // SnapshotTSEvaluator != nil, it is stale read - // stale read expect a stale infoschema - // so skip infoschema check - if preparedStmt.SnapshotTSEvaluator == nil { - // check schema version - is := s.GetInfoSchema().(infoschema.InfoSchema) - if prepared.SchemaVersion != is.SchemaMetaVersion() { - prepared.CachedPlan = nil - return false, nil - } + is := s.GetInfoSchema().(infoschema.InfoSchema) + if prepared.SchemaVersion != is.SchemaMetaVersion() { + prepared.CachedPlan = nil + return false, nil } // maybe we'd better check cached plan type here, current // only point select/update will be cached, see "getPhysicalPlan" func @@ -2703,6 +2728,30 @@ func loadCollationParameter(se *session) (bool, error) { return false, nil } +func updateMemoryConfigAndSysVar(se *session) error { + if !config.IsMemoryQuotaQuerySetByUser { + newMemoryQuotaQuery, err := loadDefMemQuotaQuery(se) + if err != nil { + return err + } + config.UpdateGlobal(func(conf *config.Config) { + conf.MemQuotaQuery = newMemoryQuotaQuery + }) + variable.SetSysVar(variable.TiDBMemQuotaQuery, strconv.FormatInt(config.GetGlobalConfig().MemQuotaQuery, 10)) + } + if !config.IsOOMActionSetByUser { + newOOMAction, err := loadDefOOMAction(se) + if err != nil { + return err + } + config.UpdateGlobal(func(conf *config.Config) { + conf.OOMAction = newOOMAction + }) + } + + return nil +} + // loadDefMemQuotaQuery loads the default value of mem-quota-query. // We'll read a tuple if the cluster is upgraded from v3.0.x to v4.0.9+. // An empty result will be returned if it's a newly deployed cluster whose @@ -2757,82 +2806,50 @@ func BootstrapSession(store kv.Storage) (*domain.Domain, error) { runInBootstrapSession(store, upgrade) } - se, err := createSession(store) + concurrency := int(config.GetGlobalConfig().Performance.StatsLoadConcurrency) + ses, err := createSessions(store, 7+concurrency) if err != nil { return nil, err } - se.GetSessionVars().InRestrictedSQL = true + ses[0].GetSessionVars().InRestrictedSQL = true // get system tz from mysql.tidb - tz, err := se.getTableValue(context.TODO(), mysql.TiDBTable, "system_tz") + tz, err := ses[0].getTableValue(context.TODO(), mysql.TiDBTable, tidbSystemTZ) if err != nil { return nil, err } timeutil.SetSystemTZ(tz) // get the flag from `mysql`.`tidb` which indicating if new collations are enabled. - newCollationEnabled, err := loadCollationParameter(se) + newCollationEnabled, err := loadCollationParameter(ses[0]) if err != nil { return nil, err } - collate.SetNewCollationEnabledForTest(newCollationEnabled) - newMemoryQuotaQuery, err := loadDefMemQuotaQuery(se) + err = updateMemoryConfigAndSysVar(ses[0]) if err != nil { return nil, err } - if !config.IsMemoryQuotaQuerySetByUser { - newCfg := *(config.GetGlobalConfig()) - newCfg.MemQuotaQuery = newMemoryQuotaQuery - config.StoreGlobalConfig(&newCfg) - variable.SetSysVar(variable.TiDBMemQuotaQuery, strconv.FormatInt(newCfg.MemQuotaQuery, 10)) - } - newOOMAction, err := loadDefOOMAction(se) - if err != nil { - return nil, err - } - if !config.IsOOMActionSetByUser { - config.UpdateGlobal(func(conf *config.Config) { - conf.OOMAction = newOOMAction - }) - } - - dom := domain.GetDomain(se) - se2, err := createSession(store) - if err != nil { - return nil, err - } - se3, err := createSession(store) - if err != nil { - return nil, err - } + dom := domain.GetDomain(ses[0]) // We should make the load bind-info loop before other loops which has internal SQL. // Because the internal SQL may access the global bind-info handler. As the result, the data race occurs here as the // LoadBindInfoLoop inits global bind-info handler. - err = dom.LoadBindInfoLoop(se2, se3) + err = dom.LoadBindInfoLoop(ses[1], ses[2]) if err != nil { return nil, err } if !config.GetGlobalConfig().Security.SkipGrantTable { - se4, err := createSession(store) - if err != nil { - return nil, err - } - err = dom.LoadPrivilegeLoop(se4) + err = dom.LoadPrivilegeLoop(ses[3]) if err != nil { return nil, err } } // Rebuild sysvar cache in a loop - se5, err := createSession(store) - if err != nil { - return nil, err - } - err = dom.LoadSysVarCacheLoop(se5) + err = dom.LoadSysVarCacheLoop(ses[4]) if err != nil { return nil, err } @@ -2843,45 +2860,30 @@ func BootstrapSession(store kv.Storage) (*domain.Domain, error) { return nil, err } } - se6, err := createSession(store) - if err != nil { - return nil, err - } - err = executor.LoadExprPushdownBlacklist(se6) + + err = executor.LoadExprPushdownBlacklist(ses[5]) if err != nil { return nil, err } - - err = executor.LoadOptRuleBlacklist(se6) + err = executor.LoadOptRuleBlacklist(ses[5]) if err != nil { return nil, err } - dom.TelemetryReportLoop(se6) - dom.TelemetryRotateSubWindowLoop(se6) + dom.TelemetryReportLoop(ses[5]) + dom.TelemetryRotateSubWindowLoop(ses[5]) - se7, err := createSession(store) - if err != nil { - return nil, err + // A sub context for update table stats, and other contexts for concurrent stats loading. + cnt := 1 + concurrency + subCtxs := make([]sessionctx.Context, cnt) + for i := 0; i < cnt; i++ { + subCtxs[i] = sessionctx.Context(ses[6+i]) } - err = dom.UpdateTableStatsLoop(se7) - if err != nil { + if err = dom.LoadAndUpdateStatsLoop(subCtxs); err != nil { return nil, err } - // start sub workers for concurrent stats loading - concurrency := config.GetGlobalConfig().Performance.StatsLoadConcurrency - subCtxs := make([]sessionctx.Context, concurrency) - for i := 0; i < int(concurrency); i++ { - subSe, err := createSession(store) - if err != nil { - return nil, err - } - subCtxs[i] = subSe - } - dom.StartLoadStatsSubWorkers(subCtxs) - - dom.PlanReplayerLoop() + dom.DumpFileGcCheckerLoop() if raw, ok := store.(kv.EtcdBackend); ok { err = raw.StartGCWorker() @@ -2919,6 +2921,19 @@ func runInBootstrapSession(store kv.Storage, bootstrap func(Session)) { domap.Delete(store) } +func createSessions(store kv.Storage, cnt int) ([]*session, error) { + ses := make([]*session, cnt) + for i := 0; i < cnt; i++ { + se, err := createSession(store) + if err != nil { + return nil, err + } + ses[i] = se + } + + return ses, nil +} + func createSession(store kv.Storage) (*session, error) { return createSessionWithOpt(store, nil) } @@ -2929,14 +2944,14 @@ func createSessionWithOpt(store kv.Storage, opt *Opt) (*session, error) { return nil, err } s := &session{ - store: store, - sessionVars: variable.NewSessionVars(), - ddlOwnerChecker: dom.DDL().OwnerManager(), - client: store.GetClient(), - mppClient: store.GetMPPClient(), - builtinFunctionUsage: make(telemetry.BuiltinFunctionsUsage), - stmtStats: stmtstats.CreateStatementStats(), - } + store: store, + sessionVars: variable.NewSessionVars(), + ddlOwnerChecker: dom.DDL().OwnerManager(), + client: store.GetClient(), + mppClient: store.GetMPPClient(), + stmtStats: stmtstats.CreateStatementStats(), + } + s.functionUsageMu.builtinFunctionUsage = make(telemetry.BuiltinFunctionsUsage) if plannercore.PreparedPlanCacheEnabled() { if opt != nil && opt.PreparedPlanCache != nil { s.preparedPlanCache = opt.PreparedPlanCache @@ -2964,13 +2979,13 @@ func createSessionWithOpt(store kv.Storage, opt *Opt) (*session, error) { // a lock context, which cause we can't call createSession directly. func CreateSessionWithDomain(store kv.Storage, dom *domain.Domain) (*session, error) { s := &session{ - store: store, - sessionVars: variable.NewSessionVars(), - client: store.GetClient(), - mppClient: store.GetMPPClient(), - builtinFunctionUsage: make(telemetry.BuiltinFunctionsUsage), - stmtStats: stmtstats.CreateStatementStats(), + store: store, + sessionVars: variable.NewSessionVars(), + client: store.GetClient(), + mppClient: store.GetMPPClient(), + stmtStats: stmtstats.CreateStatementStats(), } + s.functionUsageMu.builtinFunctionUsage = make(telemetry.BuiltinFunctionsUsage) if plannercore.PreparedPlanCacheEnabled() { s.preparedPlanCache = kvcache.NewSimpleLRUCache(plannercore.PreparedPlanCacheCapacity, plannercore.PreparedPlanCacheMemoryGuardRatio, plannercore.PreparedPlanCacheMaxMemory.Load()) @@ -3123,7 +3138,12 @@ func (s *session) PrepareTSFuture(ctx context.Context) { s.txn.changeInvalidToPending(txnFuture) } else if s.txn.Valid() && s.GetSessionVars().IsPessimisticReadConsistency() { // Prepare the statement future if the transaction is valid in RC transactions. - s.GetSessionVars().TxnCtx.SetStmtFutureForRC(s.getTxnFuture(ctx).future) + // If the `RCCheckTS` is used, try to use the last valid ts to read. + if s.GetSessionVars().StmtCtx.RCCheckTS { + s.GetSessionVars().TxnCtx.SetStmtFutureForRC(nil) + } else { + s.GetSessionVars().TxnCtx.SetStmtFutureForRC(s.getTxnFuture(ctx).future) + } } } @@ -3293,7 +3313,7 @@ func (s *session) checkPlacementPolicyBeforeCommit() error { errMsg = fmt.Sprintf("table %v's partition %v doesn't have placement policies with txn_scope %v", tableName, partitionName, txnScope) } - err = ddl.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs(errMsg) + err = dbterror.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs(errMsg) break } dcLocation, ok := bundle.GetLeaderDC(placement.DCLabelKey) @@ -3302,7 +3322,7 @@ func (s *session) checkPlacementPolicyBeforeCommit() error { if len(partitionName) > 0 { errMsg = fmt.Sprintf("table %v's partition %v's leader placement policy is not defined", tableName, partitionName) } - err = ddl.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs(errMsg) + err = dbterror.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs(errMsg) break } if dcLocation != txnScope { @@ -3311,7 +3331,7 @@ func (s *session) checkPlacementPolicyBeforeCommit() error { errMsg = fmt.Sprintf("table %v's partition %v's leader location %v is out of txn_scope %v", tableName, partitionName, dcLocation, txnScope) } - err = ddl.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs(errMsg) + err = dbterror.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs(errMsg) break } // FIXME: currently we assume the physicalTableID is the partition ID. In future, we should consider the situation @@ -3322,7 +3342,7 @@ func (s *session) checkPlacementPolicyBeforeCommit() error { tblInfo := tbl.Meta() state := tblInfo.Partition.GetStateByID(partitionID) if state == model.StateGlobalTxnOnly { - err = ddl.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs( + err = dbterror.ErrInvalidPlacementPolicyCheck.GenWithStackByArgs( fmt.Sprintf("partition %s of table %s can not be written by local transactions when its placement policy is being altered", tblInfo.Name, partitionDefInfo.Name)) break @@ -3342,34 +3362,6 @@ func (s *session) GetTxnWriteThroughputSLI() *sli.TxnWriteThroughputSLI { return &s.txn.writeSLI } -var _ telemetry.TemporaryOrCacheTableFeatureChecker = &session{} - -// TemporaryTableExists is used by the telemetry package to avoid circle dependency. -func (s *session) TemporaryTableExists() bool { - is := domain.GetDomain(s).InfoSchema() - for _, dbInfo := range is.AllSchemas() { - for _, tbInfo := range is.SchemaTables(dbInfo.Name) { - if tbInfo.Meta().TempTableType != model.TempTableNone { - return true - } - } - } - return false -} - -// CachedTableExists is used by the telemetry package to avoid circle dependency. -func (s *session) CachedTableExists() bool { - is := domain.GetDomain(s).InfoSchema() - for _, dbInfo := range is.AllSchemas() { - for _, tbInfo := range is.SchemaTables(dbInfo.Name) { - if tbInfo.Meta().TableCacheStatusType != model.TableCacheStatusDisable { - return true - } - } - } - return false -} - // GetInfoSchema returns snapshotInfoSchema if snapshot schema is set. // Transaction infoschema is returned if inside an explicit txn. // Otherwise the latest infoschema is returned. @@ -3421,8 +3413,22 @@ func (s *session) updateTelemetryMetric(es *executor.ExecStmt) { } } +// GetBuiltinFunctionUsage returns the replica of counting of builtin function usage func (s *session) GetBuiltinFunctionUsage() map[string]uint32 { - return s.builtinFunctionUsage + replica := make(map[string]uint32) + s.functionUsageMu.RLock() + defer s.functionUsageMu.RUnlock() + for key, value := range s.functionUsageMu.builtinFunctionUsage { + replica[key] = value + } + return replica +} + +// BuiltinFunctionUsageInc increase the counting of the builtin function usage +func (s *session) BuiltinFunctionUsageInc(scalarFuncSigName string) { + s.functionUsageMu.Lock() + defer s.functionUsageMu.Unlock() + s.functionUsageMu.builtinFunctionUsage.Inc(scalarFuncSigName) } func (s *session) getSnapshotInterceptor() kv.SnapshotInterceptor { diff --git a/session/session_test.go b/session/session_test.go index f2ced1e086851..ec15e79d8c020 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -65,10 +65,10 @@ import ( newTestkit "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/sqlexec" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testleak" - "github.com/pingcap/tidb/util/testutil" "github.com/pingcap/tipb/go-binlog" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/testutils" @@ -89,7 +89,6 @@ var _ = Suite(&testSessionSuite{}) var _ = Suite(&testSessionSuite2{}) var _ = Suite(&testSessionSuite3{}) var _ = Suite(&testSchemaSuite{}) -var _ = Suite(&testIsolationSuite{}) var _ = SerialSuites(&testSchemaSerialSuite{}) var _ = SerialSuites(&testSessionSerialSuite{}) var _ = SerialSuites(&testBackupRestoreSuite{}) @@ -261,7 +260,7 @@ func (s *testSessionSuiteBase) TearDownTest(c *C) { } } -func createStorage(t *testing.T) (store kv.Storage, clean func()) { +func createStorage(t *testing.T) (kv.Storage, func()) { if *withTiKV { initPdAddrs() pdAddr := <-pdAddrChan @@ -271,17 +270,15 @@ func createStorage(t *testing.T) (store kv.Storage, clean func()) { }) store, err := d.Open(fmt.Sprintf("tikv://%s?disableGC=true", pdAddr)) require.NoError(t, err) - err = clearStorage(store) - require.NoError(t, err) - err = clearETCD(store.(kv.EtcdBackend)) - require.NoError(t, err) + require.NoError(t, clearStorage(store)) + require.NoError(t, clearETCD(store.(kv.EtcdBackend))) session.ResetStoreForWithTiKVTest(store) dom, err := session.BootstrapSession(store) require.NoError(t, err) return store, func() { dom.Close() - store.Close() + require.NoError(t, store.Close()) pdAddrChan <- pdAddr } } @@ -720,15 +717,87 @@ func (s *testSessionSuite) TestGlobalVarAccessor(c *C) { _, err = tk.Exec("set global time_zone = 'timezone'") c.Assert(err, NotNil) c.Assert(terror.ErrorEqual(err, variable.ErrUnknownTimeZone), IsTrue) +} + +func (s *testSessionSuite) TestUpgradeSysvars(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + se := tk.Se.(variable.GlobalVarAccessor) // Set the global var to a non canonical form of the value // i.e. implying that it was set from an earlier version of TiDB. tk.MustExec(`REPLACE INTO mysql.global_variables (variable_name, variable_value) VALUES ('tidb_enable_noop_functions', '0')`) domain.GetDomain(tk.Se).NotifyUpdateSysVarCache() // update cache - v, err = se.GetGlobalSysVar("tidb_enable_noop_functions") + v, err := se.GetGlobalSysVar("tidb_enable_noop_functions") c.Assert(err, IsNil) c.Assert(v, Equals, "OFF") + + // Set the global var to "" which is the invalid version of this from TiDB 4.0.16 + // the err is quashed by the GetGlobalSysVar, and the default value is restored. + // This helps callers of GetGlobalSysVar(), which can't individually be expected + // to handle upgrade/downgrade issues correctly. + + tk.MustExec(`REPLACE INTO mysql.global_variables (variable_name, variable_value) VALUES ('rpl_semi_sync_slave_enabled', '')`) + domain.GetDomain(tk.Se).NotifyUpdateSysVarCache() // update cache + v, err = se.GetGlobalSysVar("rpl_semi_sync_slave_enabled") + c.Assert(err, IsNil) + c.Assert(v, Equals, "OFF") // the default value is restored. + result := tk.MustQuery("SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled'") + result.Check(testkit.Rows("rpl_semi_sync_slave_enabled OFF")) + + // Ensure variable out of range is converted to in range after upgrade. + // This further helps for https://github.com/pingcap/tidb/pull/28842 + + tk.MustExec(`REPLACE INTO mysql.global_variables (variable_name, variable_value) VALUES ('tidb_executor_concurrency', '999')`) + domain.GetDomain(tk.Se).NotifyUpdateSysVarCache() // update cache + v, err = se.GetGlobalSysVar("tidb_executor_concurrency") + c.Assert(err, IsNil) + c.Assert(v, Equals, "256") // the max value is restored. + + // Handle the case of a completely bogus value from an earlier version of TiDB. + // This could be the case if an ENUM sysvar removes a value. + + tk.MustExec(`REPLACE INTO mysql.global_variables (variable_name, variable_value) VALUES ('tidb_enable_noop_functions', 'SOMEVAL')`) + domain.GetDomain(tk.Se).NotifyUpdateSysVarCache() // update cache + v, err = se.GetGlobalSysVar("tidb_enable_noop_functions") + c.Assert(err, IsNil) + c.Assert(v, Equals, "OFF") // the default value is restored. +} + +func (s *testSessionSuite) TestSetInstanceSysvarBySetGlobalSysVar(c *C) { + varName := "tidb_general_log" + defaultValue := "OFF" // This is the default value for tidb_general_log + + tk := testkit.NewTestKitWithInit(c, s.store) + se := tk.Se.(variable.GlobalVarAccessor) + + // Get globalSysVar twice and get the same default value + v, err := se.GetGlobalSysVar(varName) + c.Assert(err, IsNil) + c.Assert(v, Equals, defaultValue) + v, err = se.GetGlobalSysVar(varName) + c.Assert(err, IsNil) + c.Assert(v, Equals, defaultValue) + + // session.GetGlobalSysVar would not get the value which session.SetGlobalSysVar writes, + // because SetGlobalSysVar calls SetGlobalFromHook, which uses TiDBGeneralLog's SetGlobal, + // but GetGlobalSysVar could not access TiDBGeneralLog's GetGlobal. + + // set to "1" + err = se.SetGlobalSysVar(varName, "ON") + c.Assert(err, IsNil) + v, err = se.GetGlobalSysVar(varName) + tk.MustQuery("select @@global.tidb_general_log").Check(testkit.Rows("1")) + c.Assert(err, IsNil) + c.Assert(v, Equals, defaultValue) + + // set back to "0" + err = se.SetGlobalSysVar(varName, defaultValue) + c.Assert(err, IsNil) + v, err = se.GetGlobalSysVar(varName) + tk.MustQuery("select @@global.tidb_general_log").Check(testkit.Rows("0")) + c.Assert(err, IsNil) + c.Assert(v, Equals, defaultValue) } func (s *testSessionSuite) TestMatchIdentity(c *C) { @@ -2312,6 +2381,36 @@ func (s *testSchemaSerialSuite) TestSchemaCheckerSQL(c *C) { tk.MustQuery(`select * from t for update`) _, err = tk.Exec(`commit;`) c.Assert(err, NotNil) + + // Repeated tests for partitioned table + tk.MustExec(`create table pt (id int, c int) partition by hash (id) partitions 3`) + tk.MustExec(`insert into pt values(1, 1);`) + // The schema version is out of date in the first transaction, and the SQL can't be retried. + tk.MustExec(`begin;`) + tk1.MustExec(`alter table pt modify column c bigint;`) + tk.MustExec(`insert into pt values(3, 3);`) + _, err = tk.Exec(`commit;`) + c.Assert(terror.ErrorEqual(err, domain.ErrInfoSchemaChanged), IsTrue, Commentf("err %v", err)) + + // But the transaction related table IDs aren't in the updated table IDs. + tk.MustExec(`begin;`) + tk1.MustExec(`alter table pt add index idx2(c);`) + tk.MustExec(`insert into t1 values(4, 4);`) + tk.MustExec(`commit;`) + + // Test for "select for update". + tk.MustExec(`begin;`) + tk1.MustExec(`alter table pt add index idx3(c);`) + tk.MustQuery(`select * from pt for update`) + _, err = tk.Exec(`commit;`) + c.Assert(err, NotNil) + + // Test for "select for update". + tk.MustExec(`begin;`) + tk1.MustExec(`alter table pt add index idx4(c);`) + tk.MustQuery(`select * from pt partition (p1) for update`) + _, err = tk.Exec(`commit;`) + c.Assert(err, NotNil) } func (s *testSchemaSerialSuite) TestSchemaCheckerTempTable(c *C) { @@ -2976,7 +3075,7 @@ func (s *testSessionSuite2) TestHostLengthMax(c *C) { tk.MustExec(fmt.Sprintf(`CREATE USER 'abcddfjakldfjaldddds'@'%s'`, host1)) err := tk.ExecToErr(fmt.Sprintf(`CREATE USER 'abcddfjakldfjaldddds'@'%s'`, host2)) - c.Assert(err.Error(), Equals, "[types:1406]Data too long for column 'Host' at row 1") + c.Assert(err.Error(), Equals, "[ddl:1470]String 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' is too long for host name (should be no longer than 255)") } func (s *testSessionSerialSuite) TestKVVars(c *C) { @@ -3204,7 +3303,7 @@ func (s *testSessionSuite2) TestSetGroupConcatMaxLen(c *C) { // Test value out of range tk.MustExec("set @@group_concat_max_len=1") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect group_concat_max_len value: '1'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect group_concat_max_len value: '1'")) result = tk.MustQuery("select @@group_concat_max_len;") result.Check(testkit.Rows("4")) @@ -3888,6 +3987,18 @@ func (s *testSessionSuite2) TestSetEnableRateLimitAction(c *C) { // assert default value result := tk.MustQuery("select @@tidb_enable_rate_limit_action;") result.Check(testkit.Rows("1")) + tk.MustExec("use test") + tk.MustExec("create table tmp123(id int)") + tk.MustQuery("select * from tmp123;") + haveRateLimitAction := false + action := tk.Se.GetSessionVars().StmtCtx.MemTracker.GetFallbackForTest() + for ; action != nil; action = action.GetFallback() { + if action.GetPriority() == memory.DefRateLimitPriority { + haveRateLimitAction = true + break + } + } + c.Assert(haveRateLimitAction, IsTrue) // assert set sys variable tk.MustExec("set global tidb_enable_rate_limit_action= '0';") @@ -3898,6 +4009,16 @@ func (s *testSessionSuite2) TestSetEnableRateLimitAction(c *C) { tk.Se = se result = tk.MustQuery("select @@tidb_enable_rate_limit_action;") result.Check(testkit.Rows("0")) + + haveRateLimitAction = false + action = tk.Se.GetSessionVars().StmtCtx.MemTracker.GetFallbackForTest() + for ; action != nil; action = action.GetFallback() { + if action.GetPriority() == memory.DefRateLimitPriority { + haveRateLimitAction = true + break + } + } + c.Assert(haveRateLimitAction, IsFalse) } func (s *testSessionSuite3) TestSetVarHint(c *C) { @@ -5871,16 +5992,16 @@ func (s *testSessionSuite) TestSetPDClientDynmaicOption(c *C) { err = tk.ExecToErr("set tidb_tso_client_batch_max_wait_time = 0;") c.Assert(err, NotNil) tk.MustExec("set global tidb_tso_client_batch_max_wait_time = -1;") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect tidb_tso_client_batch_max_wait_time value: '-1'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect tidb_tso_client_batch_max_wait_time value: '-1'")) tk.MustQuery("select @@tidb_tso_client_batch_max_wait_time;").Check(testkit.Rows("0")) tk.MustExec("set global tidb_tso_client_batch_max_wait_time = -0.1;") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect tidb_tso_client_batch_max_wait_time value: '-0.1'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect tidb_tso_client_batch_max_wait_time value: '-0.1'")) tk.MustQuery("select @@tidb_tso_client_batch_max_wait_time;").Check(testkit.Rows("0")) tk.MustExec("set global tidb_tso_client_batch_max_wait_time = 10.1;") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect tidb_tso_client_batch_max_wait_time value: '10.1'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect tidb_tso_client_batch_max_wait_time value: '10.1'")) tk.MustQuery("select @@tidb_tso_client_batch_max_wait_time;").Check(testkit.Rows("10")) tk.MustExec("set global tidb_tso_client_batch_max_wait_time = 11;") - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", "Warning|1292|Truncated incorrect tidb_tso_client_batch_max_wait_time value: '11'")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1292|Truncated incorrect tidb_tso_client_batch_max_wait_time value: '11'")) tk.MustQuery("select @@tidb_tso_client_batch_max_wait_time;").Check(testkit.Rows("10")) tk.MustQuery("select @@tidb_enable_tso_follower_proxy;").Check(testkit.Rows("0")) @@ -5989,6 +6110,10 @@ func (s *testSessionSuite) TestWriteOnMultipleCachedTable(c *C) { tk.MustQuery("select * from ct1").Check(testkit.Rows("3 4")) tk.MustQuery("select * from ct2").Check(testkit.Rows("5 6")) + + // cleanup + tk.MustExec("alter table ct1 nocache") + tk.MustExec("alter table ct2 nocache") } func (s *testSessionSuite) TestForbidSettingBothTSVariable(c *C) { @@ -6022,9 +6147,24 @@ func (s *testSessionSuite) TestForbidSettingBothTSVariable(c *C) { func (s *testSessionSuite) TestSysdateIsNow(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test") - tk.MustQuery("show variables like '%sysdate_is_now%'").Check(testkit.Rows("sysdate_is_now OFF")) + tk.MustQuery("show variables like '%tidb_sysdate_is_now%'").Check(testkit.Rows("tidb_sysdate_is_now OFF")) c.Assert(tk.Se.GetSessionVars().SysdateIsNow, IsFalse) - tk.MustExec("set @@sysdate_is_now=true") - tk.MustQuery("show variables like '%sysdate_is_now%'").Check(testkit.Rows("sysdate_is_now ON")) + tk.MustExec("set @@tidb_sysdate_is_now=true") + tk.MustQuery("show variables like '%tidb_sysdate_is_now%'").Check(testkit.Rows("tidb_sysdate_is_now ON")) c.Assert(tk.Se.GetSessionVars().SysdateIsNow, IsTrue) } + +func (s *testSessionSuite) TestEnableLegacyInstanceScope(c *C) { + tk := testkit.NewTestKit(c, s.store) + + // enable 'switching' to SESSION variables + tk.MustExec("set tidb_enable_legacy_instance_scope = 1") + tk.MustExec("set tidb_general_log = 1") + tk.MustQuery(`show warnings`).Check(testkit.Rows(fmt.Sprintf("Warning %d modifying tidb_general_log will require SET GLOBAL in a future version of TiDB", errno.ErrInstanceScope))) + c.Assert(tk.Se.GetSessionVars().EnableLegacyInstanceScope, IsTrue) + + // disable 'switching' to SESSION variables + tk.MustExec("set tidb_enable_legacy_instance_scope = 0") + tk.MustGetErrCode("set tidb_general_log = 1", errno.ErrGlobalVariable) + c.Assert(tk.Se.GetSessionVars().EnableLegacyInstanceScope, IsFalse) +} diff --git a/sessionctx/binloginfo/binloginfo.go b/sessionctx/binloginfo/binloginfo.go index c39746bef55c9..5b29dd91c5b6b 100644 --- a/sessionctx/binloginfo/binloginfo.go +++ b/sessionctx/binloginfo/binloginfo.go @@ -21,8 +21,6 @@ import ( "time" "github.com/pingcap/errors" - "github.com/pingcap/tidb-tools/tidb-binlog/node" - pumpcli "github.com/pingcap/tidb-tools/tidb-binlog/pump_client" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" @@ -30,6 +28,8 @@ import ( "github.com/pingcap/tidb/parser/format" "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/tidb-binlog/node" + pumpcli "github.com/pingcap/tidb/tidb-binlog/pump_client" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tipb/go-binlog" "go.uber.org/zap" diff --git a/sessionctx/binloginfo/binloginfo_test.go b/sessionctx/binloginfo/binloginfo_test.go index a75f3223f46f0..59f0157fa499d 100644 --- a/sessionctx/binloginfo/binloginfo_test.go +++ b/sessionctx/binloginfo/binloginfo_test.go @@ -26,7 +26,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" - pumpcli "github.com/pingcap/tidb-tools/tidb-binlog/pump_client" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" @@ -37,6 +36,8 @@ import ( "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" + pumpcli "github.com/pingcap/tidb/tidb-binlog/pump_client" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/collate" @@ -403,7 +404,7 @@ func TestBinlogForSequence(t *testing.T) { tk.MustExec("create sequence seq cache 3") // trigger the sequence cache allocation. tk.MustQuery("select nextval(seq)").Check(testkit.Rows("1")) - sequenceTable := tk.GetTableByName("test", "seq") + sequenceTable := external.GetTableByName(t, tk, "test", "seq") tc, ok := sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round := tc.GetSequenceCommon().GetSequenceBaseEndRound() @@ -431,7 +432,7 @@ func TestBinlogForSequence(t *testing.T) { tk.MustExec("create sequence seq2 start 1 increment -2 cache 3 minvalue -10 maxvalue 10 cycle") // trigger the sequence cache allocation. tk.MustQuery("select nextval(seq2)").Check(testkit.Rows("1")) - sequenceTable = tk.GetTableByName("test2", "seq2") + sequenceTable = external.GetTableByName(t, tk, "test2", "seq2") tc, ok = sequenceTable.(*tables.TableCommon) require.Equal(t, true, ok) _, end, round = tc.GetSequenceCommon().GetSequenceBaseEndRound() diff --git a/sessionctx/binloginfo/main_test.go b/sessionctx/binloginfo/main_test.go index 4462e494a041a..51a97bee98a96 100644 --- a/sessionctx/binloginfo/main_test.go +++ b/sessionctx/binloginfo/main_test.go @@ -26,6 +26,7 @@ func TestMain(m *testing.M) { opts := []goleak.Option{ goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), } goleak.VerifyTestMain(m, opts...) } diff --git a/sessionctx/context.go b/sessionctx/context.go index e8a3bda5146f9..f7394a5e85e7e 100644 --- a/sessionctx/context.go +++ b/sessionctx/context.go @@ -141,8 +141,13 @@ type Context interface { // GetBuiltinFunctionUsage returns the BuiltinFunctionUsage of current Context, which is not thread safe. // Use primitive map type to prevent circular import. Should convert it to telemetry.BuiltinFunctionUsage before using. GetBuiltinFunctionUsage() map[string]uint32 + // BuiltinFunctionUsageInc increase the counting of each builtin function usage + // Notice that this is a thread safe function + BuiltinFunctionUsageInc(scalarFuncSigName string) // GetStmtStats returns stmtstats.StatementStats owned by implementation. GetStmtStats() *stmtstats.StatementStats + // ShowProcess returns ProcessInfo running in current Context + ShowProcess() *util.ProcessInfo } type basicCtxType int @@ -206,3 +211,11 @@ func ValidateStaleReadTS(ctx context.Context, sctx Context, readTS uint64) error } return nil } + +// SysProcTracker is used to track background sys processes +type SysProcTracker interface { + Track(id uint64, proc Context) error + UnTrack(id uint64) + GetSysProcessList() map[uint64]*util.ProcessInfo + KillSysProcess(id uint64) +} diff --git a/sessionctx/main_test.go b/sessionctx/main_test.go index ae77476986062..91943d5726ca9 100644 --- a/sessionctx/main_test.go +++ b/sessionctx/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/sessionctx/stmtctx/main_test.go b/sessionctx/stmtctx/main_test.go index ced7d8000ece8..444f2610ba5a8 100644 --- a/sessionctx/stmtctx/main_test.go +++ b/sessionctx/stmtctx/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/sessionctx/stmtctx/stmtctx.go b/sessionctx/stmtctx/stmtctx.go index ce8f10c875f8f..fdfddc8171971 100644 --- a/sessionctx/stmtctx/stmtctx.go +++ b/sessionctx/stmtctx/stmtctx.go @@ -23,6 +23,7 @@ import ( "time" "github.com/pingcap/tidb/parser" + "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/util/disk" @@ -75,6 +76,7 @@ type StatementContext struct { InLoadDataStmt bool InExplainStmt bool InCreateOrAlterStmt bool + InPreparedPlanBuilding bool IgnoreTruncate bool IgnoreZeroInDate bool NoZeroDate bool @@ -238,6 +240,9 @@ type StatementContext struct { // SysdateIsNow indicates whether sysdate() is an alias of now() in this statement SysdateIsNow bool + + // RCCheckTS indicates the current read-consistency read select statement will use `RCCheckTS` path. + RCCheckTS bool } // StmtHints are SessionVars related sql hints. @@ -262,6 +267,9 @@ type StmtHints struct { HasMaxExecutionTime bool HasEnableCascadesPlannerHint bool SetVars map[string]string + + // the original table hints + OriginalTableHints []*ast.TableOptimizerHint } // TaskMapNeedBackUp indicates that whether we need to back up taskMap during physical optimizing. diff --git a/sessionctx/variable/main_test.go b/sessionctx/variable/main_test.go index d8c4cc64199e8..3d1f5cabbee70 100644 --- a/sessionctx/variable/main_test.go +++ b/sessionctx/variable/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/sessionctx/variable/noop.go b/sessionctx/variable/noop.go index 9c1225b1a483e..449a9aef63f39 100644 --- a/sessionctx/variable/noop.go +++ b/sessionctx/variable/noop.go @@ -494,6 +494,8 @@ var noopSysVars = []*SysVar{ {Scope: ScopeGlobal | ScopeSession, Name: "information_schema_stats_expiry", Value: "86400"}, {Scope: ScopeGlobal, Name: ThreadPoolSize, Value: "16", Type: TypeUnsigned, MinValue: 1, MaxValue: 64}, {Scope: ScopeNone, Name: "lower_case_file_system", Value: "1"}, + {Scope: ScopeNone, Name: LowerCaseTableNames, Value: "2"}, + // for compatibility purpose, we should leave them alone. // TODO: Follow the Terminology Updates of MySQL after their changes arrived. // https://mysqlhighavailability.com/mysql-terminology-updates/ diff --git a/sessionctx/variable/removed.go b/sessionctx/variable/removed.go index 7659aef18f6d2..fbaae51b04a40 100644 --- a/sessionctx/variable/removed.go +++ b/sessionctx/variable/removed.go @@ -21,11 +21,34 @@ package variable // This helps ensure some compatibility for applications while being // careful not to return dummy data. +const ( + tiDBEnableAlterPlacement = "tidb_enable_alter_placement" + tiDBMemQuotaHashJoin = "tidb_mem_quota_hashjoin" + tiDBMemQuotaMergeJoin = "tidb_mem_quota_mergejoin" + tiDBMemQuotaSort = "tidb_mem_quota_sort" + tiDBMemQuotaTopn = "tidb_mem_quota_topn" + tiDBMemQuotaIndexLookupReader = "tidb_mem_quota_indexlookupreader" + tiDBMemQuotaIndexLookupJoin = "tidb_mem_quota_indexlookupjoin" + tiDBEnableGlobalTemporaryTable = "tidb_enable_global_temporary_table" + tiDBSlowLogMasking = "tidb_slow_log_masking" + placementChecks = "placement_checks" + tiDBEnableStreaming = "tidb_enable_streaming" + tiDBOptBCJ = "tidb_opt_broadcast_join" +) + var removedSysVars = map[string]string{ - TiDBEnableAlterPlacement: "alter placement is now always enabled", - TiDBEnableGlobalTemporaryTable: "temporary table support is now always enabled", - TiDBSlowLogMasking: "use tidb_redact_log instead", - PlacementChecks: "placement_checks is removed and use tidb_placement_mode instead", + tiDBEnableAlterPlacement: "alter placement is now always enabled", + tiDBEnableGlobalTemporaryTable: "temporary table support is now always enabled", + tiDBSlowLogMasking: "use tidb_redact_log instead", + placementChecks: "placement_checks is removed and use tidb_placement_mode instead", + tiDBMemQuotaHashJoin: "use tidb_mem_quota_query instead", + tiDBMemQuotaMergeJoin: "use tidb_mem_quota_query instead", + tiDBMemQuotaSort: "use tidb_mem_quota_query instead", + tiDBMemQuotaTopn: "use tidb_mem_quota_query instead", + tiDBMemQuotaIndexLookupReader: "use tidb_mem_quota_query instead", + tiDBMemQuotaIndexLookupJoin: "use tidb_mem_quota_query instead", + tiDBEnableStreaming: "streaming is no longer supported", + tiDBOptBCJ: "tidb_opt_broadcast_join is removed and use tidb_allow_mpp instead", } // IsRemovedSysVar returns true if the sysvar has been removed diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index f1111bbdbe433..2f1eb99d15918 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -30,7 +30,6 @@ import ( "time" "github.com/pingcap/errors" - pumpcli "github.com/pingcap/tidb-tools/tidb-binlog/pump_client" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" @@ -43,6 +42,7 @@ import ( "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" + pumpcli "github.com/pingcap/tidb/tidb-binlog/pump_client" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/execdetails" @@ -66,6 +66,7 @@ type RetryInfo struct { DroppedPreparedStmtIDs []uint32 autoIncrementIDs retryInfoAutoIDs autoRandomIDs retryInfoAutoIDs + LastRcReadTS uint64 } // Clean does some clean work. @@ -182,6 +183,9 @@ type TransactionContext struct { // CachedTables is not nil if the transaction write on cached table. CachedTables map[int64]interface{} + + // Last ts used by read-consistency read. + LastRcReadTs uint64 } // GetShard returns the shard prefix for the next `count` rowids. @@ -535,6 +539,9 @@ type SessionVars struct { // PlanColumnID is the unique id for column when building plan. PlanColumnID int64 + // MapHashCode2UniqueID4ExtendedCol map the expr's hash code to specified unique ID. + MapHashCode2UniqueID4ExtendedCol map[string]int + // User is the user identity with which the session login. User *auth.UserIdentity @@ -582,9 +589,6 @@ type SessionVars struct { // AllowAggPushDown can be set to false to forbid aggregation push down. AllowAggPushDown bool - // AllowBCJ means allow broadcast join. - AllowBCJ bool - // AllowCartesianBCJ means allow broadcast CARTESIAN join, 0 means not allow, 1 means allow broadcast CARTESIAN join // but the table size should under the broadcast threshold, 2 means allow broadcast CARTESIAN join even if the table // size exceeds the broadcast threshold @@ -709,6 +713,9 @@ type SessionVars struct { // OptimizerSelectivityLevel defines the level of the selectivity estimation in plan. OptimizerSelectivityLevel int + // OptimizerEnableNewOnlyFullGroupByCheck enables the new only_full_group_by check which is implemented by maintaining functional dependency. + OptimizerEnableNewOnlyFullGroupByCheck bool + // EnableTablePartition enables table partition feature. EnableTablePartition string @@ -753,10 +760,6 @@ type SessionVars struct { // WaitSplitRegionTimeout defines the split region timeout. WaitSplitRegionTimeout uint64 - // EnableStreaming indicates whether the coprocessor request can use streaming API. - // TODO: remove this after tidb-server configuration "enable-streaming' removed. - EnableStreaming bool - // EnableChunkRPC indicates whether the coprocessor request can use chunk API. EnableChunkRPC bool @@ -999,6 +1002,10 @@ type SessionVars struct { // EnablePaging indicates whether enable paging in coprocessor requests. EnablePaging bool + // EnableLegacyInstanceScope says if SET SESSION can be used to set an instance + // scope variable. The default is TRUE. + EnableLegacyInstanceScope bool + // ReadConsistency indicates the read consistency requirement. ReadConsistency ReadConsistencyLevel @@ -1011,6 +1018,12 @@ type SessionVars struct { EnableMutationChecker bool // AssertionLevel controls how strict the assertions on data mutations should be. AssertionLevel AssertionLevel + // IgnorePreparedCacheCloseStmt controls if ignore the close-stmt command for prepared statement. + IgnorePreparedCacheCloseStmt bool + // BatchPendingTiFlashCount shows the threshold of pending TiFlash tables when batch adding. + BatchPendingTiFlashCount int + // RcReadCheckTS indicates if ts check optimization is enabled for current session. + RcReadCheckTS bool } // InitStatementContext initializes a StatementContext, the object is reused to reduce allocation. @@ -1066,11 +1079,6 @@ func (s *SessionVars) CheckAndGetTxnScope() string { // UseDynamicPartitionPrune indicates whether use new dynamic partition prune. func (s *SessionVars) UseDynamicPartitionPrune() bool { - if s.InTxn() || !s.GetStatusFlag(mysql.ServerStatusAutocommit) { - // UnionScan cannot get partition table IDs in dynamic-mode, this is a quick-fix for issues/26719, - // please see it for more details. - return false - } return PartitionPruneMode(s.PartitionPruneMode.Load()) == Dynamic } @@ -1180,7 +1188,6 @@ func NewSessionVars() *SessionVars { Status: mysql.ServerStatusAutocommit, StmtCtx: new(stmtctx.StatementContext), AllowAggPushDown: false, - AllowBCJ: false, AllowCartesianBCJ: DefOptCartesianBCJ, MPPOuterJoinFixedBuildSide: DefOptMPPOuterJoinFixedBuildSide, BroadcastJoinThresholdSize: DefBroadcastJoinThresholdSize, @@ -1251,6 +1258,7 @@ func NewSessionVars() *SessionVars { MPPStoreFailTTL: DefTiDBMPPStoreFailTTL, Rng: utilMath.NewWithTime(), StatsLoadSyncWait: StatsLoadSyncWait.Load(), + EnableLegacyInstanceScope: DefEnableLegacyInstanceScope, } vars.KVVars = tikvstore.NewVariables(&vars.Killed) vars.Concurrency = Concurrency{ @@ -1270,16 +1278,6 @@ func NewSessionVars() *SessionVars { vars.MemQuota = MemQuota{ MemQuotaQuery: config.GetGlobalConfig().MemQuotaQuery, MemQuotaApplyCache: DefTiDBMemQuotaApplyCache, - - // The variables below do not take any effect anymore, it's remaining for compatibility. - // TODO: remove them in v4.1 - MemQuotaHashJoin: DefTiDBMemQuotaHashJoin, - MemQuotaMergeJoin: DefTiDBMemQuotaMergeJoin, - MemQuotaSort: DefTiDBMemQuotaSort, - MemQuotaTopn: DefTiDBMemQuotaTopn, - MemQuotaIndexLookupReader: DefTiDBMemQuotaIndexLookupReader, - MemQuotaIndexLookupJoin: DefTiDBMemQuotaIndexLookupJoin, - MemQuotaDistSQL: DefTiDBMemQuotaDistSQL, } vars.BatchSize = BatchSize{ IndexJoinBatchSize: DefIndexJoinBatchSize, @@ -1288,14 +1286,6 @@ func NewSessionVars() *SessionVars { MaxChunkSize: DefMaxChunkSize, } vars.DMLBatchSize = DefDMLBatchSize - var enableStreaming string - if config.GetGlobalConfig().EnableStreaming { - enableStreaming = "1" - } else { - enableStreaming = "0" - } - terror.Log(vars.SetSystemVar(TiDBEnableStreaming, enableStreaming)) - vars.AllowBatchCop = DefTiDBAllowBatchCop vars.allowMPPExecution = DefTiDBAllowMPPExecution vars.HashExchangeWithNewCollation = DefTiDBHashExchangeWithNewCollation @@ -1553,9 +1543,6 @@ func (s *SessionVars) GetSystemVar(name string) (string, bool) { } else if name == ErrorCount { return strconv.Itoa(int(s.SysErrorCount)), true } - if name == TiDBSlowLogMasking { - name = TiDBRedactLog - } if val, ok := s.stmtVars[name]; ok { return val, ok } @@ -1905,23 +1892,6 @@ type MemQuota struct { MemQuotaQuery int64 // MemQuotaApplyCache defines the memory capacity for apply cache. MemQuotaApplyCache int64 - - // The variables below do not take any effect anymore, it's remaining for compatibility. - // TODO: remove them in v4.1 - // MemQuotaHashJoin defines the memory quota for a hash join executor. - MemQuotaHashJoin int64 - // MemQuotaMergeJoin defines the memory quota for a merge join executor. - MemQuotaMergeJoin int64 - // MemQuotaSort defines the memory quota for a sort executor. - MemQuotaSort int64 - // MemQuotaTopn defines the memory quota for a top n executor. - MemQuotaTopn int64 - // MemQuotaIndexLookupReader defines the memory quota for a index lookup reader executor. - MemQuotaIndexLookupReader int64 - // MemQuotaIndexLookupJoin defines the memory quota for a index lookup join executor. - MemQuotaIndexLookupJoin int64 - // MemQuotaDistSQL defines the memory quota for all operators in DistSQL layer like co-processor and selectResult. - MemQuotaDistSQL int64 } // BatchSize defines batch size values. @@ -2394,3 +2364,12 @@ func (s *SessionVars) GetSeekFactor(tbl *model.TableInfo) float64 { } return s.seekFactor } + +// IsRcCheckTsRetryable checks if the current error is retryable for `RcReadCheckTS` path. +func (s *SessionVars) IsRcCheckTsRetryable(err error) bool { + if err == nil { + return false + } + // The `RCCheckTS` flag of `stmtCtx` is set. + return s.RcReadCheckTS && s.StmtCtx.RCCheckTS && errors.ErrorEqual(err, kv.ErrWriteConflict) +} diff --git a/sessionctx/variable/session_test.go b/sessionctx/variable/session_test.go index 1c722570897df..52c8fd5c818f6 100644 --- a/sessionctx/variable/session_test.go +++ b/sessionctx/variable/session_test.go @@ -47,12 +47,6 @@ func TestSetSystemVariable(t *testing.T) { {variable.TiDBOptAggPushDown, "1", false}, {variable.TiDBOptDistinctAggPushDown, "1", false}, {variable.TiDBMemQuotaQuery, "1024", false}, - {variable.TiDBMemQuotaHashJoin, "1024", false}, - {variable.TiDBMemQuotaMergeJoin, "1024", false}, - {variable.TiDBMemQuotaSort, "1024", false}, - {variable.TiDBMemQuotaTopn, "1024", false}, - {variable.TiDBMemQuotaIndexLookupReader, "1024", false}, - {variable.TiDBMemQuotaIndexLookupJoin, "1024", false}, {variable.TiDBMemQuotaApplyCache, "1024", false}, {variable.TiDBEnableStmtSummary, "1", true}, // now global only } diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index a9a4b6f963b4a..ba39e17ae5af4 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -41,7 +41,634 @@ import ( atomic2 "go.uber.org/atomic" ) +// All system variables declared here are ordered by their scopes, which follow the order of scopes below: +// [NONE, SESSION, INSTANCE, GLOBAL, GLOBAL & SESSION] +// If you are adding a new system variable, please put it in the corresponding area. var defaultSysVars = []*SysVar{ + /* The system variables below have NONE scope */ + {Scope: ScopeNone, Name: SystemTimeZone, Value: "CST"}, + {Scope: ScopeNone, Name: Hostname, Value: DefHostname}, + {Scope: ScopeNone, Name: Port, Value: "4000", Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxUint16}, + {Scope: ScopeNone, Name: LogBin, Value: Off, Type: TypeBool}, + {Scope: ScopeNone, Name: VersionComment, Value: "TiDB Server (Apache License 2.0) " + versioninfo.TiDBEdition + " Edition, MySQL 5.7 compatible"}, + {Scope: ScopeNone, Name: Version, Value: mysql.ServerVersion}, + {Scope: ScopeNone, Name: DataDir, Value: "/usr/local/mysql/data/"}, + {Scope: ScopeNone, Name: Socket, Value: ""}, + {Scope: ScopeNone, Name: "license", Value: "Apache License 2.0"}, + {Scope: ScopeNone, Name: "have_ssl", Value: "DISABLED"}, + {Scope: ScopeNone, Name: "have_openssl", Value: "DISABLED"}, + {Scope: ScopeNone, Name: "ssl_ca", Value: ""}, + {Scope: ScopeNone, Name: "ssl_cert", Value: ""}, + {Scope: ScopeNone, Name: "ssl_key", Value: ""}, + {Scope: ScopeNone, Name: "version_compile_os", Value: runtime.GOOS}, + {Scope: ScopeNone, Name: "version_compile_machine", Value: runtime.GOARCH}, + /* TiDB specific variables */ + {Scope: ScopeNone, Name: TiDBEnableEnhancedSecurity, Value: Off, Type: TypeBool}, + {Scope: ScopeNone, Name: TiDBAllowFunctionForExpressionIndex, ReadOnly: true, Value: collectAllowFuncName4ExpressionIndex()}, + + /* The system variables below have SESSION scope */ + {Scope: ScopeSession, Name: Timestamp, Value: DefTimestamp, skipInit: true, MinValue: 0, MaxValue: 2147483647, Type: TypeFloat, GetSession: func(s *SessionVars) (string, error) { + if timestamp, ok := s.systems[Timestamp]; ok && timestamp != DefTimestamp { + return timestamp, nil + } + timestamp := s.StmtCtx.GetOrStoreStmtCache(stmtctx.StmtNowTsCacheKey, time.Now()).(time.Time) + return types.ToString(float64(timestamp.UnixNano()) / float64(time.Second)) + }}, + {Scope: ScopeSession, Name: WarningCount, Value: "0", ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { + return strconv.Itoa(s.SysWarningCount), nil + }}, + {Scope: ScopeSession, Name: ErrorCount, Value: "0", ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { + return strconv.Itoa(int(s.SysErrorCount)), nil + }}, + {Scope: ScopeSession, Name: LastInsertID, Value: "", skipInit: true, GetSession: func(s *SessionVars) (string, error) { + return strconv.FormatUint(s.StmtCtx.PrevLastInsertID, 10), nil + }}, + {Scope: ScopeSession, Name: Identity, Value: "", skipInit: true, GetSession: func(s *SessionVars) (string, error) { + return strconv.FormatUint(s.StmtCtx.PrevLastInsertID, 10), nil + }}, + /* TiDB specific variables */ + // TODO: TiDBTxnScope is hidden because local txn feature is not done. + {Scope: ScopeSession, Name: TiDBTxnScope, skipInit: true, Hidden: true, Value: kv.GlobalTxnScope, SetSession: func(s *SessionVars, val string) error { + switch val { + case kv.GlobalTxnScope: + s.TxnScope = kv.NewGlobalTxnScopeVar() + case kv.LocalTxnScope: + if !EnableLocalTxn.Load() { + return ErrWrongValueForVar.GenWithStack("@@txn_scope can not be set to local when tidb_enable_local_txn is off") + } + txnScope := config.GetTxnScopeFromConfig() + if txnScope == kv.GlobalTxnScope { + return ErrWrongValueForVar.GenWithStack("@@txn_scope can not be set to local when zone label is empty or \"global\"") + } + s.TxnScope = kv.NewLocalTxnScopeVar(txnScope) + default: + return ErrWrongValueForVar.GenWithStack("@@txn_scope value should be global or local") + } + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return s.TxnScope.GetVarValue(), nil + }}, + {Scope: ScopeSession, Name: TiDBTxnReadTS, Value: "", Hidden: true, SetSession: func(s *SessionVars, val string) error { + return setTxnReadTS(s, val) + }, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { + return normalizedValue, nil + }}, + {Scope: ScopeSession, Name: TiDBReadStaleness, Value: "", Hidden: false, SetSession: func(s *SessionVars, val string) error { + return setReadStaleness(s, val) + }}, + {Scope: ScopeSession, Name: TiDBEnforceMPPExecution, Type: TypeBool, Value: BoolToOnOff(config.GetGlobalConfig().Performance.EnforceMPP), Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { + if TiDBOptOn(normalizedValue) && !vars.allowMPPExecution { + return normalizedValue, ErrWrongValueForVar.GenWithStackByArgs("tidb_enforce_mpp", "1' but tidb_allow_mpp is 0, please activate tidb_allow_mpp at first.") + } + return normalizedValue, nil + }, SetSession: func(s *SessionVars, val string) error { + s.enforceMPPExecution = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBSnapshot, Value: "", skipInit: true, SetSession: func(s *SessionVars, val string) error { + err := setSnapshotTS(s, val) + if err != nil { + return err + } + return nil + }}, + {Scope: ScopeSession, Name: TiDBOptAggPushDown, Value: BoolToOnOff(DefOptAggPushDown), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.AllowAggPushDown = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBOptDistinctAggPushDown, Value: BoolToOnOff(config.GetGlobalConfig().Performance.DistinctAggPushDown), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.AllowDistinctAggPushDown = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBOptWriteRowID, Value: BoolToOnOff(DefOptWriteRowID), skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.AllowWriteRowID = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBChecksumTableConcurrency, skipInit: true, Value: strconv.Itoa(DefChecksumTableConcurrency)}, + {Scope: ScopeSession, Name: TiDBBatchInsert, Value: BoolToOnOff(DefBatchInsert), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.BatchInsert = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBBatchDelete, Value: BoolToOnOff(DefBatchDelete), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.BatchDelete = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBBatchCommit, Value: BoolToOnOff(DefBatchCommit), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.BatchCommit = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBCurrentTS, Value: strconv.Itoa(DefCurretTS), ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { + return strconv.FormatUint(s.TxnCtx.StartTS, 10), nil + }}, + {Scope: ScopeSession, Name: TiDBLastTxnInfo, Value: strconv.Itoa(DefCurretTS), ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { + return s.LastTxnInfo, nil + }}, + {Scope: ScopeSession, Name: TiDBLastQueryInfo, Value: strconv.Itoa(DefCurretTS), ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { + info, err := json.Marshal(s.LastQueryInfo) + if err != nil { + return "", err + } + return string(info), nil + }}, + {Scope: ScopeSession, Name: TiDBMemQuotaQuery, Value: strconv.FormatInt(config.GetGlobalConfig().MemQuotaQuery, 10), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { + s.MemQuotaQuery = TidbOptInt64(val, config.GetGlobalConfig().MemQuotaQuery) + return nil + }}, + {Scope: ScopeSession, Name: TiDBEnableChunkRPC, Value: On, Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.EnableChunkRPC = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TxnIsolationOneShot, Value: "", skipInit: true, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { + return checkIsolationLevel(vars, normalizedValue, originalValue, scope) + }, SetSession: func(s *SessionVars, val string) error { + s.txnIsolationLevelOneShot.state = oneShotSet + s.txnIsolationLevelOneShot.value = val + return nil + }}, + {Scope: ScopeSession, Name: TiDBOptimizerSelectivityLevel, Value: strconv.Itoa(DefTiDBOptimizerSelectivityLevel), skipInit: true, Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { + s.OptimizerSelectivityLevel = tidbOptPositiveInt32(val, DefTiDBOptimizerSelectivityLevel) + return nil + }}, + {Scope: ScopeSession, Name: TiDBLogFileMaxDays, Value: strconv.Itoa(config.GetGlobalConfig().Log.File.MaxDays), Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt32, skipInit: true, SetSession: func(s *SessionVars, val string) error { + maxAge, err := strconv.ParseInt(val, 10, 32) + if err != nil { + return err + } + + GlobalLogMaxDays.Store(int32(maxAge)) + + cfg := config.GetGlobalConfig().Log.ToLogConfig() + cfg.Config.File.MaxDays = int(maxAge) + + err = logutil.ReplaceLogger(cfg) + if err != nil { + return err + } + + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return strconv.FormatInt(int64(GlobalLogMaxDays.Load()), 10), nil + }}, + {Scope: ScopeSession, Name: TiDBPProfSQLCPU, Value: strconv.Itoa(DefTiDBPProfSQLCPU), Type: TypeInt, skipInit: true, MinValue: 0, MaxValue: 1, SetSession: func(s *SessionVars, val string) error { + EnablePProfSQLCPU.Store(uint32(tidbOptPositiveInt32(val, DefTiDBPProfSQLCPU)) > 0) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + val := "0" + if EnablePProfSQLCPU.Load() { + val = "1" + } + return val, nil + }}, + {Scope: ScopeSession, Name: TiDBDDLSlowOprThreshold, Value: strconv.Itoa(DefTiDBDDLSlowOprThreshold), skipInit: true, SetSession: func(s *SessionVars, val string) error { + atomic.StoreUint32(&DDLSlowOprThreshold, uint32(tidbOptPositiveInt32(val, DefTiDBDDLSlowOprThreshold))) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return strconv.FormatUint(uint64(atomic.LoadUint32(&DDLSlowOprThreshold)), 10), nil + }}, + {Scope: ScopeSession, Name: TiDBConfig, Value: "", ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { + conf := config.GetGlobalConfig() + j, err := json.MarshalIndent(conf, "", "\t") + if err != nil { + return "", err + } + return config.HideConfig(string(j)), nil + }}, + {Scope: ScopeSession, Name: TiDBDDLReorgPriority, Value: "PRIORITY_LOW", skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.setDDLReorgPriority(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBForcePriority, skipInit: true, Value: mysql.Priority2Str[DefTiDBForcePriority], SetSession: func(s *SessionVars, val string) error { + atomic.StoreInt32(&ForcePriority, int32(mysql.Str2Priority(val))) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return mysql.Priority2Str[mysql.PriorityEnum(atomic.LoadInt32(&ForcePriority))], nil + }}, + {Scope: ScopeSession, Name: TiDBSlowQueryFile, Value: "", skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.SlowQueryFile = val + return nil + }}, + {Scope: ScopeSession, Name: TiDBWaitSplitRegionFinish, Value: BoolToOnOff(DefTiDBWaitSplitRegionFinish), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.WaitSplitRegionFinish = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBWaitSplitRegionTimeout, Value: strconv.Itoa(DefWaitSplitRegionTimeout), skipInit: true, Type: TypeUnsigned, MinValue: 1, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { + s.WaitSplitRegionTimeout = uint64(tidbOptPositiveInt32(val, DefWaitSplitRegionTimeout)) + return nil + }}, + {Scope: ScopeSession, Name: TiDBLowResolutionTSO, Value: Off, Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.LowResolutionTSO = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBExpensiveQueryTimeThreshold, Value: strconv.Itoa(DefTiDBExpensiveQueryTimeThreshold), Type: TypeUnsigned, MinValue: int64(MinExpensiveQueryTimeThreshold), MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { + atomic.StoreUint64(&ExpensiveQueryTimeThreshold, uint64(tidbOptPositiveInt32(val, DefTiDBExpensiveQueryTimeThreshold))) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return strconv.FormatUint(atomic.LoadUint64(&ExpensiveQueryTimeThreshold), 10), nil + }}, + {Scope: ScopeSession, Name: TiDBMemoryUsageAlarmRatio, Value: strconv.FormatFloat(config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio, 'f', -1, 64), Type: TypeFloat, MinValue: 0.0, MaxValue: 1.0, skipInit: true, SetSession: func(s *SessionVars, val string) error { + MemoryUsageAlarmRatio.Store(tidbOptFloat64(val, 0.8)) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return fmt.Sprintf("%g", MemoryUsageAlarmRatio.Load()), nil + }}, + {Scope: ScopeSession, Name: TiDBAllowRemoveAutoInc, Value: BoolToOnOff(DefTiDBAllowRemoveAutoInc), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.AllowRemoveAutoInc = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeSession, Name: TiDBIsolationReadEngines, Value: strings.Join(config.GetGlobalConfig().IsolationRead.Engines, ","), Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { + engines := strings.Split(normalizedValue, ",") + var formatVal string + for i, engine := range engines { + engine = strings.TrimSpace(engine) + if i != 0 { + formatVal += "," + } + switch { + case strings.EqualFold(engine, kv.TiKV.Name()): + formatVal += kv.TiKV.Name() + case strings.EqualFold(engine, kv.TiFlash.Name()): + formatVal += kv.TiFlash.Name() + case strings.EqualFold(engine, kv.TiDB.Name()): + formatVal += kv.TiDB.Name() + default: + return normalizedValue, ErrWrongValueForVar.GenWithStackByArgs(TiDBIsolationReadEngines, normalizedValue) + } + } + return formatVal, nil + }, SetSession: func(s *SessionVars, val string) error { + s.IsolationReadEngines = make(map[kv.StoreType]struct{}) + for _, engine := range strings.Split(val, ",") { + switch engine { + case kv.TiKV.Name(): + s.IsolationReadEngines[kv.TiKV] = struct{}{} + case kv.TiFlash.Name(): + s.IsolationReadEngines[kv.TiFlash] = struct{}{} + case kv.TiDB.Name(): + s.IsolationReadEngines[kv.TiDB] = struct{}{} + } + } + return nil + }}, + {Scope: ScopeSession, Name: TiDBMetricSchemaStep, Value: strconv.Itoa(DefTiDBMetricSchemaStep), Type: TypeUnsigned, skipInit: true, MinValue: 10, MaxValue: 60 * 60 * 60, SetSession: func(s *SessionVars, val string) error { + s.MetricSchemaStep = TidbOptInt64(val, DefTiDBMetricSchemaStep) + return nil + }}, + {Scope: ScopeSession, Name: TiDBMetricSchemaRangeDuration, Value: strconv.Itoa(DefTiDBMetricSchemaRangeDuration), skipInit: true, Type: TypeUnsigned, MinValue: 10, MaxValue: 60 * 60 * 60, SetSession: func(s *SessionVars, val string) error { + s.MetricSchemaRangeDuration = TidbOptInt64(val, DefTiDBMetricSchemaRangeDuration) + return nil + }}, + {Scope: ScopeSession, Name: TiDBSlowLogThreshold, Value: strconv.Itoa(logutil.DefaultSlowThreshold), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { + atomic.StoreUint64(&config.GetGlobalConfig().Log.SlowThreshold, uint64(TidbOptInt64(val, logutil.DefaultSlowThreshold))) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return strconv.FormatUint(atomic.LoadUint64(&config.GetGlobalConfig().Log.SlowThreshold), 10), nil + }}, + {Scope: ScopeSession, Name: TiDBRecordPlanInSlowLog, Value: int32ToBoolStr(logutil.DefaultRecordPlanInSlowLog), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + atomic.StoreUint32(&config.GetGlobalConfig().Log.RecordPlanInSlowLog, uint32(TidbOptInt64(val, logutil.DefaultRecordPlanInSlowLog))) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + enabled := atomic.LoadUint32(&config.GetGlobalConfig().Log.RecordPlanInSlowLog) == 1 + return BoolToOnOff(enabled), nil + }}, + {Scope: ScopeSession, Name: TiDBEnableSlowLog, Value: BoolToOnOff(logutil.DefaultTiDBEnableSlowLog), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { + config.GetGlobalConfig().Log.EnableSlowLog.Store(TiDBOptOn(val)) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return BoolToOnOff(config.GetGlobalConfig().Log.EnableSlowLog.Load()), nil + }}, + {Scope: ScopeSession, Name: TiDBQueryLogMaxLen, Value: strconv.Itoa(logutil.DefaultQueryLogMaxLen), Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, skipInit: true, SetSession: func(s *SessionVars, val string) error { + atomic.StoreUint64(&config.GetGlobalConfig().Log.QueryLogMaxLen, uint64(TidbOptInt64(val, logutil.DefaultQueryLogMaxLen))) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return strconv.FormatUint(atomic.LoadUint64(&config.GetGlobalConfig().Log.QueryLogMaxLen), 10), nil + }}, + {Scope: ScopeSession, Name: TiDBCheckMb4ValueInUTF8, Value: BoolToOnOff(config.GetGlobalConfig().CheckMb4ValueInUTF8.Load()), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + config.GetGlobalConfig().CheckMb4ValueInUTF8.Store(TiDBOptOn(val)) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return BoolToOnOff(config.GetGlobalConfig().CheckMb4ValueInUTF8.Load()), nil + }}, + {Scope: ScopeSession, Name: TiDBFoundInPlanCache, Value: BoolToOnOff(DefTiDBFoundInPlanCache), Type: TypeBool, ReadOnly: true, skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.FoundInPlanCache = TiDBOptOn(val) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return BoolToOnOff(s.PrevFoundInPlanCache), nil + }}, + {Scope: ScopeSession, Name: TiDBFoundInBinding, Value: BoolToOnOff(DefTiDBFoundInBinding), Type: TypeBool, ReadOnly: true, skipInit: true, SetSession: func(s *SessionVars, val string) error { + s.FoundInBinding = TiDBOptOn(val) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return BoolToOnOff(s.PrevFoundInBinding), nil + }}, + {Scope: ScopeSession, Name: TiDBEnableCollectExecutionInfo, Value: BoolToOnOff(DefTiDBEnableCollectExecutionInfo), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + oldConfig := config.GetGlobalConfig() + newValue := TiDBOptOn(val) + if oldConfig.EnableCollectExecutionInfo != newValue { + newConfig := *oldConfig + newConfig.EnableCollectExecutionInfo = newValue + config.StoreGlobalConfig(&newConfig) + } + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return BoolToOnOff(config.GetGlobalConfig().EnableCollectExecutionInfo), nil + }}, + {Scope: ScopeSession, Name: PluginLoad, Value: "", GetSession: func(s *SessionVars) (string, error) { + return config.GetGlobalConfig().Plugin.Load, nil + }}, + {Scope: ScopeSession, Name: PluginDir, Value: "/data/deploy/plugin", GetSession: func(s *SessionVars) (string, error) { + return config.GetGlobalConfig().Plugin.Dir, nil + }}, + {Scope: ScopeSession, Name: RandSeed1, Type: TypeInt, Value: "0", skipInit: true, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { + s.Rng.SetSeed1(uint32(tidbOptPositiveInt32(val, 0))) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return "0", nil + }}, + {Scope: ScopeSession, Name: RandSeed2, Type: TypeInt, Value: "0", skipInit: true, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { + s.Rng.SetSeed2(uint32(tidbOptPositiveInt32(val, 0))) + return nil + }, GetSession: func(s *SessionVars) (string, error) { + return "0", nil + }}, + {Scope: ScopeSession, Name: TiDBReadConsistency, Value: string(ReadConsistencyStrict), Type: TypeStr, Hidden: true, + Validation: func(_ *SessionVars, normalized string, _ string, _ ScopeFlag) (string, error) { + return normalized, validateReadConsistencyLevel(normalized) + }, + SetSession: func(s *SessionVars, val string) error { + s.ReadConsistency = ReadConsistencyLevel(val) + return nil + }, + }, + {Scope: ScopeSession, Name: TiDBLastDDLInfo, Value: strconv.Itoa(DefCurretTS), ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { + info, err := json.Marshal(s.LastDDLInfo) + if err != nil { + return "", err + } + return string(info), nil + }}, + + /* The system variables below have INSTANCE scope */ + {Scope: ScopeInstance, Name: TiDBGeneralLog, Value: BoolToOnOff(DefTiDBGeneralLog), Type: TypeBool, skipInit: true, SetGlobal: func(s *SessionVars, val string) error { + ProcessGeneralLog.Store(TiDBOptOn(val)) + return nil + }, GetGlobal: func(s *SessionVars) (string, error) { + return BoolToOnOff(ProcessGeneralLog.Load()), nil + }}, + + /* The system variables below have GLOBAL scope */ + {Scope: ScopeGlobal, Name: MaxPreparedStmtCount, Value: strconv.FormatInt(DefMaxPreparedStmtCount, 10), Type: TypeInt, MinValue: -1, MaxValue: 1048576}, + {Scope: ScopeGlobal, Name: InitConnect, Value: ""}, + /* TiDB specific variables */ + {Scope: ScopeGlobal, Name: TiDBTSOClientBatchMaxWaitTime, Value: strconv.FormatFloat(DefTiDBTSOClientBatchMaxWaitTime, 'f', -1, 64), Type: TypeFloat, MinValue: 0, MaxValue: 10, + GetGlobal: func(sv *SessionVars) (string, error) { + return strconv.FormatFloat(MaxTSOBatchWaitInterval.Load(), 'f', -1, 64), nil + }, + SetGlobal: func(s *SessionVars, val string) error { + MaxTSOBatchWaitInterval.Store(tidbOptFloat64(val, DefTiDBTSOClientBatchMaxWaitTime)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBEnableTSOFollowerProxy, Value: BoolToOnOff(DefTiDBEnableTSOFollowerProxy), Type: TypeBool, GetGlobal: func(sv *SessionVars) (string, error) { + return BoolToOnOff(EnableTSOFollowerProxy.Load()), nil + }, SetGlobal: func(s *SessionVars, val string) error { + EnableTSOFollowerProxy.Store(TiDBOptOn(val)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBEnableLocalTxn, Value: BoolToOnOff(DefTiDBEnableLocalTxn), Hidden: true, Type: TypeBool, GetGlobal: func(sv *SessionVars) (string, error) { + return BoolToOnOff(EnableLocalTxn.Load()), nil + }, SetGlobal: func(s *SessionVars, val string) error { + oldVal := EnableLocalTxn.Load() + newVal := TiDBOptOn(val) + // Make sure the TxnScope is always Global when disable the Local Txn. + // ON -> OFF + if oldVal && !newVal { + s.TxnScope = kv.NewGlobalTxnScopeVar() + } + EnableLocalTxn.Store(newVal) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBAutoAnalyzeRatio, Value: strconv.FormatFloat(DefAutoAnalyzeRatio, 'f', -1, 64), Type: TypeFloat, MinValue: 0, MaxValue: math.MaxUint64}, + {Scope: ScopeGlobal, Name: TiDBAutoAnalyzeStartTime, Value: DefAutoAnalyzeStartTime, Type: TypeTime}, + {Scope: ScopeGlobal, Name: TiDBAutoAnalyzeEndTime, Value: DefAutoAnalyzeEndTime, Type: TypeTime}, + {Scope: ScopeGlobal, Name: TiDBMemQuotaBindingCache, Value: strconv.FormatInt(DefTiDBMemQuotaBindingCache, 10), Type: TypeUnsigned, MaxValue: math.MaxInt32, GetGlobal: func(sv *SessionVars) (string, error) { + return strconv.FormatInt(MemQuotaBindingCache.Load(), 10), nil + }, SetGlobal: func(s *SessionVars, val string) error { + MemQuotaBindingCache.Store(TidbOptInt64(val, DefTiDBMemQuotaBindingCache)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBRowFormatVersion, Value: strconv.Itoa(DefTiDBRowFormatV1), Type: TypeUnsigned, MinValue: 1, MaxValue: 2, SetSession: func(s *SessionVars, val string) error { + formatVersion := int(TidbOptInt64(val, DefTiDBRowFormatV1)) + if formatVersion == DefTiDBRowFormatV1 { + s.RowEncoder.Enable = false + } else if formatVersion == DefTiDBRowFormatV2 { + s.RowEncoder.Enable = true + } + SetDDLReorgRowFormat(TidbOptInt64(val, DefTiDBRowFormatV2)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBDDLReorgWorkerCount, Value: strconv.Itoa(DefTiDBDDLReorgWorkerCount), Type: TypeUnsigned, MinValue: 1, MaxValue: MaxConfigurableConcurrency, SetSession: func(s *SessionVars, val string) error { + SetDDLReorgWorkerCounter(int32(tidbOptPositiveInt32(val, DefTiDBDDLReorgWorkerCount))) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBDDLReorgBatchSize, Value: strconv.Itoa(DefTiDBDDLReorgBatchSize), Type: TypeUnsigned, MinValue: int64(MinDDLReorgBatchSize), MaxValue: uint64(MaxDDLReorgBatchSize), SetSession: func(s *SessionVars, val string) error { + SetDDLReorgBatchSize(int32(tidbOptPositiveInt32(val, DefTiDBDDLReorgBatchSize))) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBDDLErrorCountLimit, Value: strconv.Itoa(DefTiDBDDLErrorCountLimit), Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { + SetDDLErrorCountLimit(TidbOptInt64(val, DefTiDBDDLErrorCountLimit)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBMaxDeltaSchemaCount, Value: strconv.Itoa(DefTiDBMaxDeltaSchemaCount), Type: TypeUnsigned, MinValue: 100, MaxValue: 16384, SetSession: func(s *SessionVars, val string) error { + // It's a global variable, but it also wants to be cached in server. + SetMaxDeltaSchemaCount(TidbOptInt64(val, DefTiDBMaxDeltaSchemaCount)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBEnableChangeMultiSchema, Value: BoolToOnOff(DefTiDBChangeMultiSchema), Hidden: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.EnableChangeMultiSchema = TiDBOptOn(val) + return nil + }, SetGlobal: func(s *SessionVars, val string) error { + s.EnableChangeMultiSchema = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBEnablePointGetCache, Value: BoolToOnOff(DefTiDBPointGetCache), Hidden: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.EnablePointGetCache = TiDBOptOn(val) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBScatterRegion, Value: BoolToOnOff(DefTiDBScatterRegion), Type: TypeBool}, + {Scope: ScopeGlobal, Name: TiDBEnableStmtSummary, Value: BoolToOnOff(DefTiDBEnableStmtSummary), Type: TypeBool, AllowEmpty: true, + SetGlobal: func(s *SessionVars, val string) error { + return stmtsummary.StmtSummaryByDigestMap.SetEnabled(TiDBOptOn(val)) + }}, + {Scope: ScopeGlobal, Name: TiDBStmtSummaryInternalQuery, Value: BoolToOnOff(DefTiDBStmtSummaryInternalQuery), Type: TypeBool, AllowEmpty: true, + SetGlobal: func(s *SessionVars, val string) error { + return stmtsummary.StmtSummaryByDigestMap.SetEnabledInternalQuery(TiDBOptOn(val)) + }}, + {Scope: ScopeGlobal, Name: TiDBStmtSummaryRefreshInterval, Value: strconv.Itoa(DefTiDBStmtSummaryRefreshInterval), Type: TypeInt, MinValue: 1, MaxValue: math.MaxInt32, AllowEmpty: true, + SetGlobal: func(s *SessionVars, val string) error { + // convert val to int64 + return stmtsummary.StmtSummaryByDigestMap.SetRefreshInterval(TidbOptInt64(val, DefTiDBStmtSummaryRefreshInterval)) + }}, + {Scope: ScopeGlobal, Name: TiDBStmtSummaryHistorySize, Value: strconv.Itoa(DefTiDBStmtSummaryHistorySize), Type: TypeInt, MinValue: 0, MaxValue: math.MaxUint8, AllowEmpty: true, + SetGlobal: func(s *SessionVars, val string) error { + return stmtsummary.StmtSummaryByDigestMap.SetHistorySize(TidbOptInt(val, DefTiDBStmtSummaryHistorySize)) + }}, + {Scope: ScopeGlobal, Name: TiDBStmtSummaryMaxStmtCount, Value: strconv.Itoa(DefTiDBStmtSummaryMaxStmtCount), Type: TypeInt, MinValue: 1, MaxValue: math.MaxInt16, AllowEmpty: true, + SetGlobal: func(s *SessionVars, val string) error { + return stmtsummary.StmtSummaryByDigestMap.SetMaxStmtCount(uint(TidbOptInt(val, DefTiDBStmtSummaryMaxStmtCount))) + }}, + {Scope: ScopeGlobal, Name: TiDBStmtSummaryMaxSQLLength, Value: strconv.Itoa(DefTiDBStmtSummaryMaxSQLLength), Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt32, AllowEmpty: true, + SetGlobal: func(s *SessionVars, val string) error { + return stmtsummary.StmtSummaryByDigestMap.SetMaxSQLLength(TidbOptInt(val, DefTiDBStmtSummaryMaxSQLLength)) + }}, + {Scope: ScopeGlobal, Name: TiDBCapturePlanBaseline, Value: DefTiDBCapturePlanBaseline, Type: TypeBool, AllowEmptyAll: true}, + {Scope: ScopeGlobal, Name: TiDBEvolvePlanTaskMaxTime, Value: strconv.Itoa(DefTiDBEvolvePlanTaskMaxTime), Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64}, + {Scope: ScopeGlobal, Name: TiDBEvolvePlanTaskStartTime, Value: DefTiDBEvolvePlanTaskStartTime, Type: TypeTime}, + {Scope: ScopeGlobal, Name: TiDBEvolvePlanTaskEndTime, Value: DefTiDBEvolvePlanTaskEndTime, Type: TypeTime}, + {Scope: ScopeGlobal, Name: TiDBStoreLimit, Value: strconv.FormatInt(atomic.LoadInt64(&config.GetGlobalConfig().TiKVClient.StoreLimit), 10), Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt64, GetGlobal: func(s *SessionVars) (string, error) { + return strconv.FormatInt(tikvstore.StoreLimit.Load(), 10), nil + }, SetGlobal: func(s *SessionVars, val string) error { + tikvstore.StoreLimit.Store(TidbOptInt64(val, DefTiDBStoreLimit)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBRestrictedReadOnly, Value: BoolToOnOff(DefTiDBRestrictedReadOnly), Type: TypeBool, SetGlobal: func(s *SessionVars, val string) error { + on := TiDBOptOn(val) + if on { + err := s.GlobalVarsAccessor.SetGlobalSysVar(TiDBSuperReadOnly, "ON") + if err != nil { + return err + } + } + RestrictedReadOnly.Store(on) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBSuperReadOnly, Value: BoolToOnOff(DefTiDBSuperReadOnly), Type: TypeBool, Validation: func(vars *SessionVars, normalizedValue string, _ string, _ ScopeFlag) (string, error) { + on := TiDBOptOn(normalizedValue) + if !on { + result, err := vars.GlobalVarsAccessor.GetGlobalSysVar(TiDBRestrictedReadOnly) + if err != nil { + return normalizedValue, err + } + if TiDBOptOn(result) { + return normalizedValue, fmt.Errorf("can't turn off %s when %s is on", TiDBSuperReadOnly, TiDBRestrictedReadOnly) + } + } + return normalizedValue, nil + }, SetGlobal: func(s *SessionVars, val string) error { + VarTiDBSuperReadOnly.Store(TiDBOptOn(val)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBEnableTelemetry, Value: BoolToOnOff(DefTiDBEnableTelemetry), Type: TypeBool}, + {Scope: ScopeGlobal, Name: TiDBEnableHistoricalStats, Value: Off, Type: TypeBool, GetGlobal: func(s *SessionVars) (string, error) { + return getTiDBTableValue(s, "tidb_enable_historical_stats", Off) + }, SetGlobal: func(s *SessionVars, val string) error { + return setTiDBTableValue(s, "tidb_enable_historical_stats", val, "Current historical statistics enable status") + }}, + /* tikv gc metrics */ + {Scope: ScopeGlobal, Name: TiDBGCEnable, Value: On, Type: TypeBool, GetGlobal: func(s *SessionVars) (string, error) { + return getTiDBTableValue(s, "tikv_gc_enable", On) + }, SetGlobal: func(s *SessionVars, val string) error { + return setTiDBTableValue(s, "tikv_gc_enable", val, "Current GC enable status") + }}, + {Scope: ScopeGlobal, Name: TiDBGCRunInterval, Value: "10m0s", Type: TypeDuration, MinValue: int64(time.Minute * 10), MaxValue: uint64(time.Hour * 24 * 365), GetGlobal: func(s *SessionVars) (string, error) { + return getTiDBTableValue(s, "tikv_gc_run_interval", "10m0s") + }, SetGlobal: func(s *SessionVars, val string) error { + return setTiDBTableValue(s, "tikv_gc_run_interval", val, "GC run interval, at least 10m, in Go format.") + }}, + {Scope: ScopeGlobal, Name: TiDBGCLifetime, Value: "10m0s", Type: TypeDuration, MinValue: int64(time.Minute * 10), MaxValue: uint64(time.Hour * 24 * 365), GetGlobal: func(s *SessionVars) (string, error) { + return getTiDBTableValue(s, "tikv_gc_life_time", "10m0s") + }, SetGlobal: func(s *SessionVars, val string) error { + return setTiDBTableValue(s, "tikv_gc_life_time", val, "All versions within life time will not be collected by GC, at least 10m, in Go format.") + }}, + {Scope: ScopeGlobal, Name: TiDBGCConcurrency, Value: "-1", Type: TypeInt, MinValue: 1, MaxValue: MaxConfigurableConcurrency, AllowAutoValue: true, GetGlobal: func(s *SessionVars) (string, error) { + autoConcurrencyVal, err := getTiDBTableValue(s, "tikv_gc_auto_concurrency", On) + if err == nil && autoConcurrencyVal == On { + return "-1", nil // convention for "AUTO" + } + return getTiDBTableValue(s, "tikv_gc_concurrency", "-1") + }, SetGlobal: func(s *SessionVars, val string) error { + autoConcurrency := Off + if val == "-1" { + autoConcurrency = On + } + // Update both autoconcurrency and concurrency. + if err := setTiDBTableValue(s, "tikv_gc_auto_concurrency", autoConcurrency, "Let TiDB pick the concurrency automatically. If set false, tikv_gc_concurrency will be used"); err != nil { + return err + } + return setTiDBTableValue(s, "tikv_gc_concurrency", val, "How many goroutines used to do GC parallel, [1, 256], default 2") + }}, + {Scope: ScopeGlobal, Name: TiDBGCScanLockMode, Value: "LEGACY", Type: TypeEnum, PossibleValues: []string{"PHYSICAL", "LEGACY"}, GetGlobal: func(s *SessionVars) (string, error) { + return getTiDBTableValue(s, "tikv_gc_scan_lock_mode", "LEGACY") + }, SetGlobal: func(s *SessionVars, val string) error { + return setTiDBTableValue(s, "tikv_gc_scan_lock_mode", val, "Mode of scanning locks, \"physical\" or \"legacy\"") + }}, + {Scope: ScopeGlobal, Name: TiDBTableCacheLease, Value: strconv.Itoa(DefTiDBTableCacheLease), Type: TypeUnsigned, MinValue: 1, MaxValue: 10, SetGlobal: func(s *SessionVars, sVal string) error { + var val int64 + val, err := strconv.ParseInt(sVal, 10, 64) + if err != nil { + return errors.Trace(err) + } + TableCacheLease.Store(val) + return nil + }}, + // variable for top SQL feature. + // TopSQL enable only be controlled by TopSQL pub/sub sinker. + // This global variable only uses to update the global config which store in PD(ETCD). + {Scope: ScopeGlobal, Name: TiDBEnableTopSQL, Value: BoolToOnOff(topsqlstate.DefTiDBTopSQLEnable), Type: TypeBool, AllowEmpty: true, GlobalConfigName: GlobalConfigEnableTopSQL}, + {Scope: ScopeGlobal, Name: TiDBTopSQLMaxTimeSeriesCount, Value: strconv.Itoa(topsqlstate.DefTiDBTopSQLMaxTimeSeriesCount), Type: TypeInt, MinValue: 1, MaxValue: 5000, GetGlobal: func(s *SessionVars) (string, error) { + return strconv.FormatInt(topsqlstate.GlobalState.MaxStatementCount.Load(), 10), nil + }, SetGlobal: func(vars *SessionVars, s string) error { + val, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return err + } + topsqlstate.GlobalState.MaxStatementCount.Store(val) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBTopSQLMaxMetaCount, Value: strconv.Itoa(topsqlstate.DefTiDBTopSQLMaxMetaCount), Type: TypeInt, MinValue: 1, MaxValue: 10000, GetGlobal: func(s *SessionVars) (string, error) { + return strconv.FormatInt(topsqlstate.GlobalState.MaxCollect.Load(), 10), nil + }, SetGlobal: func(vars *SessionVars, s string) error { + val, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return err + } + topsqlstate.GlobalState.MaxCollect.Store(val) + return nil + }}, + {Scope: ScopeGlobal, Name: SkipNameResolve, Value: Off, Type: TypeBool}, + {Scope: ScopeGlobal, Name: DefaultAuthPlugin, Value: mysql.AuthNativePassword, Type: TypeEnum, PossibleValues: []string{mysql.AuthNativePassword, mysql.AuthCachingSha2Password}}, + {Scope: ScopeGlobal, Name: TiDBPersistAnalyzeOptions, Value: BoolToOnOff(DefTiDBPersistAnalyzeOptions), skipInit: true, Type: TypeBool, + GetGlobal: func(s *SessionVars) (string, error) { + return BoolToOnOff(PersistAnalyzeOptions.Load()), nil + }, + SetGlobal: func(s *SessionVars, val string) error { + PersistAnalyzeOptions.Store(TiDBOptOn(val)) + return nil + }, + }, + {Scope: ScopeGlobal, Name: TiDBEnableColumnTracking, Value: BoolToOnOff(DefTiDBEnableColumnTracking), skipInit: true, Type: TypeBool, GetGlobal: func(s *SessionVars) (string, error) { + return BoolToOnOff(EnableColumnTracking.Load()), nil + }, SetGlobal: func(s *SessionVars, val string) error { + v := TiDBOptOn(val) + if !v { + // Set the location to UTC to avoid time zone interference. + disableTime := time.Now().UTC().Format(types.UTCTimeFormat) + if err := setTiDBTableValue(s, TiDBDisableColumnTrackingTime, disableTime, "Record the last time tidb_enable_column_tracking is set off"); err != nil { + return err + } + } + EnableColumnTracking.Store(v) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBStatsLoadPseudoTimeout, Value: BoolToOnOff(DefTiDBStatsLoadPseudoTimeout), skipInit: true, Type: TypeBool, + GetGlobal: func(s *SessionVars) (string, error) { + return strconv.FormatBool(StatsLoadPseudoTimeout.Load()), nil + }, + SetGlobal: func(s *SessionVars, val string) error { + StatsLoadPseudoTimeout.Store(TiDBOptOn(val)) + return nil + }, + }, + + /* The system variables below have GLOBAL and SESSION scope */ {Scope: ScopeGlobal | ScopeSession, Name: SQLSelectLimit, Value: "18446744073709551615", Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxUint64, SetSession: func(s *SessionVars, val string) error { result, err := strconv.ParseUint(val, 10, 64) if err != nil { @@ -98,7 +725,6 @@ var defaultSysVars = []*SysVar{ s.TimeZone = tz return nil }}, - {Scope: ScopeNone, Name: SystemTimeZone, Value: "CST"}, {Scope: ScopeGlobal | ScopeSession, Name: ForeignKeyChecks, Value: Off, Type: TypeBool, skipInit: true, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { if TiDBOptOn(normalizedValue) { // TiDB does not yet support foreign keys. @@ -110,14 +736,6 @@ var defaultSysVars = []*SysVar{ } return normalizedValue, ErrWrongValueForVar.GenWithStackByArgs(ForeignKeyChecks, originalValue) }}, - {Scope: ScopeNone, Name: Hostname, Value: DefHostname}, - {Scope: ScopeSession, Name: Timestamp, Value: DefTimestamp, skipInit: true, MinValue: 0, MaxValue: 2147483647, Type: TypeFloat, GetSession: func(s *SessionVars) (string, error) { - if timestamp, ok := s.systems[Timestamp]; ok && timestamp != DefTimestamp { - return timestamp, nil - } - timestamp := s.StmtCtx.GetOrStoreStmtCache(stmtctx.StmtNowTsCacheKey, time.Now()).(time.Time) - return types.ToString(float64(timestamp.UnixNano()) / float64(time.Second)) - }}, {Scope: ScopeGlobal | ScopeSession, Name: CollationDatabase, Value: mysql.DefaultCollationName, skipInit: true, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { return checkCollation(vars, normalizedValue, originalValue, scope) }, SetSession: func(s *SessionVars, val string) error { @@ -139,16 +757,12 @@ var defaultSysVars = []*SysVar{ {Scope: ScopeGlobal | ScopeSession, Name: CharacterSetClient, Value: mysql.DefaultCharset, skipInit: true, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { return checkCharacterSet(normalizedValue, CharacterSetClient) }}, - {Scope: ScopeNone, Name: Port, Value: "4000", Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxUint16}, - {Scope: ScopeNone, Name: LowerCaseTableNames, Value: "2"}, - {Scope: ScopeNone, Name: LogBin, Value: Off, Type: TypeBool}, {Scope: ScopeGlobal | ScopeSession, Name: CharacterSetResults, Value: mysql.DefaultCharset, skipInit: true, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { if normalizedValue == "" { return normalizedValue, nil } return checkCharacterSet(normalizedValue, "") }}, - {Scope: ScopeNone, Name: VersionComment, Value: "TiDB Server (Apache License 2.0) " + versioninfo.TiDBEdition + " Edition, MySQL 5.7 compatible"}, {Scope: ScopeGlobal | ScopeSession, Name: TxnIsolation, Value: "REPEATABLE-READ", Type: TypeEnum, Aliases: []string{TransactionIsolation}, PossibleValues: []string{"READ-UNCOMMITTED", "READ-COMMITTED", "REPEATABLE-READ", "SERIALIZABLE"}, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { // MySQL appends a warning here for tx_isolation is deprecated // TiDB doesn't currently, but may in future. It is still commonly used by applications @@ -166,7 +780,6 @@ var defaultSysVars = []*SysVar{ } return nil }}, - {Scope: ScopeNone, Name: Version, Value: mysql.ServerVersion}, {Scope: ScopeGlobal | ScopeSession, Name: AutoCommit, Value: On, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { isAutocommit := TiDBOptOn(val) s.SetStatusFlag(mysql.ServerStatusAutocommit, isAutocommit) @@ -183,11 +796,9 @@ var defaultSysVars = []*SysVar{ } return nil }}, - {Scope: ScopeGlobal, Name: MaxPreparedStmtCount, Value: strconv.FormatInt(DefMaxPreparedStmtCount, 10), Type: TypeInt, MinValue: -1, MaxValue: 1048576}, - {Scope: ScopeNone, Name: DataDir, Value: "/usr/local/mysql/data/"}, {Scope: ScopeGlobal | ScopeSession, Name: WaitTimeout, Value: strconv.FormatInt(DefWaitTimeout, 10), Type: TypeUnsigned, MinValue: 0, MaxValue: secondsPerYear}, {Scope: ScopeGlobal | ScopeSession, Name: InteractiveTimeout, Value: "28800", Type: TypeUnsigned, MinValue: 1, MaxValue: secondsPerYear}, - {Scope: ScopeGlobal | ScopeSession, Name: InnodbLockWaitTimeout, Value: strconv.FormatInt(DefInnodbLockWaitTimeout, 10), Type: TypeUnsigned, MinValue: 1, MaxValue: 1073741824, SetSession: func(s *SessionVars, val string) error { + {Scope: ScopeGlobal | ScopeSession, Name: InnodbLockWaitTimeout, Value: strconv.FormatInt(DefInnodbLockWaitTimeout, 10), Type: TypeUnsigned, MinValue: 1, MaxValue: 3600, SetSession: func(s *SessionVars, val string) error { lockWaitSec := TidbOptInt64(val, DefInnodbLockWaitTimeout) s.LockWaitTimeout = lockWaitSec * 1000 return nil @@ -207,7 +818,6 @@ var defaultSysVars = []*SysVar{ } return normalizedValue, nil }}, - {Scope: ScopeNone, Name: Socket, Value: ""}, {Scope: ScopeGlobal | ScopeSession, Name: CharacterSetConnection, Value: mysql.DefaultCharset, skipInit: true, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { return checkCharacterSet(normalizedValue, CharacterSetConnection) }, SetSession: func(s *SessionVars, val string) error { @@ -225,88 +835,12 @@ var defaultSysVars = []*SysVar{ return nil }}, {Scope: ScopeGlobal | ScopeSession, Name: MaxAllowedPacket, Value: "67108864", Type: TypeUnsigned, MinValue: 1024, MaxValue: MaxOfMaxAllowedPacket}, - {Scope: ScopeSession, Name: WarningCount, Value: "0", ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { - return strconv.Itoa(s.SysWarningCount), nil - }}, - {Scope: ScopeSession, Name: ErrorCount, Value: "0", ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { - return strconv.Itoa(int(s.SysErrorCount)), nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: WindowingUseHighPrecision, Value: On, Type: TypeBool, IsHintUpdatable: true, SetSession: func(s *SessionVars, val string) error { s.WindowingUseHighPrecision = TiDBOptOn(val) return nil }}, - {Scope: ScopeNone, Name: "license", Value: "Apache License 2.0"}, {Scope: ScopeGlobal | ScopeSession, Name: BlockEncryptionMode, Value: "aes-128-ecb"}, - {Scope: ScopeSession, Name: LastInsertID, Value: "", skipInit: true, GetSession: func(s *SessionVars) (string, error) { - return strconv.FormatUint(s.StmtCtx.PrevLastInsertID, 10), nil - }}, - {Scope: ScopeSession, Name: Identity, Value: "", skipInit: true, GetSession: func(s *SessionVars) (string, error) { - return strconv.FormatUint(s.StmtCtx.PrevLastInsertID, 10), nil - }}, - {Scope: ScopeNone, Name: "have_ssl", Value: "DISABLED"}, - {Scope: ScopeNone, Name: "have_openssl", Value: "DISABLED"}, - {Scope: ScopeNone, Name: "ssl_ca", Value: ""}, - {Scope: ScopeNone, Name: "ssl_cert", Value: ""}, - {Scope: ScopeNone, Name: "ssl_key", Value: ""}, - {Scope: ScopeGlobal, Name: InitConnect, Value: ""}, - /* TiDB specific variables */ - {Scope: ScopeGlobal, Name: TiDBTSOClientBatchMaxWaitTime, Value: strconv.FormatFloat(DefTiDBTSOClientBatchMaxWaitTime, 'f', -1, 64), Type: TypeFloat, MinValue: 0, MaxValue: 10, - GetGlobal: func(sv *SessionVars) (string, error) { - return strconv.FormatFloat(MaxTSOBatchWaitInterval.Load(), 'f', -1, 64), nil - }, - SetGlobal: func(s *SessionVars, val string) error { - MaxTSOBatchWaitInterval.Store(tidbOptFloat64(val, DefTiDBTSOClientBatchMaxWaitTime)) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBEnableTSOFollowerProxy, Value: BoolToOnOff(DefTiDBEnableTSOFollowerProxy), Type: TypeBool, GetGlobal: func(sv *SessionVars) (string, error) { - return BoolToOnOff(EnableTSOFollowerProxy.Load()), nil - }, SetGlobal: func(s *SessionVars, val string) error { - EnableTSOFollowerProxy.Store(TiDBOptOn(val)) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBEnableLocalTxn, Value: BoolToOnOff(DefTiDBEnableLocalTxn), Hidden: true, Type: TypeBool, GetGlobal: func(sv *SessionVars) (string, error) { - return BoolToOnOff(EnableLocalTxn.Load()), nil - }, SetGlobal: func(s *SessionVars, val string) error { - oldVal := EnableLocalTxn.Load() - newVal := TiDBOptOn(val) - // Make sure the TxnScope is always Global when disable the Local Txn. - // ON -> OFF - if oldVal && !newVal { - s.TxnScope = kv.NewGlobalTxnScopeVar() - } - EnableLocalTxn.Store(newVal) - return nil - }}, - // TODO: TiDBTxnScope is hidden because local txn feature is not done. - {Scope: ScopeSession, Name: TiDBTxnScope, skipInit: true, Hidden: true, Value: kv.GlobalTxnScope, SetSession: func(s *SessionVars, val string) error { - switch val { - case kv.GlobalTxnScope: - s.TxnScope = kv.NewGlobalTxnScopeVar() - case kv.LocalTxnScope: - if !EnableLocalTxn.Load() { - return ErrWrongValueForVar.GenWithStack("@@txn_scope can not be set to local when tidb_enable_local_txn is off") - } - txnScope := config.GetTxnScopeFromConfig() - if txnScope == kv.GlobalTxnScope { - return ErrWrongValueForVar.GenWithStack("@@txn_scope can not be set to local when zone label is empty or \"global\"") - } - s.TxnScope = kv.NewLocalTxnScopeVar(txnScope) - default: - return ErrWrongValueForVar.GenWithStack("@@txn_scope value should be global or local") - } - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return s.TxnScope.GetVarValue(), nil - }}, - {Scope: ScopeSession, Name: TiDBTxnReadTS, Value: "", Hidden: true, SetSession: func(s *SessionVars, val string) error { - return setTxnReadTS(s, val) - }, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - return normalizedValue, nil - }}, - {Scope: ScopeSession, Name: TiDBReadStaleness, Value: "", Hidden: false, SetSession: func(s *SessionVars, val string) error { - return setReadStaleness(s, val) - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBAllowMPPExecution, Type: TypeBool, Value: BoolToOnOff(DefTiDBAllowMPPExecution), SetSession: func(s *SessionVars, val string) error { s.allowMPPExecution = TiDBOptOn(val) return nil @@ -319,15 +853,6 @@ var defaultSysVars = []*SysVar{ s.HashExchangeWithNewCollation = TiDBOptOn(val) return nil }}, - {Scope: ScopeSession, Name: TiDBEnforceMPPExecution, Type: TypeBool, Value: BoolToOnOff(config.GetGlobalConfig().Performance.EnforceMPP), Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - if TiDBOptOn(normalizedValue) && !vars.allowMPPExecution { - return normalizedValue, ErrWrongValueForVar.GenWithStackByArgs("tidb_enforce_mpp", "1' but tidb_allow_mpp is 0, please activate tidb_allow_mpp at first.") - } - return normalizedValue, nil - }, SetSession: func(s *SessionVars, val string) error { - s.enforceMPPExecution = TiDBOptOn(val) - return nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBBCJThresholdCount, Value: strconv.Itoa(DefBroadcastJoinThresholdCount), Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { s.BroadcastJoinThresholdCount = TidbOptInt64(val, DefBroadcastJoinThresholdCount) return nil @@ -336,34 +861,6 @@ var defaultSysVars = []*SysVar{ s.BroadcastJoinThresholdSize = TidbOptInt64(val, DefBroadcastJoinThresholdSize) return nil }}, - {Scope: ScopeSession, Name: TiDBSnapshot, Value: "", skipInit: true, SetSession: func(s *SessionVars, val string) error { - err := setSnapshotTS(s, val) - if err != nil { - return err - } - return nil - }}, - {Scope: ScopeSession, Name: TiDBOptAggPushDown, Value: BoolToOnOff(DefOptAggPushDown), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.AllowAggPushDown = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBOptBCJ, Value: BoolToOnOff(DefOptBCJ), Type: TypeBool, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - if TiDBOptOn(normalizedValue) && vars.AllowBatchCop == 0 { - return normalizedValue, ErrWrongValueForVar.GenWithStackByArgs(TiDBOptBCJ, "'true' while tidb_allow_batch_cop is 0, please active batch cop at first.") - } - return normalizedValue, nil - }, SetSession: func(s *SessionVars, val string) error { - s.AllowBCJ = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeSession, Name: TiDBOptDistinctAggPushDown, Value: BoolToOnOff(config.GetGlobalConfig().Performance.DistinctAggPushDown), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - s.AllowDistinctAggPushDown = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeSession, Name: TiDBOptWriteRowID, Value: BoolToOnOff(DefOptWriteRowID), skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.AllowWriteRowID = TiDBOptOn(val) - return nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBBuildStatsConcurrency, skipInit: true, Value: strconv.Itoa(DefBuildStatsConcurrency)}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBOptCartesianBCJ, Value: strconv.Itoa(DefOptCartesianBCJ), Type: TypeInt, MinValue: 0, MaxValue: 2, SetSession: func(s *SessionVars, val string) error { s.AllowCartesianBCJ = TidbOptInt(val, DefOptCartesianBCJ) @@ -373,10 +870,6 @@ var defaultSysVars = []*SysVar{ s.MPPOuterJoinFixedBuildSide = TiDBOptOn(val) return nil }}, - {Scope: ScopeGlobal, Name: TiDBAutoAnalyzeRatio, Value: strconv.FormatFloat(DefAutoAnalyzeRatio, 'f', -1, 64), Type: TypeFloat, MinValue: 0, MaxValue: math.MaxUint64}, - {Scope: ScopeGlobal, Name: TiDBAutoAnalyzeStartTime, Value: DefAutoAnalyzeStartTime, Type: TypeTime}, - {Scope: ScopeGlobal, Name: TiDBAutoAnalyzeEndTime, Value: DefAutoAnalyzeEndTime, Type: TypeTime}, - {Scope: ScopeSession, Name: TiDBChecksumTableConcurrency, skipInit: true, Value: strconv.Itoa(DefChecksumTableConcurrency)}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBExecutorConcurrency, Value: strconv.Itoa(DefExecutorConcurrency), Type: TypeUnsigned, MinValue: 1, MaxValue: MaxConfigurableConcurrency, SetSession: func(s *SessionVars, val string) error { s.ExecutorConcurrency = tidbOptPositiveInt32(val, DefExecutorConcurrency) return nil @@ -393,11 +886,10 @@ var defaultSysVars = []*SysVar{ s.SetAllowPreferRangeScan(TiDBOptOn(val)) return nil }}, - { - Scope: ScopeGlobal | ScopeSession, Name: TiDBOptLimitPushDownThreshold, Value: strconv.Itoa(DefOptLimitPushDownThreshold), Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { - s.LimitPushDownThreshold = TidbOptInt64(val, DefOptLimitPushDownThreshold) - return nil - }}, + {Scope: ScopeGlobal | ScopeSession, Name: TiDBOptLimitPushDownThreshold, Value: strconv.Itoa(DefOptLimitPushDownThreshold), Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { + s.LimitPushDownThreshold = TidbOptInt64(val, DefOptLimitPushDownThreshold) + return nil + }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBOptCorrelationThreshold, Value: strconv.FormatFloat(DefOptCorrelationThreshold, 'f', -1, 64), Type: TypeFloat, MinValue: 0, MaxValue: 1, SetSession: func(s *SessionVars, val string) error { s.CorrelationThreshold = tidbOptFloat64(val, DefOptCorrelationThreshold) return nil @@ -446,6 +938,10 @@ var defaultSysVars = []*SysVar{ s.DiskFactor = tidbOptFloat64(val, DefOptDiskFactor) return nil }}, + {Scope: ScopeGlobal | ScopeSession, Name: TiDBOptimizerEnableNewOnlyFullGroupByCheck, Value: BoolToOnOff(DefTiDBOptimizerEnableNewOFGB), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.OptimizerEnableNewOnlyFullGroupByCheck = TiDBOptOn(val) + return nil + }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBOptConcurrencyFactor, Value: strconv.FormatFloat(DefOptConcurrencyFactor, 'f', -1, 64), Type: TypeFloat, MinValue: 0, MaxValue: math.MaxUint64, SetSession: func(s *SessionVars, val string) error { s.ConcurrencyFactor = tidbOptFloat64(val, DefOptConcurrencyFactor) return nil @@ -484,45 +980,15 @@ var defaultSysVars = []*SysVar{ s.SkipASCIICheck = TiDBOptOn(val) return nil }}, - {Scope: ScopeSession, Name: TiDBBatchInsert, Value: BoolToOnOff(DefBatchInsert), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.BatchInsert = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeSession, Name: TiDBBatchDelete, Value: BoolToOnOff(DefBatchDelete), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.BatchDelete = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeSession, Name: TiDBBatchCommit, Value: BoolToOnOff(DefBatchCommit), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.BatchCommit = TiDBOptOn(val) - return nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBDMLBatchSize, Value: strconv.Itoa(DefDMLBatchSize), Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { s.DMLBatchSize = int(TidbOptInt64(val, DefDMLBatchSize)) return nil }}, - {Scope: ScopeSession, Name: TiDBCurrentTS, Value: strconv.Itoa(DefCurretTS), ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { - return strconv.FormatUint(s.TxnCtx.StartTS, 10), nil - }}, - {Scope: ScopeSession, Name: TiDBLastTxnInfo, Value: strconv.Itoa(DefCurretTS), ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { - return s.LastTxnInfo, nil - }}, - {Scope: ScopeSession, Name: TiDBLastQueryInfo, Value: strconv.Itoa(DefCurretTS), ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { - info, err := json.Marshal(s.LastQueryInfo) - if err != nil { - return "", err - } - return string(info), nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBMaxChunkSize, Value: strconv.Itoa(DefMaxChunkSize), Type: TypeUnsigned, MinValue: maxChunkSizeLowerBound, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { s.MaxChunkSize = tidbOptPositiveInt32(val, DefMaxChunkSize) return nil }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBAllowBatchCop, Value: strconv.Itoa(DefTiDBAllowBatchCop), Type: TypeInt, MinValue: 0, MaxValue: 2, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - if normalizedValue == "0" && vars.AllowBCJ { - return normalizedValue, ErrWrongValueForVar.GenWithStackByArgs(TiDBAllowBatchCop, "'0' while tidb_opt_broadcast_join is true, please set tidb_opt_broadcast_join false at first") - } - return normalizedValue, nil - }, SetSession: func(s *SessionVars, val string) error { + {Scope: ScopeGlobal | ScopeSession, Name: TiDBAllowBatchCop, Value: strconv.Itoa(DefTiDBAllowBatchCop), Type: TypeInt, MinValue: 0, MaxValue: 2, SetSession: func(s *SessionVars, val string) error { s.AllowBatchCop = int(TidbOptInt64(val, DefTiDBAllowBatchCop)) return nil }}, @@ -534,70 +1000,8 @@ var defaultSysVars = []*SysVar{ s.SetEnableCascadesPlanner(TiDBOptOn(val)) return nil }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableIndexMerge, Value: BoolToOnOff(DefTiDBEnableIndexMerge), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - s.SetEnableIndexMerge(TiDBOptOn(val)) - return nil - }}, - {Scope: ScopeSession, Name: TiDBMemQuotaQuery, Value: strconv.FormatInt(config.GetGlobalConfig().MemQuotaQuery, 10), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - s.MemQuotaQuery = TidbOptInt64(val, config.GetGlobalConfig().MemQuotaQuery) - return nil - }}, - {Scope: ScopeSession, Name: TiDBMemQuotaHashJoin, Value: strconv.FormatInt(DefTiDBMemQuotaHashJoin, 10), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - s.MemQuotaHashJoin = TidbOptInt64(val, DefTiDBMemQuotaHashJoin) - return nil - }, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - appendDeprecationWarning(vars, TiDBMemQuotaHashJoin, TiDBMemQuotaQuery) - return normalizedValue, nil - }}, - {Scope: ScopeSession, Name: TiDBMemQuotaMergeJoin, Value: strconv.FormatInt(DefTiDBMemQuotaMergeJoin, 10), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - s.MemQuotaMergeJoin = TidbOptInt64(val, DefTiDBMemQuotaMergeJoin) - return nil - }, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - appendDeprecationWarning(vars, TiDBMemQuotaMergeJoin, TiDBMemQuotaQuery) - return normalizedValue, nil - }}, - {Scope: ScopeSession, Name: TiDBMemQuotaSort, Value: strconv.FormatInt(DefTiDBMemQuotaSort, 10), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - s.MemQuotaSort = TidbOptInt64(val, DefTiDBMemQuotaSort) - return nil - }, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - appendDeprecationWarning(vars, TiDBMemQuotaSort, TiDBMemQuotaQuery) - return normalizedValue, nil - }}, - {Scope: ScopeSession, Name: TiDBMemQuotaTopn, Value: strconv.FormatInt(DefTiDBMemQuotaTopn, 10), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - s.MemQuotaTopn = TidbOptInt64(val, DefTiDBMemQuotaTopn) - return nil - }, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - appendDeprecationWarning(vars, TiDBMemQuotaTopn, TiDBMemQuotaQuery) - return normalizedValue, nil - }}, - {Scope: ScopeSession, Name: TiDBMemQuotaIndexLookupReader, Value: strconv.FormatInt(DefTiDBMemQuotaIndexLookupReader, 10), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - s.MemQuotaIndexLookupReader = TidbOptInt64(val, DefTiDBMemQuotaIndexLookupReader) - return nil - }, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - appendDeprecationWarning(vars, TiDBMemQuotaIndexLookupReader, TiDBMemQuotaQuery) - return normalizedValue, nil - }}, - {Scope: ScopeSession, Name: TiDBMemQuotaIndexLookupJoin, Value: strconv.FormatInt(DefTiDBMemQuotaIndexLookupJoin, 10), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - s.MemQuotaIndexLookupJoin = TidbOptInt64(val, DefTiDBMemQuotaIndexLookupJoin) - return nil - }, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - appendDeprecationWarning(vars, TiDBMemQuotaIndexLookupJoin, TiDBMemQuotaQuery) - return normalizedValue, nil - }}, - // Deprecated: tidb_enable_streaming - {Scope: ScopeSession, Name: TiDBEnableStreaming, Value: Off, Type: TypeBool, skipInit: true, Hidden: true, SetSession: func(s *SessionVars, val string) error { - s.EnableStreaming = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeSession, Name: TiDBEnableChunkRPC, Value: On, Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.EnableChunkRPC = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeSession, Name: TxnIsolationOneShot, Value: "", skipInit: true, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - return checkIsolationLevel(vars, normalizedValue, originalValue, scope) - }, SetSession: func(s *SessionVars, val string) error { - s.txnIsolationLevelOneShot.state = oneShotSet - s.txnIsolationLevelOneShot.value = val + {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableIndexMerge, Value: BoolToOnOff(DefTiDBEnableIndexMerge), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.SetEnableIndexMerge(TiDBOptOn(val)) return nil }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableTablePartition, Value: On, Type: TypeEnum, PossibleValues: []string{Off, On, "AUTO"}, SetSession: func(s *SessionVars, val string) error { @@ -650,7 +1054,6 @@ var defaultSysVars = []*SysVar{ appendDeprecationWarning(vars, TiDBMergeJoinConcurrency, TiDBExecutorConcurrency) return normalizedValue, nil }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBStreamAggConcurrency, Value: strconv.Itoa(DefTiDBStreamAggConcurrency), Type: TypeInt, MinValue: 1, MaxValue: MaxConfigurableConcurrency, AllowAutoValue: true, SetSession: func(s *SessionVars, val string) error { s.streamAggConcurrency = tidbOptPositiveInt32(val, ConcurrencyUnset) return nil @@ -666,12 +1069,6 @@ var defaultSysVars = []*SysVar{ s.MemQuotaApplyCache = TidbOptInt64(val, DefTiDBMemQuotaApplyCache) return nil }}, - {Scope: ScopeGlobal, Name: TiDBMemQuotaBindCache, Value: strconv.FormatInt(DefTiDBMemQuotaBindCache, 10), Type: TypeUnsigned, MaxValue: math.MaxInt32, GetGlobal: func(sv *SessionVars) (string, error) { - return strconv.FormatInt(MemQuotaBindCache.Load(), 10), nil - }, SetGlobal: func(s *SessionVars, val string) error { - MemQuotaBindCache.Store(TidbOptInt64(val, DefTiDBMemQuotaBindCache)) - return nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBBackoffLockFast, Value: strconv.Itoa(tikvstore.DefBackoffLockFast), Type: TypeUnsigned, MinValue: 1, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { s.KVVars.BackoffLockFast = tidbOptPositiveInt32(val, tikvstore.DefBackoffLockFast) return nil @@ -696,20 +1093,6 @@ var defaultSysVars = []*SysVar{ s.TxnMode = strings.ToUpper(val) return nil }}, - {Scope: ScopeGlobal, Name: TiDBRowFormatVersion, Value: strconv.Itoa(DefTiDBRowFormatV1), Type: TypeUnsigned, MinValue: 1, MaxValue: 2, SetSession: func(s *SessionVars, val string) error { - formatVersion := int(TidbOptInt64(val, DefTiDBRowFormatV1)) - if formatVersion == DefTiDBRowFormatV1 { - s.RowEncoder.Enable = false - } else if formatVersion == DefTiDBRowFormatV2 { - s.RowEncoder.Enable = true - } - SetDDLReorgRowFormat(TidbOptInt64(val, DefTiDBRowFormatV2)) - return nil - }}, - {Scope: ScopeSession, Name: TiDBOptimizerSelectivityLevel, Value: strconv.Itoa(DefTiDBOptimizerSelectivityLevel), skipInit: true, Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { - s.OptimizerSelectivityLevel = tidbOptPositiveInt32(val, DefTiDBOptimizerSelectivityLevel) - return nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableWindowFunction, Value: BoolToOnOff(DefEnableWindowFunction), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { s.EnableWindowFunction = TiDBOptOn(val) return nil @@ -768,136 +1151,18 @@ var defaultSysVars = []*SysVar{ } return nil }}, - /* The following variable is defined as session scope but is actually server scope. */ - {Scope: ScopeSession, Name: TiDBGeneralLog, Value: BoolToOnOff(DefTiDBGeneralLog), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { - ProcessGeneralLog.Store(TiDBOptOn(val)) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return BoolToOnOff(ProcessGeneralLog.Load()), nil - }}, - {Scope: ScopeSession, Name: TiDBLogFileMaxDays, Value: strconv.Itoa(config.GetGlobalConfig().Log.File.MaxDays), Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt32, skipInit: true, SetSession: func(s *SessionVars, val string) error { - maxAge, err := strconv.ParseInt(val, 10, 32) - if err != nil { - return err - } - - GlobalLogMaxDays.Store(int32(maxAge)) - - cfg := config.GetGlobalConfig().Log.ToLogConfig() - cfg.Config.File.MaxDays = int(maxAge) - - err = logutil.ReplaceLogger(cfg) - if err != nil { - return err - } - - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return strconv.FormatInt(int64(GlobalLogMaxDays.Load()), 10), nil - }}, - {Scope: ScopeSession, Name: TiDBPProfSQLCPU, Value: strconv.Itoa(DefTiDBPProfSQLCPU), Type: TypeInt, skipInit: true, MinValue: 0, MaxValue: 1, SetSession: func(s *SessionVars, val string) error { - EnablePProfSQLCPU.Store(uint32(tidbOptPositiveInt32(val, DefTiDBPProfSQLCPU)) > 0) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - val := "0" - if EnablePProfSQLCPU.Load() { - val = "1" - } - return val, nil - }}, - {Scope: ScopeSession, Name: TiDBDDLSlowOprThreshold, Value: strconv.Itoa(DefTiDBDDLSlowOprThreshold), skipInit: true, SetSession: func(s *SessionVars, val string) error { - atomic.StoreUint32(&DDLSlowOprThreshold, uint32(tidbOptPositiveInt32(val, DefTiDBDDLSlowOprThreshold))) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return strconv.FormatUint(uint64(atomic.LoadUint32(&DDLSlowOprThreshold)), 10), nil - }}, - {Scope: ScopeSession, Name: TiDBConfig, Value: "", ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { - conf := config.GetGlobalConfig() - j, err := json.MarshalIndent(conf, "", "\t") - if err != nil { - return "", err - } - return config.HideConfig(string(j)), nil - }}, - {Scope: ScopeGlobal, Name: TiDBDDLReorgWorkerCount, Value: strconv.Itoa(DefTiDBDDLReorgWorkerCount), Type: TypeUnsigned, MinValue: 1, MaxValue: MaxConfigurableConcurrency, SetSession: func(s *SessionVars, val string) error { - SetDDLReorgWorkerCounter(int32(tidbOptPositiveInt32(val, DefTiDBDDLReorgWorkerCount))) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBDDLReorgBatchSize, Value: strconv.Itoa(DefTiDBDDLReorgBatchSize), Type: TypeUnsigned, MinValue: int64(MinDDLReorgBatchSize), MaxValue: uint64(MaxDDLReorgBatchSize), SetSession: func(s *SessionVars, val string) error { - SetDDLReorgBatchSize(int32(tidbOptPositiveInt32(val, DefTiDBDDLReorgBatchSize))) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBDDLErrorCountLimit, Value: strconv.Itoa(DefTiDBDDLErrorCountLimit), Type: TypeUnsigned, MinValue: 0, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - SetDDLErrorCountLimit(TidbOptInt64(val, DefTiDBDDLErrorCountLimit)) - return nil - }}, - {Scope: ScopeSession, Name: TiDBDDLReorgPriority, Value: "PRIORITY_LOW", skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.setDDLReorgPriority(val) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBMaxDeltaSchemaCount, Value: strconv.Itoa(DefTiDBMaxDeltaSchemaCount), Type: TypeUnsigned, MinValue: 100, MaxValue: 16384, SetSession: func(s *SessionVars, val string) error { - // It's a global variable, but it also wants to be cached in server. - SetMaxDeltaSchemaCount(TidbOptInt64(val, DefTiDBMaxDeltaSchemaCount)) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBEnableChangeMultiSchema, Value: BoolToOnOff(DefTiDBChangeMultiSchema), Hidden: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - s.EnableChangeMultiSchema = TiDBOptOn(val) - return nil - }, SetGlobal: func(s *SessionVars, val string) error { - s.EnableChangeMultiSchema = TiDBOptOn(val) - return nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableAutoIncrementInGenerated, Value: BoolToOnOff(DefTiDBEnableAutoIncrementInGenerated), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { s.EnableAutoIncrementInGenerated = TiDBOptOn(val) return nil }}, - {Scope: ScopeGlobal, Name: TiDBEnablePointGetCache, Value: BoolToOnOff(DefTiDBPointGetCache), Hidden: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - s.EnablePointGetCache = TiDBOptOn(val) - return nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBPlacementMode, Value: DefTiDBPlacementMode, Type: TypeEnum, PossibleValues: []string{PlacementModeStrict, PlacementModeIgnore}, SetSession: func(s *SessionVars, val string) error { s.PlacementMode = val return nil }}, - {Scope: ScopeSession, Name: TiDBForcePriority, skipInit: true, Value: mysql.Priority2Str[DefTiDBForcePriority], SetSession: func(s *SessionVars, val string) error { - atomic.StoreInt32(&ForcePriority, int32(mysql.Str2Priority(val))) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return mysql.Priority2Str[mysql.PriorityEnum(atomic.LoadInt32(&ForcePriority))], nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBOptJoinReorderThreshold, Value: strconv.Itoa(DefTiDBOptJoinReorderThreshold), skipInit: true, Type: TypeUnsigned, MinValue: 0, MaxValue: 63, SetSession: func(s *SessionVars, val string) error { s.TiDBOptJoinReorderThreshold = tidbOptPositiveInt32(val, DefTiDBOptJoinReorderThreshold) return nil }}, - {Scope: ScopeSession, Name: TiDBSlowQueryFile, Value: "", skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.SlowQueryFile = val - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBScatterRegion, Value: BoolToOnOff(DefTiDBScatterRegion), Type: TypeBool}, - {Scope: ScopeSession, Name: TiDBWaitSplitRegionFinish, Value: BoolToOnOff(DefTiDBWaitSplitRegionFinish), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - s.WaitSplitRegionFinish = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeSession, Name: TiDBWaitSplitRegionTimeout, Value: strconv.Itoa(DefWaitSplitRegionTimeout), skipInit: true, Type: TypeUnsigned, MinValue: 1, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { - s.WaitSplitRegionTimeout = uint64(tidbOptPositiveInt32(val, DefWaitSplitRegionTimeout)) - return nil - }}, - {Scope: ScopeSession, Name: TiDBLowResolutionTSO, Value: Off, Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.LowResolutionTSO = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeSession, Name: TiDBExpensiveQueryTimeThreshold, Value: strconv.Itoa(DefTiDBExpensiveQueryTimeThreshold), Type: TypeUnsigned, MinValue: int64(MinExpensiveQueryTimeThreshold), MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { - atomic.StoreUint64(&ExpensiveQueryTimeThreshold, uint64(tidbOptPositiveInt32(val, DefTiDBExpensiveQueryTimeThreshold))) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return strconv.FormatUint(atomic.LoadUint64(&ExpensiveQueryTimeThreshold), 10), nil - }}, - {Scope: ScopeSession, Name: TiDBMemoryUsageAlarmRatio, Value: strconv.FormatFloat(config.GetGlobalConfig().Performance.MemoryUsageAlarmRatio, 'f', -1, 64), Type: TypeFloat, MinValue: 0.0, MaxValue: 1.0, skipInit: true, SetSession: func(s *SessionVars, val string) error { - MemoryUsageAlarmRatio.Store(tidbOptFloat64(val, 0.8)) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return fmt.Sprintf("%g", MemoryUsageAlarmRatio.Load()), nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableNoopFuncs, Value: DefTiDBEnableNoopFuncs, Type: TypeEnum, PossibleValues: []string{Off, On, Warn}, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { // The behavior is very weird if someone can turn TiDBEnableNoopFuncs OFF, but keep any of the following on: @@ -917,182 +1182,46 @@ var defaultSysVars = []*SysVar{ if TiDBOptOn(val) { return originalValue, errValueNotSupportedWhen.GenWithStackByArgs(TiDBEnableNoopFuncs, potentialIncompatibleSysVar) } - } - } - return normalizedValue, nil - }, SetSession: func(s *SessionVars, val string) error { - s.NoopFuncsMode = TiDBOptOnOffWarn(val) - return nil - }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBReplicaRead, Value: "leader", Type: TypeEnum, PossibleValues: []string{"leader", "follower", "leader-and-follower", "closest-replicas"}, SetSession: func(s *SessionVars, val string) error { - if strings.EqualFold(val, "follower") { - s.SetReplicaRead(kv.ReplicaReadFollower) - } else if strings.EqualFold(val, "leader-and-follower") { - s.SetReplicaRead(kv.ReplicaReadMixed) - } else if strings.EqualFold(val, "leader") || len(val) == 0 { - s.SetReplicaRead(kv.ReplicaReadLeader) - } else if strings.EqualFold(val, "closest-replicas") { - s.SetReplicaRead(kv.ReplicaReadClosest) - } - return nil - }}, - {Scope: ScopeSession, Name: TiDBAllowRemoveAutoInc, Value: BoolToOnOff(DefTiDBAllowRemoveAutoInc), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - s.AllowRemoveAutoInc = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBEnableStmtSummary, Value: BoolToOnOff(DefTiDBEnableStmtSummary), Type: TypeBool, AllowEmpty: true, - SetGlobal: func(s *SessionVars, val string) error { - return stmtsummary.StmtSummaryByDigestMap.SetEnabled(TiDBOptOn(val)) - }}, - {Scope: ScopeGlobal, Name: TiDBStmtSummaryInternalQuery, Value: BoolToOnOff(DefTiDBStmtSummaryInternalQuery), Type: TypeBool, AllowEmpty: true, - SetGlobal: func(s *SessionVars, val string) error { - return stmtsummary.StmtSummaryByDigestMap.SetEnabledInternalQuery(TiDBOptOn(val)) - }}, - {Scope: ScopeGlobal, Name: TiDBStmtSummaryRefreshInterval, Value: strconv.Itoa(DefTiDBStmtSummaryRefreshInterval), Type: TypeInt, MinValue: 1, MaxValue: math.MaxInt32, AllowEmpty: true, - SetGlobal: func(s *SessionVars, val string) error { - // convert val to int64 - return stmtsummary.StmtSummaryByDigestMap.SetRefreshInterval(TidbOptInt64(val, DefTiDBStmtSummaryRefreshInterval)) - }}, - {Scope: ScopeGlobal, Name: TiDBStmtSummaryHistorySize, Value: strconv.Itoa(DefTiDBStmtSummaryHistorySize), Type: TypeInt, MinValue: 0, MaxValue: math.MaxUint8, AllowEmpty: true, - SetGlobal: func(s *SessionVars, val string) error { - return stmtsummary.StmtSummaryByDigestMap.SetHistorySize(TidbOptInt(val, DefTiDBStmtSummaryHistorySize)) - }}, - {Scope: ScopeGlobal, Name: TiDBStmtSummaryMaxStmtCount, Value: strconv.Itoa(DefTiDBStmtSummaryMaxStmtCount), Type: TypeInt, MinValue: 1, MaxValue: math.MaxInt16, AllowEmpty: true, - SetGlobal: func(s *SessionVars, val string) error { - return stmtsummary.StmtSummaryByDigestMap.SetMaxStmtCount(uint(TidbOptInt(val, DefTiDBStmtSummaryMaxStmtCount))) - }}, - {Scope: ScopeGlobal, Name: TiDBStmtSummaryMaxSQLLength, Value: strconv.Itoa(DefTiDBStmtSummaryMaxSQLLength), Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt32, AllowEmpty: true, - SetGlobal: func(s *SessionVars, val string) error { - return stmtsummary.StmtSummaryByDigestMap.SetMaxSQLLength(TidbOptInt(val, DefTiDBStmtSummaryMaxSQLLength)) - }}, - {Scope: ScopeGlobal, Name: TiDBCapturePlanBaseline, Value: DefTiDBCapturePlanBaseline, Type: TypeBool, AllowEmptyAll: true}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBUsePlanBaselines, Value: BoolToOnOff(DefTiDBUsePlanBaselines), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - s.UsePlanBaselines = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBEvolvePlanBaselines, Value: BoolToOnOff(DefTiDBEvolvePlanBaselines), Type: TypeBool, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - if normalizedValue == "ON" && !config.CheckTableBeforeDrop { - return normalizedValue, errors.Errorf("Cannot enable baseline evolution feature, it is not generally available now") - } - return normalizedValue, nil - }, SetSession: func(s *SessionVars, val string) error { - s.EvolvePlanBaselines = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableExtendedStats, Value: BoolToOnOff(false), Hidden: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - s.EnableExtendedStats = TiDBOptOn(val) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBEvolvePlanTaskMaxTime, Value: strconv.Itoa(DefTiDBEvolvePlanTaskMaxTime), Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64}, - {Scope: ScopeGlobal, Name: TiDBEvolvePlanTaskStartTime, Value: DefTiDBEvolvePlanTaskStartTime, Type: TypeTime}, - {Scope: ScopeGlobal, Name: TiDBEvolvePlanTaskEndTime, Value: DefTiDBEvolvePlanTaskEndTime, Type: TypeTime}, - {Scope: ScopeSession, Name: TiDBIsolationReadEngines, Value: strings.Join(config.GetGlobalConfig().IsolationRead.Engines, ","), Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { - engines := strings.Split(normalizedValue, ",") - var formatVal string - for i, engine := range engines { - engine = strings.TrimSpace(engine) - if i != 0 { - formatVal += "," - } - switch { - case strings.EqualFold(engine, kv.TiKV.Name()): - formatVal += kv.TiKV.Name() - case strings.EqualFold(engine, kv.TiFlash.Name()): - formatVal += kv.TiFlash.Name() - case strings.EqualFold(engine, kv.TiDB.Name()): - formatVal += kv.TiDB.Name() - default: - return normalizedValue, ErrWrongValueForVar.GenWithStackByArgs(TiDBIsolationReadEngines, normalizedValue) - } - } - return formatVal, nil - }, SetSession: func(s *SessionVars, val string) error { - s.IsolationReadEngines = make(map[kv.StoreType]struct{}) - for _, engine := range strings.Split(val, ",") { - switch engine { - case kv.TiKV.Name(): - s.IsolationReadEngines[kv.TiKV] = struct{}{} - case kv.TiFlash.Name(): - s.IsolationReadEngines[kv.TiFlash] = struct{}{} - case kv.TiDB.Name(): - s.IsolationReadEngines[kv.TiDB] = struct{}{} - } - } - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBStoreLimit, Value: strconv.FormatInt(atomic.LoadInt64(&config.GetGlobalConfig().TiKVClient.StoreLimit), 10), Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt64, GetGlobal: func(s *SessionVars) (string, error) { - return strconv.FormatInt(tikvstore.StoreLimit.Load(), 10), nil - }, SetGlobal: func(s *SessionVars, val string) error { - tikvstore.StoreLimit.Store(TidbOptInt64(val, DefTiDBStoreLimit)) - return nil - }}, - {Scope: ScopeSession, Name: TiDBMetricSchemaStep, Value: strconv.Itoa(DefTiDBMetricSchemaStep), Type: TypeUnsigned, skipInit: true, MinValue: 10, MaxValue: 60 * 60 * 60, SetSession: func(s *SessionVars, val string) error { - s.MetricSchemaStep = TidbOptInt64(val, DefTiDBMetricSchemaStep) - return nil - }}, - {Scope: ScopeSession, Name: TiDBMetricSchemaRangeDuration, Value: strconv.Itoa(DefTiDBMetricSchemaRangeDuration), skipInit: true, Type: TypeUnsigned, MinValue: 10, MaxValue: 60 * 60 * 60, SetSession: func(s *SessionVars, val string) error { - s.MetricSchemaRangeDuration = TidbOptInt64(val, DefTiDBMetricSchemaRangeDuration) + } + } + return normalizedValue, nil + }, SetSession: func(s *SessionVars, val string) error { + s.NoopFuncsMode = TiDBOptOnOffWarn(val) return nil }}, - {Scope: ScopeSession, Name: TiDBSlowLogThreshold, Value: strconv.Itoa(logutil.DefaultSlowThreshold), skipInit: true, Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, SetSession: func(s *SessionVars, val string) error { - atomic.StoreUint64(&config.GetGlobalConfig().Log.SlowThreshold, uint64(TidbOptInt64(val, logutil.DefaultSlowThreshold))) + {Scope: ScopeGlobal | ScopeSession, Name: TiDBReplicaRead, Value: "leader", Type: TypeEnum, PossibleValues: []string{"leader", "follower", "leader-and-follower", "closest-replicas"}, SetSession: func(s *SessionVars, val string) error { + if strings.EqualFold(val, "follower") { + s.SetReplicaRead(kv.ReplicaReadFollower) + } else if strings.EqualFold(val, "leader-and-follower") { + s.SetReplicaRead(kv.ReplicaReadMixed) + } else if strings.EqualFold(val, "leader") || len(val) == 0 { + s.SetReplicaRead(kv.ReplicaReadLeader) + } else if strings.EqualFold(val, "closest-replicas") { + s.SetReplicaRead(kv.ReplicaReadClosest) + } return nil - }, GetSession: func(s *SessionVars) (string, error) { - return strconv.FormatUint(atomic.LoadUint64(&config.GetGlobalConfig().Log.SlowThreshold), 10), nil }}, - {Scope: ScopeSession, Name: TiDBRecordPlanInSlowLog, Value: int32ToBoolStr(logutil.DefaultRecordPlanInSlowLog), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - atomic.StoreUint32(&config.GetGlobalConfig().Log.RecordPlanInSlowLog, uint32(TidbOptInt64(val, logutil.DefaultRecordPlanInSlowLog))) + {Scope: ScopeGlobal | ScopeSession, Name: TiDBUsePlanBaselines, Value: BoolToOnOff(DefTiDBUsePlanBaselines), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.UsePlanBaselines = TiDBOptOn(val) return nil - }, GetSession: func(s *SessionVars) (string, error) { - enabled := atomic.LoadUint32(&config.GetGlobalConfig().Log.RecordPlanInSlowLog) == 1 - return BoolToOnOff(enabled), nil }}, - {Scope: ScopeSession, Name: TiDBEnableSlowLog, Value: BoolToOnOff(logutil.DefaultTiDBEnableSlowLog), Type: TypeBool, skipInit: true, SetSession: func(s *SessionVars, val string) error { - config.GetGlobalConfig().Log.EnableSlowLog.Store(TiDBOptOn(val)) + {Scope: ScopeGlobal | ScopeSession, Name: TiDBEvolvePlanBaselines, Value: BoolToOnOff(DefTiDBEvolvePlanBaselines), Type: TypeBool, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) { + if normalizedValue == "ON" && !config.CheckTableBeforeDrop { + return normalizedValue, errors.Errorf("Cannot enable baseline evolution feature, it is not generally available now") + } + return normalizedValue, nil + }, SetSession: func(s *SessionVars, val string) error { + s.EvolvePlanBaselines = TiDBOptOn(val) return nil - }, GetSession: func(s *SessionVars) (string, error) { - return BoolToOnOff(config.GetGlobalConfig().Log.EnableSlowLog.Load()), nil }}, - {Scope: ScopeSession, Name: TiDBQueryLogMaxLen, Value: strconv.Itoa(logutil.DefaultQueryLogMaxLen), Type: TypeInt, MinValue: -1, MaxValue: math.MaxInt64, skipInit: true, SetSession: func(s *SessionVars, val string) error { - atomic.StoreUint64(&config.GetGlobalConfig().Log.QueryLogMaxLen, uint64(TidbOptInt64(val, logutil.DefaultQueryLogMaxLen))) + {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableExtendedStats, Value: BoolToOnOff(false), Hidden: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.EnableExtendedStats = TiDBOptOn(val) return nil - }, GetSession: func(s *SessionVars) (string, error) { - return strconv.FormatUint(atomic.LoadUint64(&config.GetGlobalConfig().Log.QueryLogMaxLen), 10), nil }}, {Scope: ScopeGlobal | ScopeSession, Name: CTEMaxRecursionDepth, Value: strconv.Itoa(DefCTEMaxRecursionDepth), Type: TypeInt, MinValue: 0, MaxValue: 4294967295, SetSession: func(s *SessionVars, val string) error { s.CTEMaxRecursionDepth = TidbOptInt(val, DefCTEMaxRecursionDepth) return nil }}, - {Scope: ScopeSession, Name: TiDBCheckMb4ValueInUTF8, Value: BoolToOnOff(config.GetGlobalConfig().CheckMb4ValueInUTF8.Load()), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - config.GetGlobalConfig().CheckMb4ValueInUTF8.Store(TiDBOptOn(val)) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return BoolToOnOff(config.GetGlobalConfig().CheckMb4ValueInUTF8.Load()), nil - }}, - {Scope: ScopeSession, Name: TiDBFoundInPlanCache, Value: BoolToOnOff(DefTiDBFoundInPlanCache), Type: TypeBool, ReadOnly: true, skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.FoundInPlanCache = TiDBOptOn(val) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return BoolToOnOff(s.PrevFoundInPlanCache), nil - }}, - {Scope: ScopeSession, Name: TiDBFoundInBinding, Value: BoolToOnOff(DefTiDBFoundInBinding), Type: TypeBool, ReadOnly: true, skipInit: true, SetSession: func(s *SessionVars, val string) error { - s.FoundInBinding = TiDBOptOn(val) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return BoolToOnOff(s.PrevFoundInBinding), nil - }}, - {Scope: ScopeSession, Name: TiDBEnableCollectExecutionInfo, Value: BoolToOnOff(DefTiDBEnableCollectExecutionInfo), skipInit: true, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { - oldConfig := config.GetGlobalConfig() - newValue := TiDBOptOn(val) - if oldConfig.EnableCollectExecutionInfo != newValue { - newConfig := *oldConfig - newConfig.EnableCollectExecutionInfo = newValue - config.StoreGlobalConfig(&newConfig) - } - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return BoolToOnOff(config.GetGlobalConfig().EnableCollectExecutionInfo), nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBAllowAutoRandExplicitInsert, Value: BoolToOnOff(DefTiDBAllowAutoRandExplicitInsert), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { s.AllowAutoRandExplicitInsert = TiDBOptOn(val) return nil @@ -1121,38 +1250,10 @@ var defaultSysVars = []*SysVar{ errors.RedactLogEnabled.Store(s.EnableRedactLog) return nil }}, - {Scope: ScopeGlobal, Name: TiDBRestrictedReadOnly, Value: BoolToOnOff(DefTiDBRestrictedReadOnly), Type: TypeBool, SetGlobal: func(s *SessionVars, val string) error { - on := TiDBOptOn(val) - if on { - err := s.GlobalVarsAccessor.SetGlobalSysVar(TiDBSuperReadOnly, "ON") - if err != nil { - return err - } - } - RestrictedReadOnly.Store(on) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBSuperReadOnly, Value: BoolToOnOff(DefTiDBSuperReadOnly), Type: TypeBool, Validation: func(vars *SessionVars, normalizedValue string, _ string, _ ScopeFlag) (string, error) { - on := TiDBOptOn(normalizedValue) - if !on { - result, err := vars.GlobalVarsAccessor.GetGlobalSysVar(TiDBRestrictedReadOnly) - if err != nil { - return normalizedValue, err - } - if TiDBOptOn(result) { - return normalizedValue, fmt.Errorf("can't turn off %s when %s is on", TiDBSuperReadOnly, TiDBRestrictedReadOnly) - } - } - return normalizedValue, nil - }, SetGlobal: func(s *SessionVars, val string) error { - VarTiDBSuperReadOnly.Store(TiDBOptOn(val)) - return nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBShardAllocateStep, Value: strconv.Itoa(DefTiDBShardAllocateStep), Type: TypeInt, MinValue: 1, MaxValue: uint64(math.MaxInt64), SetSession: func(s *SessionVars, val string) error { s.ShardAllocateStep = TidbOptInt64(val, DefTiDBShardAllocateStep) return nil }}, - {Scope: ScopeGlobal, Name: TiDBEnableTelemetry, Value: BoolToOnOff(DefTiDBEnableTelemetry), Type: TypeBool}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableAmendPessimisticTxn, Value: BoolToOnOff(DefTiDBEnableAmendPessimisticTxn), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { s.EnableAmendPessimisticTxn = TiDBOptOn(val) return nil @@ -1205,96 +1306,11 @@ var defaultSysVars = []*SysVar{ s.TiDBEnableExchangePartition = TiDBOptOn(val) return nil }}, - {Scope: ScopeNone, Name: TiDBEnableEnhancedSecurity, Value: Off, Type: TypeBool}, - {Scope: ScopeSession, Name: PluginLoad, Value: "", GetSession: func(s *SessionVars) (string, error) { - return config.GetGlobalConfig().Plugin.Load, nil - }}, - {Scope: ScopeSession, Name: PluginDir, Value: "/data/deploy/plugin", GetSession: func(s *SessionVars) (string, error) { - return config.GetGlobalConfig().Plugin.Dir, nil - }}, - {Scope: ScopeGlobal, Name: TiDBEnableHistoricalStats, Value: Off, Type: TypeBool, GetGlobal: func(s *SessionVars) (string, error) { - return getTiDBTableValue(s, "tidb_enable_historical_stats", Off) - }, SetGlobal: func(s *SessionVars, val string) error { - return setTiDBTableValue(s, "tidb_enable_historical_stats", val, "Current historical statistics enable status") - }}, - /* tikv gc metrics */ - {Scope: ScopeGlobal, Name: TiDBGCEnable, Value: On, Type: TypeBool, GetGlobal: func(s *SessionVars) (string, error) { - return getTiDBTableValue(s, "tikv_gc_enable", On) - }, SetGlobal: func(s *SessionVars, val string) error { - return setTiDBTableValue(s, "tikv_gc_enable", val, "Current GC enable status") - }}, - {Scope: ScopeGlobal, Name: TiDBGCRunInterval, Value: "10m0s", Type: TypeDuration, MinValue: int64(time.Minute * 10), MaxValue: uint64(time.Hour * 24 * 365), GetGlobal: func(s *SessionVars) (string, error) { - return getTiDBTableValue(s, "tikv_gc_run_interval", "10m0s") - }, SetGlobal: func(s *SessionVars, val string) error { - return setTiDBTableValue(s, "tikv_gc_run_interval", val, "GC run interval, at least 10m, in Go format.") - }}, - {Scope: ScopeGlobal, Name: TiDBGCLifetime, Value: "10m0s", Type: TypeDuration, MinValue: int64(time.Minute * 10), MaxValue: uint64(time.Hour * 24 * 365), GetGlobal: func(s *SessionVars) (string, error) { - return getTiDBTableValue(s, "tikv_gc_life_time", "10m0s") - }, SetGlobal: func(s *SessionVars, val string) error { - return setTiDBTableValue(s, "tikv_gc_life_time", val, "All versions within life time will not be collected by GC, at least 10m, in Go format.") - }}, - {Scope: ScopeGlobal, Name: TiDBGCConcurrency, Value: "-1", Type: TypeInt, MinValue: 1, MaxValue: MaxConfigurableConcurrency, AllowAutoValue: true, GetGlobal: func(s *SessionVars) (string, error) { - autoConcurrencyVal, err := getTiDBTableValue(s, "tikv_gc_auto_concurrency", On) - if err == nil && autoConcurrencyVal == On { - return "-1", nil // convention for "AUTO" - } - return getTiDBTableValue(s, "tikv_gc_concurrency", "-1") - }, SetGlobal: func(s *SessionVars, val string) error { - autoConcurrency := Off - if val == "-1" { - autoConcurrency = On - } - // Update both autoconcurrency and concurrency. - if err := setTiDBTableValue(s, "tikv_gc_auto_concurrency", autoConcurrency, "Let TiDB pick the concurrency automatically. If set false, tikv_gc_concurrency will be used"); err != nil { - return err - } - return setTiDBTableValue(s, "tikv_gc_concurrency", val, "How many goroutines used to do GC parallel, [1, 256], default 2") - }}, - {Scope: ScopeGlobal, Name: TiDBGCScanLockMode, Value: "LEGACY", Type: TypeEnum, PossibleValues: []string{"PHYSICAL", "LEGACY"}, GetGlobal: func(s *SessionVars) (string, error) { - return getTiDBTableValue(s, "tikv_gc_scan_lock_mode", "LEGACY") - }, SetGlobal: func(s *SessionVars, val string) error { - return setTiDBTableValue(s, "tikv_gc_scan_lock_mode", val, "Mode of scanning locks, \"physical\" or \"legacy\"") - }}, // It's different from tmp_table_size or max_heap_table_size. See https://github.com/pingcap/tidb/issues/28691. {Scope: ScopeGlobal | ScopeSession, Name: TiDBTmpTableMaxSize, Value: strconv.Itoa(DefTiDBTmpTableMaxSize), Type: TypeUnsigned, MinValue: 1 << 20, MaxValue: 1 << 37, SetSession: func(s *SessionVars, val string) error { s.TMPTableSize = TidbOptInt64(val, DefTiDBTmpTableMaxSize) return nil }}, - {Scope: ScopeGlobal, Name: TiDBTableCacheLease, Value: strconv.Itoa(DefTiDBTableCacheLease), Type: TypeUnsigned, MinValue: 1, MaxValue: 10, SetGlobal: func(s *SessionVars, sVal string) error { - var val int64 - val, err := strconv.ParseInt(sVal, 10, 64) - if err != nil { - return errors.Trace(err) - } - TableCacheLease.Store(val) - return nil - }}, - // variable for top SQL feature. - // TopSQL enable only be controlled by TopSQL pub/sub sinker. - // This global variable only uses to update the global config which store in PD(ETCD). - {Scope: ScopeGlobal, Name: TiDBEnableTopSQL, Value: BoolToOnOff(topsqlstate.DefTiDBTopSQLEnable), Type: TypeBool, AllowEmpty: true, GlobalConfigName: GlobalConfigEnableTopSQL}, - {Scope: ScopeGlobal, Name: TiDBTopSQLMaxTimeSeriesCount, Value: strconv.Itoa(topsqlstate.DefTiDBTopSQLMaxTimeSeriesCount), Type: TypeInt, MinValue: 1, MaxValue: 5000, GetGlobal: func(s *SessionVars) (string, error) { - return strconv.FormatInt(topsqlstate.GlobalState.MaxStatementCount.Load(), 10), nil - }, SetGlobal: func(vars *SessionVars, s string) error { - val, err := strconv.ParseInt(s, 10, 64) - if err != nil { - return err - } - topsqlstate.GlobalState.MaxStatementCount.Store(val) - return nil - }}, - {Scope: ScopeGlobal, Name: TiDBTopSQLMaxMetaCount, Value: strconv.Itoa(topsqlstate.DefTiDBTopSQLMaxMetaCount), Type: TypeInt, MinValue: 1, MaxValue: 10000, GetGlobal: func(s *SessionVars) (string, error) { - return strconv.FormatInt(topsqlstate.GlobalState.MaxCollect.Load(), 10), nil - }, SetGlobal: func(vars *SessionVars, s string) error { - val, err := strconv.ParseInt(s, 10, 64) - if err != nil { - return err - } - topsqlstate.GlobalState.MaxCollect.Store(val) - return nil - }}, - {Scope: ScopeGlobal, Name: SkipNameResolve, Value: Off, Type: TypeBool}, - {Scope: ScopeGlobal, Name: DefaultAuthPlugin, Value: mysql.AuthNativePassword, Type: TypeEnum, PossibleValues: []string{mysql.AuthNativePassword, mysql.AuthCachingSha2Password}}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableOrderedResultMode, Value: BoolToOnOff(DefTiDBEnableOrderedResultMode), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { s.EnableStableResultMode = TiDBOptOn(val) return nil @@ -1307,58 +1323,14 @@ var defaultSysVars = []*SysVar{ s.RegardNULLAsPoint = TiDBOptOn(val) return nil }}, - - {Scope: ScopeNone, Name: "version_compile_os", Value: runtime.GOOS}, - {Scope: ScopeNone, Name: "version_compile_machine", Value: runtime.GOARCH}, - {Scope: ScopeNone, Name: TiDBAllowFunctionForExpressionIndex, ReadOnly: true, Value: collectAllowFuncName4ExpressionIndex()}, - {Scope: ScopeSession, Name: RandSeed1, Type: TypeInt, Value: "0", skipInit: true, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { - s.Rng.SetSeed1(uint32(tidbOptPositiveInt32(val, 0))) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return "0", nil - }}, - {Scope: ScopeSession, Name: RandSeed2, Type: TypeInt, Value: "0", skipInit: true, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { - s.Rng.SetSeed2(uint32(tidbOptPositiveInt32(val, 0))) - return nil - }, GetSession: func(s *SessionVars) (string, error) { - return "0", nil - }}, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnablePaging, Value: Off, Type: TypeBool, Hidden: true, SetSession: func(s *SessionVars, val string) error { s.EnablePaging = TiDBOptOn(val) return nil }}, - {Scope: ScopeGlobal, Name: TiDBPersistAnalyzeOptions, Value: BoolToOnOff(DefTiDBPersistAnalyzeOptions), skipInit: true, Type: TypeBool, - GetGlobal: func(s *SessionVars) (string, error) { - return BoolToOnOff(PersistAnalyzeOptions.Load()), nil - }, - SetGlobal: func(s *SessionVars, val string) error { - PersistAnalyzeOptions.Store(TiDBOptOn(val)) - return nil - }, - }, - {Scope: ScopeGlobal, Name: TiDBEnableColumnTracking, Value: BoolToOnOff(DefTiDBEnableColumnTracking), skipInit: true, Type: TypeBool, GetGlobal: func(s *SessionVars) (string, error) { - return BoolToOnOff(EnableColumnTracking.Load()), nil - }, SetGlobal: func(s *SessionVars, val string) error { - v := TiDBOptOn(val) - if !v { - // Set the location to UTC to avoid time zone interference. - disableTime := time.Now().UTC().Format(types.UTCTimeFormat) - if err := setTiDBTableValue(s, TiDBDisableColumnTrackingTime, disableTime, "Record the last time tidb_enable_column_tracking is set off"); err != nil { - return err - } - } - EnableColumnTracking.Store(v) + {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableLegacyInstanceScope, Value: BoolToOnOff(DefEnableLegacyInstanceScope), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + s.EnableLegacyInstanceScope = TiDBOptOn(val) return nil }}, - {Scope: ScopeSession, Name: TiDBReadConsistency, Value: string(ReadConsistencyStrict), Type: TypeStr, Hidden: true, - Validation: func(_ *SessionVars, normalized string, _ string, _ ScopeFlag) (string, error) { - return normalized, validateReadConsistencyLevel(normalized) - }, - SetSession: func(s *SessionVars, val string) error { - s.ReadConsistency = ReadConsistencyLevel(val) - return nil - }, - }, {Scope: ScopeGlobal | ScopeSession, Name: TiDBStatsLoadSyncWait, Value: strconv.Itoa(DefTiDBStatsLoadSyncWait), skipInit: true, Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt32, SetSession: func(s *SessionVars, val string) error { s.StatsLoadSyncWait = TidbOptInt64(val, DefTiDBStatsLoadSyncWait) @@ -1372,27 +1344,11 @@ var defaultSysVars = []*SysVar{ return nil }, }, - {Scope: ScopeGlobal, Name: TiDBStatsLoadPseudoTimeout, Value: BoolToOnOff(DefTiDBStatsLoadPseudoTimeout), skipInit: true, Type: TypeBool, - GetGlobal: func(s *SessionVars) (string, error) { - return strconv.FormatBool(StatsLoadPseudoTimeout.Load()), nil - }, - SetGlobal: func(s *SessionVars, val string) error { - StatsLoadPseudoTimeout.Store(TiDBOptOn(val)) - return nil - }, - }, - {Scope: ScopeGlobal | ScopeSession, Name: SysdateIsNow, Value: BoolToOnOff(DefSysdateIsNow), skipInit: true, Type: TypeBool, + {Scope: ScopeGlobal | ScopeSession, Name: TiDBSysdateIsNow, Value: BoolToOnOff(DefSysdateIsNow), Type: TypeBool, SetSession: func(vars *SessionVars, s string) error { vars.SysdateIsNow = TiDBOptOn(s) return nil }, - GetGlobal: func(vars *SessionVars) (s string, err error) { - return strconv.FormatBool(GlobalSysdateIsNow.Load()), nil - }, - SetGlobal: func(vars *SessionVars, s string) error { - GlobalSysdateIsNow.Store(TiDBOptOn(s)) - return nil - }, }, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableMutationChecker, Hidden: true, Value: BoolToOnOff(DefTiDBEnableMutationChecker), Type: TypeBool, @@ -1405,12 +1361,23 @@ var defaultSysVars = []*SysVar{ s.AssertionLevel = tidbOptAssertionLevel(val) return nil }}, - {Scope: ScopeSession, Name: TiDBLastDDLInfo, Value: strconv.Itoa(DefCurretTS), ReadOnly: true, skipInit: true, GetSession: func(s *SessionVars) (string, error) { - info, err := json.Marshal(s.LastDDLInfo) - if err != nil { - return "", err + {Scope: ScopeGlobal | ScopeSession, Name: TiDBBatchPendingTiFlashCount, Value: strconv.Itoa(DefTiDBBatchPendingTiFlashCount), MinValue: 0, MaxValue: math.MaxUint32, Hidden: false, Type: TypeUnsigned, SetSession: func(s *SessionVars, val string) error { + b, e := strconv.Atoi(val) + if e != nil { + b = DefTiDBBatchPendingTiFlashCount } - return string(info), nil + s.BatchPendingTiFlashCount = b + return nil + }}, + {Scope: ScopeGlobal | ScopeSession, Name: TiDBIgnorePreparedCacheCloseStmt, Value: BoolToOnOff(DefTiDBIgnorePreparedCacheCloseStmt), Type: TypeBool, + SetSession: func(vars *SessionVars, s string) error { + vars.IgnorePreparedCacheCloseStmt = TiDBOptOn(s) + return nil + }, + }, + {Scope: ScopeGlobal | ScopeSession, Name: TiDBRCReadCheckTS, Type: TypeBool, Value: BoolToOnOff(DefRCReadCheckTS), SetSession: func(s *SessionVars, val string) error { + s.RcReadCheckTS = TiDBOptOn(val) + return nil }}, } @@ -1506,9 +1473,6 @@ const ( SkipNameResolve = "skip_name_resolve" // ForeignKeyChecks is the name for 'foreign_key_checks' system variable. ForeignKeyChecks = "foreign_key_checks" - // PlacementChecks is the name for 'placement_checks' system variable. - // Deprecated: use tidb_placement_mode instead - PlacementChecks = "placement_checks" // SQLSafeUpdates is the name for 'sql_safe_updates' system variable. SQLSafeUpdates = "sql_safe_updates" // WarningCount is the name for 'warning_count' system variable. @@ -1721,6 +1685,4 @@ const ( RandSeed1 = "rand_seed1" // RandSeed2 is the name of 'rand_seed2' system variable. RandSeed2 = "rand_seed2" - // SysdateIsNow is the name of the `sysdate_is_now` system variable - SysdateIsNow = "sysdate_is_now" ) diff --git a/sessionctx/variable/sysvar_test.go b/sessionctx/variable/sysvar_test.go index ba90d3e0daa9a..0d694d8b9af88 100644 --- a/sessionctx/variable/sysvar_test.go +++ b/sessionctx/variable/sysvar_test.go @@ -246,22 +246,32 @@ func TestScope(t *testing.T) { sv := SysVar{Scope: ScopeGlobal | ScopeSession, Name: "mynewsysvar", Value: On, Type: TypeEnum, PossibleValues: []string{"OFF", "ON", "AUTO"}} require.True(t, sv.HasSessionScope()) require.True(t, sv.HasGlobalScope()) + require.False(t, sv.HasInstanceScope()) require.False(t, sv.HasNoneScope()) sv = SysVar{Scope: ScopeGlobal, Name: "mynewsysvar", Value: On, Type: TypeEnum, PossibleValues: []string{"OFF", "ON", "AUTO"}} require.False(t, sv.HasSessionScope()) require.True(t, sv.HasGlobalScope()) + require.False(t, sv.HasInstanceScope()) require.False(t, sv.HasNoneScope()) sv = SysVar{Scope: ScopeSession, Name: "mynewsysvar", Value: On, Type: TypeEnum, PossibleValues: []string{"OFF", "ON", "AUTO"}} require.True(t, sv.HasSessionScope()) require.False(t, sv.HasGlobalScope()) + require.False(t, sv.HasInstanceScope()) require.False(t, sv.HasNoneScope()) sv = SysVar{Scope: ScopeNone, Name: "mynewsysvar", Value: On, Type: TypeEnum, PossibleValues: []string{"OFF", "ON", "AUTO"}} require.False(t, sv.HasSessionScope()) require.False(t, sv.HasGlobalScope()) + require.False(t, sv.HasInstanceScope()) require.True(t, sv.HasNoneScope()) + + sv = SysVar{Scope: ScopeInstance, Name: "mynewsysvar", Value: On, Type: TypeEnum, PossibleValues: []string{"OFF", "ON", "AUTO"}} + require.False(t, sv.HasSessionScope()) + require.False(t, sv.HasGlobalScope()) + require.True(t, sv.HasInstanceScope()) + require.False(t, sv.HasNoneScope()) } func TestBuiltInCase(t *testing.T) { @@ -696,7 +706,7 @@ func TestSettersandGetters(t *testing.T) { require.Nil(t, sv.SetSession) require.Nil(t, sv.GetSession) } - if !sv.HasGlobalScope() { + if !sv.HasGlobalScope() && !sv.HasInstanceScope() { require.Nil(t, sv.SetGlobal) if sv.Name == Timestamp { // The Timestamp sysvar will have GetGlobal func even though it does not have global scope. @@ -845,6 +855,58 @@ func TestDefaultCharsetAndCollation(t *testing.T) { require.Equal(t, val, mysql.DefaultCollationName) } +func TestInstanceScope(t *testing.T) { + // Instance scope used to be settable via "SET SESSION", which is weird to any MySQL user. + // It is now settable via SET GLOBAL, but to work correctly a sysvar can only ever + // be INSTANCE scoped or GLOBAL scoped, never *both* at the same time (at least for now). + // Otherwise the semantics are confusing to users for how precedence applies. + + for _, sv := range GetSysVars() { + require.False(t, sv.HasGlobalScope() && sv.HasInstanceScope(), "sysvar %s has both instance and global scope", sv.Name) + if sv.HasInstanceScope() { + require.NotNil(t, sv.GetGlobal) + require.NotNil(t, sv.SetGlobal) + } + } + + count := len(GetSysVars()) + sv := SysVar{Scope: ScopeInstance, Name: "newinstancesysvar", Value: On, Type: TypeBool, + SetGlobal: func(s *SessionVars, val string) error { + return fmt.Errorf("set should fail") + }, + GetGlobal: func(s *SessionVars) (string, error) { + return "", fmt.Errorf("get should fail") + }, + } + + RegisterSysVar(&sv) + require.Len(t, GetSysVars(), count+1) + + sysVar := GetSysVar("newinstancesysvar") + require.NotNil(t, sysVar) + + vars := NewSessionVars() + + // It is a boolean, try to set it to a bogus value + _, err := sysVar.Validate(vars, "ABCD", ScopeInstance) + require.Error(t, err) + + // Boolean oN or 1 converts to canonical ON or OFF + normalizedVal, err := sysVar.Validate(vars, "oN", ScopeInstance) + require.Equal(t, "ON", normalizedVal) + require.NoError(t, err) + normalizedVal, err = sysVar.Validate(vars, "0", ScopeInstance) + require.Equal(t, "OFF", normalizedVal) + require.NoError(t, err) + + err = sysVar.SetGlobalFromHook(vars, "OFF", true) // default is on + require.Equal(t, "set should fail", err.Error()) + + // Test unregistration restores previous count + UnregisterSysVar("newinstancesysvar") + require.Equal(t, len(GetSysVars()), count) +} + func TestIndexMergeSwitcher(t *testing.T) { vars := NewSessionVars() vars.GlobalVarsAccessor = NewMockGlobalAccessor4Tests() @@ -854,19 +916,6 @@ func TestIndexMergeSwitcher(t *testing.T) { require.Equal(t, BoolToOnOff(DefTiDBEnableIndexMerge), val) } -func TestNoValidateForNoop(t *testing.T) { - vars := NewSessionVars() - - // for noop variables, no error - val, err := GetSysVar("rpl_semi_sync_slave_enabled").ValidateFromType(vars, "", ScopeGlobal) - require.NoError(t, err) - require.Equal(t, val, "") - - // for other variables, error - _, err = GetSysVar(TiDBAllowBatchCop).ValidateFromType(vars, "", ScopeGlobal) - require.Error(t, err) -} - func TestNetBufferLength(t *testing.T) { netBufferLength := GetSysVar(NetBufferLength) vars := NewSessionVars() @@ -882,3 +931,19 @@ func TestNetBufferLength(t *testing.T) { require.NoError(t, err) require.Equal(t, "524288", val) // unchanged } + +func TestTiDBBatchPendingTiFlashCount(t *testing.T) { + sv := GetSysVar(TiDBBatchPendingTiFlashCount) + vars := NewSessionVars() + val, err := sv.Validate(vars, "-10", ScopeSession) + require.NoError(t, err) // it has autoconvert out of range. + require.Equal(t, "0", val) + + val, err = sv.Validate(vars, "9999", ScopeSession) + require.NoError(t, err) + require.Equal(t, "9999", val) + + _, err = sv.Validate(vars, "1.5", ScopeSession) + require.Error(t, err) + require.EqualError(t, err, "[variable:1232]Incorrect argument type to variable 'tidb_batch_pending_tiflash_count'") +} diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index 56cff76bc47dd..83f0e5299dbf2 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -41,9 +41,6 @@ const ( // TiDBOptAggPushDown is used to enable/disable the optimizer rule of aggregation push down. TiDBOptAggPushDown = "tidb_opt_agg_push_down" - // TiDBOptBCJ is used to enable/disable broadcast join in MPP mode - TiDBOptBCJ = "tidb_opt_broadcast_join" - // TiDBOptCartesianBCJ is used to disable/enable broadcast cartesian join in MPP mode TiDBOptCartesianBCJ = "tidb_opt_broadcast_cartesian_join" @@ -115,15 +112,6 @@ const ( TiDBMemQuotaQuery = "tidb_mem_quota_query" // Bytes. TiDBMemQuotaApplyCache = "tidb_mem_quota_apply_cache" - // TODO: remove them below sometime, it should have only one Quota(TiDBMemQuotaQuery). - - TiDBMemQuotaHashJoin = "tidb_mem_quota_hashjoin" // Bytes. - TiDBMemQuotaMergeJoin = "tidb_mem_quota_mergejoin" // Bytes. - TiDBMemQuotaSort = "tidb_mem_quota_sort" // Bytes. - TiDBMemQuotaTopn = "tidb_mem_quota_topn" // Bytes. - TiDBMemQuotaIndexLookupReader = "tidb_mem_quota_indexlookupreader" // Bytes. - TiDBMemQuotaIndexLookupJoin = "tidb_mem_quota_indexlookupjoin" // Bytes. - // TiDBGeneralLog is used to log every query in the server in info level. TiDBGeneralLog = "tidb_general_log" @@ -139,15 +127,15 @@ const ( // TiDBDisableTxnAutoRetry disables transaction auto retry. TiDBDisableTxnAutoRetry = "tidb_disable_txn_auto_retry" - // Deprecated: tidb_enable_streaming enables TiDB to use streaming API for coprocessor requests. - TiDBEnableStreaming = "tidb_enable_streaming" - // TiDBEnableChunkRPC enables TiDB to use Chunk format for coprocessor requests. TiDBEnableChunkRPC = "tidb_enable_chunk_rpc" // TiDBOptimizerSelectivityLevel is used to control the selectivity estimation level. TiDBOptimizerSelectivityLevel = "tidb_optimizer_selectivity_level" + // TiDBOptimizerEnableNewOnlyFullGroupByCheck is used to open the newly only_full_group_by check by maintaining functional dependency. + TiDBOptimizerEnableNewOnlyFullGroupByCheck = "tidb_enable_new_only_full_group_by_check" + // TiDBTxnMode is used to control the transaction behavior. TiDBTxnMode = "tidb_txn_mode" @@ -226,6 +214,9 @@ const ( // TiDBReadConsistency indicates whether the autocommit read statement goes through TiKV RC. TiDBReadConsistency = "tidb_read_consistency" + + // TiDBSysdateIsNow is the name of the `tidb_sysdate_is_now` system variable + TiDBSysdateIsNow = "tidb_sysdate_is_now" ) // TiDB system variable names that both in session and global scope. @@ -419,10 +410,6 @@ const ( // TiDBEnablePointGetCache is used to control whether to enable the point get cache for special scenario. TiDBEnablePointGetCache = "tidb_enable_point_get_cache" - // TiDBEnableAlterPlacement is used to control whether to enable alter table partition. - // Deprecated: It is removed and do not use it again - TiDBEnableAlterPlacement = "tidb_enable_alter_placement" - // TiDBPlacementMode is used to control the mode for placement TiDBPlacementMode = "tidb_placement_mode" @@ -533,10 +520,6 @@ const ( // TiDBPartitionPruneMode indicates the partition prune mode used. TiDBPartitionPruneMode = "tidb_partition_prune_mode" - // TiDBSlowLogMasking is deprecated and a alias of TiDBRedactLog. - // Deprecated: use TiDBRedactLog instead. - TiDBSlowLogMasking = "tidb_slow_log_masking" - // TiDBRedactLog indicates that whether redact log. TiDBRedactLog = "tidb_redact_log" @@ -594,8 +577,6 @@ const ( // TiDBTopSQLMaxMetaCount indicates the max capacity of the collect meta per second. TiDBTopSQLMaxMetaCount = "tidb_top_sql_max_meta_count" - // TiDBEnableGlobalTemporaryTable indicates whether to enable global temporary table - TiDBEnableGlobalTemporaryTable = "tidb_enable_global_temporary_table" // TiDBEnableLocalTxn indicates whether to enable Local Txn. TiDBEnableLocalTxn = "tidb_enable_local_txn" // TiDBTSOClientBatchMaxWaitTime indicates the max value of the TSO Batch Wait interval time of PD client. @@ -615,6 +596,9 @@ const ( // TiDBTmpTableMaxSize indicates the max memory size of temporary tables. TiDBTmpTableMaxSize = "tidb_tmp_table_max_size" + // TiDBEnableLegacyInstanceScope indicates if instance scope can be set with SET SESSION. + TiDBEnableLegacyInstanceScope = "tidb_enable_legacy_instance_scope" + // TiDBTableCacheLease indicates the read lock lease of a cached table. TiDBTableCacheLease = "tidb_table_cache_lease" @@ -626,6 +610,12 @@ const ( // TiDBTxnAssertionLevel indicates how strict the assertion will be, which helps to detect and preventing data & // index inconsistency problems. TiDBTxnAssertionLevel = "tidb_txn_assertion_level" + + // TiDBIgnorePreparedCacheCloseStmt indicates whether to ignore close-stmt commands for prepared statements. + TiDBIgnorePreparedCacheCloseStmt = "tidb_ignore_prepared_cache_close_stmt" + + // TiDBBatchPendingTiFlashCount indicates the maximum count of non-available TiFlash tables. + TiDBBatchPendingTiFlashCount = "tidb_batch_pending_tiflash_count" ) // TiDB vars that have only global scope @@ -655,8 +645,10 @@ const ( TiDBDisableColumnTrackingTime = "tidb_disable_column_tracking_time" // TiDBStatsLoadPseudoTimeout indicates whether to fallback to pseudo stats after load timeout. TiDBStatsLoadPseudoTimeout = "tidb_stats_load_pseudo_timeout" - // TiDBMemQuotaBindCache indicates the memory quota for the bind cache. - TiDBMemQuotaBindCache = "tidb_mem_quota_bind_cache" + // TiDBMemQuotaBindingCache indicates the memory quota for the bind cache. + TiDBMemQuotaBindingCache = "tidb_mem_quota_binding_cache" + // TiDBRCReadCheckTS indicates the tso optimization for read-consistency read is enabled. + TiDBRCReadCheckTS = "tidb_rc_read_check_ts" ) // TiDB intentional limits @@ -687,7 +679,6 @@ const ( DefSkipUTF8Check = false DefSkipASCIICheck = false DefOptAggPushDown = false - DefOptBCJ = false DefOptCartesianBCJ = 1 DefOptMPPOuterJoinFixedBuildSide = false DefOptWriteRowID = false @@ -717,14 +708,7 @@ const ( DefMaxPreparedStmtCount = -1 DefWaitTimeout = 28800 DefTiDBMemQuotaApplyCache = 32 << 20 // 32MB. - DefTiDBMemQuotaBindCache = 64 << 20 // 64MB. - DefTiDBMemQuotaHashJoin = 32 << 30 // 32GB. - DefTiDBMemQuotaMergeJoin = 32 << 30 // 32GB. - DefTiDBMemQuotaSort = 32 << 30 // 32GB. - DefTiDBMemQuotaTopn = 32 << 30 // 32GB. - DefTiDBMemQuotaIndexLookupReader = 32 << 30 // 32GB. - DefTiDBMemQuotaIndexLookupJoin = 32 << 30 // 32GB. - DefTiDBMemQuotaDistSQL = 32 << 30 // 32GB. + DefTiDBMemQuotaBindingCache = 64 << 20 // 64MB. DefTiDBGeneralLog = false DefTiDBPProfSQLCPU = 0 DefTiDBRetryLimit = 10 @@ -735,6 +719,7 @@ const ( DefBroadcastJoinThresholdSize = 100 * 1024 * 1024 DefBroadcastJoinThresholdCount = 10 * 1024 DefTiDBOptimizerSelectivityLevel = 0 + DefTiDBOptimizerEnableNewOFGB = false DefTiDBAllowBatchCop = 1 DefTiDBAllowMPPExecution = true DefTiDBHashExchangeWithNewCollation = true @@ -819,6 +804,7 @@ const ( DefTiDBStmtSummaryMaxSQLLength = 4096 DefTiDBCapturePlanBaseline = Off DefTiDBEnableIndexMerge = true + DefEnableLegacyInstanceScope = true DefTiDBTableCacheLease = 3 // 3s DefTiDBPersistAnalyzeOptions = true DefTiDBEnableColumnTracking = false @@ -827,6 +813,9 @@ const ( DefSysdateIsNow = false DefTiDBEnableMutationChecker = false DefTiDBTxnAssertionLevel = AssertionOffStr + DefTiDBIgnorePreparedCacheCloseStmt = false + DefTiDBBatchPendingTiFlashCount = 4000 + DefRCReadCheckTS = false ) // Process global variables. @@ -860,6 +849,5 @@ var ( EnableColumnTracking = atomic.NewBool(DefTiDBEnableColumnTracking) StatsLoadSyncWait = atomic.NewInt64(DefTiDBStatsLoadSyncWait) StatsLoadPseudoTimeout = atomic.NewBool(DefTiDBStatsLoadPseudoTimeout) - GlobalSysdateIsNow = atomic.NewBool(DefSysdateIsNow) - MemQuotaBindCache = atomic.NewInt64(DefTiDBMemQuotaBindCache) + MemQuotaBindingCache = atomic.NewInt64(DefTiDBMemQuotaBindingCache) ) diff --git a/sessionctx/variable/variable.go b/sessionctx/variable/variable.go index f6a3ae5b47db7..7989f50fe2e8e 100644 --- a/sessionctx/variable/variable.go +++ b/sessionctx/variable/variable.go @@ -38,6 +38,8 @@ const ( ScopeGlobal ScopeFlag = 1 << 0 // ScopeSession means the system variable can only be changed in current session. ScopeSession ScopeFlag = 1 << 1 + // ScopeInstance means it is similar to global but doesn't propagate to other TiDB servers. + ScopeInstance ScopeFlag = 1 << 2 // TypeStr is the default TypeStr TypeFlag = 0 @@ -248,6 +250,11 @@ func (sv *SysVar) HasGlobalScope() bool { return sv.Scope&ScopeGlobal != 0 } +// HasInstanceScope returns true if the scope for the sysVar includes instance +func (sv *SysVar) HasInstanceScope() bool { + return sv.Scope&ScopeInstance != 0 +} + // Validate checks if system variable satisfies specific restriction. func (sv *SysVar) Validate(vars *SessionVars, value string, scope ScopeFlag) (string, error) { // Check that the scope is correct first. @@ -269,10 +276,6 @@ func (sv *SysVar) Validate(vars *SessionVars, value string, scope ScopeFlag) (st // ValidateFromType provides automatic validation based on the SysVar's type func (sv *SysVar) ValidateFromType(vars *SessionVars, value string, scope ScopeFlag) (string, error) { - // TODO: this is a temporary solution for issue: https://github.com/pingcap/tidb/issues/31538, an elegant solution is needed. - if value == "" && sv.IsNoop { - return value, nil - } // Some sysvars in TiDB have a special behavior where the empty string means // "use the config file value". This needs to be cleaned up once the behavior // for instance variables is determined. @@ -303,7 +306,7 @@ func (sv *SysVar) validateScope(scope ScopeFlag) error { if sv.ReadOnly || sv.Scope == ScopeNone { return ErrIncorrectScope.FastGenByArgs(sv.Name, "read only") } - if scope == ScopeGlobal && !sv.HasGlobalScope() { + if scope == ScopeGlobal && !(sv.HasGlobalScope() || sv.HasInstanceScope()) { return errLocalVariable.FastGenByArgs(sv.Name) } if scope == ScopeSession && !sv.HasSessionScope() { diff --git a/sessionctx/variable/varsutil_test.go b/sessionctx/variable/varsutil_test.go index bac034ca48e62..fbe84adf756c4 100644 --- a/sessionctx/variable/varsutil_test.go +++ b/sessionctx/variable/varsutil_test.go @@ -63,7 +63,6 @@ func TestNewSessionVars(t *testing.T) { require.Equal(t, DefExecutorConcurrency, vars.IndexLookupJoinConcurrency()) require.Equal(t, DefExecutorConcurrency, vars.HashJoinConcurrency()) require.Equal(t, DefTiDBAllowBatchCop, vars.AllowBatchCop) - require.Equal(t, DefOptBCJ, vars.AllowBCJ) require.Equal(t, ConcurrencyUnset, vars.projectionConcurrency) require.Equal(t, ConcurrencyUnset, vars.hashAggPartialConcurrency) require.Equal(t, ConcurrencyUnset, vars.hashAggFinalConcurrency) @@ -82,12 +81,6 @@ func TestNewSessionVars(t *testing.T) { require.Equal(t, DefMaxChunkSize, vars.MaxChunkSize) require.Equal(t, DefDMLBatchSize, vars.DMLBatchSize) require.Equal(t, config.GetGlobalConfig().MemQuotaQuery, vars.MemQuotaQuery) - require.Equal(t, int64(DefTiDBMemQuotaHashJoin), vars.MemQuotaHashJoin) - require.Equal(t, int64(DefTiDBMemQuotaMergeJoin), vars.MemQuotaMergeJoin) - require.Equal(t, int64(DefTiDBMemQuotaSort), vars.MemQuotaSort) - require.Equal(t, int64(DefTiDBMemQuotaTopn), vars.MemQuotaTopn) - require.Equal(t, int64(DefTiDBMemQuotaIndexLookupReader), vars.MemQuotaIndexLookupReader) - require.Equal(t, int64(DefTiDBMemQuotaIndexLookupJoin), vars.MemQuotaIndexLookupJoin) require.Equal(t, int64(DefTiDBMemQuotaApplyCache), vars.MemQuotaApplyCache) require.Equal(t, DefOptWriteRowID, vars.AllowWriteRowID) require.Equal(t, DefTiDBOptJoinReorderThreshold, vars.TiDBOptJoinReorderThreshold) @@ -208,17 +201,6 @@ func TestVarsutil(t *testing.T) { require.Equal(t, mode, v.SQLMode) } - err = SetSessionSystemVar(v, "tidb_opt_broadcast_join", "1") - require.NoError(t, err) - err = SetSessionSystemVar(v, "tidb_allow_batch_cop", "0") - require.True(t, terror.ErrorEqual(err, ErrWrongValueForVar)) - err = SetSessionSystemVar(v, "tidb_opt_broadcast_join", "0") - require.NoError(t, err) - err = SetSessionSystemVar(v, "tidb_allow_batch_cop", "0") - require.NoError(t, err) - err = SetSessionSystemVar(v, "tidb_opt_broadcast_join", "1") - require.True(t, terror.ErrorEqual(err, ErrWrongValueForVar)) - // Combined sql_mode err = SetSessionSystemVar(v, "sql_mode", "REAL_AS_FLOAT,ANSI_QUOTES") require.NoError(t, err) @@ -252,24 +234,16 @@ func TestVarsutil(t *testing.T) { require.NoError(t, err) require.Equal(t, config.HideConfig(string(bVal)), val) - err = SetSessionSystemVar(v, TiDBEnableStreaming, "1") - require.NoError(t, err) - val, err = GetSessionOrGlobalSystemVar(v, TiDBEnableStreaming) - require.NoError(t, err) - require.Equal(t, "ON", val) - require.True(t, v.EnableStreaming) - err = SetSessionSystemVar(v, TiDBEnableStreaming, "0") - require.NoError(t, err) - val, err = GetSessionOrGlobalSystemVar(v, TiDBEnableStreaming) - require.NoError(t, err) - require.Equal(t, "OFF", val) - require.False(t, v.EnableStreaming) - require.Equal(t, DefTiDBOptimizerSelectivityLevel, v.OptimizerSelectivityLevel) err = SetSessionSystemVar(v, TiDBOptimizerSelectivityLevel, "1") require.NoError(t, err) require.Equal(t, 1, v.OptimizerSelectivityLevel) + require.Equal(t, DefTiDBOptimizerEnableNewOFGB, v.OptimizerEnableNewOnlyFullGroupByCheck) + err = SetSessionSystemVar(v, TiDBOptimizerEnableNewOnlyFullGroupByCheck, "off") + require.NoError(t, err) + require.Equal(t, false, v.OptimizerEnableNewOnlyFullGroupByCheck) + err = SetSessionSystemVar(v, TiDBDDLReorgWorkerCount, "4") // wrong scope global only require.True(t, terror.ErrorEqual(err, errGlobalVariable)) diff --git a/sessiontxn/staleread/errors.go b/sessiontxn/staleread/errors.go new file mode 100644 index 0000000000000..1d89fa632ccd6 --- /dev/null +++ b/sessiontxn/staleread/errors.go @@ -0,0 +1,24 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 staleread + +import ( + mysql "github.com/pingcap/tidb/errno" + "github.com/pingcap/tidb/util/dbterror" +) + +var ( + errAsOf = dbterror.ClassOptimizer.NewStd(mysql.ErrAsOf) +) diff --git a/sessiontxn/staleread/processor.go b/sessiontxn/staleread/processor.go new file mode 100644 index 0000000000000..1c41e24c7156c --- /dev/null +++ b/sessiontxn/staleread/processor.go @@ -0,0 +1,235 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 staleread + +import ( + "context" + + "github.com/pingcap/errors" + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/sessiontxn" + "github.com/pingcap/tidb/table/temptable" +) + +// enforce implement Processor interface +var _ Processor = &staleReadProcessor{} + +// StalenessTSEvaluator is a function to get staleness ts +type StalenessTSEvaluator func(sctx sessionctx.Context) (uint64, error) + +// Processor is an interface used to process stale read +type Processor interface { + // IsStaleness indicates that whether we should use the staleness + IsStaleness() bool + // GetStalenessInfoSchema returns the information schema if it is stale read, otherwise returns nil + GetStalenessInfoSchema() infoschema.InfoSchema + // GetStalenessReadTS returns the ts if it is stale read, otherwise returns 0 + GetStalenessReadTS() uint64 + // GetStalenessTSEvaluatorForPrepare returns a function that will be used by prepare to evaluate ts + GetStalenessTSEvaluatorForPrepare() StalenessTSEvaluator + + // OnSelectTable will be called when process table in select statement + OnSelectTable(tn *ast.TableName) error +} + +type baseProcessor struct { + sctx sessionctx.Context + txnManager sessiontxn.TxnManager + + evaluated bool + ts uint64 + tsEvaluator StalenessTSEvaluator + is infoschema.InfoSchema +} + +func (p *baseProcessor) init(sctx sessionctx.Context) { + p.sctx = sctx + p.txnManager = sessiontxn.GetTxnManager(sctx) +} + +func (p *baseProcessor) IsStaleness() bool { + return p.ts != 0 +} + +func (p *baseProcessor) GetStalenessInfoSchema() infoschema.InfoSchema { + return p.is +} + +func (p *baseProcessor) GetStalenessReadTS() uint64 { + return p.ts +} + +func (p *baseProcessor) GetStalenessTSEvaluatorForPrepare() StalenessTSEvaluator { + return p.tsEvaluator +} + +func (p *baseProcessor) OnSelectTable(_ *ast.TableName) error { + return errors.New("not supported") +} + +func (p *baseProcessor) setAsNonStaleRead() error { + return p.setEvaluatedValues(0, nil, nil) +} + +func (p *baseProcessor) setEvaluatedTS(ts uint64) (err error) { + is, err := domain.GetDomain(p.sctx).GetSnapshotInfoSchema(ts) + if err != nil { + return err + } + is = temptable.AttachLocalTemporaryTableInfoSchema(p.sctx, is) + return p.setEvaluatedValues(ts, is, func(sctx sessionctx.Context) (uint64, error) { + return ts, nil + }) +} + +func (p *baseProcessor) setEvaluatedEvaluator(evaluator StalenessTSEvaluator) error { + ts, err := evaluator(p.sctx) + if err != nil { + return err + } + + is, err := domain.GetDomain(p.sctx).GetSnapshotInfoSchema(ts) + is = temptable.AttachLocalTemporaryTableInfoSchema(p.sctx, is) + if err != nil { + return err + } + + return p.setEvaluatedValues(ts, is, evaluator) +} + +func (p *baseProcessor) setEvaluatedValues(ts uint64, is infoschema.InfoSchema, tsEvaluator StalenessTSEvaluator) error { + if p.evaluated { + return errors.New("already evaluated") + } + + p.ts = ts + p.is = is + p.evaluated = true + p.tsEvaluator = tsEvaluator + return nil +} + +type staleReadProcessor struct { + baseProcessor + stmtAsOfTs uint64 +} + +// NewStaleReadProcessor creates a new stale read processor +func NewStaleReadProcessor(sctx sessionctx.Context) Processor { + p := &staleReadProcessor{} + p.init(sctx) + return p +} + +// OnSelectTable will be called when process table in select statement +func (p *staleReadProcessor) OnSelectTable(tn *ast.TableName) error { + if p.sctx.GetSessionVars().InTxn() { + // When in explicit txn, it is not allowed to declare stale read in statement + // and the sys variables should also be ignored no matter it is set or not + if tn.AsOf != nil { + return errAsOf.FastGenWithCause("as of timestamp can't be set in transaction.") + } + + if p.evaluated { + return nil + } + + if txnCtx := p.sctx.GetSessionVars().TxnCtx; txnCtx.IsStaleness { + // It means we meet following case: + // 1. start transaction read only as of timestamp ts + // 2. select statement + return p.setEvaluatedValues( + txnCtx.StartTS, + temptable.AttachLocalTemporaryTableInfoSchema(p.sctx, txnCtx.InfoSchema.(infoschema.InfoSchema)), + nil, + ) + } + return p.setAsNonStaleRead() + } + + // If `stmtAsOfTS` is not 0, it means we use 'select ... from xxx as of timestamp ...' + stmtAsOfTS, err := parseAndValidateAsOf(p.sctx, tn.AsOf) + if err != nil { + return err + } + + if p.evaluated { + // If the select statement is related to multi tables, we should guarantee that all tables use the same timestamp + if p.stmtAsOfTs != stmtAsOfTS { + return errAsOf.GenWithStack("can not set different time in the as of") + } + return nil + } + + // If `txnReadTS` is not 0, it means we meet following situation: + // start transaction read only as of timestamp ... + // select from table + txnReadTS := p.sctx.GetSessionVars().TxnReadTS.UseTxnReadTS() + if txnReadTS > 0 && stmtAsOfTS > 0 { + // `as of` and `@@tx_read_ts` cannot be set in the same time + return errAsOf.FastGenWithCause("can't use select as of while already set transaction as of") + } + + if stmtAsOfTS > 0 { + p.stmtAsOfTs = stmtAsOfTS + return p.setEvaluatedTS(stmtAsOfTS) + } + + if txnReadTS > 0 { + return p.setEvaluatedTS(txnReadTS) + } + + // If both txnReadTS and stmtAsOfTS is empty while the readStaleness isn't, it means we meet following situation: + // set @@tidb_read_staleness='-5'; + // select from table + // Then the following select statement should be affected by the tidb_read_staleness in session. + if evaluator := getTsEvaluatorFromReadStaleness(p.sctx); evaluator != nil { + return p.setEvaluatedEvaluator(evaluator) + } + + // Otherwise, it means we should not use stale read. + return p.setAsNonStaleRead() +} + +func parseAndValidateAsOf(sctx sessionctx.Context, asOf *ast.AsOfClause) (uint64, error) { + if asOf == nil { + return 0, nil + } + + ts, err := CalculateAsOfTsExpr(sctx, asOf) + if err != nil { + return 0, err + } + + if err = sessionctx.ValidateStaleReadTS(context.TODO(), sctx, ts); err != nil { + return 0, err + } + + return ts, nil +} + +func getTsEvaluatorFromReadStaleness(sctx sessionctx.Context) StalenessTSEvaluator { + readStaleness := sctx.GetSessionVars().ReadStaleness + if readStaleness == 0 { + return nil + } + + return func(sctx sessionctx.Context) (uint64, error) { + return CalculateTsWithReadStaleness(sctx, readStaleness) + } +} diff --git a/sessiontxn/staleread/processor_test.go b/sessiontxn/staleread/processor_test.go new file mode 100644 index 0000000000000..27cd2036f579e --- /dev/null +++ b/sessiontxn/staleread/processor_test.go @@ -0,0 +1,237 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 staleread_test + +import ( + "fmt" + "testing" + "time" + + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/infoschema" + "github.com/pingcap/tidb/parser" + "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/sessiontxn/staleread" + "github.com/pingcap/tidb/table/temptable" + "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/util/testbridge" + "github.com/stretchr/testify/require" + "github.com/tikv/client-go/v2/oracle" + "go.uber.org/goleak" +) + +func TestMain(m *testing.M) { + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + testbridge.SetupForCommonTest() + goleak.VerifyTestMain(m, opts...) +} + +type staleReadPoint struct { + tk *testkit.TestKit + ts uint64 + dt string + tm time.Time + is infoschema.InfoSchema + tn *ast.TableName +} + +func (p *staleReadPoint) checkMatchProcessor(t *testing.T, processor staleread.Processor, hasEvaluator bool) { + require.True(t, processor.IsStaleness()) + require.Equal(t, p.ts, processor.GetStalenessReadTS()) + require.Equal(t, p.is.SchemaMetaVersion(), processor.GetStalenessInfoSchema().SchemaMetaVersion()) + require.IsTypef(t, processor.GetStalenessInfoSchema(), temptable.AttachLocalTemporaryTableInfoSchema(p.tk.Session(), p.is), "") + evaluator := processor.GetStalenessTSEvaluatorForPrepare() + if hasEvaluator { + require.NotNil(t, evaluator) + ts, err := evaluator(p.tk.Session()) + require.NoError(t, err) + require.Equal(t, processor.GetStalenessReadTS(), ts) + } else { + require.Nil(t, evaluator) + } +} + +func genStaleReadPoint(t *testing.T, tk *testkit.TestKit) *staleReadPoint { + tk.MustExec("create table if not exists test.t(a bigint)") + tk.MustExec(fmt.Sprintf("alter table test.t alter column a set default %d", time.Now().UnixNano())) + time.Sleep(time.Millisecond * 20) + is := domain.GetDomain(tk.Session()).InfoSchema() + dt := tk.MustQuery("select now(3)").Rows()[0][0].(string) + tm, err := time.ParseInLocation("2006-01-02 15:04:05.999999", dt, tk.Session().GetSessionVars().Location()) + require.NoError(t, err) + ts := oracle.GoTimeToTS(tm) + tn := astTableWithAsOf(t, dt) + return &staleReadPoint{ + tk: tk, + ts: ts, + dt: dt, + tm: tm, + is: is, + tn: tn, + } +} + +func astTableWithAsOf(t *testing.T, dt string) *ast.TableName { + p := parser.New() + var sql string + if dt == "" { + sql = "select * from test.t" + } else { + sql = fmt.Sprintf("select * from test.t as of timestamp '%s'", dt) + } + + stmt, err := p.ParseOneStmt(sql, "", "") + require.NoError(t, err) + sel := stmt.(*ast.SelectStmt) + return sel.From.TableRefs.Left.(*ast.TableSource).Source.(*ast.TableName) +} + +func TestStaleReadProcessorWithSelectTable(t *testing.T) { + store, _, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tn := astTableWithAsOf(t, "") + p1 := genStaleReadPoint(t, tk) + p2 := genStaleReadPoint(t, tk) + + // create local temporary table to check processor's infoschema will consider temporary table + tk.MustExec("create temporary table test.t2(a int)") + + // no sys variable just select ... as of ... + processor := createProcessor(t, tk.Session()) + err := processor.OnSelectTable(p1.tn) + require.NoError(t, err) + p1.checkMatchProcessor(t, processor, true) + err = processor.OnSelectTable(p1.tn) + require.NoError(t, err) + p1.checkMatchProcessor(t, processor, true) + err = processor.OnSelectTable(p2.tn) + require.Error(t, err) + require.Equal(t, "[planner:8135]can not set different time in the as of", err.Error()) + p1.checkMatchProcessor(t, processor, true) + + // the first select has not 'as of' + processor = createProcessor(t, tk.Session()) + err = processor.OnSelectTable(tn) + require.NoError(t, err) + require.False(t, processor.IsStaleness()) + err = processor.OnSelectTable(p1.tn) + require.Equal(t, "[planner:8135]can not set different time in the as of", err.Error()) + require.False(t, processor.IsStaleness()) + + // 'as of' is not allowed when @@txn_read_ts is set + tk.MustExec(fmt.Sprintf("SET TRANSACTION READ ONLY AS OF TIMESTAMP '%s'", p1.dt)) + processor = createProcessor(t, tk.Session()) + err = processor.OnSelectTable(p1.tn) + require.Error(t, err) + require.Equal(t, "[planner:8135]invalid as of timestamp: can't use select as of while already set transaction as of", err.Error()) + tk.MustExec("set @@tx_read_ts=''") + + // no 'as of' will consume @txn_read_ts + tk.MustExec(fmt.Sprintf("SET TRANSACTION READ ONLY AS OF TIMESTAMP '%s'", p1.dt)) + processor = createProcessor(t, tk.Session()) + err = processor.OnSelectTable(tn) + p1.checkMatchProcessor(t, processor, true) + tk.Session().GetSessionVars().CleanupTxnReadTSIfUsed() + require.Equal(t, uint64(0), tk.Session().GetSessionVars().TxnReadTS.PeakTxnReadTS()) + tk.MustExec("set @@tx_read_ts=''") + + // `@@tidb_read_staleness` + tk.MustExec("set @@tidb_read_staleness=-5") + processor = createProcessor(t, tk.Session()) + err = processor.OnSelectTable(tn) + require.True(t, processor.IsStaleness()) + require.Equal(t, int64(0), processor.GetStalenessInfoSchema().SchemaMetaVersion()) + expectedTS, err := staleread.CalculateTsWithReadStaleness(tk.Session(), -5*time.Second) + require.NoError(t, err) + require.Equal(t, expectedTS, processor.GetStalenessReadTS()) + evaluator := processor.GetStalenessTSEvaluatorForPrepare() + evaluatorTS, err := evaluator(tk.Session()) + require.NoError(t, err) + require.Equal(t, expectedTS, evaluatorTS) + tk.MustExec("set @@tidb_read_staleness=''") + + tk.MustExec("do sleep(0.01)") + evaluatorTS, err = evaluator(tk.Session()) + require.NoError(t, err) + expectedTS2, err := staleread.CalculateTsWithReadStaleness(tk.Session(), -5*time.Second) + require.NoError(t, err) + require.Equal(t, expectedTS2, evaluatorTS) + + // `@@tidb_read_staleness` will be ignored when `as of` or `@@tx_read_ts` + tk.MustExec("set @@tidb_read_staleness=-5") + processor = createProcessor(t, tk.Session()) + err = processor.OnSelectTable(p1.tn) + require.NoError(t, err) + p1.checkMatchProcessor(t, processor, true) + + tk.MustExec(fmt.Sprintf("SET TRANSACTION READ ONLY AS OF TIMESTAMP '%s'", p1.dt)) + processor = createProcessor(t, tk.Session()) + err = processor.OnSelectTable(tn) + require.NoError(t, err) + p1.checkMatchProcessor(t, processor, true) + tk.MustExec("set @@tidb_read_staleness=''") +} + +func TestStaleReadProcessorInTxn(t *testing.T) { + store, _, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tn := astTableWithAsOf(t, "") + p1 := genStaleReadPoint(t, tk) + _ = genStaleReadPoint(t, tk) + + tk.MustExec("begin") + + // no error when there is no 'as of' + processor := createProcessor(t, tk.Session()) + err := processor.OnSelectTable(tn) + require.NoError(t, err) + require.False(t, processor.IsStaleness()) + + // return an error when 'as of' is set + processor = createProcessor(t, tk.Session()) + err = processor.OnSelectTable(p1.tn) + require.Error(t, err) + require.Equal(t, "[planner:8135]invalid as of timestamp: as of timestamp can't be set in transaction.", err.Error()) + tk.MustExec("rollback") + + tk.MustExec(fmt.Sprintf("start transaction read only as of timestamp '%s'", p1.dt)) + + // processor will use the transaction's stale read context + err = processor.OnSelectTable(tn) + require.NoError(t, err) + p1.checkMatchProcessor(t, processor, false) + + // sys variables will be ignored in txn + tk.MustExec("set @@tidb_read_staleness=-5") + err = processor.OnSelectTable(tn) + require.NoError(t, err) + p1.checkMatchProcessor(t, processor, false) + tk.MustExec("set @@tidb_read_staleness=''") +} + +func createProcessor(t *testing.T, se sessionctx.Context) staleread.Processor { + processor := staleread.NewStaleReadProcessor(se) + require.False(t, processor.IsStaleness()) + require.Equal(t, uint64(0), processor.GetStalenessReadTS()) + require.Nil(t, processor.GetStalenessTSEvaluatorForPrepare()) + require.Nil(t, processor.GetStalenessInfoSchema()) + return processor +} diff --git a/sessiontxn/staleread/util.go b/sessiontxn/staleread/util.go new file mode 100644 index 0000000000000..fe7062a60d7ce --- /dev/null +++ b/sessiontxn/staleread/util.go @@ -0,0 +1,57 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 staleread + +import ( + "time" + + "github.com/pingcap/tidb/expression" + "github.com/pingcap/tidb/parser/ast" + "github.com/pingcap/tidb/parser/mysql" + "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/types" + "github.com/tikv/client-go/v2/oracle" +) + +// CalculateAsOfTsExpr calculates the TsExpr of AsOfClause to get a StartTS. +func CalculateAsOfTsExpr(sctx sessionctx.Context, asOfClause *ast.AsOfClause) (uint64, error) { + tsVal, err := expression.EvalAstExpr(sctx, asOfClause.TsExpr) + if err != nil { + return 0, err + } + toTypeTimestamp := types.NewFieldType(mysql.TypeTimestamp) + // We need at least the millionsecond here, so set fsp to 3. + toTypeTimestamp.Decimal = 3 + tsTimestamp, err := tsVal.ConvertTo(sctx.GetSessionVars().StmtCtx, toTypeTimestamp) + if err != nil { + return 0, err + } + tsTime, err := tsTimestamp.GetMysqlTime().GoTime(sctx.GetSessionVars().Location()) + if err != nil { + return 0, err + } + return oracle.GoTimeToTS(tsTime), nil +} + +// CalculateTsWithReadStaleness calculates the TsExpr for readStaleness duration +func CalculateTsWithReadStaleness(sctx sessionctx.Context, readStaleness time.Duration) (uint64, error) { + nowVal, err := expression.GetStmtTimestamp(sctx) + if err != nil { + return 0, err + } + tsVal := nowVal.Add(readStaleness) + minTsVal := expression.GetMinSafeTime(sctx) + return oracle.GoTimeToTS(expression.CalAppropriateTime(tsVal, nowVal, minTsVal)), nil +} diff --git a/sessiontxn/txn_context_test.go b/sessiontxn/txn_context_test.go index e9ec5f73dc466..a0d7816e6b595 100644 --- a/sessiontxn/txn_context_test.go +++ b/sessiontxn/txn_context_test.go @@ -34,6 +34,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } @@ -638,13 +639,6 @@ func TestTxnContextForStaleReadInPrepare(t *testing.T) { tk.MustExec("execute s2") }) - // plan cache for stmtID2 - doWithCheckPath(t, se, []string{"assertTxnManagerInCachedPlanExec", "assertTxnManagerInShortPointGetPlan"}, func() { - rs, err := se.ExecutePreparedStmt(context.TODO(), stmtID2, nil) - require.NoError(t, err) - tk.ResultSetToResult(rs, fmt.Sprintf("%v", rs)).Check(testkit.Rows("1 10")) - }) - // tx_read_ts in prepare se.SetValue(sessiontxn.AssertTxnInfoSchemaKey, is1) doWithCheckPath(t, se, path, func() { @@ -655,13 +649,6 @@ func TestTxnContextForStaleReadInPrepare(t *testing.T) { doWithCheckPath(t, se, normalPathRecords, func() { tk.MustExec("execute s3") }) - - // plan cache for stmtID3 - doWithCheckPath(t, se, []string{"assertTxnManagerInCachedPlanExec", "assertTxnManagerInShortPointGetPlan"}, func() { - rs, err := se.ExecutePreparedStmt(context.TODO(), stmtID3, nil) - require.NoError(t, err) - tk.ResultSetToResult(rs, fmt.Sprintf("%v", rs)).Check(testkit.Rows("1 10")) - }) } func TestTxnContextPreparedStmtWithForUpdate(t *testing.T) { diff --git a/statistics/handle/ddl.go b/statistics/handle/ddl.go index 6fdf102548ee1..9be4b1744af68 100644 --- a/statistics/handle/ddl.go +++ b/statistics/handle/ddl.go @@ -176,6 +176,12 @@ func (h *Handle) DDLEventCh() chan *util.Event { // insertTableStats2KV inserts a record standing for a new table to stats_meta and inserts some records standing for the // new columns and indices which belong to this table. func (h *Handle) insertTableStats2KV(info *model.TableInfo, physicalID int64) (err error) { + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(physicalID, statsVer) + } + }() h.mu.Lock() defer h.mu.Unlock() ctx := context.Background() @@ -195,6 +201,7 @@ func (h *Handle) insertTableStats2KV(info *model.TableInfo, physicalID int64) (e if _, err := exec.ExecuteInternal(ctx, "insert into mysql.stats_meta (version, table_id) values(%?, %?)", startTS, physicalID); err != nil { return err } + statsVer = startTS for _, col := range info.Columns { if _, err := exec.ExecuteInternal(ctx, "insert into mysql.stats_histograms (table_id, is_index, hist_id, distinct_count, version) values(%?, 0, %?, 0, %?)", physicalID, col.ID, startTS); err != nil { return err @@ -211,6 +218,12 @@ func (h *Handle) insertTableStats2KV(info *model.TableInfo, physicalID int64) (e // insertColStats2KV insert a record to stats_histograms with distinct_count 1 and insert a bucket to stats_buckets with default value. // This operation also updates version. func (h *Handle) insertColStats2KV(physicalID int64, colInfos []*model.ColumnInfo) (err error) { + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(physicalID, statsVer) + } + }() h.mu.Lock() defer h.mu.Unlock() @@ -233,6 +246,7 @@ func (h *Handle) insertColStats2KV(physicalID int64, colInfos []*model.ColumnInf if err != nil { return } + statsVer = startTS // If we didn't update anything by last SQL, it means the stats of this table does not exist. if h.mu.ctx.GetSessionVars().StmtCtx.AffectedRows() > 0 { // By this step we can get the count of this table, then we can sure the count and repeats of bucket. diff --git a/statistics/handle/dump.go b/statistics/handle/dump.go index 2d0979667f622..5e2ae4fcddd2d 100644 --- a/statistics/handle/dump.go +++ b/statistics/handle/dump.go @@ -300,10 +300,18 @@ func TableStatsFromJSON(tableInfo *model.TableInfo, physicalID int64, jsonTbl *J } hist := statistics.HistogramFromProto(jsonCol.Histogram) sc := &stmtctx.StatementContext{TimeZone: time.UTC} + // Deal with sortKey, the length of sortKey maybe longer than the column's length. + orgLen := colInfo.FieldType.Flen + if types.IsString(colInfo.FieldType.Tp) { + colInfo.Flen = types.UnspecifiedLength + } hist, err := hist.ConvertTo(sc, &colInfo.FieldType) if err != nil { return nil, errors.Trace(err) } + if types.IsString(colInfo.FieldType.Tp) { + colInfo.Flen = orgLen + } cm, topN := statistics.CMSketchAndTopNFromProto(jsonCol.CMSketch) fms := statistics.FMSketchFromProto(jsonCol.FMSketch) hist.ID, hist.NullCount, hist.LastUpdateVersion, hist.TotColSize, hist.Correlation = colInfo.ID, jsonCol.NullCount, jsonCol.LastUpdateVersion, jsonCol.TotColSize, jsonCol.Correlation @@ -322,6 +330,7 @@ func TableStatsFromJSON(tableInfo *model.TableInfo, physicalID int64, jsonTbl *J Info: colInfo, IsHandle: tableInfo.PKIsHandle && mysql.HasPriKeyFlag(colInfo.Flag), StatsVer: statsVer, + Loaded: true, } col.Count = int64(col.TotalRowCount()) tbl.Columns[col.ID] = col diff --git a/statistics/handle/dump_test.go b/statistics/handle/dump_test.go index 50616f7c1b5f2..d2c67d49dcdbe 100644 --- a/statistics/handle/dump_test.go +++ b/statistics/handle/dump_test.go @@ -391,6 +391,59 @@ func TestDumpVer2Stats(t *testing.T) { requireTableEqual(t, statsCacheTbl, loadTbl) } +func TestLoadStatsForNewCollation(t *testing.T) { + // This test is almost the same as TestDumpVer2Stats, except that: b varchar(10) => b varchar(3) collate utf8mb4_unicode_ci + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("set @@tidb_analyze_version = 2") + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b varchar(3) collate utf8mb4_unicode_ci)") + tk.MustExec("insert into t value(1, 'aaa'), (3, 'aab'), (5, 'bba'), (2, 'bbb'), (4, 'cca'), (6, 'ccc')") + // mark column stats as needed + tk.MustExec("select * from t where a = 3") + tk.MustExec("select * from t where b = 'bbb'") + tk.MustExec("alter table t add index single(a)") + tk.MustExec("alter table t add index multi(a, b)") + tk.MustExec("analyze table t with 2 topn") + h := dom.StatsHandle() + is := dom.InfoSchema() + tableInfo, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + + storageTbl, err := h.TableStatsFromStorage(tableInfo.Meta(), tableInfo.Meta().ID, false, 0) + require.NoError(t, err) + + dumpJSONTable, err := h.DumpStatsToJSON("test", tableInfo.Meta(), nil) + require.NoError(t, err) + + jsonBytes, err := json.MarshalIndent(dumpJSONTable, "", " ") + require.NoError(t, err) + + loadJSONTable := &handle.JSONTable{} + err = json.Unmarshal(jsonBytes, loadJSONTable) + require.NoError(t, err) + + loadTbl, err := handle.TableStatsFromJSON(tableInfo.Meta(), tableInfo.Meta().ID, loadJSONTable) + require.NoError(t, err) + + // assert that a statistics.Table from storage dumped into JSON text and then unmarshalled into a statistics.Table keeps unchanged + requireTableEqual(t, loadTbl, storageTbl) + + // assert that this statistics.Table is the same as the one in stats cache + statsCacheTbl := h.GetTableStats(tableInfo.Meta()) + requireTableEqual(t, loadTbl, statsCacheTbl) + + err = h.LoadStatsFromJSON(is, loadJSONTable) + require.NoError(t, err) + require.Nil(t, h.Update(is)) + statsCacheTbl = h.GetTableStats(tableInfo.Meta()) + // assert that after the JSONTable above loaded into storage then updated into the stats cache, + // the statistics.Table in the stats cache is the same as the unmarshalled statistics.Table + requireTableEqual(t, statsCacheTbl, loadTbl) +} + func TestJSONTableToBlocks(t *testing.T) { store, dom, clean := testkit.CreateMockStoreAndDomain(t) defer clean() diff --git a/statistics/handle/handle.go b/statistics/handle/handle.go index 13e19d4b95eb0..d4e93f76f1cf9 100644 --- a/statistics/handle/handle.go +++ b/statistics/handle/handle.go @@ -123,16 +123,20 @@ type Handle struct { // StatsLoad is used to load stats concurrently StatsLoad StatsLoad + + // sysProcTracker is used to track sys process like analyze + sysProcTracker sessionctx.SysProcTracker } func (h *Handle) execRestrictedSQL(ctx context.Context, sql string, params ...interface{}) ([]chunk.Row, []*ast.ResultField, error) { return h.mu.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, []sqlexec.OptionFuncAlias{sqlexec.ExecOptionUseSessionPool}, sql, params...) } -func (h *Handle) execRestrictedSQLWithStatsVer(ctx context.Context, statsVer int, sql string, params ...interface{}) ([]chunk.Row, []*ast.ResultField, error) { +func (h *Handle) execRestrictedSQLWithStatsVer(ctx context.Context, statsVer int, procTrackID uint64, sql string, params ...interface{}) ([]chunk.Row, []*ast.ResultField, error) { optFuncs := []sqlexec.OptionFuncAlias{ sqlexec.ExecOptionUseSessionPool, execOptionForAnalyze[statsVer], + sqlexec.ExecOptionWithSysProcTrack(procTrackID, h.sysProcTracker.Track, h.sysProcTracker.UnTrack), } return h.mu.ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(ctx, optFuncs, sql, params...) } @@ -180,13 +184,14 @@ type sessionPool interface { } // NewHandle creates a Handle for update stats. -func NewHandle(ctx sessionctx.Context, lease time.Duration, pool sessionPool) (*Handle, error) { +func NewHandle(ctx sessionctx.Context, lease time.Duration, pool sessionPool, tracker sessionctx.SysProcTracker) (*Handle, error) { cfg := config.GetGlobalConfig() handle := &Handle{ ddlEventCh: make(chan *util.Event, 100), listHead: &SessionStatsCollector{mapper: make(tableDeltaMap), rateMap: make(errorRateDeltaMap)}, idxUsageListHead: &SessionIndexUsageCollector{mapper: make(indexUsageMap)}, pool: pool, + sysProcTracker: tracker, } handle.lease.Store(lease) handle.statsCache.memTracker = memory.NewTracker(memory.LabelForStatsCache, -1) @@ -608,7 +613,7 @@ func (h *Handle) LoadNeededHistograms() (err error) { continue } c, ok := tbl.Columns[col.ColumnID] - if !ok || c.Len() > 0 { + if !ok || c.IsLoaded() { statistics.HistogramNeededColumns.Delete(col) continue } @@ -640,6 +645,7 @@ func (h *Handle) LoadNeededHistograms() (err error) { FMSketch: fms, IsHandle: c.IsHandle, StatsVer: rows[0].GetInt64(0), + Loaded: true, } // Column.Count is calculated by Column.TotalRowCount(). Hence we don't set Column.Count when initializing colHist. colHist.Count = int64(colHist.TotalRowCount()) @@ -786,7 +792,7 @@ func (h *Handle) columnStatsFromStorage(reader *statsReader, row chunk.Row, tabl // 4. loadAll is false. notNeedLoad := h.Lease() > 0 && !isHandle && - (col == nil || col.Len() == 0 && col.LastUpdateVersion < histVer) && + (col == nil || !col.IsLoaded() && col.LastUpdateVersion < histVer) && !loadAll if notNeedLoad { count, err := h.columnCountFromStorage(reader, table.PhysicalID, histID, statsVer) @@ -828,6 +834,7 @@ func (h *Handle) columnStatsFromStorage(reader *statsReader, row chunk.Row, tabl IsHandle: tableInfo.PKIsHandle && mysql.HasPriKeyFlag(colInfo.Flag), Flag: flag, StatsVer: statsVer, + Loaded: true, } // Column.Count is calculated by Column.TotalRowCount(). Hence we don't set Column.Count when initializing col. col.Count = int64(col.TotalRowCount()) @@ -984,6 +991,12 @@ func (h *Handle) StatsMetaCountAndModifyCount(tableID int64) (int64, int64, erro // SaveTableStatsToStorage saves the stats of a table to storage. func (h *Handle) SaveTableStatsToStorage(results *statistics.AnalyzeResults, needDumpFMS bool) (err error) { tableID := results.TableID.GetStatisticsID() + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(tableID, statsVer) + } + }() h.mu.Lock() defer h.mu.Unlock() ctx := context.TODO() @@ -1026,6 +1039,7 @@ func (h *Handle) SaveTableStatsToStorage(results *statistics.AnalyzeResults, nee if _, err = exec.ExecuteInternal(ctx, "replace into mysql.stats_meta (version, table_id, count, snapshot) values (%?, %?, %?, %?)", version, tableID, results.Count, results.Snapshot); err != nil { return err } + statsVer = version } else { modifyCnt := curModifyCnt - results.BaseModifyCnt if modifyCnt < 0 { @@ -1038,6 +1052,7 @@ func (h *Handle) SaveTableStatsToStorage(results *statistics.AnalyzeResults, nee if _, err = exec.ExecuteInternal(ctx, "update mysql.stats_meta set version=%?, modify_count=%?, count=%?, snapshot=%? where table_id=%?", version, modifyCnt, cnt, results.Snapshot, tableID); err != nil { return err } + statsVer = version } // 2. Save histograms. for _, result := range results.Ars { @@ -1149,6 +1164,12 @@ func (h *Handle) SaveTableStatsToStorage(results *statistics.AnalyzeResults, nee // SaveStatsToStorage saves the stats to storage. // TODO: refactor to reduce the number of parameters func (h *Handle) SaveStatsToStorage(tableID int64, count int64, isIndex int, hg *statistics.Histogram, cms *statistics.CMSketch, topN *statistics.TopN, fms *statistics.FMSketch, statsVersion int, isAnalyzed int64, needDumpFMS bool, updateAnalyzeTime bool) (err error) { + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(tableID, statsVer) + } + }() h.mu.Lock() defer h.mu.Unlock() ctx := context.TODO() @@ -1175,6 +1196,7 @@ func (h *Handle) SaveStatsToStorage(tableID int64, count int64, isIndex int, hg if err != nil { return err } + statsVer = version cmSketch, err := statistics.EncodeCMSketchWithoutTopN(cms) if err != nil { return err @@ -1252,6 +1274,12 @@ func (h *Handle) SaveStatsToStorage(tableID int64, count int64, isIndex int, hg // SaveMetaToStorage will save stats_meta to storage. func (h *Handle) SaveMetaToStorage(tableID, count, modifyCount int64) (err error) { + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(tableID, statsVer) + } + }() h.mu.Lock() defer h.mu.Unlock() ctx := context.TODO() @@ -1269,6 +1297,7 @@ func (h *Handle) SaveMetaToStorage(tableID, count, modifyCount int64) (err error } version := txn.StartTS() _, err = exec.ExecuteInternal(ctx, "replace into mysql.stats_meta (version, table_id, count, modify_count) values (%?, %?, %?, %?)", version, tableID, count, modifyCount) + statsVer = version return err } @@ -1445,6 +1474,12 @@ const ( // InsertExtendedStats inserts a record into mysql.stats_extended and update version in mysql.stats_meta. func (h *Handle) InsertExtendedStats(statsName string, colIDs []int64, tp int, tableID int64, ifNotExists bool) (err error) { + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(tableID, statsVer) + } + }() sort.Slice(colIDs, func(i, j int) bool { return colIDs[i] < colIDs[j] }) bytes, err := json.Marshal(colIDs) if err != nil { @@ -1490,6 +1525,7 @@ func (h *Handle) InsertExtendedStats(statsName string, colIDs []int64, tp int, t if _, err = exec.ExecuteInternal(ctx, "UPDATE mysql.stats_meta SET version = %? WHERE table_id = %?", version, tableID); err != nil { return err } + statsVer = version // Remove the existing 'deleted' records. if _, err = exec.ExecuteInternal(ctx, "DELETE FROM mysql.stats_extended WHERE name = %? and table_id = %?", statsName, tableID); err != nil { return err @@ -1509,6 +1545,12 @@ func (h *Handle) InsertExtendedStats(statsName string, colIDs []int64, tp int, t // MarkExtendedStatsDeleted update the status of mysql.stats_extended to be `deleted` and the version of mysql.stats_meta. func (h *Handle) MarkExtendedStatsDeleted(statsName string, tableID int64, ifExists bool) (err error) { + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(tableID, statsVer) + } + }() ctx := context.Background() rows, _, err := h.execRestrictedSQL(ctx, "SELECT name FROM mysql.stats_extended WHERE name = %? and table_id = %? and status in (%?, %?)", statsName, tableID, StatsStatusInited, StatsStatusAnalyzed) if err != nil { @@ -1546,6 +1588,7 @@ func (h *Handle) MarkExtendedStatsDeleted(statsName string, tableID int64, ifExi if _, err = exec.ExecuteInternal(ctx, "UPDATE mysql.stats_meta SET version = %? WHERE table_id = %?", version, tableID); err != nil { return err } + statsVer = version if _, err = exec.ExecuteInternal(ctx, "UPDATE mysql.stats_extended SET version = %?, status = %? WHERE name = %? and table_id = %?", version, StatsStatusDeleted, statsName, tableID); err != nil { return err } @@ -1715,6 +1758,12 @@ func (h *Handle) fillExtStatsCorrVals(item *statistics.ExtendedStatsItem, cols [ // SaveExtendedStatsToStorage writes extended stats of a table into mysql.stats_extended. func (h *Handle) SaveExtendedStatsToStorage(tableID int64, extStats *statistics.ExtendedStatsColl, isLoad bool) (err error) { + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(tableID, statsVer) + } + }() if extStats == nil || len(extStats.Stats) == 0 { return nil } @@ -1756,6 +1805,7 @@ func (h *Handle) SaveExtendedStatsToStorage(tableID int64, extStats *statistics. if _, err := exec.ExecuteInternal(ctx, "UPDATE mysql.stats_meta SET version = %? WHERE table_id = %?", version, tableID); err != nil { return err } + statsVer = version } return nil } @@ -1956,9 +2006,51 @@ func (h *Handle) RecordHistoricalStatsToStorage(dbName string, tableInfo *model. // CheckHistoricalStatsEnable is used to check whether TiDBEnableHistoricalStats is enabled. func (h *Handle) CheckHistoricalStatsEnable() (enable bool, err error) { + h.mu.Lock() + defer h.mu.Unlock() val, err := h.mu.ctx.GetSessionVars().GlobalVarsAccessor.GetGlobalSysVar(variable.TiDBEnableHistoricalStats) if err != nil { return false, errors.Trace(err) } return variable.TiDBOptOn(val), nil } + +func (h *Handle) recordHistoricalStatsMeta(tableID int64, version uint64) error { + if tableID == 0 || version == 0 { + return errors.Errorf("tableID %d, version %d are invalid", tableID, version) + } + historicalStatsEnabled, err := h.CheckHistoricalStatsEnable() + if err != nil { + return errors.Errorf("check tidb_enable_historical_stats failed: %v", err) + } + if !historicalStatsEnabled { + return nil + } + + ctx := context.Background() + h.mu.Lock() + defer h.mu.Unlock() + rows, _, err := h.execRestrictedSQL(ctx, "select modify_count, count from mysql.stats_meta where table_id = %? and version = %?", tableID, version) + if err != nil { + return errors.Trace(err) + } + if len(rows) == 0 { + return errors.New("no historical meta stats can be recorded") + } + modifyCount, count := rows[0].GetInt64(0), rows[0].GetInt64(1) + + exec := h.mu.ctx.(sqlexec.SQLExecutor) + _, err = exec.ExecuteInternal(ctx, "begin pessimistic") + if err != nil { + return errors.Trace(err) + } + defer func() { + err = finishTransaction(ctx, exec, err) + }() + + const sql = "REPLACE INTO mysql.stats_meta_history(table_id, modify_count, count, version, create_time) VALUES (%?, %?, %?, %?, NOW())" + if _, err := exec.ExecuteInternal(ctx, sql, tableID, modifyCount, count, version); err != nil { + return errors.Trace(err) + } + return nil +} diff --git a/statistics/handle/handle_hist.go b/statistics/handle/handle_hist.go index 1d591c099457e..e846c4568a57f 100644 --- a/statistics/handle/handle_hist.go +++ b/statistics/handle/handle_hist.go @@ -280,6 +280,7 @@ func (h *Handle) readStatsForOne(col model.TableColumnID, c *statistics.Column, FMSketch: fms, IsHandle: c.IsHandle, StatsVer: rows[0].GetInt64(0), + Loaded: true, } // Column.Count is calculated by Column.TotalRowCount(). Hence, we don't set Column.Count when initializing colHist. colHist.Count = int64(colHist.TotalRowCount()) diff --git a/statistics/handle/handle_test.go b/statistics/handle/handle_test.go index e5c0a97d1def5..2d474e232d192 100644 --- a/statistics/handle/handle_test.go +++ b/statistics/handle/handle_test.go @@ -359,7 +359,7 @@ func TestVersion(t *testing.T) { tbl1, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t1")) require.NoError(t, err) tableInfo1 := tbl1.Meta() - h, err := handle.NewHandle(testKit.Session(), time.Millisecond, do.SysSessionPool()) + h, err := handle.NewHandle(testKit.Session(), time.Millisecond, do.SysSessionPool(), do.SysProcTracker()) require.NoError(t, err) unit := oracle.ComposeTS(1, 0) testKit.MustExec("update mysql.stats_meta set version = ? where table_id = ?", 2*unit, tableInfo1.ID) @@ -2213,7 +2213,7 @@ func TestFMSWithAnalyzePartition(t *testing.T) { tk.MustQuery("select count(*) from mysql.stats_fm_sketch").Check(testkit.Rows("0")) tk.MustExec("analyze table t partition p0 with 1 topn, 2 buckets") tk.MustQuery("show warnings").Sort().Check(testkit.Rows( - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p0.", + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t's partition p0", "Warning 8131 Build table: `t` global-level stats failed due to missing partition-level stats", "Warning 8131 Build table: `t` index: `a` global-level stats failed due to missing partition-level stats", )) diff --git a/statistics/handle/main_test.go b/statistics/handle/main_test.go index 9738db767eca3..1822c3b52eb27 100644 --- a/statistics/handle/main_test.go +++ b/statistics/handle/main_test.go @@ -23,6 +23,7 @@ import ( func TestMain(m *testing.M) { opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/statistics/handle/update.go b/statistics/handle/update.go index d1a1767ce2c5f..018d49173bcd4 100644 --- a/statistics/handle/update.go +++ b/statistics/handle/update.go @@ -32,7 +32,6 @@ import ( "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" - "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" @@ -484,6 +483,12 @@ func (h *Handle) DumpStatsDeltaToKV(mode dumpMode) error { // dumpTableStatDeltaToKV dumps a single delta with some table to KV and updates the version. func (h *Handle) dumpTableStatCountToKV(id int64, delta variable.TableDelta) (updated bool, err error) { + statsVer := uint64(0) + defer func() { + if err == nil && statsVer != 0 { + err = h.recordHistoricalStatsMeta(id, statsVer) + } + }() if delta.Count == 0 { return true, nil } @@ -511,6 +516,7 @@ func (h *Handle) dumpTableStatCountToKV(id int64, delta variable.TableDelta) (up } else { _, err = exec.ExecuteInternal(ctx, "update mysql.stats_meta set version = %?, count = count + %?, modify_count = modify_count + %? where table_id = %?", startTS, delta.Delta, delta.Count, id) } + statsVer = startTS return errors.Trace(err) } if err = updateStatsMeta(id); err != nil { @@ -730,50 +736,32 @@ func (h *Handle) HandleUpdateStats(is infoschema.InfoSchema) error { } for _, ptbl := range tables { - // this func lets `defer` works normally, where `Close()` should be called before any return - err = func() error { - tbl := ptbl.GetInt64(0) - const sql = "select table_id, hist_id, is_index, feedback from mysql.stats_feedback where table_id=%? order by hist_id, is_index" - rc, err := h.mu.ctx.(sqlexec.SQLExecutor).ExecuteInternal(context.TODO(), sql, tbl) + tableID, histID, isIndex := ptbl.GetInt64(0), int64(-1), int64(-1) + for { + // fetch at most 100000 rows each time to avoid OOM + const sql = "select table_id, hist_id, is_index, feedback from mysql.stats_feedback where table_id = %? and is_index >= %? and hist_id > %? order by is_index, hist_id limit 100000" + rows, _, err := h.execRestrictedSQL(ctx, sql, tableID, histID, isIndex) if err != nil { return errors.Trace(err) } - defer terror.Call(rc.Close) - tableID, histID, isIndex := int64(-1), int64(-1), int64(-1) - var rows []chunk.Row - for { - req := rc.NewChunk(nil) - iter := chunk.NewIterator4Chunk(req) - err := rc.Next(context.TODO(), req) - if err != nil { - return errors.Trace(err) - } - if req.NumRows() == 0 { - if len(rows) > 0 { - if err := h.handleSingleHistogramUpdate(is, rows); err != nil { + if len(rows) == 0 { + break + } + startIdx := 0 + for i, row := range rows { + if row.GetInt64(1) != histID || row.GetInt64(2) != isIndex { + if i > 0 { + if err = h.handleSingleHistogramUpdate(is, rows[startIdx:i]); err != nil { return errors.Trace(err) } } - break - } - for row := iter.Begin(); row != iter.End(); row = iter.Next() { - // len(rows) > 100000 limits the rows to avoid OOM - if row.GetInt64(0) != tableID || row.GetInt64(1) != histID || row.GetInt64(2) != isIndex || len(rows) > 100000 { - if len(rows) > 0 { - if err := h.handleSingleHistogramUpdate(is, rows); err != nil { - return errors.Trace(err) - } - } - tableID, histID, isIndex = row.GetInt64(0), row.GetInt64(1), row.GetInt64(2) - rows = rows[:0] - } - rows = append(rows, row) + histID, isIndex = row.GetInt64(1), row.GetInt64(2) + startIdx = i } } - return nil - }() - if err != nil { - return err + if err = h.handleSingleHistogramUpdate(is, rows[startIdx:]); err != nil { + return errors.Trace(err) + } } } return nil @@ -1183,7 +1171,7 @@ var execOptionForAnalyze = map[int]sqlexec.OptionFuncAlias{ func (h *Handle) execAutoAnalyze(statsVer int, sql string, params ...interface{}) { startTime := time.Now() - _, _, err := h.execRestrictedSQLWithStatsVer(context.Background(), statsVer, sql, params...) + _, _, err := h.execRestrictedSQLWithStatsVer(context.Background(), statsVer, util.GetAutoAnalyzeProcID(), sql, params...) dur := time.Since(startTime) metrics.AutoAnalyzeHistogram.Observe(dur.Seconds()) if err != nil { diff --git a/statistics/histogram.go b/statistics/histogram.go index a79cb2a32374f..d9fcbf9c5fa5a 100644 --- a/statistics/histogram.go +++ b/statistics/histogram.go @@ -430,28 +430,17 @@ func (hg *Histogram) ToString(idxCols int) string { // equalRowCount estimates the row count where the column equals to value. // matched: return true if this returned row count is from Bucket.Repeat or bucket NDV, which is more accurate than if not. func (hg *Histogram) equalRowCount(value types.Datum, hasBucketNDV bool) (count float64, matched bool) { - index, match := hg.Bounds.LowerBound(0, &value) - // Since we store the lower and upper bound together, if the index is an odd number, then it points to a upper bound. - if index%2 == 1 { - if match { - return float64(hg.Buckets[index/2].Repeat), true - } - if hasBucketNDV && hg.Buckets[index/2].NDV > 1 { - return float64(hg.bucketCount(index/2)-hg.Buckets[index/2].Repeat) / float64(hg.Buckets[index/2].NDV-1), true - } - return hg.notNullCount() / float64(hg.NDV), false + _, bucketIdx, inBucket, match := hg.locateBucket(value) + if !inBucket { + return 0, false } if match { - cmp := chunk.GetCompareFunc(hg.Tp) - if cmp(hg.Bounds.GetRow(index), 0, hg.Bounds.GetRow(index+1), 0) == 0 { - return float64(hg.Buckets[index/2].Repeat), true - } - if hasBucketNDV && hg.Buckets[index/2].NDV > 1 { - return float64(hg.bucketCount(index/2)-hg.Buckets[index/2].Repeat) / float64(hg.Buckets[index/2].NDV-1), true - } - return hg.notNullCount() / float64(hg.NDV), false + return float64(hg.Buckets[bucketIdx].Repeat), true } - return 0, false + if hasBucketNDV && hg.Buckets[bucketIdx].NDV > 1 { + return float64(hg.bucketCount(bucketIdx)-hg.Buckets[bucketIdx].Repeat) / float64(hg.Buckets[bucketIdx].NDV-1), true + } + return hg.notNullCount() / float64(hg.NDV), false } // greaterRowCount estimates the row count where the column greater than value. @@ -462,30 +451,69 @@ func (hg *Histogram) greaterRowCount(value types.Datum) float64 { return math.Max(0, gtCount) } +// locateBucket locates where a value falls in the range of the Histogram. +// Return value: +// exceed: if the value is larger than the upper bound of the last Bucket of the Histogram +// bucketIdx: assuming exceed if false, which Bucket does this value fall in (note: the range before a Bucket is also +// considered belong to this Bucket) +// inBucket: assuming exceed if false, whether this value falls in this Bucket, instead of falls between +// this Bucket and the previous Bucket. +// matchLastValue: assuming inBucket is true, if this value is the last value in this Bucket, which has a counter (Bucket.Repeat) +// Examples: +// val0 |<-[bkt0]->| |<-[bkt1]->val1(last value)| val2 |<--val3--[bkt2]->| |<-[bkt3]->| val4 +// locateBucket(val0): false, 0, false, false +// locateBucket(val1): false, 1, true, true +// locateBucket(val2): false, 2, false, false +// locateBucket(val3): false, 2, true, false +// locateBucket(val4): true, 3, false, false +func (hg *Histogram) locateBucket(value types.Datum) (exceed bool, bucketIdx int, inBucket, matchLastValue bool) { + // Empty histogram + if hg == nil || hg.Bounds.NumRows() == 0 { + return true, 0, false, false + } + index, match := hg.Bounds.LowerBound(0, &value) + // The value is larger than the max value in the histogram (exceed is true) + if index >= hg.Bounds.NumRows() { + return true, hg.Len() - 1, false, false + } + bucketIdx = index / 2 + // The value is before this bucket + if index%2 == 0 && !match { + return false, bucketIdx, false, false + } + // The value matches the last value in this bucket + // case 1: The LowerBound()'s return value tells us the value matches an upper bound of a bucket + // case 2: We compare and find that the value is equal to the upper bound of this bucket. This might happen when + // the bucket's lower bound is equal to its upper bound. + if (index%2 == 1 && match) || chunk.Compare(hg.Bounds.GetRow(bucketIdx*2+1), 0, &value) == 0 { + return false, bucketIdx, true, true + } + // The value is in the bucket and isn't the last value in this bucket + return false, bucketIdx, true, false +} + // LessRowCountWithBktIdx estimates the row count where the column less than value. func (hg *Histogram) LessRowCountWithBktIdx(value types.Datum) (float64, int) { // All the values are null. if hg.Bounds.NumRows() == 0 { return 0, 0 } - index, match := hg.Bounds.LowerBound(0, &value) - if index == hg.Bounds.NumRows() { + exceed, bucketIdx, inBucket, match := hg.locateBucket(value) + if exceed { return hg.notNullCount(), hg.Len() - 1 } - // Since we store the lower and upper bound together, so dividing the index by 2 will get the bucket index. - bucketIdx := index / 2 - curCount, curRepeat := float64(hg.Buckets[bucketIdx].Count), float64(hg.Buckets[bucketIdx].Repeat) preCount := float64(0) if bucketIdx > 0 { preCount = float64(hg.Buckets[bucketIdx-1].Count) } - if index%2 == 1 { - if match { - return curCount - curRepeat, bucketIdx - } - return preCount + hg.calcFraction(bucketIdx, &value)*(curCount-curRepeat-preCount), bucketIdx + if !inBucket { + return preCount, bucketIdx + } + curCount, curRepeat := float64(hg.Buckets[bucketIdx].Count), float64(hg.Buckets[bucketIdx].Repeat) + if match { + return curCount - curRepeat, bucketIdx } - return preCount, bucketIdx + return preCount + hg.calcFraction(bucketIdx, &value)*(curCount-curRepeat-preCount), bucketIdx } func (hg *Histogram) lessRowCount(value types.Datum) float64 { @@ -1021,6 +1049,17 @@ type Column struct { Flag int64 LastAnalyzePos types.Datum StatsVer int64 // StatsVer is the version of the current stats, used to maintain compatibility + + // Loaded means if the histogram, the topn and the cm sketch are loaded fully. + // Those three parts of a Column is loaded lazily. It will only be loaded after trying to use them. + // Note: Currently please use Column.IsLoaded() to check if it's loaded. + Loaded bool +} + +// IsLoaded is a wrap around c.Loaded. +// It's just for safe when we are switching from `c.notNullCount() > 0)` to `c.Loaded`. +func (c *Column) IsLoaded() bool { + return c.Loaded || c.notNullCount() > 0 } func (c *Column) String() string { @@ -1080,20 +1119,23 @@ func (c *Column) IsInvalid(sctx sessionctx.Context, collPseudo bool) bool { if stmtctx != nil && stmtctx.StatsLoad.Fallback { return true } - if c.Histogram.NDV > 0 && c.notNullCount() == 0 && stmtctx != nil { + if !c.IsLoaded() && stmtctx != nil { if stmtctx.StatsLoad.Timeout > 0 { logutil.BgLogger().Warn("Hist for column should already be loaded as sync but not found.", zap.String(strconv.FormatInt(c.Info.ID, 10), c.Info.Name.O)) } - HistogramNeededColumns.insert(tableColumnID{TableID: c.PhysicalID, ColumnID: c.Info.ID}) + // In some tests, the c.Info is not set, so we add this check here. + if c.Info != nil { + HistogramNeededColumns.insert(tableColumnID{TableID: c.PhysicalID, ColumnID: c.Info.ID}) + } } } - return c.TotalRowCount() == 0 || (c.Histogram.NDV > 0 && c.notNullCount() == 0) + return c.TotalRowCount() == 0 || (!c.IsLoaded() && c.Histogram.NDV > 0) } // IsHistNeeded checks if this column needs histogram to be loaded func (c *Column) IsHistNeeded(collPseudo bool) bool { - return (!collPseudo || !c.NotAccurate()) && c.Histogram.NDV > 0 && c.notNullCount() == 0 + return (!collPseudo || !c.NotAccurate()) && !c.IsLoaded() } func (c *Column) equalRowCount(sctx sessionctx.Context, val types.Datum, encodedVal []byte, realtimeRowCount int64) (float64, error) { @@ -1210,18 +1252,21 @@ func (c *Column) GetColumnRowCount(sctx sessionctx.Context, ranges []*ranger.Ran cnt := c.BetweenRowCount(sctx, lowVal, highVal, lowEncoded, highEncoded) // `betweenRowCount` returns count for [l, h) range, we adjust cnt for boundaries here. // Note that, `cnt` does not include null values, we need specially handle cases - // where null is the lower bound. - if rg.LowExclude && !lowVal.IsNull() { + // where null is the lower bound. + // And because we use (2, MaxValue] to represent expressions like a > 2 and use [MinNotNull, 3) to represent + // expressions like b < 3, we need to exclude the special values. + if rg.LowExclude && !lowVal.IsNull() && lowVal.Kind() != types.KindMaxValue && lowVal.Kind() != types.KindMinNotNull { lowCnt, err := c.equalRowCount(sctx, lowVal, lowEncoded, realtimeRowCount) if err != nil { return 0, errors.Trace(err) } cnt -= lowCnt + cnt = clampRowCount(cnt, c.notNullCount()) } if !rg.LowExclude && lowVal.IsNull() { cnt += float64(c.NullCount) } - if !rg.HighExclude { + if !rg.HighExclude && highVal.Kind() != types.KindMaxValue && highVal.Kind() != types.KindMinNotNull { highCnt, err := c.equalRowCount(sctx, highVal, highEncoded, realtimeRowCount) if err != nil { return 0, errors.Trace(err) @@ -1229,11 +1274,7 @@ func (c *Column) GetColumnRowCount(sctx sessionctx.Context, ranges []*ranger.Ran cnt += highCnt } - if cnt > c.TotalRowCount() { - cnt = c.TotalRowCount() - } else if cnt < 0 { - cnt = 0 - } + cnt = clampRowCount(cnt, c.TotalRowCount()) // If the current table row count has changed, we should scale the row count accordingly. cnt *= c.GetIncreaseFactor(realtimeRowCount) @@ -1249,11 +1290,8 @@ func (c *Column) GetColumnRowCount(sctx sessionctx.Context, ranges []*ranger.Ran rowCount += cnt } - if rowCount > float64(realtimeRowCount) { - rowCount = float64(realtimeRowCount) - } else if rowCount < 0 { - rowCount = 0 - } + + rowCount = clampRowCount(rowCount, float64(realtimeRowCount)) return rowCount, nil } @@ -1403,7 +1441,30 @@ func (idx *Index) GetRowCount(sctx sessionctx.Context, coll *HistColl, indexRang return 0, err } if expBackoffSuccess { - totalCount += expBackoffSel * idx.TotalRowCount() + expBackoffCnt := expBackoffSel * idx.TotalRowCount() + + upperLimit := expBackoffCnt + // Use the multi-column stats to calculate the max possible row count of [l, r) + if idx.Len() > 0 { + _, lowerBkt, _, _ := idx.locateBucket(l) + _, upperBkt, _, _ := idx.locateBucket(r) + // Use Count of the Bucket before l as the lower bound. + preCount := float64(0) + if lowerBkt > 0 { + preCount = float64(idx.Buckets[lowerBkt-1].Count) + } + // Use Count of the Bucket where r exists as the upper bound. + upperCnt := float64(idx.Buckets[upperBkt].Count) + upperLimit = upperCnt - preCount + upperLimit += float64(idx.TopN.BetweenCount(lb, rb)) + } + + // If the result of exponential backoff strategy is larger than the result from multi-column stats, + // use the upper limit from multi-column histogram instead. + if expBackoffCnt > upperLimit { + expBackoffCnt = upperLimit + } + totalCount += expBackoffCnt } } if !expBackoffSuccess { @@ -1422,9 +1483,8 @@ func (idx *Index) GetRowCount(sctx sessionctx.Context, coll *HistColl, indexRang totalCount += idx.Histogram.outOfRangeRowCount(&l, &r, increaseCount) } } - if totalCount > float64(realtimeRowCount) { - totalCount = float64(realtimeRowCount) - } + + totalCount = clampRowCount(totalCount, float64(realtimeRowCount)) return totalCount, nil } @@ -1651,6 +1711,7 @@ func (coll *HistColl) NewHistCollBySelectivity(sctx sessionctx.Context, statsNod zap.Error(err)) continue } + newCol.Loaded = oldCol.Loaded newColl.Columns[node.ID] = newCol } for id, idx := range coll.Indices { @@ -1678,6 +1739,16 @@ func (idx *Index) outOfRange(val types.Datum) bool { return true } +func clampRowCount(rowCount, upperLimit float64) (clampedRowCount float64) { + if rowCount > upperLimit { + return upperLimit + } + if rowCount < 0 { + return 0 + } + return rowCount +} + // matchPrefix checks whether ad is the prefix of value func matchPrefix(row chunk.Row, colIdx int, ad *types.Datum) bool { switch ad.Kind() { diff --git a/statistics/histogram_test.go b/statistics/histogram_test.go index ce95ddfa6fcdd..ad8ef061dad92 100644 --- a/statistics/histogram_test.go +++ b/statistics/histogram_test.go @@ -40,6 +40,7 @@ func TestNewHistogramBySelectivity(t *testing.T) { intCol := &Column{} intCol.Histogram = *NewHistogram(1, 30, 30, 0, types.NewFieldType(mysql.TypeLonglong), chunk.InitialCapacity, 0) intCol.IsHandle = true + intCol.Loaded = true for i := 0; i < 10; i++ { intCol.Bounds.AppendInt64(0, int64(i*3)) intCol.Bounds.AppendInt64(0, int64(i*3+2)) @@ -61,6 +62,7 @@ num: 1 lower_bound: 12 upper_bound: 14 repeats: 0 ndv: 0 num: 30 lower_bound: 27 upper_bound: 29 repeats: 0 ndv: 0` stringCol := &Column{} + stringCol.Loaded = true stringCol.Histogram = *NewHistogram(2, 15, 30, 0, types.NewFieldType(mysql.TypeString), chunk.InitialCapacity, 0) stringCol.Bounds.AppendString(0, "a") stringCol.Bounds.AppendString(0, "aaaabbbb") diff --git a/statistics/integration_test.go b/statistics/integration_test.go index e2a52d6401ad3..e43a30e52b7a9 100644 --- a/statistics/integration_test.go +++ b/statistics/integration_test.go @@ -167,7 +167,7 @@ func TestChangeVerTo2BehaviorWithPersistedOptions(t *testing.T) { tk.MustExec("analyze table t index idx") tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1105 The analyze version from the session is not compatible with the existing statistics of the table. Use the existing version instead", "Warning 1105 The version 2 would collect all statistics not only the selected indexes", - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.")) // since fallback to ver2 path, should do samplerate adjustment + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t")) // since fallback to ver2 path, should do samplerate adjustment require.NoError(t, h.Update(is)) statsTblT = h.GetTableStats(tblT.Meta()) for _, idx := range statsTblT.Indices { @@ -176,7 +176,7 @@ func TestChangeVerTo2BehaviorWithPersistedOptions(t *testing.T) { tk.MustExec("analyze table t index") tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1105 The analyze version from the session is not compatible with the existing statistics of the table. Use the existing version instead", "Warning 1105 The version 2 would collect all statistics not only the selected indexes", - "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t.")) + "Note 1105 Analyze use auto adjusted sample rate 1.000000 for table test.t")) require.NoError(t, h.Update(is)) statsTblT = h.GetTableStats(tblT.Meta()) for _, idx := range statsTblT.Indices { @@ -204,7 +204,7 @@ func TestFastAnalyzeOnVer2(t *testing.T) { tk.MustExec("insert into t values(1, 1), (1, 2), (1, 3)") _, err := tk.Exec("analyze table t") require.Error(t, err) - require.Equal(t, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently.", err.Error()) + require.Equal(t, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently", err.Error()) tk.MustExec("set @@session.tidb_enable_fast_analyze = 0") tk.MustExec("analyze table t") is := dom.InfoSchema() @@ -222,14 +222,14 @@ func TestFastAnalyzeOnVer2(t *testing.T) { tk.MustExec("set @@session.tidb_enable_fast_analyze = 1") err = tk.ExecToErr("analyze table t index idx") require.Error(t, err) - require.Equal(t, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently.", err.Error()) + require.Equal(t, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently", err.Error()) tk.MustExec("set @@session.tidb_analyze_version = 1") _, err = tk.Exec("analyze table t index idx") require.Error(t, err) - require.Equal(t, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently. But the existing statistics of the table is not version 1.", err.Error()) + require.Equal(t, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently. But the existing statistics of the table is not version 1", err.Error()) _, err = tk.Exec("analyze table t index") require.Error(t, err) - require.Equal(t, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently. But the existing statistics of the table is not version 1.", err.Error()) + require.Equal(t, "Fast analyze hasn't reached General Availability and only support analyze version 1 currently. But the existing statistics of the table is not version 1", err.Error()) tk.MustExec("analyze table t") require.NoError(t, h.Update(is)) statsTblT = h.GetTableStats(tblT.Meta()) @@ -559,3 +559,88 @@ func hasPseudoStats(rows [][]interface{}) bool { } return false } + +// TestNotLoadedStatsOnAllNULLCol makes sure that stats on a column that only contains NULLs can be used even when it's +// not loaded. This is reasonable because it makes no difference whether it's loaded or not. +func TestNotLoadedStatsOnAllNULLCol(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + h := dom.StatsHandle() + oriLease := h.Lease() + h.SetLease(1000) + defer func() { + h.SetLease(oriLease) + }() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + tk.MustExec("drop table if exists t2") + tk.MustExec("create table t1(a int)") + tk.MustExec("create table t2(a int)") + tk.MustExec("insert into t1 values(null), (null), (null), (null)") + tk.MustExec("insert into t2 values(null), (null)") + tk.MustExec("analyze table t1;") + tk.MustExec("analyze table t2;") + + res := tk.MustQuery("explain format = 'brief' select * from t1 left join t2 on t1.a=t2.a order by t1.a, t2.a") + res.Check(testkit.Rows( + "Sort 4.00 root test.t1.a, test.t2.a", + "└─HashJoin 4.00 root left outer join, equal:[eq(test.t1.a, test.t2.a)]", + " ├─TableReader(Build) 0.00 root data:Selection", + // If we are not using stats on this column (which means we use pseudo estimation), the row count for the Selection will become 2. + " │ └─Selection 0.00 cop[tikv] not(isnull(test.t2.a))", + " │ └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false", + " └─TableReader(Probe) 4.00 root data:TableFullScan", + " └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false")) + + res = tk.MustQuery("explain format = 'brief' select * from t2 left join t1 on t1.a=t2.a order by t1.a, t2.a") + res.Check(testkit.Rows( + "Sort 2.00 root test.t1.a, test.t2.a", + "└─HashJoin 2.00 root left outer join, equal:[eq(test.t2.a, test.t1.a)]", + // If we are not using stats on this column, the build side will become t2 because of smaller row count. + " ├─TableReader(Build) 0.00 root data:Selection", + // If we are not using stats on this column, the row count for the Selection will become 4. + " │ └─Selection 0.00 cop[tikv] not(isnull(test.t1.a))", + " │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false", + " └─TableReader(Probe) 2.00 root data:TableFullScan", + " └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false")) + + res = tk.MustQuery("explain format = 'brief' select * from t1 right join t2 on t1.a=t2.a order by t1.a, t2.a") + res.Check(testkit.Rows( + "Sort 2.00 root test.t1.a, test.t2.a", + "└─HashJoin 2.00 root right outer join, equal:[eq(test.t1.a, test.t2.a)]", + " ├─TableReader(Build) 0.00 root data:Selection", + " │ └─Selection 0.00 cop[tikv] not(isnull(test.t1.a))", + " │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false", + " └─TableReader(Probe) 2.00 root data:TableFullScan", + " └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false")) + + res = tk.MustQuery("explain format = 'brief' select * from t2 right join t1 on t1.a=t2.a order by t1.a, t2.a") + res.Check(testkit.Rows( + "Sort 4.00 root test.t1.a, test.t2.a", + "└─HashJoin 4.00 root right outer join, equal:[eq(test.t2.a, test.t1.a)]", + " ├─TableReader(Build) 0.00 root data:Selection", + " │ └─Selection 0.00 cop[tikv] not(isnull(test.t2.a))", + " │ └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false", + " └─TableReader(Probe) 4.00 root data:TableFullScan", + " └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false")) +} + +func TestCrossValidationSelectivity(t *testing.T) { + store, dom, clean := testkit.CreateMockStoreAndDomain(t) + defer clean() + tk := testkit.NewTestKit(t, store) + h := dom.StatsHandle() + tk.MustExec("use test") + tk.MustExec("drop table if exists t") + tk.MustExec("set @@tidb_analyze_version = 1") + tk.MustExec("create table t (a int, b int, c int, primary key (a, b) clustered)") + require.NoError(t, h.HandleDDLEvent(<-h.DDLEventCh())) + tk.MustExec("insert into t values (1,2,3), (1,4,5)") + require.NoError(t, h.DumpStatsDeltaToKV(handle.DumpAll)) + tk.MustExec("analyze table t") + tk.MustQuery("explain format = 'brief' select * from t where a = 1 and b > 0 and b < 1000 and c > 1000").Check(testkit.Rows( + "TableReader 0.00 root data:Selection", + "└─Selection 0.00 cop[tikv] gt(test.t.c, 1000)", + " └─TableRangeScan 2.00 cop[tikv] table:t range:(1 0,1 1000), keep order:false")) +} diff --git a/statistics/main_test.go b/statistics/main_test.go index e03ea212f291e..3fd1cfda4d8ef 100644 --- a/statistics/main_test.go +++ b/statistics/main_test.go @@ -48,6 +48,7 @@ func TestMain(m *testing.M) { testDataMap.LoadTestSuiteData("testdata", "trace_suite") opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/statistics/selectivity.go b/statistics/selectivity.go index 0f5f4792acc71..5fc1f1dcc2b3b 100644 --- a/statistics/selectivity.go +++ b/statistics/selectivity.go @@ -317,6 +317,34 @@ func (coll *HistColl) Selectivity(ctx sessionctx.Context, exprs []expression.Exp } } + // Try to cover Constants + if mask > 0 { + for i, expr := range remainedExprs { + if mask&(1< 0 { @@ -354,24 +382,6 @@ func (coll *HistColl) Selectivity(ctx sessionctx.Context, exprs []expression.Exp if ok { continue } - // where {"0" / 0 / "false" / false / null} or A or B ... the '0' constant item should be ignored. - if c, ok := cond.(*expression.Constant); ok { - if !expression.MaybeOverOptimized4PlanCache(ctx, []expression.Expression{cond}) { - if c.Value.IsNull() { - // constant is null - continue - } - if isTrue, err := c.Value.ToBool(sc); err == nil { - if isTrue == 0 { - // constant == 0 - continue - } - // constant == 1 - selectivity = 1.0 - break - } - } - } var cnfItems []expression.Expression if scalar, ok := cond.(*expression.ScalarFunction); ok && scalar.FuncName.L == ast.LogicAnd { diff --git a/statistics/selectivity_test.go b/statistics/selectivity_test.go index 3ad5dfbd33d0b..59cebc3101524 100644 --- a/statistics/selectivity_test.go +++ b/statistics/selectivity_test.go @@ -866,7 +866,11 @@ func prepareSelectivity(testKit *testkit.TestKit, dom *domain.Domain) (*statisti return nil, err } for i := 1; i <= 5; i++ { - statsTbl.Columns[int64(i)] = &statistics.Column{Histogram: *mockStatsHistogram(int64(i), colValues, 10, types.NewFieldType(mysql.TypeLonglong)), Info: tbl.Columns[i-1]} + statsTbl.Columns[int64(i)] = &statistics.Column{ + Histogram: *mockStatsHistogram(int64(i), colValues, 10, types.NewFieldType(mysql.TypeLonglong)), + Info: tbl.Columns[i-1], + Loaded: true, + } } // Set the value of two indices' histograms. diff --git a/statistics/statistics_test.go b/statistics/statistics_test.go index 0c93cabcff7b6..639909016d93c 100644 --- a/statistics/statistics_test.go +++ b/statistics/statistics_test.go @@ -250,7 +250,12 @@ func SubTestColumnRange() func(*testing.T) { hg, err := BuildColumn(ctx, bucketCount, 2, collector, types.NewFieldType(mysql.TypeLonglong)) hg.PreCalculateScalar() require.NoError(t, err) - col := &Column{Histogram: *hg, CMSketch: buildCMSketch(s.rc.(*recordSet).data), Info: &model.ColumnInfo{}} + col := &Column{ + Histogram: *hg, + CMSketch: buildCMSketch(s.rc.(*recordSet).data), + Info: &model.ColumnInfo{}, + Loaded: true, + } tbl := &Table{ HistColl: HistColl{ Count: int64(col.TotalRowCount()), @@ -322,7 +327,7 @@ func SubTestIntColumnRanges() func(*testing.T) { hg.PreCalculateScalar() require.NoError(t, err) require.Equal(t, int64(100000), rowCount) - col := &Column{Histogram: *hg, Info: &model.ColumnInfo{}} + col := &Column{Histogram: *hg, Info: &model.ColumnInfo{}, Loaded: true} tbl := &Table{ HistColl: HistColl{ Count: int64(col.TotalRowCount()), diff --git a/statistics/table.go b/statistics/table.go index b8bfa8d9aaf5e..bee9dab89d4d8 100644 --- a/statistics/table.go +++ b/statistics/table.go @@ -591,23 +591,13 @@ func (coll *HistColl) crossValidationSelectivity(sctx sessionctx.Context, idx *I if col.IsInvalid(sctx, coll.Pseudo) { continue } - lowExclude := idxPointRange.LowExclude - highExclude := idxPointRange.HighExclude - // Consider this case: - // create table t(a int, b int, c int, primary key(a,b,c)); - // insert into t values(1,1,1),(2,2,3); - // explain select * from t where (a,b) in ((1,1),(2,2)) and c > 2; - // For column a, we will get range: (1, 1], (2, 2], but GetColumnRowCount() with rang = (2, 2] will return 0. - // And the result of the explain statement will output estRow 0.0. So we change it to [2, 2]. - if lowExclude != highExclude && i < usedColsLen { - lowExclude = false - highExclude = false - } + // Since the column range is point range(LowVal is equal to HighVal), we need to set both LowExclude and HighExclude to false. + // Otherwise we would get 0.0 estRow from GetColumnRowCount. rang := ranger.Range{ LowVal: []types.Datum{idxPointRange.LowVal[i]}, - LowExclude: lowExclude, + LowExclude: false, HighVal: []types.Datum{idxPointRange.HighVal[i]}, - HighExclude: highExclude, + HighExclude: false, Collators: []collate.Collator{idxPointRange.Collators[i]}, } diff --git a/statistics/testdata/stats_suite_out.json b/statistics/testdata/stats_suite_out.json index df4c8498d845c..d07b336ccbfbd 100644 --- a/statistics/testdata/stats_suite_out.json +++ b/statistics/testdata/stats_suite_out.json @@ -706,12 +706,12 @@ { "Start": 300, "End": 899, - "Count": 4500 + "Count": 4498.5 }, { "Start": 800, "End": 1000, - "Count": 1210.196869573942 + "Count": 1201.196869573942 }, { "Start": 900, @@ -736,7 +736,7 @@ { "Start": 200, "End": 400, - "Count": 1230.0288209899081 + "Count": 1211.5288209899081 }, { "Start": 200, diff --git a/store/batch_coprocessor_test.go b/store/batch_coprocessor_test.go index ae470c8098bcf..20caf2cf18695 100644 --- a/store/batch_coprocessor_test.go +++ b/store/batch_coprocessor_test.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/mockstore/unistore" "github.com/pingcap/tidb/testkit" + "github.com/pingcap/tidb/testkit/external" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/testutils" ) @@ -62,7 +63,7 @@ func TestStoreErr(t *testing.T) { tk.MustExec("use test") tk.MustExec("create table t(a int not null, b int not null)") tk.MustExec("alter table t set tiflash replica 1") - tb := tk.GetTableByName("test", "t") + tb := external.GetTableByName(t, tk, "test", "t") err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) require.NoError(t, err) @@ -98,7 +99,7 @@ func TestStoreSwitchPeer(t *testing.T) { tk.MustExec("use test") tk.MustExec("create table t(a int not null, b int not null)") tk.MustExec("alter table t set tiflash replica 1") - tb := tk.GetTableByName("test", "t") + tb := external.GetTableByName(t, tk, "test", "t") err := domain.GetDomain(tk.Session()).DDL().UpdateTableReplicaInfo(tk.Session(), tb.Meta().ID, true) require.NoError(t, err) diff --git a/store/copr/batch_coprocessor.go b/store/copr/batch_coprocessor.go index fe83d40a835b2..32f38a72f7576 100644 --- a/store/copr/batch_coprocessor.go +++ b/store/copr/batch_coprocessor.go @@ -30,7 +30,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/coprocessor" "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/mpp" "github.com/pingcap/log" "github.com/pingcap/tidb/kv" @@ -49,7 +48,10 @@ type batchCopTask struct { cmdType tikvrpc.CmdType ctx *tikv.RPCContext - regionInfos []RegionInfo + regionInfos []RegionInfo // region info for single physical table + // PartitionTableRegions indicates region infos for each partition table, used by scanning partitions in batch. + // Thus, one of `regionInfos` and `PartitionTableRegions` must be nil. + PartitionTableRegions []*coprocessor.TableRegions } type batchCopResponse struct { @@ -523,24 +525,47 @@ func balanceBatchCopTask(ctx context.Context, kvStore *kvStore, originalTasks [] return ret } -func buildBatchCopTasks(bo *backoff.Backoffer, store *kvStore, ranges *KeyRanges, storeType kv.StoreType, mppStoreLastFailTime map[string]time.Time, ttl time.Duration, balanceWithContinuity bool, balanceContinuousRegionCount int64) ([]*batchCopTask, error) { +func buildBatchCopTasksForNonPartitionedTable(bo *backoff.Backoffer, store *kvStore, ranges *KeyRanges, storeType kv.StoreType, mppStoreLastFailTime map[string]time.Time, ttl time.Duration, balanceWithContinuity bool, balanceContinuousRegionCount int64) ([]*batchCopTask, error) { + return buildBatchCopTasksCore(bo, store, []*KeyRanges{ranges}, storeType, mppStoreLastFailTime, ttl, balanceWithContinuity, balanceContinuousRegionCount) +} + +func buildBatchCopTasksForPartitionedTable(bo *backoff.Backoffer, store *kvStore, rangesForEachPhysicalTable []*KeyRanges, storeType kv.StoreType, mppStoreLastFailTime map[string]time.Time, ttl time.Duration, balanceWithContinuity bool, balanceContinuousRegionCount int64, partitionIDs []int64) ([]*batchCopTask, error) { + batchTasks, err := buildBatchCopTasksCore(bo, store, rangesForEachPhysicalTable, storeType, mppStoreLastFailTime, ttl, balanceWithContinuity, balanceContinuousRegionCount) + if err != nil { + return nil, err + } + // generate tableRegions for batchCopTasks + convertRegionInfosToPartitionTableRegions(batchTasks, partitionIDs) + return batchTasks, nil +} + +// When `partitionIDs != nil`, it means that buildBatchCopTasksCore is constructing a batch cop tasks for PartitionTableScan. +// At this time, `len(rangesForEachPhysicalTable) == len(partitionIDs)` and `rangesForEachPhysicalTable[i]` is for partition `partitionIDs[i]`. +// Otherwise, `rangesForEachPhysicalTable[0]` indicates the range for the single physical table. +func buildBatchCopTasksCore(bo *backoff.Backoffer, store *kvStore, rangesForEachPhysicalTable []*KeyRanges, storeType kv.StoreType, mppStoreLastFailTime map[string]time.Time, ttl time.Duration, balanceWithContinuity bool, balanceContinuousRegionCount int64) ([]*batchCopTask, error) { cache := store.GetRegionCache() start := time.Now() const cmdType = tikvrpc.CmdBatchCop - rangesLen := ranges.Len() + rangesLen := 0 + for { - locations, err := cache.SplitKeyRangesByLocations(bo, ranges) - if err != nil { - return nil, errors.Trace(err) - } var tasks []*copTask - for _, lo := range locations { - tasks = append(tasks, &copTask{ - region: lo.Location.Region, - ranges: lo.Ranges, - cmdType: cmdType, - storeType: storeType, - }) + rangesLen = 0 + for i, ranges := range rangesForEachPhysicalTable { + rangesLen += ranges.Len() + locations, err := cache.SplitKeyRangesByLocations(bo, ranges) + if err != nil { + return nil, errors.Trace(err) + } + for _, lo := range locations { + tasks = append(tasks, &copTask{ + region: lo.Location.Region, + ranges: lo.Ranges, + cmdType: cmdType, + storeType: storeType, + partitionIndex: int64(i), + }) + } } var batchTasks []*batchCopTask @@ -565,13 +590,13 @@ func buildBatchCopTasks(bo *backoff.Backoffer, store *kvStore, ranges *KeyRanges } allStores := cache.GetAllValidTiFlashStores(task.region, rpcCtx.Store) if batchCop, ok := storeTaskMap[rpcCtx.Addr]; ok { - batchCop.regionInfos = append(batchCop.regionInfos, RegionInfo{Region: task.region, Meta: rpcCtx.Meta, Ranges: task.ranges, AllStores: allStores}) + batchCop.regionInfos = append(batchCop.regionInfos, RegionInfo{Region: task.region, Meta: rpcCtx.Meta, Ranges: task.ranges, AllStores: allStores, PartitionIndex: task.partitionIndex}) } else { batchTask := &batchCopTask{ storeAddr: rpcCtx.Addr, cmdType: cmdType, ctx: rpcCtx, - regionInfos: []RegionInfo{{Region: task.region, Meta: rpcCtx.Meta, Ranges: task.ranges, AllStores: allStores}}, + regionInfos: []RegionInfo{{Region: task.region, Meta: rpcCtx.Meta, Ranges: task.ranges, AllStores: allStores, PartitionIndex: task.partitionIndex}}, } storeTaskMap[rpcCtx.Addr] = batchTask } @@ -580,7 +605,7 @@ func buildBatchCopTasks(bo *backoff.Backoffer, store *kvStore, ranges *KeyRanges // As mentioned above, nil rpcCtx is always attributed to failed stores. // It's equal to long poll the store but get no response. Here we'd better use // TiFlash error to trigger the TiKV fallback mechanism. - err = bo.Backoff(tikv.BoTiFlashRPC(), errors.New("Cannot find region with TiFlash peer")) + err := bo.Backoff(tikv.BoTiFlashRPC(), errors.New("Cannot find region with TiFlash peer")) if err != nil { return nil, errors.Trace(err) } @@ -609,7 +634,7 @@ func buildBatchCopTasks(bo *backoff.Backoffer, store *kvStore, ranges *KeyRanges } if elapsed := time.Since(start); elapsed > time.Millisecond*500 { - logutil.BgLogger().Warn("buildBatchCopTasks takes too much time", + logutil.BgLogger().Warn("buildBatchCopTasksCore takes too much time", zap.Duration("elapsed", elapsed), zap.Duration("balanceElapsed", balanceElapsed), zap.Int("range len", rangesLen), @@ -620,14 +645,56 @@ func buildBatchCopTasks(bo *backoff.Backoffer, store *kvStore, ranges *KeyRanges } } +func convertRegionInfosToPartitionTableRegions(batchTasks []*batchCopTask, partitionIDs []int64) { + for _, copTask := range batchTasks { + tableRegions := make([]*coprocessor.TableRegions, len(partitionIDs)) + // init coprocessor.TableRegions + for j, pid := range partitionIDs { + tableRegions[j] = &coprocessor.TableRegions{ + PhysicalTableId: pid, + } + } + // fill region infos + for _, ri := range copTask.regionInfos { + tableRegions[ri.PartitionIndex].Regions = append(tableRegions[ri.PartitionIndex].Regions, + ri.toCoprocessorRegionInfo()) + } + count := 0 + // clear empty table region + for j := 0; j < len(tableRegions); j++ { + if len(tableRegions[j].Regions) != 0 { + tableRegions[count] = tableRegions[j] + count++ + } + } + copTask.PartitionTableRegions = tableRegions[:count] + copTask.regionInfos = nil + } +} + func (c *CopClient) sendBatch(ctx context.Context, req *kv.Request, vars *tikv.Variables, option *kv.ClientSendOption) kv.Response { if req.KeepOrder || req.Desc { return copErrorResponse{errors.New("batch coprocessor cannot prove keep order or desc property")} } ctx = context.WithValue(ctx, tikv.TxnStartKey(), req.StartTs) bo := backoff.NewBackofferWithVars(ctx, copBuildTaskMaxBackoff, vars) - ranges := NewKeyRanges(req.KeyRanges) - tasks, err := buildBatchCopTasks(bo, c.store.kvStore, ranges, req.StoreType, nil, 0, false, 0) + + var tasks []*batchCopTask + var err error + if req.PartitionIDAndRanges != nil { + // For Partition Table Scan + keyRanges := make([]*KeyRanges, 0, len(req.PartitionIDAndRanges)) + partitionIDs := make([]int64, 0, len(req.PartitionIDAndRanges)) + for _, pi := range req.PartitionIDAndRanges { + keyRanges = append(keyRanges, NewKeyRanges(pi.KeyRanges)) + partitionIDs = append(partitionIDs, pi.ID) + } + tasks, err = buildBatchCopTasksForPartitionedTable(bo, c.store.kvStore, keyRanges, req.StoreType, nil, 0, false, 0, partitionIDs) + } else { + ranges := NewKeyRanges(req.KeyRanges) + tasks, err = buildBatchCopTasksForNonPartitionedTable(bo, c.store.kvStore, ranges, req.StoreType, nil, 0, false, 0) + } + if err != nil { return copErrorResponse{err} } @@ -765,13 +832,34 @@ func (b *batchCopIterator) handleTask(ctx context.Context, bo *Backoffer, task * // Merge all ranges and request again. func (b *batchCopIterator) retryBatchCopTask(ctx context.Context, bo *backoff.Backoffer, batchTask *batchCopTask) ([]*batchCopTask, error) { - var ranges []kv.KeyRange - for _, ri := range batchTask.regionInfos { - ri.Ranges.Do(func(ran *kv.KeyRange) { - ranges = append(ranges, *ran) - }) + if batchTask.regionInfos != nil { + var ranges []kv.KeyRange + for _, ri := range batchTask.regionInfos { + ri.Ranges.Do(func(ran *kv.KeyRange) { + ranges = append(ranges, *ran) + }) + } + ret, err := buildBatchCopTasksForNonPartitionedTable(bo, b.store, NewKeyRanges(ranges), b.req.StoreType, nil, 0, false, 0) + return ret, err + } + // Retry Partition Table Scan + keyRanges := make([]*KeyRanges, 0, len(batchTask.PartitionTableRegions)) + pid := make([]int64, 0, len(batchTask.PartitionTableRegions)) + for _, trs := range batchTask.PartitionTableRegions { + pid = append(pid, trs.PhysicalTableId) + ranges := make([]kv.KeyRange, 0, len(trs.Regions)) + for _, ri := range trs.Regions { + for _, ran := range ri.Ranges { + ranges = append(ranges, kv.KeyRange{ + StartKey: ran.Start, + EndKey: ran.End, + }) + } + } + keyRanges = append(keyRanges, NewKeyRanges(ranges)) } - return buildBatchCopTasks(bo, b.store, NewKeyRanges(ranges), b.req.StoreType, nil, 0, false, 0) + ret, err := buildBatchCopTasksForPartitionedTable(bo, b.store, keyRanges, b.req.StoreType, nil, 0, false, 0, pid) + return ret, err } const readTimeoutUltraLong = 3600 * time.Second // For requests that may scan many regions for tiflash. @@ -780,22 +868,16 @@ func (b *batchCopIterator) handleTaskOnce(ctx context.Context, bo *backoff.Backo sender := NewRegionBatchRequestSender(b.store.GetRegionCache(), b.store.GetTiKVClient(), b.enableCollectExecutionInfo) var regionInfos = make([]*coprocessor.RegionInfo, 0, len(task.regionInfos)) for _, ri := range task.regionInfos { - regionInfos = append(regionInfos, &coprocessor.RegionInfo{ - RegionId: ri.Region.GetID(), - RegionEpoch: &metapb.RegionEpoch{ - ConfVer: ri.Region.GetConfVer(), - Version: ri.Region.GetVer(), - }, - Ranges: ri.Ranges.ToPBRanges(), - }) + regionInfos = append(regionInfos, ri.toCoprocessorRegionInfo()) } copReq := coprocessor.BatchRequest{ - Tp: b.req.Tp, - StartTs: b.req.StartTs, - Data: b.req.Data, - SchemaVer: b.req.SchemaVar, - Regions: regionInfos, + Tp: b.req.Tp, + StartTs: b.req.StartTs, + Data: b.req.Data, + SchemaVer: b.req.SchemaVar, + Regions: regionInfos, + TableRegions: task.PartitionTableRegions, } req := tikvrpc.NewRequest(task.cmdType, &copReq, kvrpcpb.Context{ diff --git a/store/copr/batch_request_sender.go b/store/copr/batch_request_sender.go index 7a77ef9ba7150..b976d26a59ab3 100644 --- a/store/copr/batch_request_sender.go +++ b/store/copr/batch_request_sender.go @@ -19,6 +19,7 @@ import ( "time" "github.com/pingcap/errors" + "github.com/pingcap/kvproto/pkg/coprocessor" "github.com/pingcap/kvproto/pkg/metapb" tikverr "github.com/tikv/client-go/v2/error" "github.com/tikv/client-go/v2/tikv" @@ -29,10 +30,22 @@ import ( // RegionInfo contains region related information for batchCopTask type RegionInfo struct { - Region tikv.RegionVerID - Meta *metapb.Region - Ranges *KeyRanges - AllStores []uint64 + Region tikv.RegionVerID + Meta *metapb.Region + Ranges *KeyRanges + AllStores []uint64 + PartitionIndex int64 // used by PartitionTableScan, indicates the n-th partition of the partition table +} + +func (ri *RegionInfo) toCoprocessorRegionInfo() *coprocessor.RegionInfo { + return &coprocessor.RegionInfo{ + RegionId: ri.Region.GetID(), + RegionEpoch: &metapb.RegionEpoch{ + ConfVer: ri.Region.GetConfVer(), + Version: ri.Region.GetVer(), + }, + Ranges: ri.Ranges.ToPBRanges(), + } } // RegionBatchRequestSender sends BatchCop requests to TiFlash server by stream way. diff --git a/store/copr/coprocessor.go b/store/copr/coprocessor.go index 99dcd54c146a9..dba00aa935c60 100644 --- a/store/copr/coprocessor.go +++ b/store/copr/coprocessor.go @@ -133,7 +133,7 @@ func (c *CopClient) Send(ctx context.Context, req *kv.Request, variables interfa it.sendRate = util.NewRateLimit(it.concurrency) } it.actionOnExceed = newRateLimitAction(uint(it.sendRate.GetCapacity())) - if sessionMemTracker != nil { + if sessionMemTracker != nil && enabledRateLimitAction { sessionMemTracker.FallbackOldAndSetNewAction(it.actionOnExceed) } @@ -146,8 +146,9 @@ func (c *CopClient) Send(ctx context.Context, req *kv.Request, variables interfa // copTask contains a related Region and KeyRange for a kv.Request. type copTask struct { - region tikv.RegionVerID - ranges *KeyRanges + region tikv.RegionVerID + bucketsVer uint64 + ranges *KeyRanges respChan chan *copResponse storeAddr string @@ -157,6 +158,8 @@ type copTask struct { eventCb trxevents.EventCallback paging bool pagingSize uint64 + + partitionIndex int64 // used by balanceBatchCopTask in PartitionTableScan } func (r *copTask) String() string { @@ -180,7 +183,8 @@ func buildCopTasks(bo *Backoffer, cache *RegionCache, ranges *KeyRanges, req *kv rangesLen := ranges.Len() - locs, err := cache.SplitKeyRangesByLocations(bo, ranges) + // TODO(youjiali1995): is there any request type that needn't be splitted by buckets? + locs, err := cache.SplitKeyRangesByBuckets(bo, ranges) if err != nil { return nil, errors.Trace(err) } @@ -208,6 +212,7 @@ func buildCopTasks(bo *Backoffer, cache *RegionCache, ranges *KeyRanges, req *kv } tasks = append(tasks, &copTask{ region: loc.Location.Region, + bucketsVer: loc.getBucketVersion(), ranges: loc.Ranges.Slice(i, nextI), respChan: make(chan *copResponse, chanSize), cmdType: cmdType, @@ -319,7 +324,6 @@ type copIteratorWorker struct { replicaReadSeed uint32 - actionOnExceed *rateLimitAction enableCollectExecutionInfo bool } @@ -441,7 +445,6 @@ func (it *copIterator) open(ctx context.Context, enabledRateLimitAction, enableC kvclient: txnsnapshot.NewClientHelper(it.store.store, &it.resolvedLocks, &it.committedLocks, false), memTracker: it.memTracker, replicaReadSeed: it.replicaReadSeed, - actionOnExceed: it.actionOnExceed, enableCollectExecutionInfo: enableCollectExecutionInfo, } go worker.run(ctx) @@ -931,6 +934,9 @@ func (worker *copIteratorWorker) handleCopPagingResult(bo *Backoffer, rpcCtx *ti // if we're handling streaming coprocessor response, lastRange is the range of last // successful response, otherwise it's nil. func (worker *copIteratorWorker) handleCopResponse(bo *Backoffer, rpcCtx *tikv.RPCContext, resp *copResponse, cacheKey []byte, cacheValue *coprCacheValue, task *copTask, ch chan<- *copResponse, lastRange *coprocessor.KeyRange, costTime time.Duration) ([]*copTask, error) { + if ver := resp.pbResp.GetLatestBucketsVersion(); task.bucketsVer < ver { + worker.store.GetRegionCache().UpdateBucketsIfNeeded(task.region, ver) + } if regionErr := resp.pbResp.GetRegionError(); regionErr != nil { if rpcCtx != nil && task.storeType == kv.TiDB { resp.err = errors.Errorf("error: %v", regionErr) @@ -977,6 +983,9 @@ func (worker *copIteratorWorker) handleCopResponse(bo *Backoffer, rpcCtx *tikv.R zap.Uint64("regionID", task.region.GetID()), zap.String("storeAddr", task.storeAddr), zap.Error(err)) + if strings.Contains(err.Error(), "write conflict") { + return nil, kv.ErrWriteConflict + } return nil, errors.Trace(err) } // When the request is using streaming API, the `Range` is not nil. @@ -1336,6 +1345,8 @@ func isolationLevelToPB(level kv.IsoLevel) kvrpcpb.IsolationLevel { return kvrpcpb.IsolationLevel_RC case kv.SI: return kvrpcpb.IsolationLevel_SI + case kv.RCCheckTS: + return kvrpcpb.IsolationLevel_RCCheckTS default: return kvrpcpb.IsolationLevel_SI } diff --git a/store/copr/coprocessor_test.go b/store/copr/coprocessor_test.go index b628b4eaab831..84eb95cb73c58 100644 --- a/store/copr/coprocessor_test.go +++ b/store/copr/coprocessor_test.go @@ -27,7 +27,7 @@ import ( "github.com/tikv/client-go/v2/tikv" ) -func TestBuildTasks(t *testing.T) { +func TestBuildTasksWithoutBuckets(t *testing.T) { // nil --- 'g' --- 'n' --- 't' --- nil // <- 0 -> <- 1 -> <- 2 -> <- 3 -> mockClient, cluster, pdClient, err := testutils.NewMockTiKV("", nil) @@ -53,105 +53,252 @@ func TestBuildTasks(t *testing.T) { tasks, err := buildCopTasks(bo, cache, buildCopRanges("a", "c"), req, nil) require.NoError(t, err) require.Len(t, tasks, 1) - require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[0], "a", "c") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "c") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "c"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[0], "a", "c") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "c") tasks, err = buildCopTasks(bo, cache, buildCopRanges("g", "n"), req, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[1], "g", "n") + taskEqual(t, tasks[0], regionIDs[1], 0, "g", "n") tasks, err = buildCopTasks(bo, cache, buildCopRanges("g", "n"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[1], "g", "n") + taskEqual(t, tasks[0], regionIDs[1], 0, "g", "n") tasks, err = buildCopTasks(bo, cache, buildCopRanges("m", "n"), req, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[1], "m", "n") + taskEqual(t, tasks[0], regionIDs[1], 0, "m", "n") tasks, err = buildCopTasks(bo, cache, buildCopRanges("m", "n"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[1], "m", "n") + taskEqual(t, tasks[0], regionIDs[1], 0, "m", "n") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "k"), req, nil) require.NoError(t, err) require.Len(t, tasks, 2) - taskEqual(t, tasks[0], regionIDs[0], "a", "g") - taskEqual(t, tasks[1], regionIDs[1], "g", "k") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "g") + taskEqual(t, tasks[1], regionIDs[1], 0, "g", "k") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "k"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 2) - taskEqual(t, tasks[0], regionIDs[0], "a", "g") - taskEqual(t, tasks[1], regionIDs[1], "g", "k") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "g") + taskEqual(t, tasks[1], regionIDs[1], 0, "g", "k") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "x"), req, nil) require.NoError(t, err) require.Len(t, tasks, 4) - taskEqual(t, tasks[0], regionIDs[0], "a", "g") - taskEqual(t, tasks[1], regionIDs[1], "g", "n") - taskEqual(t, tasks[2], regionIDs[2], "n", "t") - taskEqual(t, tasks[3], regionIDs[3], "t", "x") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "g") + taskEqual(t, tasks[1], regionIDs[1], 0, "g", "n") + taskEqual(t, tasks[2], regionIDs[2], 0, "n", "t") + taskEqual(t, tasks[3], regionIDs[3], 0, "t", "x") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "x"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 4) - taskEqual(t, tasks[0], regionIDs[0], "a", "g") - taskEqual(t, tasks[1], regionIDs[1], "g", "n") - taskEqual(t, tasks[2], regionIDs[2], "n", "t") - taskEqual(t, tasks[3], regionIDs[3], "t", "x") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "g") + taskEqual(t, tasks[1], regionIDs[1], 0, "g", "n") + taskEqual(t, tasks[2], regionIDs[2], 0, "n", "t") + taskEqual(t, tasks[3], regionIDs[3], 0, "t", "x") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "b", "b", "c"), req, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[0], "a", "b", "b", "c") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "b", "b", "c") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "b", "b", "c"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[0], "a", "b", "b", "c") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "b", "b", "c") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "b", "e", "f"), req, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[0], "a", "b", "e", "f") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "b", "e", "f") tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "b", "e", "f"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[0], "a", "b", "e", "f") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "b", "e", "f") tasks, err = buildCopTasks(bo, cache, buildCopRanges("g", "n", "o", "p"), req, nil) require.NoError(t, err) require.Len(t, tasks, 2) - taskEqual(t, tasks[0], regionIDs[1], "g", "n") - taskEqual(t, tasks[1], regionIDs[2], "o", "p") + taskEqual(t, tasks[0], regionIDs[1], 0, "g", "n") + taskEqual(t, tasks[1], regionIDs[2], 0, "o", "p") tasks, err = buildCopTasks(bo, cache, buildCopRanges("g", "n", "o", "p"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 2) - taskEqual(t, tasks[0], regionIDs[1], "g", "n") - taskEqual(t, tasks[1], regionIDs[2], "o", "p") + taskEqual(t, tasks[0], regionIDs[1], 0, "g", "n") + taskEqual(t, tasks[1], regionIDs[2], 0, "o", "p") tasks, err = buildCopTasks(bo, cache, buildCopRanges("h", "k", "m", "p"), req, nil) require.NoError(t, err) require.Len(t, tasks, 2) - taskEqual(t, tasks[0], regionIDs[1], "h", "k", "m", "n") - taskEqual(t, tasks[1], regionIDs[2], "n", "p") + taskEqual(t, tasks[0], regionIDs[1], 0, "h", "k", "m", "n") + taskEqual(t, tasks[1], regionIDs[2], 0, "n", "p") tasks, err = buildCopTasks(bo, cache, buildCopRanges("h", "k", "m", "p"), flashReq, nil) require.NoError(t, err) require.Len(t, tasks, 2) - taskEqual(t, tasks[0], regionIDs[1], "h", "k", "m", "n") - taskEqual(t, tasks[1], regionIDs[2], "n", "p") + taskEqual(t, tasks[0], regionIDs[1], 0, "h", "k", "m", "n") + taskEqual(t, tasks[1], regionIDs[2], 0, "n", "p") +} + +func TestBuildTasksByBuckets(t *testing.T) { + mockClient, cluster, pdClient, err := testutils.NewMockTiKV("", nil) + require.NoError(t, err) + defer func() { + pdClient.Close() + err = mockClient.Close() + require.NoError(t, err) + }() + + // region: nil------------------n-----------x-----------nil + // buckets: nil----c----g----k---n----t------x-----------nil + _, regionIDs, _ := testutils.BootstrapWithMultiRegions(cluster, []byte("n"), []byte("x")) + cluster.SplitRegionBuckets(regionIDs[0], [][]byte{{}, {'c'}, {'g'}, {'k'}, {'n'}}, regionIDs[0]) + cluster.SplitRegionBuckets(regionIDs[1], [][]byte{{'n'}, {'t'}, {'x'}}, regionIDs[1]) + cluster.SplitRegionBuckets(regionIDs[2], [][]byte{{'x'}, {}}, regionIDs[2]) + pdCli := &tikv.CodecPDClient{Client: pdClient} + defer pdCli.Close() + + cache := NewRegionCache(tikv.NewRegionCache(pdCli)) + defer cache.Close() + + bo := backoff.NewBackofferWithVars(context.Background(), 3000, nil) + + // one range per bucket + // region: nil------------------n-----------x-----------nil + // buckets: nil----c----g----k---n----t------x-----------nil + // range&task: a-b c-d h-i k---n o-p u--x-----------nil + req := &kv.Request{} + regionRanges := []struct { + regionID uint64 + ranges []string + }{ + {regionIDs[0], []string{"a", "b", "c", "d", "h", "i", "k", "n"}}, + {regionIDs[1], []string{"o", "p", "u", "x"}}, + {regionIDs[2], []string{"x", ""}}, + } + for _, regionRange := range regionRanges { + regionID, ranges := regionRange.regionID, regionRange.ranges + tasks, err := buildCopTasks(bo, cache, buildCopRanges(ranges...), req, nil) + require.NoError(t, err) + require.Len(t, tasks, len(ranges)/2) + for i, task := range tasks { + taskEqual(t, task, regionID, regionID, ranges[2*i], ranges[2*i+1]) + } + } + + // one request multiple regions + allRanges := []string{} + for _, regionRange := range regionRanges { + allRanges = append(allRanges, regionRange.ranges...) + } + tasks, err := buildCopTasks(bo, cache, buildCopRanges(allRanges...), req, nil) + require.NoError(t, err) + require.Len(t, tasks, len(allRanges)/2) + taskIdx := 0 + for _, regionRange := range regionRanges { + regionID, ranges := regionRange.regionID, regionRange.ranges + for i := 0; i < len(ranges); i += 2 { + taskEqual(t, tasks[taskIdx], regionID, regionID, ranges[i], ranges[i+1]) + taskIdx++ + } + } + + // serveral ranges per bucket + // region: nil---------------------------n-----------x-----------nil + // buckets: nil-----c-------g-------k-----n----t------x-----------nil + // ranges: nil-a b-c d-e f-g h-i j-k-l m-n + // tasks: nil-a b-c + // d-e f-g + // h-i j-k + // k-l m-n + keyRanges := []string{ + "", "a", "b", "c", + "d", "e", "f", "g", + "h", "i", "j", "k", + "k", "l", "m", "n", + } + tasks, err = buildCopTasks(bo, cache, buildCopRanges(keyRanges...), req, nil) + require.NoError(t, err) + require.Len(t, tasks, len(keyRanges)/4) + for i, task := range tasks { + taskEqual(t, task, regionIDs[0], regionIDs[0], keyRanges[4*i], keyRanges[4*i+1], keyRanges[4*i+2], keyRanges[4*i+3]) + } + + // cross bucket ranges + // buckets: nil-----c-------g---------k---n----t------x-----------nil + // ranges: nil-------d e---h i---j + // tasks: nil-----c + // c-d e-g + // g-h i---j + keyRanges = []string{ + "", "d", "e", "h", "i", "j", + } + expectedTaskRanges := [][]string{ + {"", "c"}, + {"c", "d", "e", "g"}, + {"g", "h", "i", "j"}, + } + tasks, err = buildCopTasks(bo, cache, buildCopRanges(keyRanges...), req, nil) + require.NoError(t, err) + require.Len(t, tasks, len(expectedTaskRanges)) + for i, task := range tasks { + taskEqual(t, task, regionIDs[0], regionIDs[0], expectedTaskRanges[i]...) + } + + // out of range buckets + // region: n------------------x + // buckets: q---s---u + // ranges: n-o p----s t---v w-x + // tasks: n-o p----s(it can be improved, i.e., n-o p-q, q-s) + // t-u + // u-v w-x + expectedTaskRanges = [][]string{ + {"n", "o", "p", "s"}, + {"t", "u"}, + {"u", "v", "w", "x"}, + } + cluster.SplitRegionBuckets(regionIDs[1], [][]byte{{'q'}, {'s'}, {'u'}}, regionIDs[1]) + cache = NewRegionCache(tikv.NewRegionCache(pdCli)) + defer cache.Close() + tasks, err = buildCopTasks(bo, cache, buildCopRanges("n", "o", "p", "s", "t", "v", "w", "x"), req, nil) + require.NoError(t, err) + require.Len(t, tasks, len(expectedTaskRanges)) + for i, task := range tasks { + taskEqual(t, task, regionIDs[1], regionIDs[1], expectedTaskRanges[i]...) + } + + // out of range buckets + // region: n------------x + // buckets: g-------t---------z + // ranges: o-p u-w + // tasks: o-p + // u-w + expectedTaskRanges = [][]string{ + {"o", "p"}, + {"u", "w"}, + } + cluster.SplitRegionBuckets(regionIDs[1], [][]byte{{'g'}, {'t'}, {'z'}}, regionIDs[1]) + cache = NewRegionCache(tikv.NewRegionCache(pdCli)) + defer cache.Close() + tasks, err = buildCopTasks(bo, cache, buildCopRanges("o", "p", "u", "w"), req, nil) + require.NoError(t, err) + require.Len(t, tasks, len(expectedTaskRanges)) + for i, task := range tasks { + taskEqual(t, task, regionIDs[1], regionIDs[1], expectedTaskRanges[i]...) + } } func TestSplitRegionRanges(t *testing.T) { @@ -238,8 +385,8 @@ func TestRebuild(t *testing.T) { tasks, err := buildCopTasks(bo, cache, buildCopRanges("a", "z"), req, nil) require.NoError(t, err) require.Len(t, tasks, 2) - taskEqual(t, tasks[0], regionIDs[0], "a", "m") - taskEqual(t, tasks[1], regionIDs[1], "m", "z") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "m") + taskEqual(t, tasks[1], regionIDs[1], 0, "m", "z") // nil -- 'm' -- 'q' -- nil // <- 0 -> <--1-> <-2--> @@ -252,9 +399,9 @@ func TestRebuild(t *testing.T) { tasks, err = buildCopTasks(bo, cache, buildCopRanges("a", "z"), req, nil) require.NoError(t, err) require.Len(t, tasks, 3) - taskEqual(t, tasks[2], regionIDs[0], "a", "m") - taskEqual(t, tasks[1], regionIDs[1], "m", "q") - taskEqual(t, tasks[0], regionIDs[2], "q", "z") + taskEqual(t, tasks[2], regionIDs[0], 0, "a", "m") + taskEqual(t, tasks[1], regionIDs[1], 0, "m", "q") + taskEqual(t, tasks[0], regionIDs[2], 0, "q", "z") } func buildKeyRanges(keys ...string) []kv.KeyRange { @@ -272,8 +419,9 @@ func buildCopRanges(keys ...string) *KeyRanges { return NewKeyRanges(buildKeyRanges(keys...)) } -func taskEqual(t *testing.T, task *copTask, regionID uint64, keys ...string) { +func taskEqual(t *testing.T, task *copTask, regionID, bucketsVer uint64, keys ...string) { require.Equal(t, task.region.GetID(), regionID) + require.Equal(t, task.bucketsVer, bucketsVer) for i := 0; i < task.ranges.Len(); i++ { r := task.ranges.At(i) require.Equal(t, string(r.StartKey), keys[2*i]) @@ -317,7 +465,7 @@ func TestBuildPagingTasks(t *testing.T) { require.NoError(t, err) require.Len(t, tasks, 1) require.Len(t, tasks, 1) - taskEqual(t, tasks[0], regionIDs[0], "a", "c") + taskEqual(t, tasks[0], regionIDs[0], 0, "a", "c") require.True(t, tasks[0].paging) require.Equal(t, tasks[0].pagingSize, paging.MinPagingSize) } diff --git a/store/copr/main_test.go b/store/copr/main_test.go index e69b25bc2173e..934a55c6354fd 100644 --- a/store/copr/main_test.go +++ b/store/copr/main_test.go @@ -35,5 +35,11 @@ func (m *main) Run() int { func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(&main{m: m}) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/pingcap/goleveldb/leveldb.(*DB).mpoolDrain"), + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(&main{m: m}, opts...) } diff --git a/store/copr/mpp.go b/store/copr/mpp.go index 1a19d80ed326c..f385fedacc5b3 100644 --- a/store/copr/mpp.go +++ b/store/copr/mpp.go @@ -27,7 +27,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/coprocessor" "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/mpp" "github.com/pingcap/log" "github.com/pingcap/tidb/config" @@ -65,11 +64,24 @@ func (c *MPPClient) selectAllTiFlashStore() []kv.MPPTaskMeta { func (c *MPPClient) ConstructMPPTasks(ctx context.Context, req *kv.MPPBuildTasksRequest, mppStoreLastFailTime map[string]time.Time, ttl time.Duration) ([]kv.MPPTaskMeta, error) { ctx = context.WithValue(ctx, tikv.TxnStartKey(), req.StartTS) bo := backoff.NewBackofferWithVars(ctx, copBuildTaskMaxBackoff, nil) - if req.KeyRanges == nil { - return c.selectAllTiFlashStore(), nil + var tasks []*batchCopTask + var err error + if req.PartitionIDAndRanges != nil { + rangesForEachPartition := make([]*KeyRanges, len(req.PartitionIDAndRanges)) + partitionIDs := make([]int64, len(req.PartitionIDAndRanges)) + for i, p := range req.PartitionIDAndRanges { + rangesForEachPartition[i] = NewKeyRanges(p.KeyRanges) + partitionIDs[i] = p.ID + } + tasks, err = buildBatchCopTasksForPartitionedTable(bo, c.store, rangesForEachPartition, kv.TiFlash, mppStoreLastFailTime, ttl, true, 20, partitionIDs) + } else { + if req.KeyRanges == nil { + return c.selectAllTiFlashStore(), nil + } + ranges := NewKeyRanges(req.KeyRanges) + tasks, err = buildBatchCopTasksForNonPartitionedTable(bo, c.store, ranges, kv.TiFlash, mppStoreLastFailTime, ttl, true, 20) } - ranges := NewKeyRanges(req.KeyRanges) - tasks, err := buildBatchCopTasks(bo, c.store, ranges, kv.TiFlash, mppStoreLastFailTime, ttl, true, 20) + if err != nil { return nil, errors.Trace(err) } @@ -200,14 +212,7 @@ func (m *mppIterator) handleDispatchReq(ctx context.Context, bo *Backoffer, req originalTask, ok := req.Meta.(*batchCopTask) if ok { for _, ri := range originalTask.regionInfos { - regionInfos = append(regionInfos, &coprocessor.RegionInfo{ - RegionId: ri.Region.GetID(), - RegionEpoch: &metapb.RegionEpoch{ - ConfVer: ri.Region.GetConfVer(), - Version: ri.Region.GetVer(), - }, - Ranges: ri.Ranges.ToPBRanges(), - }) + regionInfos = append(regionInfos, ri.toCoprocessorRegionInfo()) } } @@ -222,6 +227,12 @@ func (m *mppIterator) handleDispatchReq(ctx context.Context, bo *Backoffer, req SchemaVer: req.SchemaVar, Regions: regionInfos, } + if originalTask != nil { + mppReq.TableRegions = originalTask.PartitionTableRegions + if mppReq.TableRegions != nil { + mppReq.Regions = nil + } + } wrappedReq := tikvrpc.NewRequest(tikvrpc.CmdMPPTask, mppReq, kvrpcpb.Context{}) wrappedReq.StoreTp = tikvrpc.TiFlash diff --git a/store/copr/region_cache.go b/store/copr/region_cache.go index 4904f934db6c1..e4454d575220b 100644 --- a/store/copr/region_cache.go +++ b/store/copr/region_cache.go @@ -63,6 +63,75 @@ type LocationKeyRanges struct { Ranges *KeyRanges } +func (l *LocationKeyRanges) getBucketVersion() uint64 { + return l.Location.GetBucketVersion() +} + +// splitKeyRangeByBuckets splits ranges in the same location by buckets and returns a LocationKeyRanges array. +func (l *LocationKeyRanges) splitKeyRangesByBuckets() []*LocationKeyRanges { + if l.Location.Buckets == nil || len(l.Location.Buckets.Keys) == 0 { + return []*LocationKeyRanges{l} + } + + ranges := l.Ranges + loc := l.Location + res := []*LocationKeyRanges{} + for ranges.Len() > 0 { + bucket := loc.LocateBucket(ranges.At(0).StartKey) + if bucket == nil { + // TODO(youjiali1995): if it's overlapped with some buckets, it can be splitted. + // + // Buckets information may not be up-to-date and accurate. + // Find all ranges that can't be located in a bucket and make it one task. + i := 1 + for ; i < ranges.Len(); i++ { + if loc.LocateBucket(ranges.At(i).StartKey) != nil { + break + } + } + res = append(res, &LocationKeyRanges{l.Location, ranges.Slice(0, i)}) + ranges = ranges.Slice(i, ranges.Len()) + } else { + // Iterate to the first range that is not complete in the bucket. + var r kv.KeyRange + var i int + for ; i < ranges.Len(); i++ { + r = ranges.At(i) + if !(bucket.Contains(r.EndKey) || bytes.Equal(bucket.EndKey, r.EndKey)) { + break + } + } + // All rest ranges belong to the same bucket. + if i == ranges.Len() { + res = append(res, &LocationKeyRanges{l.Location, ranges}) + break + } + + if bucket.Contains(r.StartKey) { + // Part of r is not in the bucket. We need to split it. + taskRanges := ranges.Slice(0, i) + taskRanges.last = &kv.KeyRange{ + StartKey: r.StartKey, + EndKey: bucket.EndKey, + } + res = append(res, &LocationKeyRanges{l.Location, taskRanges}) + + ranges = ranges.Slice(i+1, ranges.Len()) + ranges.first = &kv.KeyRange{ + StartKey: bucket.EndKey, + EndKey: r.EndKey, + } + } else { + // ranges[i] is not in the bucket. + taskRanges := ranges.Slice(0, i) + res = append(res, &LocationKeyRanges{l.Location, taskRanges}) + ranges = ranges.Slice(i, ranges.Len()) + } + } + } + return res +} + // SplitKeyRangesByLocations splits the KeyRanges by logical info in the cache. func (c *RegionCache) SplitKeyRangesByLocations(bo *Backoffer, ranges *KeyRanges) ([]*LocationKeyRanges, error) { res := make([]*LocationKeyRanges, 0) @@ -73,9 +142,10 @@ func (c *RegionCache) SplitKeyRangesByLocations(bo *Backoffer, ranges *KeyRanges } // Iterate to the first range that is not complete in the region. + var r kv.KeyRange var i int for ; i < ranges.Len(); i++ { - r := ranges.At(i) + r = ranges.At(i) if !(loc.Contains(r.EndKey) || bytes.Equal(loc.EndKey, r.EndKey)) { break } @@ -86,7 +156,6 @@ func (c *RegionCache) SplitKeyRangesByLocations(bo *Backoffer, ranges *KeyRanges break } - r := ranges.At(i) if loc.Contains(r.StartKey) { // Part of r is not in the region. We need to split it. taskRanges := ranges.Slice(0, i) @@ -112,6 +181,22 @@ func (c *RegionCache) SplitKeyRangesByLocations(bo *Backoffer, ranges *KeyRanges return res, nil } +// SplitKeyRangesByBuckets splits the KeyRanges by buckets information in the cache. If regions don't have buckets, +// it's equal to SplitKeyRangesByLocations. +// +// TODO(youjiali1995): Try to do it in one round and reduce allocations if bucket is not enabled. +func (c *RegionCache) SplitKeyRangesByBuckets(bo *Backoffer, ranges *KeyRanges) ([]*LocationKeyRanges, error) { + locs, err := c.SplitKeyRangesByLocations(bo, ranges) + if err != nil { + return nil, derr.ToTiDBErr(err) + } + res := make([]*LocationKeyRanges, 0, len(locs)) + for _, loc := range locs { + res = append(res, loc.splitKeyRangesByBuckets()...) + } + return res, nil +} + // OnSendFailForBatchRegions handles send request fail logic. func (c *RegionCache) OnSendFailForBatchRegions(bo *Backoffer, store *tikv.Store, regionInfos []RegionInfo, scheduleReload bool, err error) { metrics.RegionCacheCounterWithSendFail.Add(float64(len(regionInfos))) diff --git a/store/copr/store.go b/store/copr/store.go index 1783ee294f8e1..ad7ebb5dd9a63 100644 --- a/store/copr/store.go +++ b/store/copr/store.go @@ -59,6 +59,11 @@ func (c *tikvClient) Close() error { return derr.ToTiDBErr(err) } +func (c *tikvClient) CloseAddr(addr string) error { + err := c.c.CloseAddr(addr) + return derr.ToTiDBErr(err) +} + // SendRequest sends Request. func (c *tikvClient) SendRequest(ctx context.Context, addr string, req *tikvrpc.Request, timeout time.Duration) (*tikvrpc.Response, error) { res, err := c.c.SendRequest(ctx, addr, req, timeout) diff --git a/store/driver/error/error_test.go b/store/driver/error/error_test.go index 2c5def15ed577..9af54d70dfa96 100644 --- a/store/driver/error/error_test.go +++ b/store/driver/error/error_test.go @@ -27,7 +27,12 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } func TestConvertError(t *testing.T) { diff --git a/store/driver/main_test.go b/store/driver/main_test.go index 71e63367803ab..6927510cbc898 100644 --- a/store/driver/main_test.go +++ b/store/driver/main_test.go @@ -40,6 +40,7 @@ func TestMain(m *testing.M) { testbridge.SetupForCommonTest() tikv.EnableFailpoints() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/store/driver/sql_fail_test.go b/store/driver/sql_fail_test.go index ef5fc5a1a439c..35111d6096e2d 100644 --- a/store/driver/sql_fail_test.go +++ b/store/driver/sql_fail_test.go @@ -16,17 +16,13 @@ package driver import ( "context" - "fmt" "testing" "time" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/session" - "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/mock" "github.com/stretchr/testify/require" - "github.com/tikv/client-go/v2/tikv" ) func TestFailBusyServerCop(t *testing.T) { @@ -60,66 +56,3 @@ func TestFailBusyServerCop(t *testing.T) { }) wg.Wait() } - -func TestCoprocessorStreamRecvTimeout(t *testing.T) { - store, _, clean := createTestStore(t) - defer clean() - - tk := testkit.NewTestKit(t, store) - tk.MustExec("use test") - tk.MustExec("create table cop_stream_timeout (id int)") - for i := 0; i < 200; i++ { - tk.MustExec(fmt.Sprintf("insert into cop_stream_timeout values (%d)", i)) - } - tk.Session().GetSessionVars().EnableStreaming = true - - tests := []struct { - name string - timeout time.Duration - }{ - {"timeout", tikv.ReadTimeoutMedium + 100*time.Second}, - {"no timeout", time.Millisecond}, - } - - for _, test := range tests { - timeout := test.timeout - t.Run(test.name, func(t *testing.T) { - enable := true - visited := make(chan int, 1) - isTimeout := false - ctx := context.WithValue(context.Background(), mock.HookKeyForTest("mockTiKVStreamRecvHook"), func(ctx context.Context) { - if !enable { - return - } - visited <- 1 - - select { - case <-ctx.Done(): - case <-time.After(timeout): - isTimeout = true - } - enable = false - }) - - res, err := tk.Session().Execute(ctx, "select * from cop_stream_timeout") - require.NoError(t, err) - - req := res[0].NewChunk(nil) - for i := 0; ; i++ { - err := res[0].Next(ctx, req) - require.NoError(t, err) - if req.NumRows() == 0 { - break - } - req.Reset() - } - select { - case <-visited: - // run with mock tikv - require.False(t, isTimeout) - default: - // run with real tikv - } - }) - } -} diff --git a/store/driver/txn/main_test.go b/store/driver/txn/main_test.go index 97fa3f9904ce4..8d93e31420d40 100644 --- a/store/driver/txn/main_test.go +++ b/store/driver/txn/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/store/driver/txn/snapshot.go b/store/driver/txn/snapshot.go index 28b73e15e3228..7ecfae6a57e81 100644 --- a/store/driver/txn/snapshot.go +++ b/store/driver/txn/snapshot.go @@ -137,6 +137,8 @@ func getTiKVIsolationLevel(level kv.IsoLevel) txnsnapshot.IsoLevel { return txnsnapshot.SI case kv.RC: return txnsnapshot.RC + case kv.RCCheckTS: + return txnsnapshot.RCCheckTS default: return txnsnapshot.SI } diff --git a/store/driver/txn/txn_driver.go b/store/driver/txn/txn_driver.go index 373d72c66b23b..196db69f6e419 100644 --- a/store/driver/txn/txn_driver.go +++ b/store/driver/txn/txn_driver.go @@ -188,8 +188,6 @@ func (txn *tikvTxn) SetOption(opt int, val interface{}) { txn.KVTxn.SetPriority(getTiKVPriority(val.(int))) case kv.NotFillCache: txn.KVTxn.GetSnapshot().SetNotFillCache(val.(bool)) - case kv.SyncLog: - txn.EnableForceSyncLog() case kv.Pessimistic: txn.SetPessimistic(val.(bool)) case kv.SnapshotTS: diff --git a/store/gcworker/gc_worker.go b/store/gcworker/gc_worker.go index 734a9adedbd0f..8e93d1cf37bd0 100644 --- a/store/gcworker/gc_worker.go +++ b/store/gcworker/gc_worker.go @@ -698,6 +698,9 @@ func (w *GCWorker) deleteRanges(ctx context.Context, safePoint uint64, concurren return errors.Trace(err) } + // Cache table ids on which placement rules have been GC-ed, to avoid redundantly GC the same table id multiple times. + gcPlacementRuleCache := make(map[int64]interface{}, len(ranges)) + logutil.Logger(ctx).Info("[gc worker] start delete ranges", zap.String("uuid", w.uuid), zap.Int("ranges", len(ranges))) @@ -730,7 +733,7 @@ func (w *GCWorker) deleteRanges(ctx context.Context, safePoint uint64, concurren metrics.GCUnsafeDestroyRangeFailuresCounterVec.WithLabelValues("save").Inc() } - if err := w.doGCPlacementRules(r); err != nil { + if err := w.doGCPlacementRules(safePoint, r, gcPlacementRuleCache); err != nil { logutil.Logger(ctx).Error("[gc worker] gc placement rules failed on range", zap.String("uuid", w.uuid), zap.Int64("jobID", r.JobID), @@ -1862,7 +1865,7 @@ func (w *GCWorker) saveValueToSysTable(key, value string) error { // GC placement rules when the partitions are removed by the GC worker. // Placement rules cannot be removed immediately after drop table / truncate table, // because the tables can be flashed back or recovered. -func (w *GCWorker) doGCPlacementRules(dr util.DelRangeTask) (err error) { +func (w *GCWorker) doGCPlacementRules(safePoint uint64, dr util.DelRangeTask, gcPlacementRuleCache map[int64]interface{}) (err error) { // Get the job from the job history var historyJob *model.Job failpoint.Inject("mockHistoryJobForGC", func(v failpoint.Value) { @@ -1873,6 +1876,7 @@ func (w *GCWorker) doGCPlacementRules(dr util.DelRangeTask) (err error) { historyJob = &model.Job{ ID: dr.JobID, Type: model.ActionDropTable, + TableID: int64(v.(int)), RawArgs: args, } }) @@ -1916,12 +1920,22 @@ func (w *GCWorker) doGCPlacementRules(dr util.DelRangeTask) (err error) { } for _, id := range physicalTableIDs { + // Skip table ids that's already successfully deleted. + if _, ok := gcPlacementRuleCache[id]; ok { + continue + } // Delete pd rule - logutil.BgLogger().Info("try delete TiFlash pd rule", zap.String("endKey", string(dr.EndKey))) + failpoint.Inject("gcDeletePlacementRuleCounter", func() {}) + logutil.BgLogger().Info("try delete TiFlash pd rule", + zap.Int64("tableID", id), zap.String("endKey", string(dr.EndKey)), zap.Uint64("safePoint", safePoint)) ruleID := fmt.Sprintf("table-%v-r", id) if err := infosync.DeleteTiFlashPlacementRule(context.Background(), "tiflash", ruleID); err != nil { // If DeletePlacementRule fails here, the rule will be deleted in `HandlePlacementRuleRoutine`. - logutil.BgLogger().Error("delete TiFlash pd rule failed when gc", zap.Error(err), zap.String("ruleID", ruleID)) + logutil.BgLogger().Error("delete TiFlash pd rule failed when gc", + zap.Error(err), zap.String("ruleID", ruleID), zap.Uint64("safePoint", safePoint)) + } else { + // Cache the table id if its related rule are deleted successfully. + gcPlacementRuleCache[id] = struct{}{} } } return infosync.PutRuleBundlesWithDefaultRetry(context.TODO(), bundles) diff --git a/store/gcworker/gc_worker_test.go b/store/gcworker/gc_worker_test.go index 4a50768ff0301..d757edb09b9b4 100644 --- a/store/gcworker/gc_worker_test.go +++ b/store/gcworker/gc_worker_test.go @@ -1655,6 +1655,16 @@ func TestGCPlacementRules(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/mockHistoryJobForGC")) }() + gcPlacementRuleCache := make(map[int64]interface{}) + deletePlacementRuleCounter := 0 + require.NoError(t, failpoint.EnableWith("github.com/pingcap/tidb/store/gcworker/gcDeletePlacementRuleCounter", "return", func() error { + deletePlacementRuleCounter++ + return nil + })) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/store/gcworker/gcDeletePlacementRuleCounter")) + }() + bundleID := "TiDB_DDL_10" bundle, err := placement.NewBundleFromOptions(&model.PlacementSettings{ PrimaryRegion: "r1", @@ -1672,14 +1682,22 @@ func TestGCPlacementRules(t *testing.T) { // do gc dr := util.DelRangeTask{JobID: 1, ElementID: 10} - err = s.gcWorker.doGCPlacementRules(dr) + err = s.gcWorker.doGCPlacementRules(1, dr, gcPlacementRuleCache) require.NoError(t, err) + require.Equal(t, map[int64]interface{}{10: struct{}{}}, gcPlacementRuleCache) + require.Equal(t, 1, deletePlacementRuleCounter) // check bundle deleted after gc got, err = infosync.GetRuleBundle(context.Background(), bundleID) require.NoError(t, err) require.NotNil(t, got) require.True(t, got.IsEmpty()) + + // gc the same table id repeatedly + err = s.gcWorker.doGCPlacementRules(1, dr, gcPlacementRuleCache) + require.NoError(t, err) + require.Equal(t, map[int64]interface{}{10: struct{}{}}, gcPlacementRuleCache) + require.Equal(t, 1, deletePlacementRuleCounter) } func TestGCLabelRules(t *testing.T) { diff --git a/store/gcworker/main_test.go b/store/gcworker/main_test.go index 400d97e9a0bf4..f6532f7b0a855 100644 --- a/store/gcworker/main_test.go +++ b/store/gcworker/main_test.go @@ -30,6 +30,7 @@ func TestMain(m *testing.M) { opts := []goleak.Option{ goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), } callback := func(i int) int { // wait for MVCCLevelDB to close, MVCCLevelDB will be closed in one second diff --git a/store/helper/main_test.go b/store/helper/main_test.go index 52601cf5f3c6a..75cdb1d50f8ac 100644 --- a/store/helper/main_test.go +++ b/store/helper/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/store/main_test.go b/store/main_test.go index 3dccbd0df88b0..0579ea229d2a8 100644 --- a/store/main_test.go +++ b/store/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/store/mockstore/main_test.go b/store/mockstore/main_test.go index dea595138efbf..32ba74a6a98d2 100644 --- a/store/mockstore/main_test.go +++ b/store/mockstore/main_test.go @@ -30,5 +30,10 @@ func TestMain(m *testing.M) { time.Sleep(time.Second) return i } - goleak.VerifyTestMain(testmain.WrapTestingM(m, callback)) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(testmain.WrapTestingM(m, callback), opts...) } diff --git a/store/mockstore/mockcopr/cop_handler_dag.go b/store/mockstore/mockcopr/cop_handler_dag.go index 2fd9d8f73d4b3..4c60d346195bb 100644 --- a/store/mockstore/mockcopr/cop_handler_dag.go +++ b/store/mockstore/mockcopr/cop_handler_dag.go @@ -176,7 +176,7 @@ func (h coprHandler) buildExec(ctx *dagContext, curr *tipb.Executor) (executor, childExec = curr.Limit.Child default: // TODO: Support other types. - err = errors.Errorf("this exec type %v doesn't support yet.", curr.GetTp()) + err = errors.Errorf("this exec type %v doesn't support yet", curr.GetTp()) } return currExec, childExec, errors.Trace(err) diff --git a/store/mockstore/mockcopr/main_test.go b/store/mockstore/mockcopr/main_test.go index 74b84ce7b0475..1aef4b1027883 100644 --- a/store/mockstore/mockcopr/main_test.go +++ b/store/mockstore/mockcopr/main_test.go @@ -26,6 +26,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/store/mockstore/redirector.go b/store/mockstore/redirector.go index ba7c7813583b3..e506f16857bbf 100644 --- a/store/mockstore/redirector.go +++ b/store/mockstore/redirector.go @@ -51,6 +51,17 @@ func (c *clientRedirector) Close() error { return err } +func (c *clientRedirector) CloseAddr(addr string) error { + err := c.mockClient.CloseAddr(addr) + if err != nil { + return err + } + if c.rpcClient != nil { + err = c.rpcClient.CloseAddr(addr) + } + return err +} + func (c *clientRedirector) SendRequest(ctx context.Context, addr string, req *tikvrpc.Request, timeout time.Duration) (*tikvrpc.Response, error) { if req.StoreTp == tikvrpc.TiDB { c.Once.Do(func() { diff --git a/store/mockstore/unistore/cophandler/closure_exec.go b/store/mockstore/unistore/cophandler/closure_exec.go index d1dee3b888538..e7bac738bc67f 100644 --- a/store/mockstore/unistore/cophandler/closure_exec.go +++ b/store/mockstore/unistore/cophandler/closure_exec.go @@ -199,7 +199,8 @@ func convertToExprs(sc *stmtctx.StatementContext, fieldTps []*types.FieldType, p func isScanNode(executor *tipb.Executor) bool { switch executor.Tp { case tipb.ExecType_TypeTableScan, - tipb.ExecType_TypeIndexScan: + tipb.ExecType_TypeIndexScan, + tipb.ExecType_TypePartitionTableScan: return true default: return false @@ -263,6 +264,13 @@ func newClosureExecutor(dagCtx *dagContext, outputOffsets []uint32, scanExec *ti e.idxScanCtx.prevVals = make([][]byte, e.idxScanCtx.columnLen) } e.scanType = IndexScan + case tipb.ExecType_TypePartitionTableScan: + dagCtx.setColumnInfo(scanExec.PartitionTableScan.Columns) + dagCtx.primaryCols = scanExec.PartitionTableScan.PrimaryColumnIds + tblScan := scanExec.PartitionTableScan + e.unique = true + e.scanCtx.desc = tblScan.Desc + e.scanType = TableScan default: panic(fmt.Sprintf("unknown first executor type %s", scanExec.Tp)) } @@ -294,9 +302,18 @@ func (e *closureExecutor) initIdxScanCtx(idxScan *tipb.IndexScan) { e.idxScanCtx.primaryColumnIds = idxScan.PrimaryColumnIds lastColumn := e.columnInfos[len(e.columnInfos)-1] + + // Here it is required that ExtraPhysTblID is last + if lastColumn.GetColumnId() == model.ExtraPhysTblID { + e.idxScanCtx.columnLen-- + lastColumn = e.columnInfos[e.idxScanCtx.columnLen-1] + } + + // Here it is required that ExtraPidColID + // is after all other columns except ExtraPhysTblID if lastColumn.GetColumnId() == model.ExtraPidColID { - lastColumn = e.columnInfos[len(e.columnInfos)-2] e.idxScanCtx.columnLen-- + lastColumn = e.columnInfos[e.idxScanCtx.columnLen-1] } if len(e.idxScanCtx.primaryColumnIds) == 0 { @@ -838,6 +855,12 @@ func (e *closureExecutor) tableScanProcessCore(key, value []byte) error { if err != nil { return errors.Trace(err) } + // Add ExtraPhysTblID if requested + // Assumes it is always last! + if e.columnInfos[len(e.columnInfos)-1].ColumnId == model.ExtraPhysTblID { + tblID := tablecodec.DecodeTableID(key) + e.scanCtx.chk.AppendInt64(len(e.columnInfos)-1, tblID) + } incRow = true return nil } @@ -910,6 +933,12 @@ func (e *closureExecutor) indexScanProcessCore(key, value []byte) error { } } } + // Add ExtraPhysTblID if requested + // Assumes it is always last! + if e.columnInfos[len(e.columnInfos)-1].ColumnId == model.ExtraPhysTblID { + tblID := tablecodec.DecodeTableID(key) + chk.AppendInt64(len(e.columnInfos)-1, tblID) + } gotRow = true return nil } diff --git a/store/mockstore/unistore/cophandler/cop_handler.go b/store/mockstore/unistore/cophandler/cop_handler.go index b39baccda1125..6fd25e7cc98f8 100644 --- a/store/mockstore/unistore/cophandler/cop_handler.go +++ b/store/mockstore/unistore/cophandler/cop_handler.go @@ -37,6 +37,7 @@ import ( "github.com/pingcap/tidb/store/mockstore/unistore/client" "github.com/pingcap/tidb/store/mockstore/unistore/lockstore" "github.com/pingcap/tidb/store/mockstore/unistore/tikv/dbreader" + "github.com/pingcap/tidb/store/mockstore/unistore/tikv/kverrors" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" @@ -314,6 +315,10 @@ func newRowDecoder(columnInfos []*tipb.ColumnInfo, fieldTps []*types.FieldType, ) for i := range columnInfos { info := columnInfos[i] + if info.ColumnId == model.ExtraPhysTblID { + // Skip since it needs to be filled in from the key + continue + } ft := fieldTps[i] col := rowcodec.ColInfo{ ID: info.ColumnId, @@ -432,12 +437,17 @@ func buildRespWithMPPExec(chunks []tipb.Chunk, counts, ndvs []int64, exec mppExe resp.ExecDetailsV2 = &kvrpcpb.ExecDetailsV2{ TimeDetail: resp.ExecDetails.TimeDetail, } - data, err := proto.Marshal(selResp) - if err != nil { - resp.OtherError = err.Error() + data, mErr := proto.Marshal(selResp) + if mErr != nil { + resp.OtherError = mErr.Error() return resp } resp.Data = data + if err != nil { + if conflictErr, ok := errors.Cause(err).(*kverrors.ErrConflict); ok { + resp.OtherError = conflictErr.Error() + } + } return resp } diff --git a/store/mockstore/unistore/cophandler/main_test.go b/store/mockstore/unistore/cophandler/main_test.go index cffc39b4fa1c0..420cf1f476f89 100644 --- a/store/mockstore/unistore/cophandler/main_test.go +++ b/store/mockstore/unistore/cophandler/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/store/mockstore/unistore/cophandler/mpp.go b/store/mockstore/unistore/cophandler/mpp.go index 59a66d31f6f88..2b13319e43f08 100644 --- a/store/mockstore/unistore/cophandler/mpp.go +++ b/store/mockstore/unistore/cophandler/mpp.go @@ -78,7 +78,34 @@ func (b *mppExecBuilder) buildMPPTableScan(pb *tipb.TableScan) (*tableScanExec, ts.lockStore = b.dagCtx.lockStore ts.resolvedLocks = b.dagCtx.resolvedLocks } - for _, col := range pb.Columns { + for i, col := range pb.Columns { + if col.ColumnId == model.ExtraPhysTblID { + ts.physTblIDColIdx = new(int) + *ts.physTblIDColIdx = i + } + ft := fieldTypeFromPBColumn(col) + ts.fieldTypes = append(ts.fieldTypes, ft) + } + ts.decoder, err = newRowDecoder(pb.Columns, ts.fieldTypes, pb.PrimaryColumnIds, b.sc.TimeZone) + return ts, err +} + +func (b *mppExecBuilder) buildMPPPartitionTableScan(pb *tipb.PartitionTableScan) (*tableScanExec, error) { + ranges, err := extractKVRanges(b.dbReader.StartKey, b.dbReader.EndKey, b.dagCtx.keyRanges, false) + if err != nil { + return nil, errors.Trace(err) + } + ts := &tableScanExec{ + baseMPPExec: baseMPPExec{sc: b.sc, mppCtx: b.mppCtx}, + startTS: b.dagCtx.startTS, + kvRanges: ranges, + dbReader: b.dbReader, + } + for i, col := range pb.Columns { + if col.ColumnId == model.ExtraPhysTblID { + ts.physTblIDColIdx = new(int) + *ts.physTblIDColIdx = i + } ft := fieldTypeFromPBColumn(col) ts.fieldTypes = append(ts.fieldTypes, ft) } @@ -98,9 +125,16 @@ func (b *mppExecBuilder) buildIdxScan(pb *tipb.IndexScan) (*indexScanExec, error primaryColIds := pb.GetPrimaryColumnIds() lastCol := pb.Columns[numCols-1] + var physTblIDColIdx *int + if lastCol.GetColumnId() == model.ExtraPhysTblID { + numIdxCols-- + physTblIDColIdx = new(int) + *physTblIDColIdx = numIdxCols + lastCol = pb.Columns[numIdxCols-1] + } if lastCol.GetColumnId() == model.ExtraPidColID { - lastCol = pb.Columns[numCols-2] numIdxCols-- + lastCol = pb.Columns[numIdxCols-1] } hdlStatus := tablecodec.HandleDefault @@ -132,19 +166,20 @@ func (b *mppExecBuilder) buildIdxScan(pb *tipb.IndexScan) (*indexScanExec, error prevVals = make([][]byte, numIdxCols) } idxScan := &indexScanExec{ - baseMPPExec: baseMPPExec{sc: b.sc, fieldTypes: fieldTypes}, - startTS: b.dagCtx.startTS, - kvRanges: ranges, - dbReader: b.dbReader, - lockStore: b.dagCtx.lockStore, - resolvedLocks: b.dagCtx.resolvedLocks, - counts: b.counts, - ndvs: b.ndvs, - prevVals: prevVals, - colInfos: colInfos, - numIdxCols: numIdxCols, - hdlStatus: hdlStatus, - desc: pb.Desc, + baseMPPExec: baseMPPExec{sc: b.sc, fieldTypes: fieldTypes}, + startTS: b.dagCtx.startTS, + kvRanges: ranges, + dbReader: b.dbReader, + lockStore: b.dagCtx.lockStore, + resolvedLocks: b.dagCtx.resolvedLocks, + counts: b.counts, + ndvs: b.ndvs, + prevVals: prevVals, + colInfos: colInfos, + numIdxCols: numIdxCols, + hdlStatus: hdlStatus, + desc: pb.Desc, + physTblIDColIdx: physTblIDColIdx, } return idxScan, nil } @@ -445,6 +480,9 @@ func (b *mppExecBuilder) buildMPPExecutor(exec *tipb.Executor) (mppExec, error) return b.buildLimit(exec.Limit) case tipb.ExecType_TypeTopN: return b.buildTopN(exec.TopN) + case tipb.ExecType_TypePartitionTableScan: + ts := exec.PartitionTableScan + return b.buildMPPPartitionTableScan(ts) default: return nil, errors.Errorf(ErrExecutorNotSupportedMsg + exec.Tp.String()) } diff --git a/store/mockstore/unistore/cophandler/mpp_exec.go b/store/mockstore/unistore/cophandler/mpp_exec.go index 9752371d50c02..85a5983517e11 100644 --- a/store/mockstore/unistore/cophandler/mpp_exec.go +++ b/store/mockstore/unistore/cophandler/mpp_exec.go @@ -123,6 +123,9 @@ type tableScanExec struct { decoder *rowcodec.ChunkDecoder desc bool + + // if ExtraPhysTblIDCol is requested, fill in the physical table id in this column position + physTblIDColIdx *int } func (e *tableScanExec) SkipValue() bool { return false } @@ -137,6 +140,10 @@ func (e *tableScanExec) Process(key, value []byte) error { if err != nil { return errors.Trace(err) } + if e.physTblIDColIdx != nil { + tblID := tablecodec.DecodeTableID(key) + e.chk.AppendInt64(*e.physTblIDColIdx, tblID) + } e.rowCnt++ if e.chk.IsFull() { @@ -241,6 +248,9 @@ type indexScanExec struct { colInfos []rowcodec.ColInfo numIdxCols int hdlStatus tablecodec.HandleStatus + + // if ExtraPhysTblIDCol is requested, fill in the physical table id in this column position + physTblIDColIdx *int } func (e *indexScanExec) SkipValue() bool { return false } @@ -275,6 +285,10 @@ func (e *indexScanExec) Process(key, value []byte) error { } } } + if e.physTblIDColIdx != nil { + tblID := tablecodec.DecodeTableID(key) + e.chk.AppendInt64(*e.physTblIDColIdx, tblID) + } if e.chk.IsFull() { e.chunks = append(e.chunks, e.chk) e.chk = chunk.NewChunkWithCapacity(e.fieldTypes, DefaultBatchSize) diff --git a/store/mockstore/unistore/lockstore/main_test.go b/store/mockstore/unistore/lockstore/main_test.go index 0fb96356bfc89..fdef458e79cb9 100644 --- a/store/mockstore/unistore/lockstore/main_test.go +++ b/store/mockstore/unistore/lockstore/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/store/mockstore/unistore/main_test.go b/store/mockstore/unistore/main_test.go index 8b40056fab6d9..adc65105d06c2 100644 --- a/store/mockstore/unistore/main_test.go +++ b/store/mockstore/unistore/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/store/mockstore/unistore/pd/client.go b/store/mockstore/unistore/pd/client.go index bd37bfa2ede2e..3ac364d5c0284 100644 --- a/store/mockstore/unistore/pd/client.go +++ b/store/mockstore/unistore/pd/client.go @@ -40,8 +40,8 @@ type Client interface { IsBootstrapped(ctx context.Context) (bool, error) PutStore(ctx context.Context, store *metapb.Store) error GetStore(ctx context.Context, storeID uint64) (*metapb.Store, error) - GetRegion(ctx context.Context, key []byte) (*pd.Region, error) - GetRegionByID(ctx context.Context, regionID uint64) (*pd.Region, error) + GetRegion(ctx context.Context, key []byte, opts ...pd.GetRegionOption) (*pd.Region, error) + GetRegionByID(ctx context.Context, regionID uint64, opts ...pd.GetRegionOption) (*pd.Region, error) ReportRegion(*pdpb.RegionHeartbeatRequest) AskSplit(ctx context.Context, region *metapb.Region) (*pdpb.AskSplitResponse, error) AskBatchSplit(ctx context.Context, region *metapb.Region, count int) (*pdpb.AskBatchSplitResponse, error) @@ -503,7 +503,7 @@ func (c *client) GetClusterConfig(ctx context.Context) (*metapb.Cluster, error) return resp.Cluster, nil } -func (c *client) GetRegion(ctx context.Context, key []byte) (*pd.Region, error) { +func (c *client) GetRegion(ctx context.Context, key []byte, opts ...pd.GetRegionOption) (*pd.Region, error) { var resp *pdpb.GetRegionResponse err := c.doRequest(ctx, func(ctx context.Context, client pdpb.PDClient) error { var err1 error @@ -530,7 +530,7 @@ func (c *client) GetRegion(ctx context.Context, key []byte) (*pd.Region, error) return r, nil } -func (c *client) GetRegionByID(ctx context.Context, regionID uint64) (*pd.Region, error) { +func (c *client) GetRegionByID(ctx context.Context, regionID uint64, opts ...pd.GetRegionOption) (*pd.Region, error) { var resp *pdpb.GetRegionResponse err := c.doRequest(ctx, func(ctx context.Context, client pdpb.PDClient) error { var err1 error diff --git a/store/mockstore/unistore/rpc.go b/store/mockstore/unistore/rpc.go index 94ef82d0e1475..87d46206f8283 100644 --- a/store/mockstore/unistore/rpc.go +++ b/store/mockstore/unistore/rpc.go @@ -405,6 +405,11 @@ func (c *RPCClient) Close() error { return nil } +// CloseAddr implements tikv.Client interface and it does nothing. +func (c *RPCClient) CloseAddr(addr string) error { + return nil +} + type mockClientStream struct{} // Header implements grpc.ClientStream interface diff --git a/store/mockstore/unistore/tikv/dbreader/db_reader.go b/store/mockstore/unistore/tikv/dbreader/db_reader.go index 66bdb6444ed01..474c7bb6b58d1 100644 --- a/store/mockstore/unistore/tikv/dbreader/db_reader.go +++ b/store/mockstore/unistore/tikv/dbreader/db_reader.go @@ -36,6 +36,7 @@ import ( "github.com/pingcap/badger/y" "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/tidb/store/mockstore/unistore/tikv/kverrors" "github.com/pingcap/tidb/store/mockstore/unistore/tikv/mvcc" ) @@ -69,6 +70,7 @@ type DBReader struct { iter *badger.Iterator extraIter *badger.Iterator revIter *badger.Iterator + RcCheckTS bool } // GetMvccInfoByKey fills MvccInfo reading committed keys from db @@ -105,6 +107,9 @@ func (r *DBReader) GetMvccInfoByKey(key []byte, isRowKey bool, mvccInfo *kvrpcpb // Get gets a value with the key and start ts. func (r *DBReader) Get(key []byte, startTS uint64) ([]byte, error) { r.txn.SetReadTS(startTS) + if r.RcCheckTS { + r.txn.SetReadTS(math.MaxUint64) + } item, err := r.txn.Get(key) if err != nil && err != badger.ErrKeyNotFound { return nil, errors.Trace(err) @@ -112,6 +117,10 @@ func (r *DBReader) Get(key []byte, startTS uint64) ([]byte, error) { if item == nil { return nil, nil } + err = r.CheckWriteItemForRcCheckTSRead(startTS, item) + if err != nil { + return nil, errors.Trace(err) + } return item.Value() } @@ -152,6 +161,9 @@ type BatchGetFunc = func(key, value []byte, err error) // BatchGet batch gets keys. func (r *DBReader) BatchGet(keys [][]byte, startTS uint64, f BatchGetFunc) { r.txn.SetReadTS(startTS) + if r.RcCheckTS { + r.txn.SetReadTS(math.MaxUint64) + } items, err := r.txn.MultiGet(keys) if err != nil { for _, key := range keys { @@ -164,6 +176,9 @@ func (r *DBReader) BatchGet(keys [][]byte, startTS uint64, f BatchGetFunc) { var val []byte if item != nil { val, err = item.Value() + if err == nil { + err = r.CheckWriteItemForRcCheckTSRead(startTS, item) + } } f(key, val, err) } @@ -195,6 +210,9 @@ func exceedEndKey(current, endKey []byte) bool { // Scan scans the key range with the given ScanProcessor. func (r *DBReader) Scan(startKey, endKey []byte, limit int, startTS uint64, proc ScanProcessor) error { r.txn.SetReadTS(startTS) + if r.RcCheckTS { + r.txn.SetReadTS(math.MaxUint64) + } skipValue := proc.SkipValue() iter := r.GetIter() var cnt int @@ -205,6 +223,10 @@ func (r *DBReader) Scan(startKey, endKey []byte, limit int, startTS uint64, proc if exceedEndKey(key, endKey) { break } + err = r.CheckWriteItemForRcCheckTSRead(startTS, item) + if err != nil { + return errors.Trace(err) + } if item.IsEmpty() { continue } @@ -253,6 +275,9 @@ func (r *DBReader) ReverseScan(startKey, endKey []byte, limit int, startTS uint6 skipValue := proc.SkipValue() iter := r.getReverseIter() r.txn.SetReadTS(startTS) + if r.RcCheckTS { + r.txn.SetReadTS(math.MaxUint64) + } var cnt int for iter.Seek(endKey); iter.Valid(); iter.Next() { item := iter.Item() @@ -264,6 +289,10 @@ func (r *DBReader) ReverseScan(startKey, endKey []byte, limit int, startTS uint6 continue } var err error + err = r.CheckWriteItemForRcCheckTSRead(startTS, item) + if err != nil { + return errors.Trace(err) + } if item.IsEmpty() { continue } @@ -289,6 +318,25 @@ func (r *DBReader) ReverseScan(startKey, endKey []byte, limit int, startTS uint6 return nil } +// CheckWriteItemForRcCheckTSRead checks the data version if `RcCheckTS` isolation level is used. +func (r *DBReader) CheckWriteItemForRcCheckTSRead(readTS uint64, item *badger.Item) error { + if item == nil { + return nil + } + if !r.RcCheckTS { + return nil + } + userMeta := mvcc.DBUserMeta(item.UserMeta()) + if userMeta.CommitTS() > readTS { + return &kverrors.ErrConflict{ + StartTS: readTS, + ConflictTS: userMeta.StartTS(), + ConflictCommitTS: userMeta.CommitTS(), + } + } + return nil +} + // GetTxn gets the *badger.Txn of the *DBReader. func (r *DBReader) GetTxn() *badger.Txn { return r.txn diff --git a/store/mockstore/unistore/tikv/deadlock.go b/store/mockstore/unistore/tikv/deadlock.go index da1851f66769e..90f0c5b226a56 100644 --- a/store/mockstore/unistore/tikv/deadlock.go +++ b/store/mockstore/unistore/tikv/deadlock.go @@ -26,6 +26,7 @@ import ( deadlockPb "github.com/pingcap/kvproto/pkg/deadlock" "github.com/pingcap/log" "github.com/pingcap/tidb/store/mockstore/unistore/pd" + "github.com/pingcap/tidb/store/mockstore/unistore/tikv/kverrors" "github.com/pingcap/tidb/store/mockstore/unistore/util/lockwaiter" ) @@ -214,7 +215,7 @@ func (dt *DetectorClient) Detect(txnTs uint64, waitForTxnTs uint64, keyHash uint } // convertErrToResp converts `ErrDeadlock` to `DeadlockResponse` proto type -func convertErrToResp(errDeadlock *ErrDeadlock, txnTs, waitForTxnTs, keyHash uint64) *deadlockPb.DeadlockResponse { +func convertErrToResp(errDeadlock *kverrors.ErrDeadlock, txnTs, waitForTxnTs, keyHash uint64) *deadlockPb.DeadlockResponse { entry := deadlockPb.WaitForEntry{} entry.Txn = txnTs entry.WaitForTxn = waitForTxnTs diff --git a/store/mockstore/unistore/tikv/detector.go b/store/mockstore/unistore/tikv/detector.go index 3b8a636420813..a804ec4bfe27a 100644 --- a/store/mockstore/unistore/tikv/detector.go +++ b/store/mockstore/unistore/tikv/detector.go @@ -34,6 +34,7 @@ import ( deadlockpb "github.com/pingcap/kvproto/pkg/deadlock" "github.com/pingcap/log" + "github.com/pingcap/tidb/store/mockstore/unistore/tikv/kverrors" "go.uber.org/zap" ) @@ -81,7 +82,7 @@ func NewDetector(ttl time.Duration, urgentSize uint64, expireInterval time.Durat } // Detect detects deadlock for the sourceTxn on a locked key. -func (d *Detector) Detect(sourceTxn, waitForTxn, keyHash uint64, diagCtx diagnosticContext) *ErrDeadlock { +func (d *Detector) Detect(sourceTxn, waitForTxn, keyHash uint64, diagCtx diagnosticContext) *kverrors.ErrDeadlock { d.lock.Lock() nowTime := time.Now() d.activeExpire(nowTime) @@ -107,7 +108,7 @@ func (d *Detector) Detect(sourceTxn, waitForTxn, keyHash uint64, diagCtx diagnos return err } -func (d *Detector) doDetect(nowTime time.Time, sourceTxn, waitForTxn uint64) *ErrDeadlock { +func (d *Detector) doDetect(nowTime time.Time, sourceTxn, waitForTxn uint64) *kverrors.ErrDeadlock { val := d.waitForMap[waitForTxn] if val == nil { return nil @@ -123,7 +124,7 @@ func (d *Detector) doDetect(nowTime time.Time, sourceTxn, waitForTxn uint64) *Er continue } if keyHashPair.txn == sourceTxn { - return &ErrDeadlock{DeadlockKeyHash: keyHashPair.keyHash, + return &kverrors.ErrDeadlock{DeadlockKeyHash: keyHashPair.keyHash, WaitChain: []*deadlockpb.WaitForEntry{ { Txn: waitForTxn, diff --git a/store/mockstore/unistore/tikv/errors.go b/store/mockstore/unistore/tikv/kverrors/errors.go similarity index 97% rename from store/mockstore/unistore/tikv/errors.go rename to store/mockstore/unistore/tikv/kverrors/errors.go index 59635eb073a1b..7081b4a7f80c8 100644 --- a/store/mockstore/unistore/tikv/errors.go +++ b/store/mockstore/unistore/tikv/kverrors/errors.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package tikv +package kverrors import ( "encoding/hex" @@ -64,11 +64,11 @@ var ( // ErrInvalidOp is returned when an operation cannot be completed. type ErrInvalidOp struct { - op kvrpcpb.Op + Op kvrpcpb.Op } func (e ErrInvalidOp) Error() string { - return fmt.Sprintf("invalid op: %s", e.op.String()) + return fmt.Sprintf("invalid op: %s", e.Op.String()) } // ErrAlreadyCommitted is returned specially when client tries to rollback a diff --git a/store/mockstore/unistore/tikv/main_test.go b/store/mockstore/unistore/tikv/main_test.go index c74abb998b10a..94e4abe33e2e4 100644 --- a/store/mockstore/unistore/tikv/main_test.go +++ b/store/mockstore/unistore/tikv/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/store/mockstore/unistore/tikv/mock_region.go b/store/mockstore/unistore/tikv/mock_region.go index 416b28a1dffb2..0ae6b57059cbf 100644 --- a/store/mockstore/unistore/tikv/mock_region.go +++ b/store/mockstore/unistore/tikv/mock_region.go @@ -242,7 +242,7 @@ func (rm *MockRegionManager) GetRegion(id uint64) *metapb.Region { } // GetRegionByKey gets a region by the key. -func (rm *MockRegionManager) GetRegionByKey(key []byte) (region *metapb.Region, peer *metapb.Peer) { +func (rm *MockRegionManager) GetRegionByKey(key []byte) (region *metapb.Region, peer *metapb.Peer, buckets *metapb.Buckets) { rm.mu.RLock() defer rm.mu.RUnlock() rm.sortedRegions.AscendGreaterOrEqual(newBtreeSearchItem(key), func(item btree.Item) bool { @@ -254,9 +254,9 @@ func (rm *MockRegionManager) GetRegionByKey(key []byte) (region *metapb.Region, return false }) if region == nil || !rm.regionContainsKey(region, key) { - return nil, nil + return nil, nil, nil } - return proto.Clone(region).(*metapb.Region), proto.Clone(region.Peers[0]).(*metapb.Peer) + return proto.Clone(region).(*metapb.Region), proto.Clone(region.Peers[0]).(*metapb.Peer), nil } // GetRegionByEndKey gets a region by the end key. @@ -720,13 +720,13 @@ func (pd *MockPD) GetStore(ctx context.Context, storeID uint64) (*metapb.Store, } // GetRegion implements gRPC PDServer. -func (pd *MockPD) GetRegion(ctx context.Context, key []byte) (*pdclient.Region, error) { - r, p := pd.rm.GetRegionByKey(key) - return &pdclient.Region{Meta: r, Leader: p}, nil +func (pd *MockPD) GetRegion(ctx context.Context, key []byte, opts ...pdclient.GetRegionOption) (*pdclient.Region, error) { + r, p, b := pd.rm.GetRegionByKey(key) + return &pdclient.Region{Meta: r, Leader: p, Buckets: b}, nil } // GetRegionByID implements gRPC PDServer. -func (pd *MockPD) GetRegionByID(ctx context.Context, regionID uint64) (*pdclient.Region, error) { +func (pd *MockPD) GetRegionByID(ctx context.Context, regionID uint64, opts ...pdclient.GetRegionOption) (*pdclient.Region, error) { pd.rm.mu.RLock() defer pd.rm.mu.RUnlock() @@ -813,7 +813,7 @@ func GetTS() (int64, int64) { } // GetPrevRegion gets the previous region and its leader Peer of the region where the key is located. -func (pd *MockPD) GetPrevRegion(ctx context.Context, key []byte) (*pdclient.Region, error) { +func (pd *MockPD) GetPrevRegion(ctx context.Context, key []byte, opts ...pdclient.GetRegionOption) (*pdclient.Region, error) { r, p := pd.rm.GetRegionByEndKey(key) return &pdclient.Region{Meta: r, Leader: p}, nil } diff --git a/store/mockstore/unistore/tikv/mvcc.go b/store/mockstore/unistore/tikv/mvcc.go index c7dccec121311..8d8c7ed3363f7 100644 --- a/store/mockstore/unistore/tikv/mvcc.go +++ b/store/mockstore/unistore/tikv/mvcc.go @@ -36,6 +36,7 @@ import ( "github.com/pingcap/tidb/store/mockstore/unistore/lockstore" "github.com/pingcap/tidb/store/mockstore/unistore/pd" "github.com/pingcap/tidb/store/mockstore/unistore/tikv/dbreader" + "github.com/pingcap/tidb/store/mockstore/unistore/tikv/kverrors" "github.com/pingcap/tidb/store/mockstore/unistore/tikv/mvcc" "github.com/pingcap/tidb/store/mockstore/unistore/util/lockwaiter" "github.com/pingcap/tidb/types" @@ -260,7 +261,7 @@ func (store *MVCCStore) PessimisticLock(reqCtx *requestCtx, req *kvrpcpb.Pessimi if bytes.Equal(m.Key, req.PrimaryLock) { txnStatus := store.checkExtraTxnStatus(reqCtx, m.Key, startTS) if txnStatus.isRollback { - return nil, ErrAlreadyRollback + return nil, kverrors.ErrAlreadyRollback } else if txnStatus.isOpLockCommitted() { dup = true break @@ -482,7 +483,7 @@ func (store *MVCCStore) CheckTxnStatus(reqCtx *requestCtx, err = store.dbWriter.Write(batch) return TxnStatus{0, kvrpcpb.Action_LockNotExistRollback, nil}, nil } - return TxnStatus{0, kvrpcpb.Action_NoAction, nil}, &ErrTxnNotFound{ + return TxnStatus{0, kvrpcpb.Action_NoAction, nil}, &kverrors.ErrTxnNotFound{ PrimaryKey: req.PrimaryKey, StartTS: req.LockTs, } @@ -551,7 +552,7 @@ func (store *MVCCStore) normalizeWaitTime(lockWaitTime int64) time.Duration { } func (store *MVCCStore) handleCheckPessimisticErr(startTS uint64, err error, isFirstLock bool, lockWaitTime int64, key []byte, resourceGroupTag []byte) (*lockwaiter.Waiter, error) { - if locked, ok := err.(*ErrLocked); ok { + if locked, ok := err.(*kverrors.ErrLocked); ok { if lockWaitTime != lockwaiter.LockNoWait { keyHash := farm.Fingerprint64(locked.Key) waitTimeDuration := store.normalizeWaitTime(lockWaitTime) @@ -573,7 +574,7 @@ func (store *MVCCStore) buildPessimisticLock(m *kvrpcpb.Mutation, item *badger.I userMeta := mvcc.DBUserMeta(item.UserMeta()) if !req.Force { if userMeta.CommitTS() > req.ForUpdateTs { - return nil, &ErrConflict{ + return nil, &kverrors.ErrConflict{ StartTS: req.StartVersion, ConflictTS: userMeta.StartTS(), ConflictCommitTS: userMeta.CommitTS(), @@ -582,7 +583,7 @@ func (store *MVCCStore) buildPessimisticLock(m *kvrpcpb.Mutation, item *badger.I } } if m.Assertion == kvrpcpb.Assertion_NotExist && !item.IsEmpty() { - return nil, &ErrKeyAlreadyExists{Key: m.Key} + return nil, &kverrors.ErrKeyAlreadyExists{Key: m.Key} } } lock := &mvcc.Lock{ @@ -644,7 +645,7 @@ func (store *MVCCStore) prewriteOptimistic(reqCtx *requestCtx, mutations []*kvrp if bytes.Equal(m.Key, req.PrimaryLock) { status := store.checkExtraTxnStatus(reqCtx, m.Key, req.StartVersion) if status.isRollback { - return ErrAlreadyRollback + return kverrors.ErrAlreadyRollback } if status.isOpLockCommitted() { // duplicated command @@ -661,7 +662,7 @@ func (store *MVCCStore) prewriteOptimistic(reqCtx *requestCtx, mutations []*kvrp if item != nil { userMeta := mvcc.DBUserMeta(item.UserMeta()) if userMeta.CommitTS() > startTS { - return &ErrConflict{ + return &kverrors.ErrConflict{ StartTS: startTS, ConflictTS: userMeta.StartTS(), ConflictCommitTS: userMeta.CommitTS(), @@ -677,7 +678,7 @@ func (store *MVCCStore) prewriteOptimistic(reqCtx *requestCtx, mutations []*kvrp return err } if len(val) > 0 { - return &ErrKeyAlreadyExists{Key: m.Key} + return &kverrors.ErrKeyAlreadyExists{Key: m.Key} } } continue @@ -691,7 +692,7 @@ func (store *MVCCStore) prewritePessimistic(reqCtx *requestCtx, mutations []*kvr startTS := req.StartVersion for i, m := range mutations { if m.Op == kvrpcpb.Op_CheckNotExists { - return ErrInvalidOp{op: m.Op} + return kverrors.ErrInvalidOp{Op: m.Op} } lock := store.getLock(reqCtx, m.Key) isPessimisticLock := len(req.IsPessimisticLock) > 0 && req.IsPessimisticLock[i] @@ -717,7 +718,7 @@ func (store *MVCCStore) prewritePessimistic(reqCtx *requestCtx, mutations []*kvr // Safe to set TTL to zero because the transaction of the lock is committed // or rollbacked or must be rollbacked. lock.TTL = 0 - return BuildLockErr(m.Key, lock) + return kverrors.BuildLockErr(m.Key, lock) } if lockMatch { // Duplicate command. @@ -867,7 +868,7 @@ func (store *MVCCStore) buildPrewriteLock(reqCtx *requestCtx, m *kvrpcpb.Mutatio if item == nil || item.IsEmpty() { if m.Assertion == kvrpcpb.Assertion_Exist { log.Error("ASSERTION FAIL!!! non-exist for must exist key", zap.Stringer("mutation", m)) - return nil, &ErrAssertionFailed{ + return nil, &kverrors.ErrAssertionFailed{ StartTS: req.StartVersion, Key: m.Key, Assertion: m.Assertion, @@ -879,7 +880,7 @@ func (store *MVCCStore) buildPrewriteLock(reqCtx *requestCtx, m *kvrpcpb.Mutatio if m.Assertion == kvrpcpb.Assertion_NotExist { log.Error("ASSERTION FAIL!!! exist for must non-exist key", zap.Stringer("mutation", m)) userMeta := mvcc.DBUserMeta(item.UserMeta()) - return nil, &ErrAssertionFailed{ + return nil, &kverrors.ErrAssertionFailed{ StartTS: req.StartVersion, Key: m.Key, Assertion: m.Assertion, @@ -893,7 +894,7 @@ func (store *MVCCStore) buildPrewriteLock(reqCtx *requestCtx, m *kvrpcpb.Mutatio lock.Op = uint8(m.Op) if lock.Op == uint8(kvrpcpb.Op_Insert) { if item != nil && item.ValueSize() > 0 { - return nil, &ErrKeyAlreadyExists{Key: m.Key} + return nil, &kverrors.ErrKeyAlreadyExists{Key: m.Key} } lock.Op = uint8(kvrpcpb.Op_Put) } @@ -934,7 +935,7 @@ func (store *MVCCStore) checkConflictInLockStore( // Same ts, no need to overwrite. return &lock, nil } - return nil, BuildLockErr(mutation.Key, &lock) + return nil, kverrors.BuildLockErr(mutation.Key, &lock) } const maxSystemTS uint64 = math.MaxUint64 @@ -960,11 +961,11 @@ func (store *MVCCStore) Commit(req *requestCtx, keys [][]byte, startTS, commitTS if len(buf) == 0 { // We never commit partial keys in Commit request, so if one lock is not found, // the others keys must not be found too. - lockErr = ErrLockNotFound + lockErr = kverrors.ErrLockNotFound } else { lock = mvcc.DecodeLock(buf) if lock.StartTS != startTS { - lockErr = ErrReplaced + lockErr = kverrors.ErrReplaced } } if lockErr != nil { @@ -981,7 +982,7 @@ func (store *MVCCStore) Commit(req *requestCtx, keys [][]byte, startTS, commitTS if commitTS < lock.MinCommitTS { log.Info("trying to commit with smaller commitTs than minCommitTs", zap.Uint64("commit ts", commitTS), zap.Uint64("min commit ts", lock.MinCommitTS), zap.Binary("key", key)) - return &ErrCommitExpire{ + return &kverrors.ErrCommitExpire{ StartTs: startTS, CommitTs: commitTS, MinCommitTs: lock.MinCommitTS, @@ -1013,14 +1014,14 @@ func (store *MVCCStore) handleLockNotFound(reqCtx *requestCtx, key []byte, start return errors.Trace(err) } if item == nil { - return ErrLockNotFound + return kverrors.ErrLockNotFound } userMeta := mvcc.DBUserMeta(item.UserMeta()) if userMeta.StartTS() == startTS { // Already committed. return nil } - return ErrLockNotFound + return kverrors.ErrLockNotFound } const ( @@ -1080,7 +1081,7 @@ func (store *MVCCStore) rollbackKeyReadLock(reqCtx *requestCtx, batch mvcc.Write } if lock.StartTS == startTS { if currentTs > 0 && uint64(oracle.ExtractPhysical(lock.StartTS))+uint64(lock.TTL) >= uint64(oracle.ExtractPhysical(currentTs)) { - return rollbackStatusLocked, BuildLockErr(key, &lock) + return rollbackStatusLocked, kverrors.BuildLockErr(key, &lock) } // We can not simply delete the lock because the prewrite may be sent multiple times. // To prevent that we update it a rollback lock. @@ -1099,7 +1100,7 @@ func (store *MVCCStore) rollbackKeyReadDB(req *requestCtx, batch mvcc.WriteBatch return err } if commitTS != 0 { - return ErrAlreadyCommitted(commitTS) + return kverrors.ErrAlreadyCommitted(commitTS) } // commit not found, rollback this key batch.Rollback(key, false) @@ -1160,11 +1161,44 @@ func checkLock(lock mvcc.Lock, key []byte, startTS uint64, resolved []uint64, co if inTSSet(lock.StartTS, committed) { return &LockPair{safeCopy(key), &lock}, nil } - return nil, BuildLockErr(safeCopy(key), &lock) + return nil, kverrors.BuildLockErr(safeCopy(key), &lock) } return nil, nil } +// checkLockForRcCheckTS checks the lock for `RcCheckTS` isolation level in transaction read. +func checkLockForRcCheckTS(lock mvcc.Lock, key []byte, startTS uint64, resolved []uint64) error { + if inTSSet(lock.StartTS, resolved) { + return nil + } + isWriteLock := lock.Op == uint8(kvrpcpb.Op_Put) || lock.Op == uint8(kvrpcpb.Op_Del) + if !isWriteLock { + return nil + } + return &kverrors.ErrConflict{ + StartTS: startTS, + ConflictTS: lock.StartTS, + Key: safeCopy(key), + } +} + +// CheckKeysLockForRcCheckTS is used to check version timestamp if `RcCheckTS` isolation level is used. +func (store *MVCCStore) CheckKeysLockForRcCheckTS(startTS uint64, resolved []uint64, keys ...[]byte) error { + var buf []byte + for _, key := range keys { + buf = store.lockStore.Get(key, buf) + if len(buf) == 0 { + continue + } + lock := mvcc.DecodeLock(buf) + err := checkLockForRcCheckTS(lock, key, startTS, resolved) + if err != nil { + return err + } + } + return nil +} + // CheckKeysLock implements the MVCCStore interface. func (store *MVCCStore) CheckKeysLock(startTS uint64, resolved, committed []uint64, keys ...[]byte) ([]*LockPair, error) { var buf []byte @@ -1222,7 +1256,7 @@ func (store *MVCCStore) Cleanup(reqCtx *requestCtx, key []byte, startTS, current } rbStatus := store.checkExtraTxnStatus(reqCtx, key, startTS) if rbStatus.isOpLockCommitted() { - return ErrAlreadyCommitted(rbStatus.commitTS) + return kverrors.ErrAlreadyCommitted(rbStatus.commitTS) } } err = store.dbWriter.Write(batch) @@ -1454,6 +1488,11 @@ func (store *MVCCStore) Get(reqCtx *requestCtx, key []byte, version uint64) ([]b if len(lockPairs) != 0 { return getValueFromLock(lockPairs[0].lock), nil } + } else if reqCtx.isRcCheckTSIsolationLevel() { + err := store.CheckKeysLockForRcCheckTS(version, reqCtx.rpcCtx.ResolvedLocks, key) + if err != nil { + return nil, err + } } val, err := reqCtx.getDBReader().Get(key, version) if val == nil { @@ -1481,6 +1520,16 @@ func (store *MVCCStore) BatchGet(reqCtx *requestCtx, keys [][]byte, version uint remain = append(remain, key) } } + } else if reqCtx.isRcCheckTSIsolationLevel() { + remain = make([][]byte, 0, len(keys)) + for _, key := range keys { + err := store.CheckKeysLockForRcCheckTS(version, reqCtx.rpcCtx.ResolvedLocks, key) + if err != nil { + pairs = append(pairs, &kvrpcpb.KvPair{Key: key, Error: convertToKeyError(err)}) + } else { + remain = append(remain, key) + } + } } else { remain = keys } @@ -1497,7 +1546,8 @@ func (store *MVCCStore) BatchGet(reqCtx *requestCtx, keys [][]byte, version uint return pairs } -func (store *MVCCStore) collectRangeLock(startTS uint64, startKey, endKey []byte, resolved, committed []uint64) []*kvrpcpb.KvPair { +func (store *MVCCStore) collectRangeLock(startTS uint64, startKey, endKey []byte, resolved, committed []uint64, + isolationLEvel kvrpcpb.IsolationLevel) []*kvrpcpb.KvPair { var pairs []*kvrpcpb.KvPair it := store.lockStore.NewIterator() for it.Seek(startKey); it.Valid(); it.Next() { @@ -1505,18 +1555,28 @@ func (store *MVCCStore) collectRangeLock(startTS uint64, startKey, endKey []byte break } lock := mvcc.DecodeLock(it.Value()) - lockPair, err := checkLock(lock, it.Key(), startTS, resolved, committed) - if lockPair != nil { - pairs = append(pairs, &kvrpcpb.KvPair{ - Key: lockPair.key, - // deleted key's value is nil - Value: getValueFromLock(lockPair.lock), - }) - } else if err != nil { - pairs = append(pairs, &kvrpcpb.KvPair{ - Error: convertToKeyError(err), - Key: safeCopy(it.Key()), - }) + if isolationLEvel == kvrpcpb.IsolationLevel_SI { + lockPair, err := checkLock(lock, it.Key(), startTS, resolved, committed) + if lockPair != nil { + pairs = append(pairs, &kvrpcpb.KvPair{ + Key: lockPair.key, + // deleted key's value is nil + Value: getValueFromLock(lockPair.lock), + }) + } else if err != nil { + pairs = append(pairs, &kvrpcpb.KvPair{ + Error: convertToKeyError(err), + Key: safeCopy(it.Key()), + }) + } + } else if isolationLEvel == kvrpcpb.IsolationLevel_RCCheckTS { + err := checkLockForRcCheckTS(lock, it.Key(), startTS, resolved) + if err != nil { + pairs = append(pairs, &kvrpcpb.KvPair{ + Error: convertToKeyError(err), + Key: safeCopy(it.Key()), + }) + } } } return pairs @@ -1578,8 +1638,14 @@ func (store *MVCCStore) Scan(reqCtx *requestCtx, req *kvrpcpb.ScanRequest) []*kv var lockPairs []*kvrpcpb.KvPair limit := req.GetLimit() if req.SampleStep == 0 { - if reqCtx.isSnapshotIsolation() { - lockPairs = store.collectRangeLock(req.GetVersion(), startKey, endKey, reqCtx.rpcCtx.ResolvedLocks, reqCtx.rpcCtx.CommittedLocks) + if reqCtx.isSnapshotIsolation() || reqCtx.isRcCheckTSIsolationLevel() { + if bytes.Compare(startKey, endKey) <= 0 { + lockPairs = store.collectRangeLock(req.GetVersion(), startKey, endKey, reqCtx.rpcCtx.ResolvedLocks, + reqCtx.rpcCtx.CommittedLocks, reqCtx.rpcCtx.IsolationLevel) + } else { + lockPairs = store.collectRangeLock(req.GetVersion(), endKey, startKey, reqCtx.rpcCtx.ResolvedLocks, + reqCtx.rpcCtx.CommittedLocks, reqCtx.rpcCtx.IsolationLevel) + } } } else { limit = req.SampleStep * limit diff --git a/store/mockstore/unistore/tikv/mvcc_test.go b/store/mockstore/unistore/tikv/mvcc_test.go index f38772165fd39..3b11e5fd4d713 100644 --- a/store/mockstore/unistore/tikv/mvcc_test.go +++ b/store/mockstore/unistore/tikv/mvcc_test.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/tidb/store/mockstore/unistore/config" "github.com/pingcap/tidb/store/mockstore/unistore/lockstore" + "github.com/pingcap/tidb/store/mockstore/unistore/tikv/kverrors" "github.com/pingcap/tidb/store/mockstore/unistore/tikv/mvcc" "github.com/pingcap/tidb/store/mockstore/unistore/util/lockwaiter" "github.com/stretchr/testify/require" @@ -267,7 +268,7 @@ func MustPrewritePut(pk, key []byte, val []byte, startTs uint64, store *TestStor func MustPrewritePutLockErr(pk, key []byte, val []byte, startTs uint64, store *TestStore) { err := PrewriteOptimistic(pk, key, val, startTs, lockTTL, startTs, false, [][]byte{}, store) require.Error(store.t, err) - lockedErr := err.(*ErrLocked) + lockedErr := err.(*kverrors.ErrLocked) require.NotNil(store.t, lockedErr) } @@ -298,7 +299,7 @@ func MustPrewriteInsertAlreadyExists(pk, key []byte, val []byte, startTs uint64, } err := store.MvccStore.prewriteOptimistic(store.newReqCtx(), prewriteReq.Mutations, prewriteReq) require.Error(store.t, err) - existErr := err.(*ErrKeyAlreadyExists) + existErr := err.(*kverrors.ErrKeyAlreadyExists) require.NotNil(store.t, existErr) } @@ -312,7 +313,7 @@ func MustPrewriteOpCheckExistAlreadyExist(pk, key []byte, startTs uint64, store } err := store.MvccStore.prewriteOptimistic(store.newReqCtx(), prewriteReq.Mutations, prewriteReq) require.Error(store.t, err) - existErr := err.(*ErrKeyAlreadyExists) + existErr := err.(*kverrors.ErrKeyAlreadyExists) require.NotNil(store.t, existErr) } @@ -635,7 +636,7 @@ func TestCheckTxnStatus(t *testing.T) { lockTTL := uint64(100) minCommitTs := uint64(20) err = PrewriteOptimistic(pk, pk, val, startTs, lockTTL, minCommitTs, false, [][]byte{}, store) - require.ErrorIs(t, err, ErrAlreadyRollback) + require.ErrorIs(t, err, kverrors.ErrAlreadyRollback) // Prewrite a large txn startTs = 2 @@ -1721,7 +1722,7 @@ func TestAssertion(t *testing.T) { return } require.NotNil(t, err) - e, ok := errors.Cause(err).(*ErrAssertionFailed) + e, ok := errors.Cause(err).(*kverrors.ErrAssertionFailed) require.True(t, ok) require.Equal(t, startTs, e.StartTS) require.Equal(t, key, e.Key) @@ -1800,3 +1801,93 @@ func TestAssertion(t *testing.T) { kvrpcpb.Assertion_NotExist, kvrpcpb.AssertionLevel_Strict, store) require.Nil(t, err) } + +func getConflictErr(res []*kvrpcpb.KvPair) *kvrpcpb.WriteConflict { + for _, pair := range res { + if pair.Error != nil && pair.Error.Conflict != nil { + return pair.Error.Conflict + } + } + return nil +} + +func TestRcReadCheckTS(t *testing.T) { + store, clean := NewTestStore("TestRcReadCheckTS", "TestRcReadCheckTS", t) + defer clean() + + // Prepare. + k1 := []byte("tk1") + v1 := []byte("v1") + MustPrewriteOptimistic(k1, k1, v1, 1, 100, 0, store) + MustCommit(k1, 1, 2, store) + + k2 := []byte("tk2") + v2 := []byte("v2") + MustPrewriteOptimistic(k2, k2, v2, 5, 100, 0, store) + MustCommit(k2, 5, 6, store) + + k3 := []byte("tk3") + v3 := []byte("v3") + MustPrewriteOptimistic(k3, k3, v3, 10, 100, 0, store) + + // Test point get with RcReadCheckTS. + reqCtx := store.newReqCtx() + reqCtx.rpcCtx.ResolvedLocks = nil + reqCtx.rpcCtx.CommittedLocks = nil + reqCtx.rpcCtx.IsolationLevel = kvrpcpb.IsolationLevel_RCCheckTS + val, err := store.MvccStore.Get(reqCtx, k1, 3) + require.Nil(t, err) + require.Equal(t, v1, val) + + _, err = store.MvccStore.Get(reqCtx, k2, 3) + require.NotNil(t, err) + e, ok := errors.Cause(err).(*kverrors.ErrConflict) + require.True(t, ok) + require.Equal(t, uint64(3), e.StartTS) + require.Equal(t, uint64(5), e.ConflictTS) + require.Equal(t, uint64(6), e.ConflictCommitTS) + + _, err = store.MvccStore.Get(reqCtx, k3, 3) + require.NotNil(t, err) + e, ok = errors.Cause(err).(*kverrors.ErrConflict) + require.True(t, ok) + require.Equal(t, uint64(3), e.StartTS) + require.Equal(t, uint64(10), e.ConflictTS) + + // Test scan and reverse scan. + scanReq := &kvrpcpb.ScanRequest{ + Context: reqCtx.rpcCtx, + StartKey: []byte("a"), + Limit: 100, + Version: 3, + EndKey: []byte("z"), + } + + // The error is reported from more recent version. + scanRes := store.MvccStore.Scan(reqCtx, scanReq) + conflictErr := getConflictErr(scanRes) + require.NotNil(t, conflictErr) + require.Equal(t, uint64(3), conflictErr.StartTs) + require.Equal(t, uint64(5), conflictErr.ConflictTs) + require.Equal(t, uint64(6), conflictErr.ConflictCommitTs) + + // The error is reported from lock. + scanReq.Version = 15 + scanRes = store.MvccStore.Scan(reqCtx, scanReq) + conflictErr = getConflictErr(scanRes) + require.NotNil(t, conflictErr) + require.Equal(t, uint64(15), conflictErr.StartTs) + require.Equal(t, uint64(10), conflictErr.ConflictTs) + + // Test reverse scan. + scanReq.Version = 3 + scanReq.Reverse = true + scanRes = store.MvccStore.Scan(reqCtx, scanReq) + conflictErr = getConflictErr(scanRes) + require.NotNil(t, conflictErr) + + scanReq.Version = 15 + scanRes = store.MvccStore.Scan(reqCtx, scanReq) + conflictErr = getConflictErr(scanRes) + require.NotNil(t, conflictErr) +} diff --git a/store/mockstore/unistore/tikv/server.go b/store/mockstore/unistore/tikv/server.go index 44610ba963c86..a7569027df936 100644 --- a/store/mockstore/unistore/tikv/server.go +++ b/store/mockstore/unistore/tikv/server.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/tidb/store/mockstore/unistore/client" "github.com/pingcap/tidb/store/mockstore/unistore/cophandler" "github.com/pingcap/tidb/store/mockstore/unistore/tikv/dbreader" + "github.com/pingcap/tidb/store/mockstore/unistore/tikv/kverrors" "github.com/pingcap/tidb/store/mockstore/unistore/tikv/pberror" "github.com/pingcap/tidb/store/mockstore/unistore/util/lockwaiter" "github.com/pingcap/tipb/go-tipb" @@ -110,7 +111,7 @@ func newRequestCtx(svr *Server, ctx *kvrpcpb.Context, method string) (*requestCt atomic.AddInt32(&svr.refCount, 1) if atomic.LoadInt32(&svr.stopped) > 0 { atomic.AddInt32(&svr.refCount, -1) - return nil, ErrRetryable("server is closed") + return nil, kverrors.ErrRetryable("server is closed") } req := &requestCtx{ svr: svr, @@ -134,6 +135,7 @@ func (req *requestCtx) getDBReader() *dbreader.DBReader { mvccStore := req.svr.mvccStore txn := mvccStore.db.NewTransaction(false) req.reader = dbreader.NewDBReader(req.regCtx.RawStart(), req.regCtx.RawEnd(), txn) + req.reader.RcCheckTS = req.isRcCheckTSIsolationLevel() } return req.reader } @@ -142,6 +144,10 @@ func (req *requestCtx) isSnapshotIsolation() bool { return req.rpcCtx.IsolationLevel == kvrpcpb.IsolationLevel_SI } +func (req *requestCtx) isRcCheckTSIsolationLevel() bool { + return req.rpcCtx.IsolationLevel == kvrpcpb.IsolationLevel_RCCheckTS +} + func (req *requestCtx) finish() { atomic.AddInt32(&req.svr.refCount, -1) if req.reader != nil { @@ -206,8 +212,8 @@ func (svr *Server) KvPessimisticLock(ctx context.Context, req *kvrpcpb.Pessimist } if result.DeadlockResp != nil { log.Error("deadlock found", zap.Stringer("entry", &result.DeadlockResp.Entry)) - errLocked := err.(*ErrLocked) - deadlockErr := &ErrDeadlock{ + errLocked := err.(*kverrors.ErrLocked) + deadlockErr := &kverrors.ErrDeadlock{ LockKey: errLocked.Key, LockTS: errLocked.Lock.StartTS, DeadlockKeyHash: result.DeadlockResp.DeadlockKeyHash, @@ -224,7 +230,7 @@ func (svr *Server) KvPessimisticLock(ctx context.Context, req *kvrpcpb.Pessimist if err == nil { return resp, nil } - if _, ok := err.(*ErrLocked); !ok { + if _, ok := err.(*kverrors.ErrLocked); !ok { resp.Errors, resp.RegionError = convertToPBErrors(err) return resp, nil } @@ -234,7 +240,7 @@ func (svr *Server) KvPessimisticLock(ctx context.Context, req *kvrpcpb.Pessimist // The key is rollbacked, we don't have the exact commitTS, but we can use the server's latest. // Always use the store latest ts since the waiter result commitTs may not be the real conflict ts conflictCommitTS := svr.mvccStore.getLatestTS() - err = &ErrConflict{ + err = &kverrors.ErrConflict{ StartTS: req.GetForUpdateTs(), ConflictTS: waiter.LockTS, ConflictCommitTS: conflictCommitTS, @@ -385,7 +391,7 @@ func (svr *Server) KvCleanup(ctx context.Context, req *kvrpcpb.CleanupRequest) ( } err = svr.mvccStore.Cleanup(reqCtx, req.Key, req.StartVersion, req.CurrentTs) resp := new(kvrpcpb.CleanupResponse) - if committed, ok := err.(ErrAlreadyCommitted); ok { + if committed, ok := err.(kverrors.ErrAlreadyCommitted); ok { resp.CommitVersion = uint64(committed) } else if err != nil { log.Error("cleanup failed", zap.Error(err)) @@ -583,6 +589,13 @@ func (svr *Server) BatchCoprocessor(req *coprocessor.BatchRequest, batchCopServe ctx.finish() } }() + if req.TableRegions != nil { + // Support PartitionTableScan for BatchCop + req.Regions = req.Regions[:] + for _, tr := range req.TableRegions { + req.Regions = append(req.Regions, tr.Regions...) + } + } for _, ri := range req.Regions { cop := coprocessor.Request{ Tp: kv.ReqTypeDAG, @@ -643,6 +656,13 @@ func (svr *Server) DispatchMPPTask(_ context.Context, _ *mpp.DispatchTaskRequest func (svr *Server) executeMPPDispatch(ctx context.Context, req *mpp.DispatchTaskRequest, storeAddr string, storeID uint64, handler *cophandler.MPPTaskHandler) error { var reqCtx *requestCtx + if len(req.TableRegions) > 0 { + // Simple unistore logic for PartitionTableScan. + for _, tr := range req.TableRegions { + req.Regions = append(req.Regions, tr.Regions...) + } + } + if len(req.Regions) > 0 { kvContext := &kvrpcpb.Context{ RegionId: req.Regions[0].RegionId, @@ -987,21 +1007,21 @@ func convertToKeyError(err error) *kvrpcpb.KeyError { } causeErr := errors.Cause(err) switch x := causeErr.(type) { - case *ErrLocked: + case *kverrors.ErrLocked: return &kvrpcpb.KeyError{ Locked: x.Lock.ToLockInfo(x.Key), } - case ErrRetryable: + case kverrors.ErrRetryable: return &kvrpcpb.KeyError{ Retryable: x.Error(), } - case *ErrKeyAlreadyExists: + case *kverrors.ErrKeyAlreadyExists: return &kvrpcpb.KeyError{ AlreadyExist: &kvrpcpb.AlreadyExist{ Key: x.Key, }, } - case *ErrConflict: + case *kverrors.ErrConflict: return &kvrpcpb.KeyError{ Conflict: &kvrpcpb.WriteConflict{ StartTs: x.StartTS, @@ -1010,7 +1030,7 @@ func convertToKeyError(err error) *kvrpcpb.KeyError { Key: x.Key, }, } - case *ErrDeadlock: + case *kverrors.ErrDeadlock: return &kvrpcpb.KeyError{ Deadlock: &kvrpcpb.Deadlock{ LockKey: x.LockKey, @@ -1019,7 +1039,7 @@ func convertToKeyError(err error) *kvrpcpb.KeyError { WaitChain: x.WaitChain, }, } - case *ErrCommitExpire: + case *kverrors.ErrCommitExpire: return &kvrpcpb.KeyError{ CommitTsExpired: &kvrpcpb.CommitTsExpired{ StartTs: x.StartTs, @@ -1028,14 +1048,14 @@ func convertToKeyError(err error) *kvrpcpb.KeyError { MinCommitTs: x.MinCommitTs, }, } - case *ErrTxnNotFound: + case *kverrors.ErrTxnNotFound: return &kvrpcpb.KeyError{ TxnNotFound: &kvrpcpb.TxnNotFound{ StartTs: x.StartTS, PrimaryKey: x.PrimaryKey, }, } - case *ErrAssertionFailed: + case *kverrors.ErrAssertionFailed: return &kvrpcpb.KeyError{ AssertionFailed: &kvrpcpb.AssertionFailed{ StartTs: x.StartTS, diff --git a/store/mockstore/unistore/util/lockwaiter/main_test.go b/store/mockstore/unistore/util/lockwaiter/main_test.go index 4a0cf2fdd53de..19d1b574a56b3 100644 --- a/store/mockstore/unistore/util/lockwaiter/main_test.go +++ b/store/mockstore/unistore/util/lockwaiter/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/structure/main_test.go b/structure/main_test.go index 4f72134659832..d4617b9cbfccb 100644 --- a/structure/main_test.go +++ b/structure/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/table/column.go b/table/column.go index 67c257a8476c4..a7ba45a4de018 100644 --- a/table/column.go +++ b/table/column.go @@ -318,7 +318,7 @@ func CastValue(ctx sessionctx.Context, val types.Datum, col *model.ColumnInfo, r } } else if err != nil && charset.ErrInvalidCharacterString.Equal(err) { err = convertToIncorrectStringErr(err, col.Name.O) - logutil.BgLogger().Error("incorrect string value", + logutil.BgLogger().Debug("incorrect string value", zap.Uint64("conn", ctx.GetSessionVars().ConnectionID), zap.Error(err)) } diff --git a/table/main_test.go b/table/main_test.go index 8ff3f37c63060..d12ef390d9741 100644 --- a/table/main_test.go +++ b/table/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/table/tables/cache.go b/table/tables/cache.go index e5ab8d4bc52c8..4de65204cb944 100644 --- a/table/tables/cache.go +++ b/table/tables/cache.go @@ -20,6 +20,7 @@ import ( "time" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/log" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx" @@ -32,16 +33,6 @@ import ( "go.uber.org/zap" ) -// RenewLeaseType define the type for renew lease. -type RenewLeaseType int - -const ( - // RenewReadLease means renew read lease. - RenewReadLease RenewLeaseType = iota + 1 - // RenewWriteLease means renew write lease. - RenewWriteLease -) - var ( _ table.CachedTable = &cachedTable{} ) @@ -52,7 +43,6 @@ type cachedTable struct { handle StateRemote totalSize int64 - lockingForRead tokenLimit renewReadLease tokenLimit } @@ -91,7 +81,13 @@ func (c *cachedTable) TryReadFromCache(ts uint64, leaseDuration time.Duration) k leaseTime := oracle.GetTimeFromTS(data.Lease) nowTime := oracle.GetTimeFromTS(ts) distance := leaseTime.Sub(nowTime) - if distance >= 0 && distance <= leaseDuration/2 { + + var triggerFailpoint bool + failpoint.Inject("mockRenewLeaseABA1", func(_ failpoint.Value) { + triggerFailpoint = true + }) + + if distance >= 0 && distance <= leaseDuration/2 || triggerFailpoint { select { case c.renewReadLease <- struct{}{}: go c.renewLease(ts, data, leaseDuration) @@ -107,7 +103,6 @@ func (c *cachedTable) TryReadFromCache(ts uint64, leaseDuration time.Duration) k func newCachedTable(tbl *TableCommon) (table.Table, error) { ret := &cachedTable{ TableCommon: *tbl, - lockingForRead: make(chan struct{}, 1), renewReadLease: make(chan struct{}, 1), } return ret, nil @@ -171,7 +166,7 @@ func (c *cachedTable) loadDataFromOriginalTable(store kv.Storage, lease uint64) func (c *cachedTable) UpdateLockForRead(ctx context.Context, store kv.Storage, ts uint64, leaseDuration time.Duration) { select { - case c.lockingForRead <- struct{}{}: + case c.renewReadLease <- struct{}{}: go c.updateLockForRead(ctx, store, ts, leaseDuration) default: // There is a inflight calling already. @@ -185,7 +180,7 @@ func (c *cachedTable) updateLockForRead(ctx context.Context, store kv.Storage, t zap.Reflect("r", r), zap.Stack("stack trace")) } - <-c.lockingForRead + <-c.renewReadLease }() // Load data from original table and the update lock information. @@ -199,6 +194,7 @@ func (c *cachedTable) updateLockForRead(ctx context.Context, store kv.Storage, t if succ { mb, startTS, totalSize, err := c.loadDataFromOriginalTable(store, lease) if err != nil { + log.Info("load data from table", zap.Error(err)) return } @@ -249,20 +245,31 @@ func (c *cachedTable) RemoveRecord(sctx sessionctx.Context, h kv.Handle, r []typ return c.TableCommon.RemoveRecord(sctx, h, r) } +// TestMockRenewLeaseABA2 is used by test function TestRenewLeaseABAFailPoint. +var TestMockRenewLeaseABA2 chan struct{} + func (c *cachedTable) renewLease(ts uint64, data *cacheData, leaseDuration time.Duration) { defer func() { <-c.renewReadLease }() + failpoint.Inject("mockRenewLeaseABA2", func(_ failpoint.Value) { + <-TestMockRenewLeaseABA2 + }) + tid := c.Meta().ID lease := leaseFromTS(ts, leaseDuration) - succ, err := c.handle.RenewLease(context.Background(), tid, lease, RenewReadLease) + newLease, err := c.handle.RenewReadLease(context.Background(), tid, data.Lease, lease) if err != nil && !kv.IsTxnRetryableError(err) { log.Warn("Renew read lease error", zap.Error(err)) } - if succ { + if newLease > 0 { c.cacheData.Store(&cacheData{ Start: data.Start, - Lease: lease, + Lease: newLease, MemBuffer: data.MemBuffer, }) } + + failpoint.Inject("mockRenewLeaseABA2", func(_ failpoint.Value) { + TestMockRenewLeaseABA2 <- struct{}{} + }) } diff --git a/table/tables/cache_test.go b/table/tables/cache_test.go index 27ede985a76e7..9c026040d255e 100644 --- a/table/tables/cache_test.go +++ b/table/tables/cache_test.go @@ -19,6 +19,7 @@ import ( "testing" "time" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/parser/auth" @@ -28,6 +29,7 @@ import ( "github.com/pingcap/tidb/util/stmtsummary" dto "github.com/prometheus/client_model/go" "github.com/stretchr/testify/require" + "github.com/tikv/client-go/v2/oracle" ) func lastReadFromCache(tk *testkit.TestKit) bool { @@ -588,3 +590,61 @@ func TestMetrics(t *testing.T) { hit := pb.GetCounter().GetValue() require.Equal(t, i, hit) } + +func TestRenewLeaseABAFailPoint(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tables.TestMockRenewLeaseABA2 = make(chan struct{}) + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t_lease;") + tk.MustExec(`create table t_lease(a int, b int);`) + tk.MustExec(`insert into t_lease values (1, 1)`) + tk.MustExec(`alter table t_lease cache`) + + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk2.MustExec("use test") + + // Load the cache data by this query. + var cacheUsed bool + for i := 0; i < 10; i++ { + tk.MustQuery("select * from t_lease").Check(testkit.Rows("1 1")) + if lastReadFromCache(tk) { + cacheUsed = true + break + } + time.Sleep(50 * time.Millisecond) + } + require.True(t, cacheUsed) + + // Renew lease by this query, mock the operation is delayed. + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/table/tables/mockRenewLeaseABA1", `return`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/table/tables/mockRenewLeaseABA2", `return`)) + tk.MustQuery("select * from t_lease").Check(testkit.Rows("1 1")) + + // Make the cache data stale after writing: read lock-> write lock + tk1.MustExec("update t_lease set b = 2 where a = 1") + + // Mock reading from another TiDB instance: write lock -> read lock + is := tk2.Session().GetInfoSchema().(infoschema.InfoSchema) + tbl, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("t_lease")) + require.NoError(t, err) + lease := oracle.GoTimeToTS(time.Now().Add(20 * time.Second)) // A big enough future time + tk2.MustExec("update mysql.table_cache_meta set lock_type = 'READ', lease = ? where tid = ?", lease, tbl.Meta().ID) + + // Then the stagnant renew lease operation finally arrive. + tables.TestMockRenewLeaseABA2 <- struct{}{} + + <-tables.TestMockRenewLeaseABA2 + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/table/tables/mockRenewLeaseABA1")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/table/tables/mockRenewLeaseABA2")) + + // The renew lease operation should not success, + // And the session should not read from a staled cache data. + tk.MustQuery("select * from t_lease").Check(testkit.Rows("1 2")) + require.False(t, lastReadFromCache(tk)) +} diff --git a/table/tables/main_test.go b/table/tables/main_test.go index 8ae700fde5223..eb29416fb0b00 100644 --- a/table/tables/main_test.go +++ b/table/tables/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), } diff --git a/table/tables/partition.go b/table/tables/partition.go index bcbe0aad9cec5..53a1aa02645e9 100644 --- a/table/tables/partition.go +++ b/table/tables/partition.go @@ -252,6 +252,7 @@ type ForListColumnPruning struct { ExprCol *expression.Column valueTp *types.FieldType valueMap map[string]ListPartitionLocation + mu sync.RWMutex sorted *btree.BTree // To deal with the location partition failure caused by inconsistent NewCollationEnabled values(see issue #32416). @@ -763,9 +764,18 @@ func (lp *ForListPruning) locateListColumnsPartitionByRow(ctx sessionctx.Context // it also builds list columns partition value btree for the specified column. // colIdx is the specified column index in the list columns. func (lp *ForListColumnPruning) buildPartitionValueMapAndSorted() error { + lp.mu.RLock() + l := len(lp.valueMap) + lp.mu.RUnlock() + if l != 0 { + return nil + } + p := parser.New() pi := lp.tblInfo.GetPartitionInfo() sc := lp.ctx.GetSessionVars().StmtCtx + lp.mu.Lock() + defer lp.mu.Unlock() for partitionIdx, def := range pi.Definitions { for groupIdx, vs := range def.InValues { keyBytes, err := lp.genConstExprKey(lp.ctx, sc, vs[lp.colIdx], lp.schema, lp.names, p) @@ -821,18 +831,18 @@ func (lp *ForListColumnPruning) genKey(sc *stmtctx.StatementContext, v types.Dat // LocatePartition locates partition by the column value func (lp *ForListColumnPruning) LocatePartition(sc *stmtctx.StatementContext, v types.Datum) (ListPartitionLocation, error) { // To deal with the location partition failure caused by inconsistent NewCollationEnabled values(see issue #32416). - if len(lp.valueMap) == 0 { - err := lp.buildPartitionValueMapAndSorted() - if err != nil { - return nil, err - } + err := lp.buildPartitionValueMapAndSorted() + if err != nil { + return nil, err } key, err := lp.genKey(sc, v) if err != nil { return nil, errors.Trace(err) } + lp.mu.RLock() location, ok := lp.valueMap[string(key)] + lp.mu.RUnlock() if !ok { return nil, nil } @@ -842,14 +852,11 @@ func (lp *ForListColumnPruning) LocatePartition(sc *stmtctx.StatementContext, v // LocateRanges locates partition ranges by the column range func (lp *ForListColumnPruning) LocateRanges(sc *stmtctx.StatementContext, r *ranger.Range) ([]ListPartitionLocation, error) { // To deal with the location partition failure caused by inconsistent NewCollationEnabled values(see issue #32416). - if len(lp.valueMap) == 0 { - err := lp.buildPartitionValueMapAndSorted() - if err != nil { - return nil, err - } + err := lp.buildPartitionValueMapAndSorted() + if err != nil { + return nil, err } - var err error var lowKey, highKey []byte lowVal := r.LowVal[0] if r.LowVal[0].Kind() == types.KindMinNotNull { diff --git a/table/tables/partition_test.go b/table/tables/partition_test.go index 38cffa4debed1..c5c781dd6b6fa 100644 --- a/table/tables/partition_test.go +++ b/table/tables/partition_test.go @@ -18,7 +18,6 @@ import ( "context" "testing" - "github.com/pingcap/tidb/ddl" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/model" @@ -27,6 +26,8 @@ import ( "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" + "github.com/pingcap/tidb/util" + "github.com/pingcap/tidb/util/dbterror" "github.com/stretchr/testify/require" ) @@ -400,6 +401,47 @@ func TestLocatePartitionSingleColumn(t *testing.T) { require.True(t, table.ErrNoPartitionForGivenValue.Equal(err)) } +func TestLocatePartition(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@session.tidb_enable_list_partition = ON;") + tk.MustExec("set @@tidb_partition_prune_mode = 'dynamic';") + tk.MustExec("drop table if exists t;") + + tk.MustExec(`CREATE TABLE t ( + id bigint(20) DEFAULT NULL, + type varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + PARTITION BY LIST COLUMNS(type) + (PARTITION push_event VALUES IN ("PushEvent"), + PARTITION watch_event VALUES IN ("WatchEvent") + );`) + + tk1 := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk3 := testkit.NewTestKit(t, store) + tks := []*testkit.TestKit{tk1, tk2, tk3} + + wg := util.WaitGroupWrapper{} + exec := func(tk0 *testkit.TestKit) { + tk0.MustExec("use test") + tk0.MustQuery("desc select id, type from t where type = 'WatchEvent';").Check(testkit.Rows("TableReader_7 10.00 root partition:watch_event data:Selection_6]\n[└─Selection_6 10.00 cop[tikv] eq(test.t.type, \"WatchEvent\")]\n[ └─TableFullScan_5 10000.00 cop[tikv] table:t keep order:false, stats:pseudo")) + } + + run := func(num int) { + tk := tks[num] + wg.Run(func() { + exec(tk) + }) + } + for i := 0; i < len(tks); i++ { + run(i) + } + wg.Wait() +} + func TestTimeZoneChange(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean() @@ -465,13 +507,13 @@ func TestCreatePartitionTableNotSupport(t *testing.T) { tk := testkit.NewTestKit(t, store) tk.MustExec("use test") _, err := tk.Exec(`create table t7 (a int) partition by range (mod((select * from t), 5)) (partition p1 values less than (1));`) - require.True(t, ddl.ErrPartitionFunctionIsNotAllowed.Equal(err)) + require.True(t, dbterror.ErrPartitionFunctionIsNotAllowed.Equal(err)) _, err = tk.Exec(`create table t7 (a int) partition by range (1 + (select * from t)) (partition p1 values less than (1));`) - require.True(t, ddl.ErrPartitionFunctionIsNotAllowed.Equal(err)) + require.True(t, dbterror.ErrPartitionFunctionIsNotAllowed.Equal(err)) _, err = tk.Exec(`create table t7 (a int) partition by range (a + row(1, 2, 3)) (partition p1 values less than (1));`) - require.True(t, ddl.ErrPartitionFunctionIsNotAllowed.Equal(err)) + require.True(t, dbterror.ErrPartitionFunctionIsNotAllowed.Equal(err)) _, err = tk.Exec(`create table t7 (a int) partition by range (-(select * from t)) (partition p1 values less than (1));`) - require.True(t, ddl.ErrPartitionFunctionIsNotAllowed.Equal(err)) + require.True(t, dbterror.ErrPartitionFunctionIsNotAllowed.Equal(err)) } func TestRangePartitionUnderNoUnsigned(t *testing.T) { diff --git a/table/tables/state_remote.go b/table/tables/state_remote.go index a10856cc5a481..6abbebf3e30a5 100644 --- a/table/tables/state_remote.go +++ b/table/tables/state_remote.go @@ -69,8 +69,11 @@ type StateRemote interface { // LockForWrite try to add a write lock to the table with the specified tableID LockForWrite(ctx context.Context, tid int64, leaseDuration time.Duration) (uint64, error) - // RenewLease attempt to renew the read / write lock on the table with the specified tableID - RenewLease(ctx context.Context, tid int64, newTs uint64, op RenewLeaseType) (bool, error) + // RenewReadLease attempt to renew the read lock lease on the table with the specified tableID + RenewReadLease(ctx context.Context, tid int64, oldLocalLease, newValue uint64) (uint64, error) + + // RenewWriteLease attempt to renew the write lock lease on the table with the specified tableID + RenewWriteLease(ctx context.Context, tid int64, newTs uint64) (bool, error) } type sqlExec interface { @@ -208,33 +211,28 @@ func waitForLeaseExpire(oldReadLease, now uint64) time.Duration { if oldReadLease >= now { t1 := oracle.GetTimeFromTS(oldReadLease) t2 := oracle.GetTimeFromTS(now) - waitDuration := t1.Sub(t2) - return waitDuration + if t1.After(t2) { + waitDuration := t1.Sub(t2) + return waitDuration + } + return time.Microsecond } return 0 } -func (h *stateRemoteHandle) RenewLease(ctx context.Context, tid int64, newLease uint64, op RenewLeaseType) (bool, error) { +// RenewReadLease renew the read lock lease. +// Return the current lease value on success, and return 0 on fail. +func (h *stateRemoteHandle) RenewReadLease(ctx context.Context, tid int64, oldLocalLease, newValue uint64) (uint64, error) { h.Lock() defer h.Unlock() - - switch op { - case RenewReadLease: - return h.renewReadLease(ctx, tid, newLease) - case RenewWriteLease: - return h.renewWriteLease(ctx, tid, newLease) - } - return false, errors.New("wrong renew lease type") -} - -func (h *stateRemoteHandle) renewReadLease(ctx context.Context, tid int64, newLease uint64) (bool, error) { - var succ bool + var newLease uint64 err := h.runInTxn(ctx, func(ctx context.Context, now uint64) error { - lockType, oldLease, _, err := h.loadRow(ctx, tid) + lockType, remoteLease, _, err := h.loadRow(ctx, tid) if err != nil { return errors.Trace(err) } - if now >= oldLease { + + if now >= remoteLease { // read lock had already expired, fail to renew return nil } @@ -243,19 +241,38 @@ func (h *stateRemoteHandle) renewReadLease(ctx context.Context, tid int64, newLe return nil } - if newLease > oldLease { // lease should never decrease! - err = h.updateRow(ctx, tid, "READ", newLease) + // It means that the lease had already been changed by some other TiDB instances. + if oldLocalLease != remoteLease { + // 1. Data in [cacheDataTS -------- oldLocalLease) time range is also immutable. + // 2. Data in [ now ------------------- remoteLease) time range is immutable. + // + // If now < oldLocalLease, it means data in all the time range is immutable, + // so the old cache data is still available. + if now < oldLocalLease { + newLease = remoteLease + } + // Otherwise, there might be write operation during the oldLocalLease and the new remoteLease + // Make renew lease operation fail. + return nil + } + + if newValue > remoteLease { // lease should never decrease! + err = h.updateRow(ctx, tid, "READ", newValue) if err != nil { return errors.Trace(err) } + newLease = newValue + } else { + newLease = remoteLease } - succ = true return nil }) - return succ, err + return newLease, err } -func (h *stateRemoteHandle) renewWriteLease(ctx context.Context, tid int64, newLease uint64) (bool, error) { +func (h *stateRemoteHandle) RenewWriteLease(ctx context.Context, tid int64, newLease uint64) (bool, error) { + h.Lock() + defer h.Unlock() var succ bool err := h.runInTxn(ctx, func(ctx context.Context, now uint64) error { lockType, oldLease, _, err := h.loadRow(ctx, tid) @@ -304,6 +321,11 @@ func (h *stateRemoteHandle) runInTxn(ctx context.Context, fn func(ctx context.Co return errors.Trace(err) } + _, err = h.execSQL(ctx, "set @@session.tidb_retry_limit = 0") + if err != nil { + return errors.Trace(err) + } + rows, err := h.execSQL(ctx, "select @@tidb_current_ts") if err != nil { return errors.Trace(err) diff --git a/table/tables/state_remote_test.go b/table/tables/state_remote_test.go index aea373c0eaafe..5d75c5e47d129 100644 --- a/table/tables/state_remote_test.go +++ b/table/tables/state_remote_test.go @@ -79,9 +79,9 @@ func TestStateRemote(t *testing.T) { // Renew read lock lease operation. leaseVal = oracle.GoTimeToTS(physicalTime.Add(400 * time.Millisecond)) - succ, err = h.RenewLease(ctx, 5, leaseVal, tables.RenewReadLease) + leaseVal, err = h.RenewReadLease(ctx, 5, lease, leaseVal) require.NoError(t, err) - require.True(t, succ) + require.True(t, leaseVal > 0) lockType, lease, err = h.Load(ctx, 5) require.NoError(t, err) require.Equal(t, lockType, tables.CachedTableLockRead) @@ -101,23 +101,23 @@ func TestStateRemote(t *testing.T) { // Lock for write again writeLease, err = h.LockForWrite(ctx, 5, 3*time.Second) require.NoError(t, err) - lockType, _, err = h.Load(ctx, 5) + lockType, lease, err = h.Load(ctx, 5) require.NoError(t, err) require.Equal(t, lockType, tables.CachedTableLockWrite) require.Equal(t, lockType.String(), "WRITE") // Renew read lock lease should fail when the write lock is hold. - succ, err = h.RenewLease(ctx, 5, leaseVal, tables.RenewReadLease) + leaseVal, err = h.RenewReadLease(ctx, 5, lease, lease+1) require.NoError(t, err) - require.False(t, succ) + require.False(t, leaseVal > 0) // Acquire read lock should also fail when the write lock is hold. - succ, err = h.LockForRead(ctx, 5, leaseVal) + succ, err = h.LockForRead(ctx, 5, lease+1) require.NoError(t, err) require.False(t, succ) // Renew write lease. - succ, err = h.RenewLease(ctx, 5, writeLease+1, tables.RenewWriteLease) + succ, err = h.RenewWriteLease(ctx, 5, writeLease+1) require.NoError(t, err) require.True(t, succ) diff --git a/table/tables/tables.go b/table/tables/tables.go index 56bbaacf55271..8fee9660a698d 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -1919,6 +1919,20 @@ func BuildTableScanFromInfos(tableInfo *model.TableInfo, columnInfos []*model.Co return tsExec } +// BuildPartitionTableScanFromInfos build tipb.PartitonTableScan with *model.TableInfo and *model.ColumnInfo. +func BuildPartitionTableScanFromInfos(tableInfo *model.TableInfo, columnInfos []*model.ColumnInfo) *tipb.PartitionTableScan { + pkColIds := TryGetCommonPkColumnIds(tableInfo) + tsExec := &tipb.PartitionTableScan{ + TableId: tableInfo.ID, + Columns: util.ColumnsToProto(columnInfos, tableInfo.PKIsHandle), + PrimaryColumnIds: pkColIds, + } + if tableInfo.IsCommonHandle { + tsExec.PrimaryPrefixColumnIds = PrimaryPrefixColumnIDs(tableInfo) + } + return tsExec +} + // TemporaryTable is used to store transaction-specific or session-specific information for global / local temporary tables. // For example, stats and autoID should have their own copies of data, instead of being shared by all sessions. type TemporaryTable struct { diff --git a/table/tables/tables_test.go b/table/tables/tables_test.go index 1317e95586c0f..4b9ad5fa089f3 100644 --- a/table/tables/tables_test.go +++ b/table/tables/tables_test.go @@ -38,7 +38,6 @@ import ( "github.com/pingcap/tidb/testkit" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/testutil" "github.com/pingcap/tipb/go-binlog" "github.com/stretchr/testify/require" "google.golang.org/grpc" @@ -499,11 +498,11 @@ func TestHiddenColumn(t *testing.T) { ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) // Test show (extended) columns - tk.MustQuery("show columns from t").Check(testutil.RowsWithSep("|", + tk.MustQuery("show columns from t").Check(testkit.RowsWithSep("|", "a|int(11)|NO|PRI||", "c|int(11)|YES|||", "e|int(11)|YES|||")) - tk.MustQuery("show extended columns from t").Check(testutil.RowsWithSep("|", + tk.MustQuery("show extended columns from t").Check(testkit.RowsWithSep("|", "a|int(11)|NO|PRI||", "b|int(11)|YES|||VIRTUAL GENERATED", "c|int(11)|YES|||", @@ -599,7 +598,7 @@ func TestHiddenColumn(t *testing.T) { " `e` int(11) DEFAULT NULL,\n" + " PRIMARY KEY (`a`) /*T![clustered_index] CLUSTERED */\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) - tk.MustQuery("show extended columns from t").Check(testutil.RowsWithSep("|", + tk.MustQuery("show extended columns from t").Check(testkit.RowsWithSep("|", "a|int(11)|NO|PRI||", "b|int(11)|YES|||VIRTUAL GENERATED", "c|int(11)|YES|||", @@ -732,12 +731,12 @@ func TestViewColumns(t *testing.T) { {"select data_type from INFORMATION_SCHEMA.columns where table_name = 'va'", []string{types.TypeToStr(mysql.TypeLonglong, "")}}, } for _, testCase := range testCases { - tk.MustQuery(testCase.query).Check(testutil.RowsWithSep("|", testCase.expected...)) + tk.MustQuery(testCase.query).Check(testkit.RowsWithSep("|", testCase.expected...)) } tk.MustExec("drop table if exists t") for _, testCase := range testCases { require.Len(t, tk.MustQuery(testCase.query).Rows(), 0) - tk.MustQuery("show warnings").Check(testutil.RowsWithSep("|", + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1356|View 'test.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them", "Warning|1356|View 'test.va' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them")) } diff --git a/table/temptable/main_test.go b/table/temptable/main_test.go index ff6bb04f49f77..48b91db00c838 100644 --- a/table/temptable/main_test.go +++ b/table/temptable/main_test.go @@ -37,6 +37,7 @@ func TestMain(m *testing.M) { opts := []goleak.Option{ goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), } testbridge.SetupForCommonTest() goleak.VerifyTestMain(m, opts...) diff --git a/tablecodec/main_test.go b/tablecodec/main_test.go index 9785957934b8b..6b0a750cfa958 100644 --- a/tablecodec/main_test.go +++ b/tablecodec/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/tablecodec/rowindexcodec/main_test.go b/tablecodec/rowindexcodec/main_test.go index 7a48bd9d289a1..745b45d45a929 100644 --- a/tablecodec/rowindexcodec/main_test.go +++ b/tablecodec/rowindexcodec/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/telemetry/cte_test/cte_test.go b/telemetry/cte_test/cte_test.go index 6f3e5c735eb3e..4a07a3e9255ee 100644 --- a/telemetry/cte_test/cte_test.go +++ b/telemetry/cte_test/cte_test.go @@ -38,6 +38,7 @@ func TestMain(m *testing.M) { opts := []goleak.Option{ goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), } goleak.VerifyTestMain(m, opts...) diff --git a/telemetry/data_feature_usage.go b/telemetry/data_feature_usage.go index 521d5a5a3c2f9..8854e72acd3b9 100644 --- a/telemetry/data_feature_usage.go +++ b/telemetry/data_feature_usage.go @@ -33,32 +33,82 @@ type featureUsage struct { Txn *TxnUsage `json:"txn"` // cluster index usage information // key is the first 6 characters of sha2(TABLE_NAME, 256) - ClusterIndex *ClusterIndexUsage `json:"clusterIndex"` - TemporaryTable bool `json:"temporaryTable"` - CTE *m.CTEUsageCounter `json:"cte"` - CachedTable bool `json:"cachedTable"` + ClusterIndex *ClusterIndexUsage `json:"clusterIndex"` + TemporaryTable bool `json:"temporaryTable"` + CTE *m.CTEUsageCounter `json:"cte"` + CachedTable bool `json:"cachedTable"` + AutoCapture bool `json:"autoCapture"` + PlacementPolicyUsage *placementPolicyUsage `json:"placementPolicy"` +} + +type placementPolicyUsage struct { + NumPlacementPolicies uint64 `json:"numPlacementPolicies"` + NumDBWithPolicies uint64 `json:"numDBWithPolicies"` + NumTableWithPolicies uint64 `json:"numTableWithPolicies"` + // The number of partitions that policies are explicitly specified. + NumPartitionWithExplicitPolicies uint64 `json:"numPartitionWithExplicitPolicies"` } func getFeatureUsage(ctx sessionctx.Context) (*featureUsage, error) { - clusterIdxUsage, err := getClusterIndexUsageInfo(ctx) + var usage featureUsage + var err error + usage.ClusterIndex, err = getClusterIndexUsageInfo(ctx) if err != nil { logutil.BgLogger().Info(err.Error()) return nil, err } // transaction related feature - txnUsage := getTxnUsageInfo(ctx) + usage.Txn = getTxnUsageInfo(ctx) - // Avoid the circle dependency. - temporaryTable := ctx.(TemporaryOrCacheTableFeatureChecker).TemporaryTableExists() + usage.CTE = getCTEUsageInfo() - cteUsage := getCTEUsageInfo() + usage.AutoCapture = getAutoCaptureUsageInfo(ctx) - cachedTable := ctx.(TemporaryOrCacheTableFeatureChecker).CachedTableExists() + collectFeatureUsageFromInfoschema(ctx, &usage) + return &usage, nil +} + +// collectFeatureUsageFromInfoschema updates the usage for temporary table, cached table and placement policies. +func collectFeatureUsageFromInfoschema(ctx sessionctx.Context, usage *featureUsage) { + if usage.PlacementPolicyUsage == nil { + usage.PlacementPolicyUsage = &placementPolicyUsage{} + } + is := GetDomainInfoSchema(ctx) + for _, dbInfo := range is.AllSchemas() { + if dbInfo.PlacementPolicyRef != nil { + usage.PlacementPolicyUsage.NumDBWithPolicies++ + } - return &featureUsage{txnUsage, clusterIdxUsage, temporaryTable, cteUsage, cachedTable}, nil + for _, tbInfo := range is.SchemaTables(dbInfo.Name) { + if tbInfo.Meta().TempTableType != model.TempTableNone { + usage.TemporaryTable = true + } + if tbInfo.Meta().TableCacheStatusType != model.TableCacheStatusDisable { + usage.CachedTable = true + } + if tbInfo.Meta().PlacementPolicyRef != nil { + usage.PlacementPolicyUsage.NumTableWithPolicies++ + } + partitions := tbInfo.Meta().GetPartitionInfo() + if partitions == nil { + continue + } + for _, partitionInfo := range partitions.Definitions { + if partitionInfo.PlacementPolicyRef != nil { + usage.PlacementPolicyUsage.NumPartitionWithExplicitPolicies++ + } + } + } + } + + usage.PlacementPolicyUsage.NumPlacementPolicies += uint64(len(is.AllPlacementPolicies())) } +// GetDomainInfoSchema is used by the telemetry package to get the latest schema information +// while avoiding circle dependency with domain package. +var GetDomainInfoSchema func(sessionctx.Context) infoschema.InfoSchema + // ClusterIndexUsage records the usage info of all the tables, no more than 10k tables type ClusterIndexUsage map[string]TableClusteredInfo @@ -137,19 +187,15 @@ func getClusterIndexUsageInfo(ctx sessionctx.Context) (cu *ClusterIndexUsage, er return &usage, nil } -// TemporaryOrCacheTableFeatureChecker is defined to avoid package circle dependency. -// The session struct implements this interface. -type TemporaryOrCacheTableFeatureChecker interface { - TemporaryTableExists() bool - CachedTableExists() bool -} - // TxnUsage records the usage info of transaction related features, including // async-commit, 1PC and counters of transactions committed with different protocols. type TxnUsage struct { - AsyncCommitUsed bool `json:"asyncCommitUsed"` - OnePCUsed bool `json:"onePCUsed"` - TxnCommitCounter metrics.TxnCommitCounter `json:"txnCommitCounter"` + AsyncCommitUsed bool `json:"asyncCommitUsed"` + OnePCUsed bool `json:"onePCUsed"` + TxnCommitCounter metrics.TxnCommitCounter `json:"txnCommitCounter"` + MutationCheckerUsed bool `json:"mutationCheckerUsed"` + AssertionLevel string `json:"assertionLevel"` + RcCheckTS bool `json:"rcCheckTS"` } var initialTxnCommitCounter metrics.TxnCommitCounter @@ -167,7 +213,19 @@ func getTxnUsageInfo(ctx sessionctx.Context) *TxnUsage { } curr := metrics.GetTxnCommitCounter() diff := curr.Sub(initialTxnCommitCounter) - return &TxnUsage{asyncCommitUsed, onePCUsed, diff} + mutationCheckerUsed := false + if val, err := variable.GetGlobalSystemVar(ctx.GetSessionVars(), variable.TiDBEnableMutationChecker); err == nil { + mutationCheckerUsed = val == variable.On + } + assertionUsed := "" + if val, err := variable.GetGlobalSystemVar(ctx.GetSessionVars(), variable.TiDBTxnAssertionLevel); err == nil { + assertionUsed = val + } + rcCheckTSUsed := false + if val, err := variable.GetGlobalSystemVar(ctx.GetSessionVars(), variable.TiDBRCReadCheckTS); err == nil { + rcCheckTSUsed = val == variable.On + } + return &TxnUsage{asyncCommitUsed, onePCUsed, diff, mutationCheckerUsed, assertionUsed, rcCheckTSUsed} } func postReportTxnUsage() { @@ -185,3 +243,11 @@ func getCTEUsageInfo() *m.CTEUsageCounter { diff := curr.Sub(initialCTECounter) return &diff } + +// getAutoCaptureUsageInfo gets the 'Auto Capture' usage +func getAutoCaptureUsageInfo(ctx sessionctx.Context) bool { + if val, err := variable.GetGlobalSystemVar(ctx.GetSessionVars(), variable.TiDBCapturePlanBaseline); err == nil { + return val == variable.On + } + return false +} diff --git a/telemetry/data_feature_usage_test.go b/telemetry/data_feature_usage_test.go index efe852153a13a..bbae540f56019 100644 --- a/telemetry/data_feature_usage_test.go +++ b/telemetry/data_feature_usage_test.go @@ -43,6 +43,26 @@ func TestTxnUsageInfo(t *testing.T) { txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) require.True(t, txnUsage.AsyncCommitUsed) require.True(t, txnUsage.OnePCUsed) + + tk.MustExec(fmt.Sprintf("set global %s = 0", variable.TiDBEnableMutationChecker)) + tk.MustExec(fmt.Sprintf("set global %s = off", variable.TiDBTxnAssertionLevel)) + txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) + require.False(t, txnUsage.MutationCheckerUsed) + require.Equal(t, "OFF", txnUsage.AssertionLevel) + + tk.MustExec(fmt.Sprintf("set global %s = 1", variable.TiDBEnableMutationChecker)) + tk.MustExec(fmt.Sprintf("set global %s = strict", variable.TiDBTxnAssertionLevel)) + txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) + require.True(t, txnUsage.MutationCheckerUsed) + require.Equal(t, "STRICT", txnUsage.AssertionLevel) + + tk.MustExec(fmt.Sprintf("set global %s = fast", variable.TiDBTxnAssertionLevel)) + txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) + require.Equal(t, "FAST", txnUsage.AssertionLevel) + + tk.MustExec(fmt.Sprintf("set global %s = 1", variable.TiDBRCReadCheckTS)) + txnUsage = telemetry.GetTxnUsageInfo(tk.Session()) + require.True(t, txnUsage.RcCheckTS) }) t.Run("Count", func(t *testing.T) { @@ -105,3 +125,66 @@ func TestCachedTable(t *testing.T) { require.NoError(t, err) require.False(t, usage.CachedTable) } + +func TestPlacementPolicies(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + usage, err := telemetry.GetFeatureUsage(tk.Session()) + require.NoError(t, err) + require.Equal(t, uint64(0), usage.PlacementPolicyUsage.NumPlacementPolicies) + require.Equal(t, uint64(0), usage.PlacementPolicyUsage.NumDBWithPolicies) + require.Equal(t, uint64(0), usage.PlacementPolicyUsage.NumTableWithPolicies) + require.Equal(t, uint64(0), usage.PlacementPolicyUsage.NumPartitionWithExplicitPolicies) + + tk.MustExec("create placement policy p1 followers=4;") + tk.MustExec(`create placement policy p2 primary_region="cn-east-1" regions="cn-east-1,cn-east"`) + tk.MustExec(`create placement policy p3 followers=3`) + tk.MustExec("alter database test placement policy=p1;") + tk.MustExec("create table t1(a int);") + tk.MustExec("create table t2(a int) placement policy=p2;") + tk.MustExec("create table t3(id int) PARTITION BY RANGE (id) (" + + "PARTITION p0 VALUES LESS THAN (100) placement policy p3," + + "PARTITION p1 VALUES LESS THAN (1000))") + + usage, err = telemetry.GetFeatureUsage(tk.Session()) + require.NoError(t, err) + require.Equal(t, uint64(3), usage.PlacementPolicyUsage.NumPlacementPolicies) + require.Equal(t, uint64(1), usage.PlacementPolicyUsage.NumDBWithPolicies) + require.Equal(t, uint64(3), usage.PlacementPolicyUsage.NumTableWithPolicies) + require.Equal(t, uint64(1), usage.PlacementPolicyUsage.NumPartitionWithExplicitPolicies) + + tk.MustExec("drop table t2;") + tk.MustExec("drop placement policy p2;") + tk.MustExec("alter table t3 placement policy=default") + + usage, err = telemetry.GetFeatureUsage(tk.Session()) + require.NoError(t, err) + require.Equal(t, uint64(2), usage.PlacementPolicyUsage.NumPlacementPolicies) + require.Equal(t, uint64(1), usage.PlacementPolicyUsage.NumDBWithPolicies) + require.Equal(t, uint64(1), usage.PlacementPolicyUsage.NumTableWithPolicies) + require.Equal(t, uint64(1), usage.PlacementPolicyUsage.NumPartitionWithExplicitPolicies) +} + +func TestAutoCapture(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + + usage, err := telemetry.GetFeatureUsage(tk.Session()) + require.NoError(t, err) + require.False(t, usage.AutoCapture) + + tk.MustExec("SET GLOBAL tidb_capture_plan_baselines = on") + defer func() { + tk.MustExec("SET GLOBAL tidb_capture_plan_baselines = off") + }() + usage, err = telemetry.GetFeatureUsage(tk.Session()) + require.NoError(t, err) + require.True(t, usage.AutoCapture) +} diff --git a/telemetry/data_slow_query.go b/telemetry/data_slow_query.go index baf0d2e60bd6a..e32940e09be6a 100644 --- a/telemetry/data_slow_query.go +++ b/telemetry/data_slow_query.go @@ -72,7 +72,7 @@ func getSlowQueryStats(ctx sessionctx.Context) (*slowQueryStats, error) { return &slowQueryStats{slowQueryBucket}, nil } -// getSlowQueryBucket genenrates the delta SlowQueryBucket to report +// getSlowQueryBucket generates the delta SlowQueryBucket to report func getSlowQueryBucket(ctx sessionctx.Context) (*SlowQueryBucket, error) { // update currentSQBInfo first, then gen delta if err := updateCurrentSQB(ctx); err != nil { diff --git a/telemetry/main_test.go b/telemetry/main_test.go index 41c2c972ebbd8..9e9d8fd2c4389 100644 --- a/telemetry/main_test.go +++ b/telemetry/main_test.go @@ -32,6 +32,7 @@ func TestMain(m *testing.M) { opts := []goleak.Option{ goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), } goleak.VerifyTestMain(m, opts...) diff --git a/testkit/external/util.go b/testkit/external/util.go new file mode 100644 index 0000000000000..496330e0596fc --- /dev/null +++ b/testkit/external/util.go @@ -0,0 +1,72 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 external + +import ( + "fmt" + "strings" + "testing" + + "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/parser/model" + "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/table/tables" + "github.com/pingcap/tidb/testkit" + "github.com/stretchr/testify/require" +) + +// GetTableByName gets table by name for test. +func GetTableByName(t *testing.T, tk *testkit.TestKit, db, table string) table.Table { + dom := domain.GetDomain(tk.Session()) + // Make sure the table schema is the new schema. + require.NoError(t, dom.Reload()) + tbl, err := dom.InfoSchema().TableByName(model.NewCIStr(db), model.NewCIStr(table)) + require.NoError(t, err) + return tbl +} + +// GetModifyColumn is used to get the changed column name after ALTER TABLE. +func GetModifyColumn(t *testing.T, tk *testkit.TestKit, db, tbl, colName string, allColumn bool) *table.Column { + tt := GetTableByName(t, tk, db, tbl) + colName = strings.ToLower(colName) + var cols []*table.Column + if allColumn { + cols = tt.(*tables.TableCommon).Columns + } else { + cols = tt.Cols() + } + for _, col := range cols { + if col.Name.L == colName { + return col + } + } + return nil +} + +// GetIndexID is used to get the index ID from full qualified name. +func GetIndexID(t *testing.T, tk *testkit.TestKit, dbName, tblName, idxName string) int64 { + is := domain.GetDomain(tk.Session()).InfoSchema() + tt, err := is.TableByName(model.NewCIStr(dbName), model.NewCIStr(tblName)) + require.NoError(t, err) + + for _, idx := range tt.Indices() { + if idx.Meta().Name.L == idxName { + return idx.Meta().ID + } + } + + require.FailNow(t, fmt.Sprintf("index %s not found(db: %s, tbl: %s)", idxName, dbName, tblName)) + return -1 +} diff --git a/testkit/mockstore.go b/testkit/mockstore.go index 181d1c609e364..afa9658b22ae5 100644 --- a/testkit/mockstore.go +++ b/testkit/mockstore.go @@ -19,6 +19,7 @@ package testkit import ( "testing" + "time" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" @@ -39,12 +40,12 @@ func CreateMockStore(t testing.TB, opts ...mockstore.MockTiKVStoreOption) (store func CreateMockStoreAndDomain(t testing.TB, opts ...mockstore.MockTiKVStoreOption) (kv.Storage, *domain.Domain, func()) { store, err := mockstore.NewMockStore(opts...) require.NoError(t, err) - dom, clean := bootstrap(t, store) + dom, clean := bootstrap(t, store, 0) return store, dom, clean } -func bootstrap(t testing.TB, store kv.Storage) (*domain.Domain, func()) { - session.SetSchemaLease(0) +func bootstrap(t testing.TB, store kv.Storage, lease time.Duration) (*domain.Domain, func()) { + session.SetSchemaLease(lease) session.DisableStats4Test() dom, err := session.BootstrapSession(store) require.NoError(t, err) @@ -59,12 +60,26 @@ func bootstrap(t testing.TB, store kv.Storage) (*domain.Domain, func()) { return dom, clean } +// CreateMockStoreWithSchemaLease return a new mock kv.Storage. +func CreateMockStoreWithSchemaLease(t testing.TB, lease time.Duration, opts ...mockstore.MockTiKVStoreOption) (store kv.Storage, clean func()) { + store, _, clean = CreateMockStoreAndDomainWithSchemaLease(t, lease, opts...) + return +} + +// CreateMockStoreAndDomainWithSchemaLease return a new mock kv.Storage and *domain.Domain. +func CreateMockStoreAndDomainWithSchemaLease(t testing.TB, lease time.Duration, opts ...mockstore.MockTiKVStoreOption) (kv.Storage, *domain.Domain, func()) { + store, err := mockstore.NewMockStore(opts...) + require.NoError(t, err) + dom, clean := bootstrap(t, store, lease) + return store, dom, clean +} + // CreateMockStoreWithOracle returns a new mock kv.Storage and *domain.Domain, providing the oracle for the store. func CreateMockStoreWithOracle(t testing.TB, oracle oracle.Oracle, opts ...mockstore.MockTiKVStoreOption) (kv.Storage, *domain.Domain, func()) { store, err := mockstore.NewMockStore(opts...) require.NoError(t, err) store.GetOracle().Close() store.(tikv.Storage).SetOracle(oracle) - dom, clean := bootstrap(t, store) + dom, clean := bootstrap(t, store, 0) return store, dom, clean } diff --git a/testkit/testkit.go b/testkit/testkit.go index 8dbc3cd287118..af2d9ce34fe18 100644 --- a/testkit/testkit.go +++ b/testkit/testkit.go @@ -22,18 +22,12 @@ import ( "fmt" "strings" "testing" - "time" "github.com/pingcap/errors" - "github.com/pingcap/tidb/ddl" - "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/terror" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/sqlexec" "github.com/stretchr/testify/assert" @@ -280,11 +274,17 @@ func (tk *TestKit) MustGetErrCode(sql string, errCode int) { tk.require.Equalf(errCode, int(sqlErr.Code), "Assertion failed, origin err:\n %v", sqlErr) } -// MustGetErrMsg executes a sql statement and assert it's error message. +// MustGetErrMsg executes a sql statement and assert its error message. func (tk *TestKit) MustGetErrMsg(sql string, errStr string) { + err := tk.ExecToErr(sql) + tk.require.EqualError(err, errStr) +} + +// MustMatchErrMsg executes a sql statement and assert its error message matching errRx. +func (tk *TestKit) MustMatchErrMsg(sql string, errRx interface{}) { err := tk.ExecToErr(sql) tk.require.Error(err) - tk.require.Equal(errStr, err.Error()) + tk.require.Regexp(errRx, err.Error()) } // MustUseIndex checks if the result execution plan contains specific index(es). @@ -349,31 +349,6 @@ func WithPruneMode(tk *TestKit, mode variable.PartitionPruneMode, f func()) { f() } -// MockGC is used to make GC work in the test environment. -func MockGC(tk *TestKit) (string, string, string, func()) { - originGC := ddl.IsEmulatorGCEnable() - resetGC := func() { - if originGC { - ddl.EmulatorGCEnable() - } else { - ddl.EmulatorGCDisable() - } - } - - // disable emulator GC. - // Otherwise emulator GC will delete table record as soon as possible after execute drop table ddl. - ddl.EmulatorGCDisable() - gcTimeFormat := "20060102-15:04:05 -0700 MST" - timeBeforeDrop := time.Now().Add(0 - 48*60*60*time.Second).Format(gcTimeFormat) - timeAfterDrop := time.Now().Add(48 * 60 * 60 * time.Second).Format(gcTimeFormat) - safePointSQL := `INSERT HIGH_PRIORITY INTO mysql.tidb VALUES ('tikv_gc_safe_point', '%[1]s', '') - ON DUPLICATE KEY - UPDATE variable_value = '%[1]s'` - // clear GC variables first. - tk.MustExec("delete from mysql.tidb where variable_name in ( 'tikv_gc_safe_point','tikv_gc_enable' )") - return timeBeforeDrop, timeAfterDrop, safePointSQL, resetGC -} - func containGlobal(rs *Result) bool { partitionNameCol := 2 for i := range rs.rows { @@ -398,35 +373,7 @@ func (tk *TestKit) MustNoGlobalStats(table string) bool { return true } -// GetTableByName gets table by name for test. -func (tk *TestKit) GetTableByName(db, table string) table.Table { - dom := domain.GetDomain(tk.Session()) - // Make sure the table schema is the new schema. - tk.require.NoError(dom.Reload()) - tbl, err := dom.InfoSchema().TableByName(model.NewCIStr(db), model.NewCIStr(table)) - tk.require.NoError(err) - return tbl -} - // CheckLastMessage checks last message after executing MustExec func (tk *TestKit) CheckLastMessage(msg string) { tk.require.Equal(tk.Session().LastMessage(), msg) } - -// GetModifyColumn is used to get the changed column name after ALTER TABLE. -func (tk *TestKit) GetModifyColumn(db, tbl, colName string, allColumn bool) *table.Column { - t := tk.GetTableByName(db, tbl) - colName = strings.ToLower(colName) - var cols []*table.Column - if allColumn { - cols = t.(*tables.TableCommon).Columns - } else { - cols = t.Cols() - } - for _, col := range cols { - if col.Name.L == colName { - return col - } - } - return nil -} diff --git a/testkit/testutil/require.go b/testkit/testutil/require.go index 3c59d988e19fe..9c217f46c2747 100644 --- a/testkit/testutil/require.go +++ b/testkit/testutil/require.go @@ -20,6 +20,7 @@ package testutil import ( "testing" + "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/collate" @@ -27,9 +28,51 @@ import ( ) // DatumEqual verifies that the actual value is equal to the expected value. For string datum, they are compared by the binary collation. -func DatumEqual(t *testing.T, expected, actual types.Datum, msgAndArgs ...interface{}) { +func DatumEqual(t testing.TB, expected, actual types.Datum, msgAndArgs ...interface{}) { sc := new(stmtctx.StatementContext) res, err := actual.Compare(sc, &expected, collate.GetBinaryCollator()) require.NoError(t, err, msgAndArgs) require.Zero(t, res, msgAndArgs) } + +// HandleEqual verifies that the actual handle is equal to the expected handle. +func HandleEqual(t testing.TB, expected, actual kv.Handle, msgAndArgs ...interface{}) { + require.Equal(t, expected.IsInt(), actual.IsInt(), msgAndArgs) + require.Equal(t, expected.String(), actual.String(), msgAndArgs) +} + +// CompareUnorderedStringSlice compare two string slices. +// If a and b is exactly the same except the order, it returns true. +// In otherwise return false. +func CompareUnorderedStringSlice(a []string, b []string) bool { + if a == nil && b == nil { + return true + } + if a == nil || b == nil { + return false + } + if len(a) != len(b) { + return false + } + m := make(map[string]int, len(a)) + for _, i := range a { + _, ok := m[i] + if !ok { + m[i] = 1 + } else { + m[i]++ + } + } + + for _, i := range b { + _, ok := m[i] + if !ok { + return false + } + m[i]-- + if m[i] == 0 { + delete(m, i) + } + } + return len(m) == 0 +} diff --git a/testkit/testutil/require_test.go b/testkit/testutil/require_test.go new file mode 100644 index 0000000000000..49491a62c7619 --- /dev/null +++ b/testkit/testutil/require_test.go @@ -0,0 +1,33 @@ +// Copyright 2022 PingCAP, Inc. +// +// 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 testutil + +import ( + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/goleak" +) + +func TestCompareUnorderedString(t *testing.T) { + defer goleak.VerifyNone(t) + require.True(t, CompareUnorderedStringSlice([]string{"1", "1", "2"}, []string{"1", "1", "2"})) + require.True(t, CompareUnorderedStringSlice([]string{"1", "1", "2"}, []string{"1", "2", "1"})) + require.False(t, CompareUnorderedStringSlice([]string{"1", "1"}, []string{"1", "2", "1"})) + require.False(t, CompareUnorderedStringSlice([]string{"1", "1", "2"}, []string{"1", "2", "2"})) + require.True(t, CompareUnorderedStringSlice(nil, nil)) + require.False(t, CompareUnorderedStringSlice([]string{}, nil)) + require.False(t, CompareUnorderedStringSlice(nil, []string{})) +} diff --git a/tests/graceshutdown/main_test.go b/tests/graceshutdown/main_test.go index 87d7052c17762..dc131695874f7 100644 --- a/tests/graceshutdown/main_test.go +++ b/tests/graceshutdown/main_test.go @@ -24,6 +24,7 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), goleak.IgnoreTopFunction("syscall.syscall6"), } goleak.VerifyTestMain(m, opts...) diff --git a/tests/readonlytest/main_test.go b/tests/readonlytest/main_test.go index 9e822e0c6ddb2..3bfa7bb5ec28c 100644 --- a/tests/readonlytest/main_test.go +++ b/tests/readonlytest/main_test.go @@ -23,5 +23,10 @@ import ( func TestMain(m *testing.M) { testbridge.SetupForCommonTest() - goleak.VerifyTestMain(m) + opts := []goleak.Option{ + goleak.IgnoreTopFunction("github.com/golang/glog.(*loggingT).flushDaemon"), + goleak.IgnoreTopFunction("go.etcd.io/etcd/client/pkg/v3/logutil.(*MergeLogger).outputLoop"), + goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"), + } + goleak.VerifyTestMain(m, opts...) } diff --git a/tidb-binlog/driver/README.md b/tidb-binlog/driver/README.md new file mode 100644 index 0000000000000..21c5711465dc0 --- /dev/null +++ b/tidb-binlog/driver/README.md @@ -0,0 +1,15 @@ +# TiDB-Binlog Driver library + +A pure go library to handle TiDB Binlog replication. + +# Introduction + +### Reader + +a package read [TiDB Binlog protocol](../slave_binlog_proto/proto) + +### Examples + +[MySQL Replicate client](./example/mysql) + +[Text Output Replicate client](./example/print) \ No newline at end of file diff --git a/tidb-binlog/driver/example/kafkaReader/.gitignore b/tidb-binlog/driver/example/kafkaReader/.gitignore new file mode 100644 index 0000000000000..3dad8ccab5fcd --- /dev/null +++ b/tidb-binlog/driver/example/kafkaReader/.gitignore @@ -0,0 +1,4 @@ +target +.idea +out/ +*.iml diff --git a/tidb-binlog/driver/example/kafkaReader/README.md b/tidb-binlog/driver/example/kafkaReader/README.md new file mode 100644 index 0000000000000..1f813a562ece9 --- /dev/null +++ b/tidb-binlog/driver/example/kafkaReader/README.md @@ -0,0 +1,17 @@ +### consume and parse kafka binlog message for java demo + +#### Env: +tidb: v3.0.0
+drainer: v3.0.0
+kafka: kafka_2.12 1.0.0
+local windows environment protobuf version:protoc-3.9.1-win64
+[binlog.proto](https://github.com/pingcap/tidb-tools/blob/master/tidb-binlog/slave_binlog_proto/proto/binlog.proto) use official point file。 + +#### Execute protoc command to generate java file: +protoc --java_out=src/main/java src/main/resources/proto/descriptor.proto --proto_path=src/main/resources/proto/
+protoc --java_out=src/main/java src/main/resources/proto/gogo.proto --proto_path=src/main/resources/proto/
+protoc --java_out=src/main/java src/main/resources/proto/binlog.proto --proto_path=src/main/resources/proto/
+ +#### How to run: +in intel idea ide, run Booter.java main method。
+point Booter.topic、Booter.serever、Booter.offset and run it。 diff --git a/tidb-binlog/driver/example/kafkaReader/pom.xml b/tidb-binlog/driver/example/kafkaReader/pom.xml new file mode 100644 index 0000000000000..325669a4455ee --- /dev/null +++ b/tidb-binlog/driver/example/kafkaReader/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + com.lianlianpay + kafkaReader + 1.0-SNAPSHOT + + + + 1.8 + UTF-8 + 5.3.3 + 5.6.11 + 0.0.1-SNAPSHOT + + + + + + + org.apache.kafka + kafka-clients + 1.0.0 + + + + org.apache.kafka + kafka_2.12 + 1.0.0 + + + + com.google.protobuf + protobuf-java + 3.16.1 + + + + com.google.protobuf + protobuf-java-util + 3.9.1 + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + utf-8 + ${java.version} + ${java.version} + + + + + + \ No newline at end of file diff --git a/tidb-binlog/driver/example/kafkaReader/src/main/java/Booter.java b/tidb-binlog/driver/example/kafkaReader/src/main/java/Booter.java new file mode 100644 index 0000000000000..44eef5903d477 --- /dev/null +++ b/tidb-binlog/driver/example/kafkaReader/src/main/java/Booter.java @@ -0,0 +1,101 @@ +import com.pingcap.kafkareader.proto.BinLogInfo; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.clients.consumer.ConsumerRecords; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.clients.consumer.OffsetAndMetadata; +import org.apache.kafka.common.TopicPartition; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +/** + * @description: kafka消费binlog java demo + * @author: ceaserwang@outlook.com + * @create: 2019-08-15 21:45 + **/ +public class Booter { + /** + * 主题 + */ + private static String topic = "6717826900501472462_obinlog"; + /** + * kafka brokers + */ + private static String serever = "192.168.138.22:9092,192.168.138.23:9092,192.168.138.24:9092"; + + /** + * 消费者偏移量 + */ + private static long offset = 60; + + /** + * 消费者线程 + */ + private Thread kafkaConsumerThread; + /** + * 消费者 + */ + private KafkaConsumer consumer; + + public static void main(String[] args) { + Booter booter = new Booter(); + booter.init(); + } + + public void init() { + Properties props = assembleConsumerProperties(); + this.consumer = new KafkaConsumer(props); + consumer.assign(Arrays.asList(new TopicPartition(Booter.topic,0))); + kafkaConsumerThread = new Thread(() -> { + Map currentOffsets = new HashMap<>(); + while (true) { + try { + // 指定分区消费的某个offset消费 + consumer.seek(new TopicPartition(Booter.topic, 0), offset); + ConsumerRecords records = consumer.poll(200); + for (ConsumerRecord record : records) { + try { + //处理消息 + dealMessage(record.value()); + currentOffsets.put(new TopicPartition(Booter.topic, record.partition()), new OffsetAndMetadata(record.offset() + 1, "no metadata")); + //提交 + consumer.commitSync(currentOffsets); + currentOffsets.clear(); + //记录消息offset到db + } catch (Exception ie) { + //当前消息处理失败 + currentOffsets.clear(); + } + } + } catch (Exception e) { + currentOffsets.clear(); + } + } + }); + kafkaConsumerThread.setName("kafkaConsumerThread"); + kafkaConsumerThread.start(); + } + + private void dealMessage(byte[] value) throws Exception { + BinLogInfo.Binlog binlog = BinLogInfo.Binlog.parseFrom(value); + System.out.println(binlog.toString()); + } + + private Properties assembleConsumerProperties() { + Properties props = new Properties(); + props.put("bootstrap.servers",Booter.serever); + props.put("group.id", "mytest"); + //自动提交位移关闭 + props.put("enable.auto.commit", "false"); + props.put("auto.commit.interval.ms", "1000"); + props.put("session.timeout.ms", "30000"); + props.put("max.poll.records", "10"); + //必须使用ByteArrayDeserializer + props.put("key.deserializer", "org.apache.kafka.common.serialization.ByteArrayDeserializer"); + props.put("value.deserializer", "org.apache.kafka.common.serialization.ByteArrayDeserializer"); + return props; + } + +} diff --git a/tidb-binlog/driver/example/kafkaReader/src/main/java/com/pingcap/kafkareader/proto/BinLogInfo.java b/tidb-binlog/driver/example/kafkaReader/src/main/java/com/pingcap/kafkareader/proto/BinLogInfo.java new file mode 100644 index 0000000000000..b09fd8f402e04 --- /dev/null +++ b/tidb-binlog/driver/example/kafkaReader/src/main/java/com/pingcap/kafkareader/proto/BinLogInfo.java @@ -0,0 +1,8689 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: binlog.proto + +package com.pingcap.kafkareader.proto; + +public final class BinLogInfo { + private BinLogInfo() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + /** + * Protobuf enum {@code com.tnp.search.MutationType} + */ + public enum MutationType + implements com.google.protobuf.ProtocolMessageEnum { + /** + * Insert = 0; + */ + Insert(0), + /** + * Update = 1; + */ + Update(1), + /** + * Delete = 2; + */ + Delete(2), + ; + + /** + * Insert = 0; + */ + public static final int Insert_VALUE = 0; + /** + * Update = 1; + */ + public static final int Update_VALUE = 1; + /** + * Delete = 2; + */ + public static final int Delete_VALUE = 2; + + + public final int getNumber() { + return value; + } + + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static MutationType valueOf(int value) { + return forNumber(value); + } + + public static MutationType forNumber(int value) { + switch (value) { + case 0: return Insert; + case 1: return Update; + case 2: return Delete; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + MutationType> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public MutationType findValueByNumber(int number) { + return MutationType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.getDescriptor().getEnumTypes().get(0); + } + + private static final MutationType[] VALUES = values(); + + public static MutationType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private MutationType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:com.tnp.search.MutationType) + } + + /** + * Protobuf enum {@code com.tnp.search.BinlogType} + */ + public enum BinlogType + implements com.google.protobuf.ProtocolMessageEnum { + /** + *
+     *  has dml_data
+     * 
+ * + * DML = 0; + */ + DML(0), + /** + *
+     *  has ddl_query
+     * 
+ * + * DDL = 1; + */ + DDL(1), + ; + + /** + *
+     *  has dml_data
+     * 
+ * + * DML = 0; + */ + public static final int DML_VALUE = 0; + /** + *
+     *  has ddl_query
+     * 
+ * + * DDL = 1; + */ + public static final int DDL_VALUE = 1; + + + public final int getNumber() { + return value; + } + + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static BinlogType valueOf(int value) { + return forNumber(value); + } + + public static BinlogType forNumber(int value) { + switch (value) { + case 0: return DML; + case 1: return DDL; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + BinlogType> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public BinlogType findValueByNumber(int number) { + return BinlogType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.getDescriptor().getEnumTypes().get(1); + } + + private static final BinlogType[] VALUES = values(); + + public static BinlogType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private BinlogType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:com.tnp.search.BinlogType) + } + + public interface ColumnOrBuilder extends + // @@protoc_insertion_point(interface_extends:com.tnp.search.Column) + com.google.protobuf.MessageOrBuilder { + + /** + * optional bool is_null = 1 [default = false]; + */ + boolean hasIsNull(); + /** + * optional bool is_null = 1 [default = false]; + */ + boolean getIsNull(); + + /** + * optional int64 int64_value = 2; + */ + boolean hasInt64Value(); + /** + * optional int64 int64_value = 2; + */ + long getInt64Value(); + + /** + * optional uint64 uint64_value = 3; + */ + boolean hasUint64Value(); + /** + * optional uint64 uint64_value = 3; + */ + long getUint64Value(); + + /** + * optional double double_value = 4; + */ + boolean hasDoubleValue(); + /** + * optional double double_value = 4; + */ + double getDoubleValue(); + + /** + * optional bytes bytes_value = 5; + */ + boolean hasBytesValue(); + /** + * optional bytes bytes_value = 5; + */ + com.google.protobuf.ByteString getBytesValue(); + + /** + * optional string string_value = 6; + */ + boolean hasStringValue(); + /** + * optional string string_value = 6; + */ + java.lang.String getStringValue(); + /** + * optional string string_value = 6; + */ + com.google.protobuf.ByteString + getStringValueBytes(); + } + /** + *
+   * for text and char type, string_value is set
+   * for blob and binary type, bytes_value is set
+   * for enum, set, uint64_value is set
+   * for json, bytes_value is set
+   * 
+ * + * Protobuf type {@code com.tnp.search.Column} + */ + public static final class Column extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:com.tnp.search.Column) + ColumnOrBuilder { + private static final long serialVersionUID = 0L; + // Use Column.newBuilder() to construct. + private Column(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Column() { + bytesValue_ = com.google.protobuf.ByteString.EMPTY; + stringValue_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Column(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Column( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + bitField0_ |= 0x00000001; + isNull_ = input.readBool(); + break; + } + case 16: { + bitField0_ |= 0x00000002; + int64Value_ = input.readInt64(); + break; + } + case 24: { + bitField0_ |= 0x00000004; + uint64Value_ = input.readUInt64(); + break; + } + case 33: { + bitField0_ |= 0x00000008; + doubleValue_ = input.readDouble(); + break; + } + case 42: { + bitField0_ |= 0x00000010; + bytesValue_ = input.readBytes(); + break; + } + case 50: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000020; + stringValue_ = bs; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Column_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Column_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.Column.class, com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder.class); + } + + private int bitField0_; + public static final int IS_NULL_FIELD_NUMBER = 1; + private boolean isNull_; + /** + * optional bool is_null = 1 [default = false]; + */ + public boolean hasIsNull() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional bool is_null = 1 [default = false]; + */ + public boolean getIsNull() { + return isNull_; + } + + public static final int INT64_VALUE_FIELD_NUMBER = 2; + private long int64Value_; + /** + * optional int64 int64_value = 2; + */ + public boolean hasInt64Value() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional int64 int64_value = 2; + */ + public long getInt64Value() { + return int64Value_; + } + + public static final int UINT64_VALUE_FIELD_NUMBER = 3; + private long uint64Value_; + /** + * optional uint64 uint64_value = 3; + */ + public boolean hasUint64Value() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * optional uint64 uint64_value = 3; + */ + public long getUint64Value() { + return uint64Value_; + } + + public static final int DOUBLE_VALUE_FIELD_NUMBER = 4; + private double doubleValue_; + /** + * optional double double_value = 4; + */ + public boolean hasDoubleValue() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * optional double double_value = 4; + */ + public double getDoubleValue() { + return doubleValue_; + } + + public static final int BYTES_VALUE_FIELD_NUMBER = 5; + private com.google.protobuf.ByteString bytesValue_; + /** + * optional bytes bytes_value = 5; + */ + public boolean hasBytesValue() { + return ((bitField0_ & 0x00000010) != 0); + } + /** + * optional bytes bytes_value = 5; + */ + public com.google.protobuf.ByteString getBytesValue() { + return bytesValue_; + } + + public static final int STRING_VALUE_FIELD_NUMBER = 6; + private volatile java.lang.Object stringValue_; + /** + * optional string string_value = 6; + */ + public boolean hasStringValue() { + return ((bitField0_ & 0x00000020) != 0); + } + /** + * optional string string_value = 6; + */ + public java.lang.String getStringValue() { + java.lang.Object ref = stringValue_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + stringValue_ = s; + } + return s; + } + } + /** + * optional string string_value = 6; + */ + public com.google.protobuf.ByteString + getStringValueBytes() { + java.lang.Object ref = stringValue_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + stringValue_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeBool(1, isNull_); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeInt64(2, int64Value_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeUInt64(3, uint64Value_); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeDouble(4, doubleValue_); + } + if (((bitField0_ & 0x00000010) != 0)) { + output.writeBytes(5, bytesValue_); + } + if (((bitField0_ & 0x00000020) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 6, stringValue_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, isNull_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, int64Value_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(3, uint64Value_); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(4, doubleValue_); + } + if (((bitField0_ & 0x00000010) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(5, bytesValue_); + } + if (((bitField0_ & 0x00000020) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, stringValue_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.BinLogInfo.Column)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.BinLogInfo.Column other = (com.pingcap.kafkareader.proto.BinLogInfo.Column) obj; + + if (hasIsNull() != other.hasIsNull()) return false; + if (hasIsNull()) { + if (getIsNull() + != other.getIsNull()) return false; + } + if (hasInt64Value() != other.hasInt64Value()) return false; + if (hasInt64Value()) { + if (getInt64Value() + != other.getInt64Value()) return false; + } + if (hasUint64Value() != other.hasUint64Value()) return false; + if (hasUint64Value()) { + if (getUint64Value() + != other.getUint64Value()) return false; + } + if (hasDoubleValue() != other.hasDoubleValue()) return false; + if (hasDoubleValue()) { + if (java.lang.Double.doubleToLongBits(getDoubleValue()) + != java.lang.Double.doubleToLongBits( + other.getDoubleValue())) return false; + } + if (hasBytesValue() != other.hasBytesValue()) return false; + if (hasBytesValue()) { + if (!getBytesValue() + .equals(other.getBytesValue())) return false; + } + if (hasStringValue() != other.hasStringValue()) return false; + if (hasStringValue()) { + if (!getStringValue() + .equals(other.getStringValue())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasIsNull()) { + hash = (37 * hash) + IS_NULL_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getIsNull()); + } + if (hasInt64Value()) { + hash = (37 * hash) + INT64_VALUE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getInt64Value()); + } + if (hasUint64Value()) { + hash = (37 * hash) + UINT64_VALUE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getUint64Value()); + } + if (hasDoubleValue()) { + hash = (37 * hash) + DOUBLE_VALUE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + java.lang.Double.doubleToLongBits(getDoubleValue())); + } + if (hasBytesValue()) { + hash = (37 * hash) + BYTES_VALUE_FIELD_NUMBER; + hash = (53 * hash) + getBytesValue().hashCode(); + } + if (hasStringValue()) { + hash = (37 * hash) + STRING_VALUE_FIELD_NUMBER; + hash = (53 * hash) + getStringValue().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Column parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.BinLogInfo.Column prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * for text and char type, string_value is set
+     * for blob and binary type, bytes_value is set
+     * for enum, set, uint64_value is set
+     * for json, bytes_value is set
+     * 
+ * + * Protobuf type {@code com.tnp.search.Column} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:com.tnp.search.Column) + com.pingcap.kafkareader.proto.BinLogInfo.ColumnOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Column_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Column_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.Column.class, com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.BinLogInfo.Column.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + isNull_ = false; + bitField0_ = (bitField0_ & ~0x00000001); + int64Value_ = 0L; + bitField0_ = (bitField0_ & ~0x00000002); + uint64Value_ = 0L; + bitField0_ = (bitField0_ & ~0x00000004); + doubleValue_ = 0D; + bitField0_ = (bitField0_ & ~0x00000008); + bytesValue_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000010); + stringValue_ = ""; + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Column_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Column getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.Column.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Column build() { + com.pingcap.kafkareader.proto.BinLogInfo.Column result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Column buildPartial() { + com.pingcap.kafkareader.proto.BinLogInfo.Column result = new com.pingcap.kafkareader.proto.BinLogInfo.Column(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.isNull_ = isNull_; + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.int64Value_ = int64Value_; + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.uint64Value_ = uint64Value_; + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.doubleValue_ = doubleValue_; + to_bitField0_ |= 0x00000008; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + to_bitField0_ |= 0x00000010; + } + result.bytesValue_ = bytesValue_; + if (((from_bitField0_ & 0x00000020) != 0)) { + to_bitField0_ |= 0x00000020; + } + result.stringValue_ = stringValue_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.BinLogInfo.Column) { + return mergeFrom((com.pingcap.kafkareader.proto.BinLogInfo.Column)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.BinLogInfo.Column other) { + if (other == com.pingcap.kafkareader.proto.BinLogInfo.Column.getDefaultInstance()) return this; + if (other.hasIsNull()) { + setIsNull(other.getIsNull()); + } + if (other.hasInt64Value()) { + setInt64Value(other.getInt64Value()); + } + if (other.hasUint64Value()) { + setUint64Value(other.getUint64Value()); + } + if (other.hasDoubleValue()) { + setDoubleValue(other.getDoubleValue()); + } + if (other.hasBytesValue()) { + setBytesValue(other.getBytesValue()); + } + if (other.hasStringValue()) { + bitField0_ |= 0x00000020; + stringValue_ = other.stringValue_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.BinLogInfo.Column parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.BinLogInfo.Column) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private boolean isNull_ ; + /** + * optional bool is_null = 1 [default = false]; + */ + public boolean hasIsNull() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional bool is_null = 1 [default = false]; + */ + public boolean getIsNull() { + return isNull_; + } + /** + * optional bool is_null = 1 [default = false]; + */ + public Builder setIsNull(boolean value) { + bitField0_ |= 0x00000001; + isNull_ = value; + onChanged(); + return this; + } + /** + * optional bool is_null = 1 [default = false]; + */ + public Builder clearIsNull() { + bitField0_ = (bitField0_ & ~0x00000001); + isNull_ = false; + onChanged(); + return this; + } + + private long int64Value_ ; + /** + * optional int64 int64_value = 2; + */ + public boolean hasInt64Value() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional int64 int64_value = 2; + */ + public long getInt64Value() { + return int64Value_; + } + /** + * optional int64 int64_value = 2; + */ + public Builder setInt64Value(long value) { + bitField0_ |= 0x00000002; + int64Value_ = value; + onChanged(); + return this; + } + /** + * optional int64 int64_value = 2; + */ + public Builder clearInt64Value() { + bitField0_ = (bitField0_ & ~0x00000002); + int64Value_ = 0L; + onChanged(); + return this; + } + + private long uint64Value_ ; + /** + * optional uint64 uint64_value = 3; + */ + public boolean hasUint64Value() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * optional uint64 uint64_value = 3; + */ + public long getUint64Value() { + return uint64Value_; + } + /** + * optional uint64 uint64_value = 3; + */ + public Builder setUint64Value(long value) { + bitField0_ |= 0x00000004; + uint64Value_ = value; + onChanged(); + return this; + } + /** + * optional uint64 uint64_value = 3; + */ + public Builder clearUint64Value() { + bitField0_ = (bitField0_ & ~0x00000004); + uint64Value_ = 0L; + onChanged(); + return this; + } + + private double doubleValue_ ; + /** + * optional double double_value = 4; + */ + public boolean hasDoubleValue() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * optional double double_value = 4; + */ + public double getDoubleValue() { + return doubleValue_; + } + /** + * optional double double_value = 4; + */ + public Builder setDoubleValue(double value) { + bitField0_ |= 0x00000008; + doubleValue_ = value; + onChanged(); + return this; + } + /** + * optional double double_value = 4; + */ + public Builder clearDoubleValue() { + bitField0_ = (bitField0_ & ~0x00000008); + doubleValue_ = 0D; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString bytesValue_ = com.google.protobuf.ByteString.EMPTY; + /** + * optional bytes bytes_value = 5; + */ + public boolean hasBytesValue() { + return ((bitField0_ & 0x00000010) != 0); + } + /** + * optional bytes bytes_value = 5; + */ + public com.google.protobuf.ByteString getBytesValue() { + return bytesValue_; + } + /** + * optional bytes bytes_value = 5; + */ + public Builder setBytesValue(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + bytesValue_ = value; + onChanged(); + return this; + } + /** + * optional bytes bytes_value = 5; + */ + public Builder clearBytesValue() { + bitField0_ = (bitField0_ & ~0x00000010); + bytesValue_ = getDefaultInstance().getBytesValue(); + onChanged(); + return this; + } + + private java.lang.Object stringValue_ = ""; + /** + * optional string string_value = 6; + */ + public boolean hasStringValue() { + return ((bitField0_ & 0x00000020) != 0); + } + /** + * optional string string_value = 6; + */ + public java.lang.String getStringValue() { + java.lang.Object ref = stringValue_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + stringValue_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string string_value = 6; + */ + public com.google.protobuf.ByteString + getStringValueBytes() { + java.lang.Object ref = stringValue_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + stringValue_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string string_value = 6; + */ + public Builder setStringValue( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + stringValue_ = value; + onChanged(); + return this; + } + /** + * optional string string_value = 6; + */ + public Builder clearStringValue() { + bitField0_ = (bitField0_ & ~0x00000020); + stringValue_ = getDefaultInstance().getStringValue(); + onChanged(); + return this; + } + /** + * optional string string_value = 6; + */ + public Builder setStringValueBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + stringValue_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:com.tnp.search.Column) + } + + // @@protoc_insertion_point(class_scope:com.tnp.search.Column) + private static final com.pingcap.kafkareader.proto.BinLogInfo.Column DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.BinLogInfo.Column(); + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.Column getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Column parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Column(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Column getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ColumnInfoOrBuilder extends + // @@protoc_insertion_point(interface_extends:com.tnp.search.ColumnInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + boolean hasName(); + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + java.lang.String getName(); + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + *
+     * lower case column field type in mysql
+     * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+     * for numeric type: int bigint smallint tinyint float double decimal bit
+     * for string type: text longtext mediumtext char tinytext varchar
+     * blob longblob mediumblob binary tinyblob varbinary
+     * enum set
+     * for json type: json
+     * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + boolean hasMysqlType(); + /** + *
+     * lower case column field type in mysql
+     * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+     * for numeric type: int bigint smallint tinyint float double decimal bit
+     * for string type: text longtext mediumtext char tinytext varchar
+     * blob longblob mediumblob binary tinyblob varbinary
+     * enum set
+     * for json type: json
+     * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + java.lang.String getMysqlType(); + /** + *
+     * lower case column field type in mysql
+     * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+     * for numeric type: int bigint smallint tinyint float double decimal bit
+     * for string type: text longtext mediumtext char tinytext varchar
+     * blob longblob mediumblob binary tinyblob varbinary
+     * enum set
+     * for json type: json
+     * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + com.google.protobuf.ByteString + getMysqlTypeBytes(); + + /** + * optional bool is_primary_key = 3 [(.gogoproto.nullable) = false]; + */ + boolean hasIsPrimaryKey(); + /** + * optional bool is_primary_key = 3 [(.gogoproto.nullable) = false]; + */ + boolean getIsPrimaryKey(); + } + /** + * Protobuf type {@code com.tnp.search.ColumnInfo} + */ + public static final class ColumnInfo extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:com.tnp.search.ColumnInfo) + ColumnInfoOrBuilder { + private static final long serialVersionUID = 0L; + // Use ColumnInfo.newBuilder() to construct. + private ColumnInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ColumnInfo() { + name_ = ""; + mysqlType_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ColumnInfo(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ColumnInfo( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + name_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + mysqlType_ = bs; + break; + } + case 24: { + bitField0_ |= 0x00000004; + isPrimaryKey_ = input.readBool(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_ColumnInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_ColumnInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.class, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder.class); + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object name_; + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int MYSQL_TYPE_FIELD_NUMBER = 2; + private volatile java.lang.Object mysqlType_; + /** + *
+     * lower case column field type in mysql
+     * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+     * for numeric type: int bigint smallint tinyint float double decimal bit
+     * for string type: text longtext mediumtext char tinytext varchar
+     * blob longblob mediumblob binary tinyblob varbinary
+     * enum set
+     * for json type: json
+     * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public boolean hasMysqlType() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+     * lower case column field type in mysql
+     * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+     * for numeric type: int bigint smallint tinyint float double decimal bit
+     * for string type: text longtext mediumtext char tinytext varchar
+     * blob longblob mediumblob binary tinyblob varbinary
+     * enum set
+     * for json type: json
+     * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public java.lang.String getMysqlType() { + java.lang.Object ref = mysqlType_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + mysqlType_ = s; + } + return s; + } + } + /** + *
+     * lower case column field type in mysql
+     * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+     * for numeric type: int bigint smallint tinyint float double decimal bit
+     * for string type: text longtext mediumtext char tinytext varchar
+     * blob longblob mediumblob binary tinyblob varbinary
+     * enum set
+     * for json type: json
+     * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public com.google.protobuf.ByteString + getMysqlTypeBytes() { + java.lang.Object ref = mysqlType_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + mysqlType_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int IS_PRIMARY_KEY_FIELD_NUMBER = 3; + private boolean isPrimaryKey_; + /** + * optional bool is_primary_key = 3 [(.gogoproto.nullable) = false]; + */ + public boolean hasIsPrimaryKey() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * optional bool is_primary_key = 3 [(.gogoproto.nullable) = false]; + */ + public boolean getIsPrimaryKey() { + return isPrimaryKey_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + if (((bitField0_ & 0x00000002) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, mysqlType_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeBool(3, isPrimaryKey_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, mysqlType_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(3, isPrimaryKey_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo other = (com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo) obj; + + if (hasName() != other.hasName()) return false; + if (hasName()) { + if (!getName() + .equals(other.getName())) return false; + } + if (hasMysqlType() != other.hasMysqlType()) return false; + if (hasMysqlType()) { + if (!getMysqlType() + .equals(other.getMysqlType())) return false; + } + if (hasIsPrimaryKey() != other.hasIsPrimaryKey()) return false; + if (hasIsPrimaryKey()) { + if (getIsPrimaryKey() + != other.getIsPrimaryKey()) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasName()) { + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + } + if (hasMysqlType()) { + hash = (37 * hash) + MYSQL_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getMysqlType().hashCode(); + } + if (hasIsPrimaryKey()) { + hash = (37 * hash) + IS_PRIMARY_KEY_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getIsPrimaryKey()); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code com.tnp.search.ColumnInfo} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:com.tnp.search.ColumnInfo) + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_ColumnInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_ColumnInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.class, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + mysqlType_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + isPrimaryKey_ = false; + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_ColumnInfo_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo build() { + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo buildPartial() { + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo result = new com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.mysqlType_ = mysqlType_; + if (((from_bitField0_ & 0x00000004) != 0)) { + result.isPrimaryKey_ = isPrimaryKey_; + to_bitField0_ |= 0x00000004; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo) { + return mergeFrom((com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo other) { + if (other == com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.getDefaultInstance()) return this; + if (other.hasName()) { + bitField0_ |= 0x00000001; + name_ = other.name_; + onChanged(); + } + if (other.hasMysqlType()) { + bitField0_ |= 0x00000002; + mysqlType_ = other.mysqlType_; + onChanged(); + } + if (other.hasIsPrimaryKey()) { + setIsPrimaryKey(other.getIsPrimaryKey()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object name_ = ""; + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + * optional string name = 1 [(.gogoproto.nullable) = false]; + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + + private java.lang.Object mysqlType_ = ""; + /** + *
+       * lower case column field type in mysql
+       * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+       * for numeric type: int bigint smallint tinyint float double decimal bit
+       * for string type: text longtext mediumtext char tinytext varchar
+       * blob longblob mediumblob binary tinyblob varbinary
+       * enum set
+       * for json type: json
+       * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public boolean hasMysqlType() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+       * lower case column field type in mysql
+       * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+       * for numeric type: int bigint smallint tinyint float double decimal bit
+       * for string type: text longtext mediumtext char tinytext varchar
+       * blob longblob mediumblob binary tinyblob varbinary
+       * enum set
+       * for json type: json
+       * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public java.lang.String getMysqlType() { + java.lang.Object ref = mysqlType_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + mysqlType_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * lower case column field type in mysql
+       * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+       * for numeric type: int bigint smallint tinyint float double decimal bit
+       * for string type: text longtext mediumtext char tinytext varchar
+       * blob longblob mediumblob binary tinyblob varbinary
+       * enum set
+       * for json type: json
+       * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public com.google.protobuf.ByteString + getMysqlTypeBytes() { + java.lang.Object ref = mysqlType_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + mysqlType_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * lower case column field type in mysql
+       * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+       * for numeric type: int bigint smallint tinyint float double decimal bit
+       * for string type: text longtext mediumtext char tinytext varchar
+       * blob longblob mediumblob binary tinyblob varbinary
+       * enum set
+       * for json type: json
+       * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public Builder setMysqlType( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + mysqlType_ = value; + onChanged(); + return this; + } + /** + *
+       * lower case column field type in mysql
+       * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+       * for numeric type: int bigint smallint tinyint float double decimal bit
+       * for string type: text longtext mediumtext char tinytext varchar
+       * blob longblob mediumblob binary tinyblob varbinary
+       * enum set
+       * for json type: json
+       * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public Builder clearMysqlType() { + bitField0_ = (bitField0_ & ~0x00000002); + mysqlType_ = getDefaultInstance().getMysqlType(); + onChanged(); + return this; + } + /** + *
+       * lower case column field type in mysql
+       * https://dev.mysql.com/doc/refman/8.0/en/data-types.html
+       * for numeric type: int bigint smallint tinyint float double decimal bit
+       * for string type: text longtext mediumtext char tinytext varchar
+       * blob longblob mediumblob binary tinyblob varbinary
+       * enum set
+       * for json type: json
+       * 
+ * + * optional string mysql_type = 2 [(.gogoproto.nullable) = false]; + */ + public Builder setMysqlTypeBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + mysqlType_ = value; + onChanged(); + return this; + } + + private boolean isPrimaryKey_ ; + /** + * optional bool is_primary_key = 3 [(.gogoproto.nullable) = false]; + */ + public boolean hasIsPrimaryKey() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * optional bool is_primary_key = 3 [(.gogoproto.nullable) = false]; + */ + public boolean getIsPrimaryKey() { + return isPrimaryKey_; + } + /** + * optional bool is_primary_key = 3 [(.gogoproto.nullable) = false]; + */ + public Builder setIsPrimaryKey(boolean value) { + bitField0_ |= 0x00000004; + isPrimaryKey_ = value; + onChanged(); + return this; + } + /** + * optional bool is_primary_key = 3 [(.gogoproto.nullable) = false]; + */ + public Builder clearIsPrimaryKey() { + bitField0_ = (bitField0_ & ~0x00000004); + isPrimaryKey_ = false; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:com.tnp.search.ColumnInfo) + } + + // @@protoc_insertion_point(class_scope:com.tnp.search.ColumnInfo) + private static final com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo(); + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ColumnInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ColumnInfo(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface RowOrBuilder extends + // @@protoc_insertion_point(interface_extends:com.tnp.search.Row) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .com.tnp.search.Column columns = 1; + */ + java.util.List + getColumnsList(); + /** + * repeated .com.tnp.search.Column columns = 1; + */ + com.pingcap.kafkareader.proto.BinLogInfo.Column getColumns(int index); + /** + * repeated .com.tnp.search.Column columns = 1; + */ + int getColumnsCount(); + /** + * repeated .com.tnp.search.Column columns = 1; + */ + java.util.List + getColumnsOrBuilderList(); + /** + * repeated .com.tnp.search.Column columns = 1; + */ + com.pingcap.kafkareader.proto.BinLogInfo.ColumnOrBuilder getColumnsOrBuilder( + int index); + } + /** + * Protobuf type {@code com.tnp.search.Row} + */ + public static final class Row extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:com.tnp.search.Row) + RowOrBuilder { + private static final long serialVersionUID = 0L; + // Use Row.newBuilder() to construct. + private Row(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Row() { + columns_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Row(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Row( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + columns_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + columns_.add( + input.readMessage(com.pingcap.kafkareader.proto.BinLogInfo.Column.PARSER, extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + columns_ = java.util.Collections.unmodifiableList(columns_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Row_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Row_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.Row.class, com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder.class); + } + + public static final int COLUMNS_FIELD_NUMBER = 1; + private java.util.List columns_; + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public java.util.List getColumnsList() { + return columns_; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public java.util.List + getColumnsOrBuilderList() { + return columns_; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public int getColumnsCount() { + return columns_.size(); + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Column getColumns(int index) { + return columns_.get(index); + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnOrBuilder getColumnsOrBuilder( + int index) { + return columns_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < columns_.size(); i++) { + output.writeMessage(1, columns_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < columns_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, columns_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.BinLogInfo.Row)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.BinLogInfo.Row other = (com.pingcap.kafkareader.proto.BinLogInfo.Row) obj; + + if (!getColumnsList() + .equals(other.getColumnsList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getColumnsCount() > 0) { + hash = (37 * hash) + COLUMNS_FIELD_NUMBER; + hash = (53 * hash) + getColumnsList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Row parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.BinLogInfo.Row prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code com.tnp.search.Row} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:com.tnp.search.Row) + com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Row_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Row_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.Row.class, com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.BinLogInfo.Row.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getColumnsFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (columnsBuilder_ == null) { + columns_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + columnsBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Row_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Row getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Row build() { + com.pingcap.kafkareader.proto.BinLogInfo.Row result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Row buildPartial() { + com.pingcap.kafkareader.proto.BinLogInfo.Row result = new com.pingcap.kafkareader.proto.BinLogInfo.Row(this); + int from_bitField0_ = bitField0_; + if (columnsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + columns_ = java.util.Collections.unmodifiableList(columns_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.columns_ = columns_; + } else { + result.columns_ = columnsBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.BinLogInfo.Row) { + return mergeFrom((com.pingcap.kafkareader.proto.BinLogInfo.Row)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.BinLogInfo.Row other) { + if (other == com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance()) return this; + if (columnsBuilder_ == null) { + if (!other.columns_.isEmpty()) { + if (columns_.isEmpty()) { + columns_ = other.columns_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureColumnsIsMutable(); + columns_.addAll(other.columns_); + } + onChanged(); + } + } else { + if (!other.columns_.isEmpty()) { + if (columnsBuilder_.isEmpty()) { + columnsBuilder_.dispose(); + columnsBuilder_ = null; + columns_ = other.columns_; + bitField0_ = (bitField0_ & ~0x00000001); + columnsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getColumnsFieldBuilder() : null; + } else { + columnsBuilder_.addAllMessages(other.columns_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.BinLogInfo.Row parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.BinLogInfo.Row) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List columns_ = + java.util.Collections.emptyList(); + private void ensureColumnsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + columns_ = new java.util.ArrayList(columns_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Column, com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder, com.pingcap.kafkareader.proto.BinLogInfo.ColumnOrBuilder> columnsBuilder_; + + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public java.util.List getColumnsList() { + if (columnsBuilder_ == null) { + return java.util.Collections.unmodifiableList(columns_); + } else { + return columnsBuilder_.getMessageList(); + } + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public int getColumnsCount() { + if (columnsBuilder_ == null) { + return columns_.size(); + } else { + return columnsBuilder_.getCount(); + } + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Column getColumns(int index) { + if (columnsBuilder_ == null) { + return columns_.get(index); + } else { + return columnsBuilder_.getMessage(index); + } + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder setColumns( + int index, com.pingcap.kafkareader.proto.BinLogInfo.Column value) { + if (columnsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnsIsMutable(); + columns_.set(index, value); + onChanged(); + } else { + columnsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder setColumns( + int index, com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder builderForValue) { + if (columnsBuilder_ == null) { + ensureColumnsIsMutable(); + columns_.set(index, builderForValue.build()); + onChanged(); + } else { + columnsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder addColumns(com.pingcap.kafkareader.proto.BinLogInfo.Column value) { + if (columnsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnsIsMutable(); + columns_.add(value); + onChanged(); + } else { + columnsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder addColumns( + int index, com.pingcap.kafkareader.proto.BinLogInfo.Column value) { + if (columnsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnsIsMutable(); + columns_.add(index, value); + onChanged(); + } else { + columnsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder addColumns( + com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder builderForValue) { + if (columnsBuilder_ == null) { + ensureColumnsIsMutable(); + columns_.add(builderForValue.build()); + onChanged(); + } else { + columnsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder addColumns( + int index, com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder builderForValue) { + if (columnsBuilder_ == null) { + ensureColumnsIsMutable(); + columns_.add(index, builderForValue.build()); + onChanged(); + } else { + columnsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder addAllColumns( + java.lang.Iterable values) { + if (columnsBuilder_ == null) { + ensureColumnsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, columns_); + onChanged(); + } else { + columnsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder clearColumns() { + if (columnsBuilder_ == null) { + columns_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + columnsBuilder_.clear(); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public Builder removeColumns(int index) { + if (columnsBuilder_ == null) { + ensureColumnsIsMutable(); + columns_.remove(index); + onChanged(); + } else { + columnsBuilder_.remove(index); + } + return this; + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder getColumnsBuilder( + int index) { + return getColumnsFieldBuilder().getBuilder(index); + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnOrBuilder getColumnsOrBuilder( + int index) { + if (columnsBuilder_ == null) { + return columns_.get(index); } else { + return columnsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public java.util.List + getColumnsOrBuilderList() { + if (columnsBuilder_ != null) { + return columnsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(columns_); + } + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder addColumnsBuilder() { + return getColumnsFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.BinLogInfo.Column.getDefaultInstance()); + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder addColumnsBuilder( + int index) { + return getColumnsFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.BinLogInfo.Column.getDefaultInstance()); + } + /** + * repeated .com.tnp.search.Column columns = 1; + */ + public java.util.List + getColumnsBuilderList() { + return getColumnsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Column, com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder, com.pingcap.kafkareader.proto.BinLogInfo.ColumnOrBuilder> + getColumnsFieldBuilder() { + if (columnsBuilder_ == null) { + columnsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Column, com.pingcap.kafkareader.proto.BinLogInfo.Column.Builder, com.pingcap.kafkareader.proto.BinLogInfo.ColumnOrBuilder>( + columns_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + columns_ = null; + } + return columnsBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:com.tnp.search.Row) + } + + // @@protoc_insertion_point(class_scope:com.tnp.search.Row) + private static final com.pingcap.kafkareader.proto.BinLogInfo.Row DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.BinLogInfo.Row(); + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.Row getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Row parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Row(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Row getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface TableOrBuilder extends + // @@protoc_insertion_point(interface_extends:com.tnp.search.Table) + com.google.protobuf.MessageOrBuilder { + + /** + * optional string schema_name = 1; + */ + boolean hasSchemaName(); + /** + * optional string schema_name = 1; + */ + java.lang.String getSchemaName(); + /** + * optional string schema_name = 1; + */ + com.google.protobuf.ByteString + getSchemaNameBytes(); + + /** + * optional string table_name = 2; + */ + boolean hasTableName(); + /** + * optional string table_name = 2; + */ + java.lang.String getTableName(); + /** + * optional string table_name = 2; + */ + com.google.protobuf.ByteString + getTableNameBytes(); + + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + java.util.List + getColumnInfoList(); + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo getColumnInfo(int index); + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + int getColumnInfoCount(); + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + java.util.List + getColumnInfoOrBuilderList(); + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfoOrBuilder getColumnInfoOrBuilder( + int index); + + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + java.util.List + getMutationsList(); + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation getMutations(int index); + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + int getMutationsCount(); + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + java.util.List + getMutationsOrBuilderList(); + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + com.pingcap.kafkareader.proto.BinLogInfo.TableMutationOrBuilder getMutationsOrBuilder( + int index); + } + /** + *
+   *  Table contains mutations in a table.
+   * 
+ * + * Protobuf type {@code com.tnp.search.Table} + */ + public static final class Table extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:com.tnp.search.Table) + TableOrBuilder { + private static final long serialVersionUID = 0L; + // Use Table.newBuilder() to construct. + private Table(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Table() { + schemaName_ = ""; + tableName_ = ""; + columnInfo_ = java.util.Collections.emptyList(); + mutations_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Table(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Table( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + schemaName_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + tableName_ = bs; + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000004) != 0)) { + columnInfo_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + columnInfo_.add( + input.readMessage(com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.PARSER, extensionRegistry)); + break; + } + case 34: { + if (!((mutable_bitField0_ & 0x00000008) != 0)) { + mutations_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000008; + } + mutations_.add( + input.readMessage(com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.PARSER, extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000004) != 0)) { + columnInfo_ = java.util.Collections.unmodifiableList(columnInfo_); + } + if (((mutable_bitField0_ & 0x00000008) != 0)) { + mutations_ = java.util.Collections.unmodifiableList(mutations_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Table_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Table_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.Table.class, com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder.class); + } + + private int bitField0_; + public static final int SCHEMA_NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object schemaName_; + /** + * optional string schema_name = 1; + */ + public boolean hasSchemaName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional string schema_name = 1; + */ + public java.lang.String getSchemaName() { + java.lang.Object ref = schemaName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + schemaName_ = s; + } + return s; + } + } + /** + * optional string schema_name = 1; + */ + public com.google.protobuf.ByteString + getSchemaNameBytes() { + java.lang.Object ref = schemaName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + schemaName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TABLE_NAME_FIELD_NUMBER = 2; + private volatile java.lang.Object tableName_; + /** + * optional string table_name = 2; + */ + public boolean hasTableName() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional string table_name = 2; + */ + public java.lang.String getTableName() { + java.lang.Object ref = tableName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + tableName_ = s; + } + return s; + } + } + /** + * optional string table_name = 2; + */ + public com.google.protobuf.ByteString + getTableNameBytes() { + java.lang.Object ref = tableName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + tableName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int COLUMN_INFO_FIELD_NUMBER = 3; + private java.util.List columnInfo_; + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public java.util.List getColumnInfoList() { + return columnInfo_; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public java.util.List + getColumnInfoOrBuilderList() { + return columnInfo_; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public int getColumnInfoCount() { + return columnInfo_.size(); + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo getColumnInfo(int index) { + return columnInfo_.get(index); + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfoOrBuilder getColumnInfoOrBuilder( + int index) { + return columnInfo_.get(index); + } + + public static final int MUTATIONS_FIELD_NUMBER = 4; + private java.util.List mutations_; + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public java.util.List getMutationsList() { + return mutations_; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public java.util.List + getMutationsOrBuilderList() { + return mutations_; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public int getMutationsCount() { + return mutations_.size(); + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation getMutations(int index) { + return mutations_.get(index); + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutationOrBuilder getMutationsOrBuilder( + int index) { + return mutations_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + for (int i = 0; i < getMutationsCount(); i++) { + if (!getMutations(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, schemaName_); + } + if (((bitField0_ & 0x00000002) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, tableName_); + } + for (int i = 0; i < columnInfo_.size(); i++) { + output.writeMessage(3, columnInfo_.get(i)); + } + for (int i = 0; i < mutations_.size(); i++) { + output.writeMessage(4, mutations_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, schemaName_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, tableName_); + } + for (int i = 0; i < columnInfo_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, columnInfo_.get(i)); + } + for (int i = 0; i < mutations_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, mutations_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.BinLogInfo.Table)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.BinLogInfo.Table other = (com.pingcap.kafkareader.proto.BinLogInfo.Table) obj; + + if (hasSchemaName() != other.hasSchemaName()) return false; + if (hasSchemaName()) { + if (!getSchemaName() + .equals(other.getSchemaName())) return false; + } + if (hasTableName() != other.hasTableName()) return false; + if (hasTableName()) { + if (!getTableName() + .equals(other.getTableName())) return false; + } + if (!getColumnInfoList() + .equals(other.getColumnInfoList())) return false; + if (!getMutationsList() + .equals(other.getMutationsList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasSchemaName()) { + hash = (37 * hash) + SCHEMA_NAME_FIELD_NUMBER; + hash = (53 * hash) + getSchemaName().hashCode(); + } + if (hasTableName()) { + hash = (37 * hash) + TABLE_NAME_FIELD_NUMBER; + hash = (53 * hash) + getTableName().hashCode(); + } + if (getColumnInfoCount() > 0) { + hash = (37 * hash) + COLUMN_INFO_FIELD_NUMBER; + hash = (53 * hash) + getColumnInfoList().hashCode(); + } + if (getMutationsCount() > 0) { + hash = (37 * hash) + MUTATIONS_FIELD_NUMBER; + hash = (53 * hash) + getMutationsList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Table parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.BinLogInfo.Table prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     *  Table contains mutations in a table.
+     * 
+ * + * Protobuf type {@code com.tnp.search.Table} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:com.tnp.search.Table) + com.pingcap.kafkareader.proto.BinLogInfo.TableOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Table_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Table_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.Table.class, com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.BinLogInfo.Table.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getColumnInfoFieldBuilder(); + getMutationsFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + schemaName_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + tableName_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + if (columnInfoBuilder_ == null) { + columnInfo_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + columnInfoBuilder_.clear(); + } + if (mutationsBuilder_ == null) { + mutations_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + } else { + mutationsBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Table_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Table getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.Table.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Table build() { + com.pingcap.kafkareader.proto.BinLogInfo.Table result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Table buildPartial() { + com.pingcap.kafkareader.proto.BinLogInfo.Table result = new com.pingcap.kafkareader.proto.BinLogInfo.Table(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.schemaName_ = schemaName_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.tableName_ = tableName_; + if (columnInfoBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + columnInfo_ = java.util.Collections.unmodifiableList(columnInfo_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.columnInfo_ = columnInfo_; + } else { + result.columnInfo_ = columnInfoBuilder_.build(); + } + if (mutationsBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0)) { + mutations_ = java.util.Collections.unmodifiableList(mutations_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.mutations_ = mutations_; + } else { + result.mutations_ = mutationsBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.BinLogInfo.Table) { + return mergeFrom((com.pingcap.kafkareader.proto.BinLogInfo.Table)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.BinLogInfo.Table other) { + if (other == com.pingcap.kafkareader.proto.BinLogInfo.Table.getDefaultInstance()) return this; + if (other.hasSchemaName()) { + bitField0_ |= 0x00000001; + schemaName_ = other.schemaName_; + onChanged(); + } + if (other.hasTableName()) { + bitField0_ |= 0x00000002; + tableName_ = other.tableName_; + onChanged(); + } + if (columnInfoBuilder_ == null) { + if (!other.columnInfo_.isEmpty()) { + if (columnInfo_.isEmpty()) { + columnInfo_ = other.columnInfo_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureColumnInfoIsMutable(); + columnInfo_.addAll(other.columnInfo_); + } + onChanged(); + } + } else { + if (!other.columnInfo_.isEmpty()) { + if (columnInfoBuilder_.isEmpty()) { + columnInfoBuilder_.dispose(); + columnInfoBuilder_ = null; + columnInfo_ = other.columnInfo_; + bitField0_ = (bitField0_ & ~0x00000004); + columnInfoBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getColumnInfoFieldBuilder() : null; + } else { + columnInfoBuilder_.addAllMessages(other.columnInfo_); + } + } + } + if (mutationsBuilder_ == null) { + if (!other.mutations_.isEmpty()) { + if (mutations_.isEmpty()) { + mutations_ = other.mutations_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureMutationsIsMutable(); + mutations_.addAll(other.mutations_); + } + onChanged(); + } + } else { + if (!other.mutations_.isEmpty()) { + if (mutationsBuilder_.isEmpty()) { + mutationsBuilder_.dispose(); + mutationsBuilder_ = null; + mutations_ = other.mutations_; + bitField0_ = (bitField0_ & ~0x00000008); + mutationsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getMutationsFieldBuilder() : null; + } else { + mutationsBuilder_.addAllMessages(other.mutations_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + for (int i = 0; i < getMutationsCount(); i++) { + if (!getMutations(i).isInitialized()) { + return false; + } + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.BinLogInfo.Table parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.BinLogInfo.Table) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object schemaName_ = ""; + /** + * optional string schema_name = 1; + */ + public boolean hasSchemaName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional string schema_name = 1; + */ + public java.lang.String getSchemaName() { + java.lang.Object ref = schemaName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + schemaName_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string schema_name = 1; + */ + public com.google.protobuf.ByteString + getSchemaNameBytes() { + java.lang.Object ref = schemaName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + schemaName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string schema_name = 1; + */ + public Builder setSchemaName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + schemaName_ = value; + onChanged(); + return this; + } + /** + * optional string schema_name = 1; + */ + public Builder clearSchemaName() { + bitField0_ = (bitField0_ & ~0x00000001); + schemaName_ = getDefaultInstance().getSchemaName(); + onChanged(); + return this; + } + /** + * optional string schema_name = 1; + */ + public Builder setSchemaNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + schemaName_ = value; + onChanged(); + return this; + } + + private java.lang.Object tableName_ = ""; + /** + * optional string table_name = 2; + */ + public boolean hasTableName() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional string table_name = 2; + */ + public java.lang.String getTableName() { + java.lang.Object ref = tableName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + tableName_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string table_name = 2; + */ + public com.google.protobuf.ByteString + getTableNameBytes() { + java.lang.Object ref = tableName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + tableName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string table_name = 2; + */ + public Builder setTableName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + tableName_ = value; + onChanged(); + return this; + } + /** + * optional string table_name = 2; + */ + public Builder clearTableName() { + bitField0_ = (bitField0_ & ~0x00000002); + tableName_ = getDefaultInstance().getTableName(); + onChanged(); + return this; + } + /** + * optional string table_name = 2; + */ + public Builder setTableNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + tableName_ = value; + onChanged(); + return this; + } + + private java.util.List columnInfo_ = + java.util.Collections.emptyList(); + private void ensureColumnInfoIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + columnInfo_ = new java.util.ArrayList(columnInfo_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfoOrBuilder> columnInfoBuilder_; + + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public java.util.List getColumnInfoList() { + if (columnInfoBuilder_ == null) { + return java.util.Collections.unmodifiableList(columnInfo_); + } else { + return columnInfoBuilder_.getMessageList(); + } + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public int getColumnInfoCount() { + if (columnInfoBuilder_ == null) { + return columnInfo_.size(); + } else { + return columnInfoBuilder_.getCount(); + } + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo getColumnInfo(int index) { + if (columnInfoBuilder_ == null) { + return columnInfo_.get(index); + } else { + return columnInfoBuilder_.getMessage(index); + } + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder setColumnInfo( + int index, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo value) { + if (columnInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnInfoIsMutable(); + columnInfo_.set(index, value); + onChanged(); + } else { + columnInfoBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder setColumnInfo( + int index, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder builderForValue) { + if (columnInfoBuilder_ == null) { + ensureColumnInfoIsMutable(); + columnInfo_.set(index, builderForValue.build()); + onChanged(); + } else { + columnInfoBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder addColumnInfo(com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo value) { + if (columnInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnInfoIsMutable(); + columnInfo_.add(value); + onChanged(); + } else { + columnInfoBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder addColumnInfo( + int index, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo value) { + if (columnInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureColumnInfoIsMutable(); + columnInfo_.add(index, value); + onChanged(); + } else { + columnInfoBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder addColumnInfo( + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder builderForValue) { + if (columnInfoBuilder_ == null) { + ensureColumnInfoIsMutable(); + columnInfo_.add(builderForValue.build()); + onChanged(); + } else { + columnInfoBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder addColumnInfo( + int index, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder builderForValue) { + if (columnInfoBuilder_ == null) { + ensureColumnInfoIsMutable(); + columnInfo_.add(index, builderForValue.build()); + onChanged(); + } else { + columnInfoBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder addAllColumnInfo( + java.lang.Iterable values) { + if (columnInfoBuilder_ == null) { + ensureColumnInfoIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, columnInfo_); + onChanged(); + } else { + columnInfoBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder clearColumnInfo() { + if (columnInfoBuilder_ == null) { + columnInfo_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + columnInfoBuilder_.clear(); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public Builder removeColumnInfo(int index) { + if (columnInfoBuilder_ == null) { + ensureColumnInfoIsMutable(); + columnInfo_.remove(index); + onChanged(); + } else { + columnInfoBuilder_.remove(index); + } + return this; + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder getColumnInfoBuilder( + int index) { + return getColumnInfoFieldBuilder().getBuilder(index); + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfoOrBuilder getColumnInfoOrBuilder( + int index) { + if (columnInfoBuilder_ == null) { + return columnInfo_.get(index); } else { + return columnInfoBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public java.util.List + getColumnInfoOrBuilderList() { + if (columnInfoBuilder_ != null) { + return columnInfoBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(columnInfo_); + } + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder addColumnInfoBuilder() { + return getColumnInfoFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.getDefaultInstance()); + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder addColumnInfoBuilder( + int index) { + return getColumnInfoFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.getDefaultInstance()); + } + /** + * repeated .com.tnp.search.ColumnInfo column_info = 3; + */ + public java.util.List + getColumnInfoBuilderList() { + return getColumnInfoFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfoOrBuilder> + getColumnInfoFieldBuilder() { + if (columnInfoBuilder_ == null) { + columnInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfo.Builder, com.pingcap.kafkareader.proto.BinLogInfo.ColumnInfoOrBuilder>( + columnInfo_, + ((bitField0_ & 0x00000004) != 0), + getParentForChildren(), + isClean()); + columnInfo_ = null; + } + return columnInfoBuilder_; + } + + private java.util.List mutations_ = + java.util.Collections.emptyList(); + private void ensureMutationsIsMutable() { + if (!((bitField0_ & 0x00000008) != 0)) { + mutations_ = new java.util.ArrayList(mutations_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder, com.pingcap.kafkareader.proto.BinLogInfo.TableMutationOrBuilder> mutationsBuilder_; + + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public java.util.List getMutationsList() { + if (mutationsBuilder_ == null) { + return java.util.Collections.unmodifiableList(mutations_); + } else { + return mutationsBuilder_.getMessageList(); + } + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public int getMutationsCount() { + if (mutationsBuilder_ == null) { + return mutations_.size(); + } else { + return mutationsBuilder_.getCount(); + } + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation getMutations(int index) { + if (mutationsBuilder_ == null) { + return mutations_.get(index); + } else { + return mutationsBuilder_.getMessage(index); + } + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder setMutations( + int index, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation value) { + if (mutationsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMutationsIsMutable(); + mutations_.set(index, value); + onChanged(); + } else { + mutationsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder setMutations( + int index, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder builderForValue) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.set(index, builderForValue.build()); + onChanged(); + } else { + mutationsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder addMutations(com.pingcap.kafkareader.proto.BinLogInfo.TableMutation value) { + if (mutationsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMutationsIsMutable(); + mutations_.add(value); + onChanged(); + } else { + mutationsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder addMutations( + int index, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation value) { + if (mutationsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMutationsIsMutable(); + mutations_.add(index, value); + onChanged(); + } else { + mutationsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder addMutations( + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder builderForValue) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.add(builderForValue.build()); + onChanged(); + } else { + mutationsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder addMutations( + int index, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder builderForValue) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.add(index, builderForValue.build()); + onChanged(); + } else { + mutationsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder addAllMutations( + java.lang.Iterable values) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, mutations_); + onChanged(); + } else { + mutationsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder clearMutations() { + if (mutationsBuilder_ == null) { + mutations_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + mutationsBuilder_.clear(); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public Builder removeMutations(int index) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.remove(index); + onChanged(); + } else { + mutationsBuilder_.remove(index); + } + return this; + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder getMutationsBuilder( + int index) { + return getMutationsFieldBuilder().getBuilder(index); + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutationOrBuilder getMutationsOrBuilder( + int index) { + if (mutationsBuilder_ == null) { + return mutations_.get(index); } else { + return mutationsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public java.util.List + getMutationsOrBuilderList() { + if (mutationsBuilder_ != null) { + return mutationsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(mutations_); + } + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder addMutationsBuilder() { + return getMutationsFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.getDefaultInstance()); + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder addMutationsBuilder( + int index) { + return getMutationsFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.getDefaultInstance()); + } + /** + * repeated .com.tnp.search.TableMutation mutations = 4; + */ + public java.util.List + getMutationsBuilderList() { + return getMutationsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder, com.pingcap.kafkareader.proto.BinLogInfo.TableMutationOrBuilder> + getMutationsFieldBuilder() { + if (mutationsBuilder_ == null) { + mutationsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder, com.pingcap.kafkareader.proto.BinLogInfo.TableMutationOrBuilder>( + mutations_, + ((bitField0_ & 0x00000008) != 0), + getParentForChildren(), + isClean()); + mutations_ = null; + } + return mutationsBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:com.tnp.search.Table) + } + + // @@protoc_insertion_point(class_scope:com.tnp.search.Table) + private static final com.pingcap.kafkareader.proto.BinLogInfo.Table DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.BinLogInfo.Table(); + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.Table getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser
() { + @java.lang.Override + public Table parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Table(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser
parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser
getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Table getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface TableMutationOrBuilder extends + // @@protoc_insertion_point(interface_extends:com.tnp.search.TableMutation) + com.google.protobuf.MessageOrBuilder { + + /** + * required .com.tnp.search.MutationType type = 1; + */ + boolean hasType(); + /** + * required .com.tnp.search.MutationType type = 1; + */ + com.pingcap.kafkareader.proto.BinLogInfo.MutationType getType(); + + /** + *
+     *update之后新的值
+     * 
+ * + * required .com.tnp.search.Row row = 2; + */ + boolean hasRow(); + /** + *
+     *update之后新的值
+     * 
+ * + * required .com.tnp.search.Row row = 2; + */ + com.pingcap.kafkareader.proto.BinLogInfo.Row getRow(); + /** + *
+     *update之后新的值
+     * 
+ * + * required .com.tnp.search.Row row = 2; + */ + com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder getRowOrBuilder(); + + /** + *
+     * for Update MutationType only[update之前的老的值]
+     * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + boolean hasChangeRow(); + /** + *
+     * for Update MutationType only[update之前的老的值]
+     * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + com.pingcap.kafkareader.proto.BinLogInfo.Row getChangeRow(); + /** + *
+     * for Update MutationType only[update之前的老的值]
+     * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder getChangeRowOrBuilder(); + } + /** + * Protobuf type {@code com.tnp.search.TableMutation} + */ + public static final class TableMutation extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:com.tnp.search.TableMutation) + TableMutationOrBuilder { + private static final long serialVersionUID = 0L; + // Use TableMutation.newBuilder() to construct. + private TableMutation(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private TableMutation() { + type_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new TableMutation(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private TableMutation( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + int rawValue = input.readEnum(); + @SuppressWarnings("deprecation") + com.pingcap.kafkareader.proto.BinLogInfo.MutationType value = com.pingcap.kafkareader.proto.BinLogInfo.MutationType.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(1, rawValue); + } else { + bitField0_ |= 0x00000001; + type_ = rawValue; + } + break; + } + case 18: { + com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder subBuilder = null; + if (((bitField0_ & 0x00000002) != 0)) { + subBuilder = row_.toBuilder(); + } + row_ = input.readMessage(com.pingcap.kafkareader.proto.BinLogInfo.Row.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(row_); + row_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000002; + break; + } + case 26: { + com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder subBuilder = null; + if (((bitField0_ & 0x00000004) != 0)) { + subBuilder = changeRow_.toBuilder(); + } + changeRow_ = input.readMessage(com.pingcap.kafkareader.proto.BinLogInfo.Row.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(changeRow_); + changeRow_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000004; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_TableMutation_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_TableMutation_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.class, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder.class); + } + + private int bitField0_; + public static final int TYPE_FIELD_NUMBER = 1; + private int type_; + /** + * required .com.tnp.search.MutationType type = 1; + */ + public boolean hasType() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * required .com.tnp.search.MutationType type = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.MutationType getType() { + @SuppressWarnings("deprecation") + com.pingcap.kafkareader.proto.BinLogInfo.MutationType result = com.pingcap.kafkareader.proto.BinLogInfo.MutationType.valueOf(type_); + return result == null ? com.pingcap.kafkareader.proto.BinLogInfo.MutationType.Insert : result; + } + + public static final int ROW_FIELD_NUMBER = 2; + private com.pingcap.kafkareader.proto.BinLogInfo.Row row_; + /** + *
+     *update之后新的值
+     * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public boolean hasRow() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+     *update之后新的值
+     * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Row getRow() { + return row_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance() : row_; + } + /** + *
+     *update之后新的值
+     * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder getRowOrBuilder() { + return row_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance() : row_; + } + + public static final int CHANGE_ROW_FIELD_NUMBER = 3; + private com.pingcap.kafkareader.proto.BinLogInfo.Row changeRow_; + /** + *
+     * for Update MutationType only[update之前的老的值]
+     * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public boolean hasChangeRow() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + *
+     * for Update MutationType only[update之前的老的值]
+     * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Row getChangeRow() { + return changeRow_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance() : changeRow_; + } + /** + *
+     * for Update MutationType only[update之前的老的值]
+     * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder getChangeRowOrBuilder() { + return changeRow_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance() : changeRow_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (!hasType()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasRow()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeEnum(1, type_); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getRow()); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(3, getChangeRow()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, type_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getRow()); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getChangeRow()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.BinLogInfo.TableMutation)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation other = (com.pingcap.kafkareader.proto.BinLogInfo.TableMutation) obj; + + if (hasType() != other.hasType()) return false; + if (hasType()) { + if (type_ != other.type_) return false; + } + if (hasRow() != other.hasRow()) return false; + if (hasRow()) { + if (!getRow() + .equals(other.getRow())) return false; + } + if (hasChangeRow() != other.hasChangeRow()) return false; + if (hasChangeRow()) { + if (!getChangeRow() + .equals(other.getChangeRow())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasType()) { + hash = (37 * hash) + TYPE_FIELD_NUMBER; + hash = (53 * hash) + type_; + } + if (hasRow()) { + hash = (37 * hash) + ROW_FIELD_NUMBER; + hash = (53 * hash) + getRow().hashCode(); + } + if (hasChangeRow()) { + hash = (37 * hash) + CHANGE_ROW_FIELD_NUMBER; + hash = (53 * hash) + getChangeRow().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.BinLogInfo.TableMutation prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code com.tnp.search.TableMutation} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:com.tnp.search.TableMutation) + com.pingcap.kafkareader.proto.BinLogInfo.TableMutationOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_TableMutation_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_TableMutation_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.class, com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getRowFieldBuilder(); + getChangeRowFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + type_ = 0; + bitField0_ = (bitField0_ & ~0x00000001); + if (rowBuilder_ == null) { + row_ = null; + } else { + rowBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (changeRowBuilder_ == null) { + changeRow_ = null; + } else { + changeRowBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_TableMutation_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation build() { + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation buildPartial() { + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation result = new com.pingcap.kafkareader.proto.BinLogInfo.TableMutation(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.type_ = type_; + if (((from_bitField0_ & 0x00000002) != 0)) { + if (rowBuilder_ == null) { + result.row_ = row_; + } else { + result.row_ = rowBuilder_.build(); + } + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + if (changeRowBuilder_ == null) { + result.changeRow_ = changeRow_; + } else { + result.changeRow_ = changeRowBuilder_.build(); + } + to_bitField0_ |= 0x00000004; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.BinLogInfo.TableMutation) { + return mergeFrom((com.pingcap.kafkareader.proto.BinLogInfo.TableMutation)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.BinLogInfo.TableMutation other) { + if (other == com.pingcap.kafkareader.proto.BinLogInfo.TableMutation.getDefaultInstance()) return this; + if (other.hasType()) { + setType(other.getType()); + } + if (other.hasRow()) { + mergeRow(other.getRow()); + } + if (other.hasChangeRow()) { + mergeChangeRow(other.getChangeRow()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + if (!hasType()) { + return false; + } + if (!hasRow()) { + return false; + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.BinLogInfo.TableMutation parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.BinLogInfo.TableMutation) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int type_ = 0; + /** + * required .com.tnp.search.MutationType type = 1; + */ + public boolean hasType() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * required .com.tnp.search.MutationType type = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.MutationType getType() { + @SuppressWarnings("deprecation") + com.pingcap.kafkareader.proto.BinLogInfo.MutationType result = com.pingcap.kafkareader.proto.BinLogInfo.MutationType.valueOf(type_); + return result == null ? com.pingcap.kafkareader.proto.BinLogInfo.MutationType.Insert : result; + } + /** + * required .com.tnp.search.MutationType type = 1; + */ + public Builder setType(com.pingcap.kafkareader.proto.BinLogInfo.MutationType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + type_ = value.getNumber(); + onChanged(); + return this; + } + /** + * required .com.tnp.search.MutationType type = 1; + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000001); + type_ = 0; + onChanged(); + return this; + } + + private com.pingcap.kafkareader.proto.BinLogInfo.Row row_; + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Row, com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder, com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder> rowBuilder_; + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public boolean hasRow() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Row getRow() { + if (rowBuilder_ == null) { + return row_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance() : row_; + } else { + return rowBuilder_.getMessage(); + } + } + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public Builder setRow(com.pingcap.kafkareader.proto.BinLogInfo.Row value) { + if (rowBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + row_ = value; + onChanged(); + } else { + rowBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public Builder setRow( + com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder builderForValue) { + if (rowBuilder_ == null) { + row_ = builderForValue.build(); + onChanged(); + } else { + rowBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public Builder mergeRow(com.pingcap.kafkareader.proto.BinLogInfo.Row value) { + if (rowBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) && + row_ != null && + row_ != com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance()) { + row_ = + com.pingcap.kafkareader.proto.BinLogInfo.Row.newBuilder(row_).mergeFrom(value).buildPartial(); + } else { + row_ = value; + } + onChanged(); + } else { + rowBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public Builder clearRow() { + if (rowBuilder_ == null) { + row_ = null; + onChanged(); + } else { + rowBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder getRowBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getRowFieldBuilder().getBuilder(); + } + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder getRowOrBuilder() { + if (rowBuilder_ != null) { + return rowBuilder_.getMessageOrBuilder(); + } else { + return row_ == null ? + com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance() : row_; + } + } + /** + *
+       *update之后新的值
+       * 
+ * + * required .com.tnp.search.Row row = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Row, com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder, com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder> + getRowFieldBuilder() { + if (rowBuilder_ == null) { + rowBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Row, com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder, com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder>( + getRow(), + getParentForChildren(), + isClean()); + row_ = null; + } + return rowBuilder_; + } + + private com.pingcap.kafkareader.proto.BinLogInfo.Row changeRow_; + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Row, com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder, com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder> changeRowBuilder_; + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public boolean hasChangeRow() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Row getChangeRow() { + if (changeRowBuilder_ == null) { + return changeRow_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance() : changeRow_; + } else { + return changeRowBuilder_.getMessage(); + } + } + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public Builder setChangeRow(com.pingcap.kafkareader.proto.BinLogInfo.Row value) { + if (changeRowBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + changeRow_ = value; + onChanged(); + } else { + changeRowBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public Builder setChangeRow( + com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder builderForValue) { + if (changeRowBuilder_ == null) { + changeRow_ = builderForValue.build(); + onChanged(); + } else { + changeRowBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public Builder mergeChangeRow(com.pingcap.kafkareader.proto.BinLogInfo.Row value) { + if (changeRowBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) && + changeRow_ != null && + changeRow_ != com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance()) { + changeRow_ = + com.pingcap.kafkareader.proto.BinLogInfo.Row.newBuilder(changeRow_).mergeFrom(value).buildPartial(); + } else { + changeRow_ = value; + } + onChanged(); + } else { + changeRowBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public Builder clearChangeRow() { + if (changeRowBuilder_ == null) { + changeRow_ = null; + onChanged(); + } else { + changeRowBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder getChangeRowBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getChangeRowFieldBuilder().getBuilder(); + } + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder getChangeRowOrBuilder() { + if (changeRowBuilder_ != null) { + return changeRowBuilder_.getMessageOrBuilder(); + } else { + return changeRow_ == null ? + com.pingcap.kafkareader.proto.BinLogInfo.Row.getDefaultInstance() : changeRow_; + } + } + /** + *
+       * for Update MutationType only[update之前的老的值]
+       * 
+ * + * optional .com.tnp.search.Row change_row = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Row, com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder, com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder> + getChangeRowFieldBuilder() { + if (changeRowBuilder_ == null) { + changeRowBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Row, com.pingcap.kafkareader.proto.BinLogInfo.Row.Builder, com.pingcap.kafkareader.proto.BinLogInfo.RowOrBuilder>( + getChangeRow(), + getParentForChildren(), + isClean()); + changeRow_ = null; + } + return changeRowBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:com.tnp.search.TableMutation) + } + + // @@protoc_insertion_point(class_scope:com.tnp.search.TableMutation) + private static final com.pingcap.kafkareader.proto.BinLogInfo.TableMutation DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.BinLogInfo.TableMutation(); + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.TableMutation getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public TableMutation parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new TableMutation(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.TableMutation getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DMLDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:com.tnp.search.DMLData) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + java.util.List + getTablesList(); + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + com.pingcap.kafkareader.proto.BinLogInfo.Table getTables(int index); + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + int getTablesCount(); + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + java.util.List + getTablesOrBuilderList(); + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + com.pingcap.kafkareader.proto.BinLogInfo.TableOrBuilder getTablesOrBuilder( + int index); + } + /** + * Protobuf type {@code com.tnp.search.DMLData} + */ + public static final class DMLData extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:com.tnp.search.DMLData) + DMLDataOrBuilder { + private static final long serialVersionUID = 0L; + // Use DMLData.newBuilder() to construct. + private DMLData(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DMLData() { + tables_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new DMLData(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DMLData( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + tables_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + tables_.add( + input.readMessage(com.pingcap.kafkareader.proto.BinLogInfo.Table.PARSER, extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + tables_ = java.util.Collections.unmodifiableList(tables_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DMLData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DMLData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.DMLData.class, com.pingcap.kafkareader.proto.BinLogInfo.DMLData.Builder.class); + } + + public static final int TABLES_FIELD_NUMBER = 1; + private java.util.List tables_; + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public java.util.List getTablesList() { + return tables_; + } + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public java.util.List + getTablesOrBuilderList() { + return tables_; + } + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public int getTablesCount() { + return tables_.size(); + } + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Table getTables(int index) { + return tables_.get(index); + } + /** + *
+     * tables contains all the table changes.
+     * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableOrBuilder getTablesOrBuilder( + int index) { + return tables_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + for (int i = 0; i < getTablesCount(); i++) { + if (!getTables(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < tables_.size(); i++) { + output.writeMessage(1, tables_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < tables_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, tables_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.BinLogInfo.DMLData)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.BinLogInfo.DMLData other = (com.pingcap.kafkareader.proto.BinLogInfo.DMLData) obj; + + if (!getTablesList() + .equals(other.getTablesList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getTablesCount() > 0) { + hash = (37 * hash) + TABLES_FIELD_NUMBER; + hash = (53 * hash) + getTablesList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.BinLogInfo.DMLData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code com.tnp.search.DMLData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:com.tnp.search.DMLData) + com.pingcap.kafkareader.proto.BinLogInfo.DMLDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DMLData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DMLData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.DMLData.class, com.pingcap.kafkareader.proto.BinLogInfo.DMLData.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.BinLogInfo.DMLData.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getTablesFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (tablesBuilder_ == null) { + tables_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + tablesBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DMLData_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.DMLData getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.DMLData.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.DMLData build() { + com.pingcap.kafkareader.proto.BinLogInfo.DMLData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.DMLData buildPartial() { + com.pingcap.kafkareader.proto.BinLogInfo.DMLData result = new com.pingcap.kafkareader.proto.BinLogInfo.DMLData(this); + int from_bitField0_ = bitField0_; + if (tablesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + tables_ = java.util.Collections.unmodifiableList(tables_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.tables_ = tables_; + } else { + result.tables_ = tablesBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.BinLogInfo.DMLData) { + return mergeFrom((com.pingcap.kafkareader.proto.BinLogInfo.DMLData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.BinLogInfo.DMLData other) { + if (other == com.pingcap.kafkareader.proto.BinLogInfo.DMLData.getDefaultInstance()) return this; + if (tablesBuilder_ == null) { + if (!other.tables_.isEmpty()) { + if (tables_.isEmpty()) { + tables_ = other.tables_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureTablesIsMutable(); + tables_.addAll(other.tables_); + } + onChanged(); + } + } else { + if (!other.tables_.isEmpty()) { + if (tablesBuilder_.isEmpty()) { + tablesBuilder_.dispose(); + tablesBuilder_ = null; + tables_ = other.tables_; + bitField0_ = (bitField0_ & ~0x00000001); + tablesBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getTablesFieldBuilder() : null; + } else { + tablesBuilder_.addAllMessages(other.tables_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + for (int i = 0; i < getTablesCount(); i++) { + if (!getTables(i).isInitialized()) { + return false; + } + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.BinLogInfo.DMLData parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.BinLogInfo.DMLData) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List tables_ = + java.util.Collections.emptyList(); + private void ensureTablesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + tables_ = new java.util.ArrayList(tables_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Table, com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder, com.pingcap.kafkareader.proto.BinLogInfo.TableOrBuilder> tablesBuilder_; + + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public java.util.List getTablesList() { + if (tablesBuilder_ == null) { + return java.util.Collections.unmodifiableList(tables_); + } else { + return tablesBuilder_.getMessageList(); + } + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public int getTablesCount() { + if (tablesBuilder_ == null) { + return tables_.size(); + } else { + return tablesBuilder_.getCount(); + } + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Table getTables(int index) { + if (tablesBuilder_ == null) { + return tables_.get(index); + } else { + return tablesBuilder_.getMessage(index); + } + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder setTables( + int index, com.pingcap.kafkareader.proto.BinLogInfo.Table value) { + if (tablesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTablesIsMutable(); + tables_.set(index, value); + onChanged(); + } else { + tablesBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder setTables( + int index, com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder builderForValue) { + if (tablesBuilder_ == null) { + ensureTablesIsMutable(); + tables_.set(index, builderForValue.build()); + onChanged(); + } else { + tablesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder addTables(com.pingcap.kafkareader.proto.BinLogInfo.Table value) { + if (tablesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTablesIsMutable(); + tables_.add(value); + onChanged(); + } else { + tablesBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder addTables( + int index, com.pingcap.kafkareader.proto.BinLogInfo.Table value) { + if (tablesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTablesIsMutable(); + tables_.add(index, value); + onChanged(); + } else { + tablesBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder addTables( + com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder builderForValue) { + if (tablesBuilder_ == null) { + ensureTablesIsMutable(); + tables_.add(builderForValue.build()); + onChanged(); + } else { + tablesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder addTables( + int index, com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder builderForValue) { + if (tablesBuilder_ == null) { + ensureTablesIsMutable(); + tables_.add(index, builderForValue.build()); + onChanged(); + } else { + tablesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder addAllTables( + java.lang.Iterable values) { + if (tablesBuilder_ == null) { + ensureTablesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, tables_); + onChanged(); + } else { + tablesBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder clearTables() { + if (tablesBuilder_ == null) { + tables_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + tablesBuilder_.clear(); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public Builder removeTables(int index) { + if (tablesBuilder_ == null) { + ensureTablesIsMutable(); + tables_.remove(index); + onChanged(); + } else { + tablesBuilder_.remove(index); + } + return this; + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder getTablesBuilder( + int index) { + return getTablesFieldBuilder().getBuilder(index); + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.TableOrBuilder getTablesOrBuilder( + int index) { + if (tablesBuilder_ == null) { + return tables_.get(index); } else { + return tablesBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public java.util.List + getTablesOrBuilderList() { + if (tablesBuilder_ != null) { + return tablesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(tables_); + } + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder addTablesBuilder() { + return getTablesFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.BinLogInfo.Table.getDefaultInstance()); + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder addTablesBuilder( + int index) { + return getTablesFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.BinLogInfo.Table.getDefaultInstance()); + } + /** + *
+       * tables contains all the table changes.
+       * 
+ * + * repeated .com.tnp.search.Table tables = 1; + */ + public java.util.List + getTablesBuilderList() { + return getTablesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Table, com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder, com.pingcap.kafkareader.proto.BinLogInfo.TableOrBuilder> + getTablesFieldBuilder() { + if (tablesBuilder_ == null) { + tablesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.Table, com.pingcap.kafkareader.proto.BinLogInfo.Table.Builder, com.pingcap.kafkareader.proto.BinLogInfo.TableOrBuilder>( + tables_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + tables_ = null; + } + return tablesBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:com.tnp.search.DMLData) + } + + // @@protoc_insertion_point(class_scope:com.tnp.search.DMLData) + private static final com.pingcap.kafkareader.proto.BinLogInfo.DMLData DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.BinLogInfo.DMLData(); + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.DMLData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DMLData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DMLData(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.DMLData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DDLDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:com.tnp.search.DDLData) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * the current database use
+     * 
+ * + * optional string schema_name = 1; + */ + boolean hasSchemaName(); + /** + *
+     * the current database use
+     * 
+ * + * optional string schema_name = 1; + */ + java.lang.String getSchemaName(); + /** + *
+     * the current database use
+     * 
+ * + * optional string schema_name = 1; + */ + com.google.protobuf.ByteString + getSchemaNameBytes(); + + /** + *
+     * the relate table
+     * 
+ * + * optional string table_name = 2; + */ + boolean hasTableName(); + /** + *
+     * the relate table
+     * 
+ * + * optional string table_name = 2; + */ + java.lang.String getTableName(); + /** + *
+     * the relate table
+     * 
+ * + * optional string table_name = 2; + */ + com.google.protobuf.ByteString + getTableNameBytes(); + + /** + *
+     * ddl_query is the original ddl statement query.
+     * 
+ * + * optional bytes ddl_query = 3; + */ + boolean hasDdlQuery(); + /** + *
+     * ddl_query is the original ddl statement query.
+     * 
+ * + * optional bytes ddl_query = 3; + */ + com.google.protobuf.ByteString getDdlQuery(); + } + /** + * Protobuf type {@code com.tnp.search.DDLData} + */ + public static final class DDLData extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:com.tnp.search.DDLData) + DDLDataOrBuilder { + private static final long serialVersionUID = 0L; + // Use DDLData.newBuilder() to construct. + private DDLData(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DDLData() { + schemaName_ = ""; + tableName_ = ""; + ddlQuery_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new DDLData(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DDLData( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + schemaName_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + tableName_ = bs; + break; + } + case 26: { + bitField0_ |= 0x00000004; + ddlQuery_ = input.readBytes(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DDLData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DDLData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.DDLData.class, com.pingcap.kafkareader.proto.BinLogInfo.DDLData.Builder.class); + } + + private int bitField0_; + public static final int SCHEMA_NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object schemaName_; + /** + *
+     * the current database use
+     * 
+ * + * optional string schema_name = 1; + */ + public boolean hasSchemaName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * the current database use
+     * 
+ * + * optional string schema_name = 1; + */ + public java.lang.String getSchemaName() { + java.lang.Object ref = schemaName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + schemaName_ = s; + } + return s; + } + } + /** + *
+     * the current database use
+     * 
+ * + * optional string schema_name = 1; + */ + public com.google.protobuf.ByteString + getSchemaNameBytes() { + java.lang.Object ref = schemaName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + schemaName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TABLE_NAME_FIELD_NUMBER = 2; + private volatile java.lang.Object tableName_; + /** + *
+     * the relate table
+     * 
+ * + * optional string table_name = 2; + */ + public boolean hasTableName() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+     * the relate table
+     * 
+ * + * optional string table_name = 2; + */ + public java.lang.String getTableName() { + java.lang.Object ref = tableName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + tableName_ = s; + } + return s; + } + } + /** + *
+     * the relate table
+     * 
+ * + * optional string table_name = 2; + */ + public com.google.protobuf.ByteString + getTableNameBytes() { + java.lang.Object ref = tableName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + tableName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DDL_QUERY_FIELD_NUMBER = 3; + private com.google.protobuf.ByteString ddlQuery_; + /** + *
+     * ddl_query is the original ddl statement query.
+     * 
+ * + * optional bytes ddl_query = 3; + */ + public boolean hasDdlQuery() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + *
+     * ddl_query is the original ddl statement query.
+     * 
+ * + * optional bytes ddl_query = 3; + */ + public com.google.protobuf.ByteString getDdlQuery() { + return ddlQuery_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, schemaName_); + } + if (((bitField0_ & 0x00000002) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, tableName_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeBytes(3, ddlQuery_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, schemaName_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, tableName_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, ddlQuery_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.BinLogInfo.DDLData)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.BinLogInfo.DDLData other = (com.pingcap.kafkareader.proto.BinLogInfo.DDLData) obj; + + if (hasSchemaName() != other.hasSchemaName()) return false; + if (hasSchemaName()) { + if (!getSchemaName() + .equals(other.getSchemaName())) return false; + } + if (hasTableName() != other.hasTableName()) return false; + if (hasTableName()) { + if (!getTableName() + .equals(other.getTableName())) return false; + } + if (hasDdlQuery() != other.hasDdlQuery()) return false; + if (hasDdlQuery()) { + if (!getDdlQuery() + .equals(other.getDdlQuery())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasSchemaName()) { + hash = (37 * hash) + SCHEMA_NAME_FIELD_NUMBER; + hash = (53 * hash) + getSchemaName().hashCode(); + } + if (hasTableName()) { + hash = (37 * hash) + TABLE_NAME_FIELD_NUMBER; + hash = (53 * hash) + getTableName().hashCode(); + } + if (hasDdlQuery()) { + hash = (37 * hash) + DDL_QUERY_FIELD_NUMBER; + hash = (53 * hash) + getDdlQuery().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.BinLogInfo.DDLData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code com.tnp.search.DDLData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:com.tnp.search.DDLData) + com.pingcap.kafkareader.proto.BinLogInfo.DDLDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DDLData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DDLData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.DDLData.class, com.pingcap.kafkareader.proto.BinLogInfo.DDLData.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.BinLogInfo.DDLData.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + schemaName_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + tableName_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + ddlQuery_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_DDLData_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.DDLData getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.DDLData.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.DDLData build() { + com.pingcap.kafkareader.proto.BinLogInfo.DDLData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.DDLData buildPartial() { + com.pingcap.kafkareader.proto.BinLogInfo.DDLData result = new com.pingcap.kafkareader.proto.BinLogInfo.DDLData(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.schemaName_ = schemaName_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.tableName_ = tableName_; + if (((from_bitField0_ & 0x00000004) != 0)) { + to_bitField0_ |= 0x00000004; + } + result.ddlQuery_ = ddlQuery_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.BinLogInfo.DDLData) { + return mergeFrom((com.pingcap.kafkareader.proto.BinLogInfo.DDLData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.BinLogInfo.DDLData other) { + if (other == com.pingcap.kafkareader.proto.BinLogInfo.DDLData.getDefaultInstance()) return this; + if (other.hasSchemaName()) { + bitField0_ |= 0x00000001; + schemaName_ = other.schemaName_; + onChanged(); + } + if (other.hasTableName()) { + bitField0_ |= 0x00000002; + tableName_ = other.tableName_; + onChanged(); + } + if (other.hasDdlQuery()) { + setDdlQuery(other.getDdlQuery()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.BinLogInfo.DDLData parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.BinLogInfo.DDLData) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object schemaName_ = ""; + /** + *
+       * the current database use
+       * 
+ * + * optional string schema_name = 1; + */ + public boolean hasSchemaName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * the current database use
+       * 
+ * + * optional string schema_name = 1; + */ + public java.lang.String getSchemaName() { + java.lang.Object ref = schemaName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + schemaName_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * the current database use
+       * 
+ * + * optional string schema_name = 1; + */ + public com.google.protobuf.ByteString + getSchemaNameBytes() { + java.lang.Object ref = schemaName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + schemaName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * the current database use
+       * 
+ * + * optional string schema_name = 1; + */ + public Builder setSchemaName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + schemaName_ = value; + onChanged(); + return this; + } + /** + *
+       * the current database use
+       * 
+ * + * optional string schema_name = 1; + */ + public Builder clearSchemaName() { + bitField0_ = (bitField0_ & ~0x00000001); + schemaName_ = getDefaultInstance().getSchemaName(); + onChanged(); + return this; + } + /** + *
+       * the current database use
+       * 
+ * + * optional string schema_name = 1; + */ + public Builder setSchemaNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + schemaName_ = value; + onChanged(); + return this; + } + + private java.lang.Object tableName_ = ""; + /** + *
+       * the relate table
+       * 
+ * + * optional string table_name = 2; + */ + public boolean hasTableName() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+       * the relate table
+       * 
+ * + * optional string table_name = 2; + */ + public java.lang.String getTableName() { + java.lang.Object ref = tableName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + tableName_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * the relate table
+       * 
+ * + * optional string table_name = 2; + */ + public com.google.protobuf.ByteString + getTableNameBytes() { + java.lang.Object ref = tableName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + tableName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * the relate table
+       * 
+ * + * optional string table_name = 2; + */ + public Builder setTableName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + tableName_ = value; + onChanged(); + return this; + } + /** + *
+       * the relate table
+       * 
+ * + * optional string table_name = 2; + */ + public Builder clearTableName() { + bitField0_ = (bitField0_ & ~0x00000002); + tableName_ = getDefaultInstance().getTableName(); + onChanged(); + return this; + } + /** + *
+       * the relate table
+       * 
+ * + * optional string table_name = 2; + */ + public Builder setTableNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + tableName_ = value; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString ddlQuery_ = com.google.protobuf.ByteString.EMPTY; + /** + *
+       * ddl_query is the original ddl statement query.
+       * 
+ * + * optional bytes ddl_query = 3; + */ + public boolean hasDdlQuery() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + *
+       * ddl_query is the original ddl statement query.
+       * 
+ * + * optional bytes ddl_query = 3; + */ + public com.google.protobuf.ByteString getDdlQuery() { + return ddlQuery_; + } + /** + *
+       * ddl_query is the original ddl statement query.
+       * 
+ * + * optional bytes ddl_query = 3; + */ + public Builder setDdlQuery(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + ddlQuery_ = value; + onChanged(); + return this; + } + /** + *
+       * ddl_query is the original ddl statement query.
+       * 
+ * + * optional bytes ddl_query = 3; + */ + public Builder clearDdlQuery() { + bitField0_ = (bitField0_ & ~0x00000004); + ddlQuery_ = getDefaultInstance().getDdlQuery(); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:com.tnp.search.DDLData) + } + + // @@protoc_insertion_point(class_scope:com.tnp.search.DDLData) + private static final com.pingcap.kafkareader.proto.BinLogInfo.DDLData DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.BinLogInfo.DDLData(); + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.DDLData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DDLData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DDLData(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.DDLData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface BinlogOrBuilder extends + // @@protoc_insertion_point(interface_extends:com.tnp.search.Binlog) + com.google.protobuf.MessageOrBuilder { + + /** + * optional .com.tnp.search.BinlogType type = 1 [(.gogoproto.nullable) = false]; + */ + boolean hasType(); + /** + * optional .com.tnp.search.BinlogType type = 1 [(.gogoproto.nullable) = false]; + */ + com.pingcap.kafkareader.proto.BinLogInfo.BinlogType getType(); + + /** + * optional int64 commit_ts = 2 [(.gogoproto.nullable) = false]; + */ + boolean hasCommitTs(); + /** + * optional int64 commit_ts = 2 [(.gogoproto.nullable) = false]; + */ + long getCommitTs(); + + /** + *
+     * dml_data is marshalled from DML type
+     * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + boolean hasDmlData(); + /** + *
+     * dml_data is marshalled from DML type
+     * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + com.pingcap.kafkareader.proto.BinLogInfo.DMLData getDmlData(); + /** + *
+     * dml_data is marshalled from DML type
+     * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + com.pingcap.kafkareader.proto.BinLogInfo.DMLDataOrBuilder getDmlDataOrBuilder(); + + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + boolean hasDdlData(); + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + com.pingcap.kafkareader.proto.BinLogInfo.DDLData getDdlData(); + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + com.pingcap.kafkareader.proto.BinLogInfo.DDLDataOrBuilder getDdlDataOrBuilder(); + } + /** + *
+   * Binlog contains all the changes in a transaction.
+   * 
+ * + * Protobuf type {@code com.tnp.search.Binlog} + */ + public static final class Binlog extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:com.tnp.search.Binlog) + BinlogOrBuilder { + private static final long serialVersionUID = 0L; + // Use Binlog.newBuilder() to construct. + private Binlog(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Binlog() { + type_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Binlog(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Binlog( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + int rawValue = input.readEnum(); + @SuppressWarnings("deprecation") + com.pingcap.kafkareader.proto.BinLogInfo.BinlogType value = com.pingcap.kafkareader.proto.BinLogInfo.BinlogType.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(1, rawValue); + } else { + bitField0_ |= 0x00000001; + type_ = rawValue; + } + break; + } + case 16: { + bitField0_ |= 0x00000002; + commitTs_ = input.readInt64(); + break; + } + case 26: { + com.pingcap.kafkareader.proto.BinLogInfo.DMLData.Builder subBuilder = null; + if (((bitField0_ & 0x00000004) != 0)) { + subBuilder = dmlData_.toBuilder(); + } + dmlData_ = input.readMessage(com.pingcap.kafkareader.proto.BinLogInfo.DMLData.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(dmlData_); + dmlData_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000004; + break; + } + case 34: { + com.pingcap.kafkareader.proto.BinLogInfo.DDLData.Builder subBuilder = null; + if (((bitField0_ & 0x00000008) != 0)) { + subBuilder = ddlData_.toBuilder(); + } + ddlData_ = input.readMessage(com.pingcap.kafkareader.proto.BinLogInfo.DDLData.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(ddlData_); + ddlData_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000008; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Binlog_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Binlog_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.Binlog.class, com.pingcap.kafkareader.proto.BinLogInfo.Binlog.Builder.class); + } + + private int bitField0_; + public static final int TYPE_FIELD_NUMBER = 1; + private int type_; + /** + * optional .com.tnp.search.BinlogType type = 1 [(.gogoproto.nullable) = false]; + */ + public boolean hasType() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional .com.tnp.search.BinlogType type = 1 [(.gogoproto.nullable) = false]; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.BinlogType getType() { + @SuppressWarnings("deprecation") + com.pingcap.kafkareader.proto.BinLogInfo.BinlogType result = com.pingcap.kafkareader.proto.BinLogInfo.BinlogType.valueOf(type_); + return result == null ? com.pingcap.kafkareader.proto.BinLogInfo.BinlogType.DML : result; + } + + public static final int COMMIT_TS_FIELD_NUMBER = 2; + private long commitTs_; + /** + * optional int64 commit_ts = 2 [(.gogoproto.nullable) = false]; + */ + public boolean hasCommitTs() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional int64 commit_ts = 2 [(.gogoproto.nullable) = false]; + */ + public long getCommitTs() { + return commitTs_; + } + + public static final int DML_DATA_FIELD_NUMBER = 3; + private com.pingcap.kafkareader.proto.BinLogInfo.DMLData dmlData_; + /** + *
+     * dml_data is marshalled from DML type
+     * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public boolean hasDmlData() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + *
+     * dml_data is marshalled from DML type
+     * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DMLData getDmlData() { + return dmlData_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.DMLData.getDefaultInstance() : dmlData_; + } + /** + *
+     * dml_data is marshalled from DML type
+     * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DMLDataOrBuilder getDmlDataOrBuilder() { + return dmlData_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.DMLData.getDefaultInstance() : dmlData_; + } + + public static final int DDL_DATA_FIELD_NUMBER = 4; + private com.pingcap.kafkareader.proto.BinLogInfo.DDLData ddlData_; + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public boolean hasDdlData() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DDLData getDdlData() { + return ddlData_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.DDLData.getDefaultInstance() : ddlData_; + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DDLDataOrBuilder getDdlDataOrBuilder() { + return ddlData_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.DDLData.getDefaultInstance() : ddlData_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (hasDmlData()) { + if (!getDmlData().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeEnum(1, type_); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeInt64(2, commitTs_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(3, getDmlData()); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(4, getDdlData()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, type_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, commitTs_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getDmlData()); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, getDdlData()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.BinLogInfo.Binlog)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.BinLogInfo.Binlog other = (com.pingcap.kafkareader.proto.BinLogInfo.Binlog) obj; + + if (hasType() != other.hasType()) return false; + if (hasType()) { + if (type_ != other.type_) return false; + } + if (hasCommitTs() != other.hasCommitTs()) return false; + if (hasCommitTs()) { + if (getCommitTs() + != other.getCommitTs()) return false; + } + if (hasDmlData() != other.hasDmlData()) return false; + if (hasDmlData()) { + if (!getDmlData() + .equals(other.getDmlData())) return false; + } + if (hasDdlData() != other.hasDdlData()) return false; + if (hasDdlData()) { + if (!getDdlData() + .equals(other.getDdlData())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasType()) { + hash = (37 * hash) + TYPE_FIELD_NUMBER; + hash = (53 * hash) + type_; + } + if (hasCommitTs()) { + hash = (37 * hash) + COMMIT_TS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getCommitTs()); + } + if (hasDmlData()) { + hash = (37 * hash) + DML_DATA_FIELD_NUMBER; + hash = (53 * hash) + getDmlData().hashCode(); + } + if (hasDdlData()) { + hash = (37 * hash) + DDL_DATA_FIELD_NUMBER; + hash = (53 * hash) + getDdlData().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.BinLogInfo.Binlog prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Binlog contains all the changes in a transaction.
+     * 
+ * + * Protobuf type {@code com.tnp.search.Binlog} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:com.tnp.search.Binlog) + com.pingcap.kafkareader.proto.BinLogInfo.BinlogOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Binlog_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Binlog_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.BinLogInfo.Binlog.class, com.pingcap.kafkareader.proto.BinLogInfo.Binlog.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.BinLogInfo.Binlog.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getDmlDataFieldBuilder(); + getDdlDataFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + type_ = 0; + bitField0_ = (bitField0_ & ~0x00000001); + commitTs_ = 0L; + bitField0_ = (bitField0_ & ~0x00000002); + if (dmlDataBuilder_ == null) { + dmlData_ = null; + } else { + dmlDataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + if (ddlDataBuilder_ == null) { + ddlData_ = null; + } else { + ddlDataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.internal_static_com_tnp_search_Binlog_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Binlog getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.BinLogInfo.Binlog.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Binlog build() { + com.pingcap.kafkareader.proto.BinLogInfo.Binlog result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Binlog buildPartial() { + com.pingcap.kafkareader.proto.BinLogInfo.Binlog result = new com.pingcap.kafkareader.proto.BinLogInfo.Binlog(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.type_ = type_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.commitTs_ = commitTs_; + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + if (dmlDataBuilder_ == null) { + result.dmlData_ = dmlData_; + } else { + result.dmlData_ = dmlDataBuilder_.build(); + } + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + if (ddlDataBuilder_ == null) { + result.ddlData_ = ddlData_; + } else { + result.ddlData_ = ddlDataBuilder_.build(); + } + to_bitField0_ |= 0x00000008; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.BinLogInfo.Binlog) { + return mergeFrom((com.pingcap.kafkareader.proto.BinLogInfo.Binlog)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.BinLogInfo.Binlog other) { + if (other == com.pingcap.kafkareader.proto.BinLogInfo.Binlog.getDefaultInstance()) return this; + if (other.hasType()) { + setType(other.getType()); + } + if (other.hasCommitTs()) { + setCommitTs(other.getCommitTs()); + } + if (other.hasDmlData()) { + mergeDmlData(other.getDmlData()); + } + if (other.hasDdlData()) { + mergeDdlData(other.getDdlData()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + if (hasDmlData()) { + if (!getDmlData().isInitialized()) { + return false; + } + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.BinLogInfo.Binlog parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.BinLogInfo.Binlog) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int type_ = 0; + /** + * optional .com.tnp.search.BinlogType type = 1 [(.gogoproto.nullable) = false]; + */ + public boolean hasType() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional .com.tnp.search.BinlogType type = 1 [(.gogoproto.nullable) = false]; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.BinlogType getType() { + @SuppressWarnings("deprecation") + com.pingcap.kafkareader.proto.BinLogInfo.BinlogType result = com.pingcap.kafkareader.proto.BinLogInfo.BinlogType.valueOf(type_); + return result == null ? com.pingcap.kafkareader.proto.BinLogInfo.BinlogType.DML : result; + } + /** + * optional .com.tnp.search.BinlogType type = 1 [(.gogoproto.nullable) = false]; + */ + public Builder setType(com.pingcap.kafkareader.proto.BinLogInfo.BinlogType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + type_ = value.getNumber(); + onChanged(); + return this; + } + /** + * optional .com.tnp.search.BinlogType type = 1 [(.gogoproto.nullable) = false]; + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000001); + type_ = 0; + onChanged(); + return this; + } + + private long commitTs_ ; + /** + * optional int64 commit_ts = 2 [(.gogoproto.nullable) = false]; + */ + public boolean hasCommitTs() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional int64 commit_ts = 2 [(.gogoproto.nullable) = false]; + */ + public long getCommitTs() { + return commitTs_; + } + /** + * optional int64 commit_ts = 2 [(.gogoproto.nullable) = false]; + */ + public Builder setCommitTs(long value) { + bitField0_ |= 0x00000002; + commitTs_ = value; + onChanged(); + return this; + } + /** + * optional int64 commit_ts = 2 [(.gogoproto.nullable) = false]; + */ + public Builder clearCommitTs() { + bitField0_ = (bitField0_ & ~0x00000002); + commitTs_ = 0L; + onChanged(); + return this; + } + + private com.pingcap.kafkareader.proto.BinLogInfo.DMLData dmlData_; + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.DMLData, com.pingcap.kafkareader.proto.BinLogInfo.DMLData.Builder, com.pingcap.kafkareader.proto.BinLogInfo.DMLDataOrBuilder> dmlDataBuilder_; + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public boolean hasDmlData() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DMLData getDmlData() { + if (dmlDataBuilder_ == null) { + return dmlData_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.DMLData.getDefaultInstance() : dmlData_; + } else { + return dmlDataBuilder_.getMessage(); + } + } + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public Builder setDmlData(com.pingcap.kafkareader.proto.BinLogInfo.DMLData value) { + if (dmlDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dmlData_ = value; + onChanged(); + } else { + dmlDataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public Builder setDmlData( + com.pingcap.kafkareader.proto.BinLogInfo.DMLData.Builder builderForValue) { + if (dmlDataBuilder_ == null) { + dmlData_ = builderForValue.build(); + onChanged(); + } else { + dmlDataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public Builder mergeDmlData(com.pingcap.kafkareader.proto.BinLogInfo.DMLData value) { + if (dmlDataBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) && + dmlData_ != null && + dmlData_ != com.pingcap.kafkareader.proto.BinLogInfo.DMLData.getDefaultInstance()) { + dmlData_ = + com.pingcap.kafkareader.proto.BinLogInfo.DMLData.newBuilder(dmlData_).mergeFrom(value).buildPartial(); + } else { + dmlData_ = value; + } + onChanged(); + } else { + dmlDataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public Builder clearDmlData() { + if (dmlDataBuilder_ == null) { + dmlData_ = null; + onChanged(); + } else { + dmlDataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DMLData.Builder getDmlDataBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getDmlDataFieldBuilder().getBuilder(); + } + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DMLDataOrBuilder getDmlDataOrBuilder() { + if (dmlDataBuilder_ != null) { + return dmlDataBuilder_.getMessageOrBuilder(); + } else { + return dmlData_ == null ? + com.pingcap.kafkareader.proto.BinLogInfo.DMLData.getDefaultInstance() : dmlData_; + } + } + /** + *
+       * dml_data is marshalled from DML type
+       * 
+ * + * optional .com.tnp.search.DMLData dml_data = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.DMLData, com.pingcap.kafkareader.proto.BinLogInfo.DMLData.Builder, com.pingcap.kafkareader.proto.BinLogInfo.DMLDataOrBuilder> + getDmlDataFieldBuilder() { + if (dmlDataBuilder_ == null) { + dmlDataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.DMLData, com.pingcap.kafkareader.proto.BinLogInfo.DMLData.Builder, com.pingcap.kafkareader.proto.BinLogInfo.DMLDataOrBuilder>( + getDmlData(), + getParentForChildren(), + isClean()); + dmlData_ = null; + } + return dmlDataBuilder_; + } + + private com.pingcap.kafkareader.proto.BinLogInfo.DDLData ddlData_; + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.DDLData, com.pingcap.kafkareader.proto.BinLogInfo.DDLData.Builder, com.pingcap.kafkareader.proto.BinLogInfo.DDLDataOrBuilder> ddlDataBuilder_; + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public boolean hasDdlData() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DDLData getDdlData() { + if (ddlDataBuilder_ == null) { + return ddlData_ == null ? com.pingcap.kafkareader.proto.BinLogInfo.DDLData.getDefaultInstance() : ddlData_; + } else { + return ddlDataBuilder_.getMessage(); + } + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public Builder setDdlData(com.pingcap.kafkareader.proto.BinLogInfo.DDLData value) { + if (ddlDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ddlData_ = value; + onChanged(); + } else { + ddlDataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public Builder setDdlData( + com.pingcap.kafkareader.proto.BinLogInfo.DDLData.Builder builderForValue) { + if (ddlDataBuilder_ == null) { + ddlData_ = builderForValue.build(); + onChanged(); + } else { + ddlDataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public Builder mergeDdlData(com.pingcap.kafkareader.proto.BinLogInfo.DDLData value) { + if (ddlDataBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) && + ddlData_ != null && + ddlData_ != com.pingcap.kafkareader.proto.BinLogInfo.DDLData.getDefaultInstance()) { + ddlData_ = + com.pingcap.kafkareader.proto.BinLogInfo.DDLData.newBuilder(ddlData_).mergeFrom(value).buildPartial(); + } else { + ddlData_ = value; + } + onChanged(); + } else { + ddlDataBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public Builder clearDdlData() { + if (ddlDataBuilder_ == null) { + ddlData_ = null; + onChanged(); + } else { + ddlDataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DDLData.Builder getDdlDataBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getDdlDataFieldBuilder().getBuilder(); + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + public com.pingcap.kafkareader.proto.BinLogInfo.DDLDataOrBuilder getDdlDataOrBuilder() { + if (ddlDataBuilder_ != null) { + return ddlDataBuilder_.getMessageOrBuilder(); + } else { + return ddlData_ == null ? + com.pingcap.kafkareader.proto.BinLogInfo.DDLData.getDefaultInstance() : ddlData_; + } + } + /** + * optional .com.tnp.search.DDLData ddl_data = 4; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.DDLData, com.pingcap.kafkareader.proto.BinLogInfo.DDLData.Builder, com.pingcap.kafkareader.proto.BinLogInfo.DDLDataOrBuilder> + getDdlDataFieldBuilder() { + if (ddlDataBuilder_ == null) { + ddlDataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.BinLogInfo.DDLData, com.pingcap.kafkareader.proto.BinLogInfo.DDLData.Builder, com.pingcap.kafkareader.proto.BinLogInfo.DDLDataOrBuilder>( + getDdlData(), + getParentForChildren(), + isClean()); + ddlData_ = null; + } + return ddlDataBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:com.tnp.search.Binlog) + } + + // @@protoc_insertion_point(class_scope:com.tnp.search.Binlog) + private static final com.pingcap.kafkareader.proto.BinLogInfo.Binlog DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.BinLogInfo.Binlog(); + } + + public static com.pingcap.kafkareader.proto.BinLogInfo.Binlog getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Binlog parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Binlog(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.BinLogInfo.Binlog getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_com_tnp_search_Column_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_com_tnp_search_Column_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_com_tnp_search_ColumnInfo_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_com_tnp_search_ColumnInfo_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_com_tnp_search_Row_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_com_tnp_search_Row_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_com_tnp_search_Table_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_com_tnp_search_Table_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_com_tnp_search_TableMutation_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_com_tnp_search_TableMutation_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_com_tnp_search_DMLData_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_com_tnp_search_DMLData_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_com_tnp_search_DDLData_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_com_tnp_search_DDLData_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_com_tnp_search_Binlog_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_com_tnp_search_Binlog_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\014binlog.proto\022\016com.tnp.search\032\ngogo.pro" + + "to\"\214\001\n\006Column\022\026\n\007is_null\030\001 \001(\010:\005false\022\023\n" + + "\013int64_value\030\002 \001(\003\022\024\n\014uint64_value\030\003 \001(\004" + + "\022\024\n\014double_value\030\004 \001(\001\022\023\n\013bytes_value\030\005 " + + "\001(\014\022\024\n\014string_value\030\006 \001(\t\"X\n\nColumnInfo\022" + + "\022\n\004name\030\001 \001(\tB\004\310\336\037\000\022\030\n\nmysql_type\030\002 \001(\tB" + + "\004\310\336\037\000\022\034\n\016is_primary_key\030\003 \001(\010B\004\310\336\037\000\".\n\003R" + + "ow\022\'\n\007columns\030\001 \003(\0132\026.com.tnp.search.Col" + + "umn\"\223\001\n\005Table\022\023\n\013schema_name\030\001 \001(\t\022\022\n\nta" + + "ble_name\030\002 \001(\t\022/\n\013column_info\030\003 \003(\0132\032.co" + + "m.tnp.search.ColumnInfo\0220\n\tmutations\030\004 \003" + + "(\0132\035.com.tnp.search.TableMutation\"\206\001\n\rTa" + + "bleMutation\022*\n\004type\030\001 \002(\0162\034.com.tnp.sear" + + "ch.MutationType\022 \n\003row\030\002 \002(\0132\023.com.tnp.s" + + "earch.Row\022\'\n\nchange_row\030\003 \001(\0132\023.com.tnp." + + "search.Row\"0\n\007DMLData\022%\n\006tables\030\001 \003(\0132\025." + + "com.tnp.search.Table\"E\n\007DDLData\022\023\n\013schem" + + "a_name\030\001 \001(\t\022\022\n\ntable_name\030\002 \001(\t\022\021\n\tddl_" + + "query\030\003 \001(\014\"\247\001\n\006Binlog\022.\n\004type\030\001 \001(\0162\032.c" + + "om.tnp.search.BinlogTypeB\004\310\336\037\000\022\027\n\tcommit" + + "_ts\030\002 \001(\003B\004\310\336\037\000\022)\n\010dml_data\030\003 \001(\0132\027.com." + + "tnp.search.DMLData\022)\n\010ddl_data\030\004 \001(\0132\027.c" + + "om.tnp.search.DDLData*2\n\014MutationType\022\n\n" + + "\006Insert\020\000\022\n\n\006Update\020\001\022\n\n\006Delete\020\002*\036\n\nBin" + + "logType\022\007\n\003DML\020\000\022\007\n\003DDL\020\001B7\n\035com.pingcap" + + ".kafkareader.protoB\nBinLogInfo\310\342\036\001\340\342\036\001\320\342" + + "\036\001" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.pingcap.kafkareader.proto.GoGoProtos.getDescriptor(), + }); + internal_static_com_tnp_search_Column_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_com_tnp_search_Column_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_com_tnp_search_Column_descriptor, + new java.lang.String[] { "IsNull", "Int64Value", "Uint64Value", "DoubleValue", "BytesValue", "StringValue", }); + internal_static_com_tnp_search_ColumnInfo_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_com_tnp_search_ColumnInfo_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_com_tnp_search_ColumnInfo_descriptor, + new java.lang.String[] { "Name", "MysqlType", "IsPrimaryKey", }); + internal_static_com_tnp_search_Row_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_com_tnp_search_Row_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_com_tnp_search_Row_descriptor, + new java.lang.String[] { "Columns", }); + internal_static_com_tnp_search_Table_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_com_tnp_search_Table_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_com_tnp_search_Table_descriptor, + new java.lang.String[] { "SchemaName", "TableName", "ColumnInfo", "Mutations", }); + internal_static_com_tnp_search_TableMutation_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_com_tnp_search_TableMutation_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_com_tnp_search_TableMutation_descriptor, + new java.lang.String[] { "Type", "Row", "ChangeRow", }); + internal_static_com_tnp_search_DMLData_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_com_tnp_search_DMLData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_com_tnp_search_DMLData_descriptor, + new java.lang.String[] { "Tables", }); + internal_static_com_tnp_search_DDLData_descriptor = + getDescriptor().getMessageTypes().get(6); + internal_static_com_tnp_search_DDLData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_com_tnp_search_DDLData_descriptor, + new java.lang.String[] { "SchemaName", "TableName", "DdlQuery", }); + internal_static_com_tnp_search_Binlog_descriptor = + getDescriptor().getMessageTypes().get(7); + internal_static_com_tnp_search_Binlog_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_com_tnp_search_Binlog_descriptor, + new java.lang.String[] { "Type", "CommitTs", "DmlData", "DdlData", }); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.pingcap.kafkareader.proto.GoGoProtos.marshalerAll); + registry.add(com.pingcap.kafkareader.proto.GoGoProtos.nullable); + registry.add(com.pingcap.kafkareader.proto.GoGoProtos.sizerAll); + registry.add(com.pingcap.kafkareader.proto.GoGoProtos.unmarshalerAll); + com.google.protobuf.Descriptors.FileDescriptor + .internalUpdateFileDescriptor(descriptor, registry); + com.pingcap.kafkareader.proto.GoGoProtos.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/tidb-binlog/driver/example/kafkaReader/src/main/java/com/pingcap/kafkareader/proto/DescriptorProtos.java b/tidb-binlog/driver/example/kafkaReader/src/main/java/com/pingcap/kafkareader/proto/DescriptorProtos.java new file mode 100644 index 0000000000000..9c458833ec8c6 --- /dev/null +++ b/tidb-binlog/driver/example/kafkaReader/src/main/java/com/pingcap/kafkareader/proto/DescriptorProtos.java @@ -0,0 +1,44029 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: descriptor.proto + +package com.pingcap.kafkareader.proto; + +public final class DescriptorProtos { + private DescriptorProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface FileDescriptorSetOrBuilder extends + // @@protoc_insertion_point(interface_extends:google.protobuf.FileDescriptorSet) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + java.util.List + getFileList(); + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto getFile(int index); + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + int getFileCount(); + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + java.util.List + getFileOrBuilderList(); + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder( + int index); + } + /** + *
+   * The protocol compiler can output a FileDescriptorSet containing the .proto
+   * files it parses.
+   * 
+ * + * Protobuf type {@code google.protobuf.FileDescriptorSet} + */ + public static final class FileDescriptorSet extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:google.protobuf.FileDescriptorSet) + FileDescriptorSetOrBuilder { + private static final long serialVersionUID = 0L; + // Use FileDescriptorSet.newBuilder() to construct. + private FileDescriptorSet(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private FileDescriptorSet() { + file_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new FileDescriptorSet(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private FileDescriptorSet( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + file_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + file_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.PARSER, extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + file_ = java.util.Collections.unmodifiableList(file_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet.class, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet.Builder.class); + } + + public static final int FILE_FIELD_NUMBER = 1; + private java.util.List file_; + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public java.util.List getFileList() { + return file_; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public java.util.List + getFileOrBuilderList() { + return file_; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public int getFileCount() { + return file_.size(); + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto getFile(int index) { + return file_.get(index); + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder( + int index) { + return file_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + for (int i = 0; i < getFileCount(); i++) { + if (!getFile(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < file_.size(); i++) { + output.writeMessage(1, file_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < file_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, file_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet other = (com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet) obj; + + if (!getFileList() + .equals(other.getFileList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getFileCount() > 0) { + hash = (37 * hash) + FILE_FIELD_NUMBER; + hash = (53 * hash) + getFileList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * The protocol compiler can output a FileDescriptorSet containing the .proto
+     * files it parses.
+     * 
+ * + * Protobuf type {@code google.protobuf.FileDescriptorSet} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:google.protobuf.FileDescriptorSet) + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSetOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet.class, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getFileFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (fileBuilder_ == null) { + file_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + fileBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet build() { + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet buildPartial() { + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet result = new com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet(this); + int from_bitField0_ = bitField0_; + if (fileBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + file_ = java.util.Collections.unmodifiableList(file_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.file_ = file_; + } else { + result.file_ = fileBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet) { + return mergeFrom((com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet other) { + if (other == com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet.getDefaultInstance()) return this; + if (fileBuilder_ == null) { + if (!other.file_.isEmpty()) { + if (file_.isEmpty()) { + file_ = other.file_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureFileIsMutable(); + file_.addAll(other.file_); + } + onChanged(); + } + } else { + if (!other.file_.isEmpty()) { + if (fileBuilder_.isEmpty()) { + fileBuilder_.dispose(); + fileBuilder_ = null; + file_ = other.file_; + bitField0_ = (bitField0_ & ~0x00000001); + fileBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getFileFieldBuilder() : null; + } else { + fileBuilder_.addAllMessages(other.file_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + for (int i = 0; i < getFileCount(); i++) { + if (!getFile(i).isInitialized()) { + return false; + } + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List file_ = + java.util.Collections.emptyList(); + private void ensureFileIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + file_ = new java.util.ArrayList(file_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProtoOrBuilder> fileBuilder_; + + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public java.util.List getFileList() { + if (fileBuilder_ == null) { + return java.util.Collections.unmodifiableList(file_); + } else { + return fileBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public int getFileCount() { + if (fileBuilder_ == null) { + return file_.size(); + } else { + return fileBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto getFile(int index) { + if (fileBuilder_ == null) { + return file_.get(index); + } else { + return fileBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder setFile( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto value) { + if (fileBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFileIsMutable(); + file_.set(index, value); + onChanged(); + } else { + fileBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder setFile( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + if (fileBuilder_ == null) { + ensureFileIsMutable(); + file_.set(index, builderForValue.build()); + onChanged(); + } else { + fileBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder addFile(com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto value) { + if (fileBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFileIsMutable(); + file_.add(value); + onChanged(); + } else { + fileBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder addFile( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto value) { + if (fileBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFileIsMutable(); + file_.add(index, value); + onChanged(); + } else { + fileBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder addFile( + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + if (fileBuilder_ == null) { + ensureFileIsMutable(); + file_.add(builderForValue.build()); + onChanged(); + } else { + fileBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder addFile( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + if (fileBuilder_ == null) { + ensureFileIsMutable(); + file_.add(index, builderForValue.build()); + onChanged(); + } else { + fileBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder addAllFile( + java.lang.Iterable values) { + if (fileBuilder_ == null) { + ensureFileIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, file_); + onChanged(); + } else { + fileBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder clearFile() { + if (fileBuilder_ == null) { + file_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + fileBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public Builder removeFile(int index) { + if (fileBuilder_ == null) { + ensureFileIsMutable(); + file_.remove(index); + onChanged(); + } else { + fileBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder getFileBuilder( + int index) { + return getFileFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder( + int index) { + if (fileBuilder_ == null) { + return file_.get(index); } else { + return fileBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public java.util.List + getFileOrBuilderList() { + if (fileBuilder_ != null) { + return fileBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(file_); + } + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder addFileBuilder() { + return getFileFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder addFileBuilder( + int index) { + return getFileFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.FileDescriptorProto file = 1; + */ + public java.util.List + getFileBuilderList() { + return getFileFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProtoOrBuilder> + getFileFieldBuilder() { + if (fileBuilder_ == null) { + fileBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProtoOrBuilder>( + file_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + file_ = null; + } + return fileBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorSet) + } + + // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet) + private static final com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet(); + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public FileDescriptorSet parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new FileDescriptorSet(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorSet getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface FileDescriptorProtoOrBuilder extends + // @@protoc_insertion_point(interface_extends:google.protobuf.FileDescriptorProto) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * file name, relative to root of source tree
+     * 
+ * + * optional string name = 1; + */ + boolean hasName(); + /** + *
+     * file name, relative to root of source tree
+     * 
+ * + * optional string name = 1; + */ + java.lang.String getName(); + /** + *
+     * file name, relative to root of source tree
+     * 
+ * + * optional string name = 1; + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + *
+     * e.g. "foo", "foo.bar", etc.
+     * 
+ * + * optional string package = 2; + */ + boolean hasPackage(); + /** + *
+     * e.g. "foo", "foo.bar", etc.
+     * 
+ * + * optional string package = 2; + */ + java.lang.String getPackage(); + /** + *
+     * e.g. "foo", "foo.bar", etc.
+     * 
+ * + * optional string package = 2; + */ + com.google.protobuf.ByteString + getPackageBytes(); + + /** + *
+     * Names of files imported by this file.
+     * 
+ * + * repeated string dependency = 3; + */ + java.util.List + getDependencyList(); + /** + *
+     * Names of files imported by this file.
+     * 
+ * + * repeated string dependency = 3; + */ + int getDependencyCount(); + /** + *
+     * Names of files imported by this file.
+     * 
+ * + * repeated string dependency = 3; + */ + java.lang.String getDependency(int index); + /** + *
+     * Names of files imported by this file.
+     * 
+ * + * repeated string dependency = 3; + */ + com.google.protobuf.ByteString + getDependencyBytes(int index); + + /** + *
+     * Indexes of the public imported files in the dependency list above.
+     * 
+ * + * repeated int32 public_dependency = 10; + */ + java.util.List getPublicDependencyList(); + /** + *
+     * Indexes of the public imported files in the dependency list above.
+     * 
+ * + * repeated int32 public_dependency = 10; + */ + int getPublicDependencyCount(); + /** + *
+     * Indexes of the public imported files in the dependency list above.
+     * 
+ * + * repeated int32 public_dependency = 10; + */ + int getPublicDependency(int index); + + /** + *
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * 
+ * + * repeated int32 weak_dependency = 11; + */ + java.util.List getWeakDependencyList(); + /** + *
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * 
+ * + * repeated int32 weak_dependency = 11; + */ + int getWeakDependencyCount(); + /** + *
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * 
+ * + * repeated int32 weak_dependency = 11; + */ + int getWeakDependency(int index); + + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + java.util.List + getMessageTypeList(); + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getMessageType(int index); + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + int getMessageTypeCount(); + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + java.util.List + getMessageTypeOrBuilderList(); + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder( + int index); + + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + java.util.List + getEnumTypeList(); + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto getEnumType(int index); + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + int getEnumTypeCount(); + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + java.util.List + getEnumTypeOrBuilderList(); + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder( + int index); + + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + java.util.List + getServiceList(); + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto getService(int index); + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + int getServiceCount(); + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + java.util.List + getServiceOrBuilderList(); + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder( + int index); + + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + java.util.List + getExtensionList(); + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getExtension(int index); + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + int getExtensionCount(); + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + java.util.List + getExtensionOrBuilderList(); + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder( + int index); + + /** + * optional .google.protobuf.FileOptions options = 8; + */ + boolean hasOptions(); + /** + * optional .google.protobuf.FileOptions options = 8; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions getOptions(); + /** + * optional .google.protobuf.FileOptions options = 8; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder(); + + /** + *
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field without harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + boolean hasSourceCodeInfo(); + /** + *
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field without harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo getSourceCodeInfo(); + /** + *
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field without harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder(); + + /** + *
+     * The syntax of the proto file.
+     * The supported values are "proto2" and "proto3".
+     * 
+ * + * optional string syntax = 12; + */ + boolean hasSyntax(); + /** + *
+     * The syntax of the proto file.
+     * The supported values are "proto2" and "proto3".
+     * 
+ * + * optional string syntax = 12; + */ + java.lang.String getSyntax(); + /** + *
+     * The syntax of the proto file.
+     * The supported values are "proto2" and "proto3".
+     * 
+ * + * optional string syntax = 12; + */ + com.google.protobuf.ByteString + getSyntaxBytes(); + } + /** + *
+   * Describes a complete .proto file.
+   * 
+ * + * Protobuf type {@code google.protobuf.FileDescriptorProto} + */ + public static final class FileDescriptorProto extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:google.protobuf.FileDescriptorProto) + FileDescriptorProtoOrBuilder { + private static final long serialVersionUID = 0L; + // Use FileDescriptorProto.newBuilder() to construct. + private FileDescriptorProto(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private FileDescriptorProto() { + name_ = ""; + package_ = ""; + dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY; + publicDependency_ = emptyIntList(); + weakDependency_ = emptyIntList(); + messageType_ = java.util.Collections.emptyList(); + enumType_ = java.util.Collections.emptyList(); + service_ = java.util.Collections.emptyList(); + extension_ = java.util.Collections.emptyList(); + syntax_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new FileDescriptorProto(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private FileDescriptorProto( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + name_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + package_ = bs; + break; + } + case 26: { + com.google.protobuf.ByteString bs = input.readBytes(); + if (!((mutable_bitField0_ & 0x00000004) != 0)) { + dependency_ = new com.google.protobuf.LazyStringArrayList(); + mutable_bitField0_ |= 0x00000004; + } + dependency_.add(bs); + break; + } + case 34: { + if (!((mutable_bitField0_ & 0x00000020) != 0)) { + messageType_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000020; + } + messageType_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.PARSER, extensionRegistry)); + break; + } + case 42: { + if (!((mutable_bitField0_ & 0x00000040) != 0)) { + enumType_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000040; + } + enumType_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.PARSER, extensionRegistry)); + break; + } + case 50: { + if (!((mutable_bitField0_ & 0x00000080) != 0)) { + service_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000080; + } + service_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.PARSER, extensionRegistry)); + break; + } + case 58: { + if (!((mutable_bitField0_ & 0x00000100) != 0)) { + extension_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000100; + } + extension_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry)); + break; + } + case 66: { + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.Builder subBuilder = null; + if (((bitField0_ & 0x00000004) != 0)) { + subBuilder = options_.toBuilder(); + } + options_ = input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(options_); + options_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000004; + break; + } + case 74: { + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.Builder subBuilder = null; + if (((bitField0_ & 0x00000008) != 0)) { + subBuilder = sourceCodeInfo_.toBuilder(); + } + sourceCodeInfo_ = input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(sourceCodeInfo_); + sourceCodeInfo_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000008; + break; + } + case 80: { + if (!((mutable_bitField0_ & 0x00000008) != 0)) { + publicDependency_ = newIntList(); + mutable_bitField0_ |= 0x00000008; + } + publicDependency_.addInt(input.readInt32()); + break; + } + case 82: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000008) != 0) && input.getBytesUntilLimit() > 0) { + publicDependency_ = newIntList(); + mutable_bitField0_ |= 0x00000008; + } + while (input.getBytesUntilLimit() > 0) { + publicDependency_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } + case 88: { + if (!((mutable_bitField0_ & 0x00000010) != 0)) { + weakDependency_ = newIntList(); + mutable_bitField0_ |= 0x00000010; + } + weakDependency_.addInt(input.readInt32()); + break; + } + case 90: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00000010) != 0) && input.getBytesUntilLimit() > 0) { + weakDependency_ = newIntList(); + mutable_bitField0_ |= 0x00000010; + } + while (input.getBytesUntilLimit() > 0) { + weakDependency_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } + case 98: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000010; + syntax_ = bs; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000004) != 0)) { + dependency_ = dependency_.getUnmodifiableView(); + } + if (((mutable_bitField0_ & 0x00000020) != 0)) { + messageType_ = java.util.Collections.unmodifiableList(messageType_); + } + if (((mutable_bitField0_ & 0x00000040) != 0)) { + enumType_ = java.util.Collections.unmodifiableList(enumType_); + } + if (((mutable_bitField0_ & 0x00000080) != 0)) { + service_ = java.util.Collections.unmodifiableList(service_); + } + if (((mutable_bitField0_ & 0x00000100) != 0)) { + extension_ = java.util.Collections.unmodifiableList(extension_); + } + if (((mutable_bitField0_ & 0x00000008) != 0)) { + publicDependency_.makeImmutable(); // C + } + if (((mutable_bitField0_ & 0x00000010) != 0)) { + weakDependency_.makeImmutable(); // C + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.class, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder.class); + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object name_; + /** + *
+     * file name, relative to root of source tree
+     * 
+ * + * optional string name = 1; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * file name, relative to root of source tree
+     * 
+ * + * optional string name = 1; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + /** + *
+     * file name, relative to root of source tree
+     * 
+ * + * optional string name = 1; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PACKAGE_FIELD_NUMBER = 2; + private volatile java.lang.Object package_; + /** + *
+     * e.g. "foo", "foo.bar", etc.
+     * 
+ * + * optional string package = 2; + */ + public boolean hasPackage() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+     * e.g. "foo", "foo.bar", etc.
+     * 
+ * + * optional string package = 2; + */ + public java.lang.String getPackage() { + java.lang.Object ref = package_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + package_ = s; + } + return s; + } + } + /** + *
+     * e.g. "foo", "foo.bar", etc.
+     * 
+ * + * optional string package = 2; + */ + public com.google.protobuf.ByteString + getPackageBytes() { + java.lang.Object ref = package_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + package_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DEPENDENCY_FIELD_NUMBER = 3; + private com.google.protobuf.LazyStringList dependency_; + /** + *
+     * Names of files imported by this file.
+     * 
+ * + * repeated string dependency = 3; + */ + public com.google.protobuf.ProtocolStringList + getDependencyList() { + return dependency_; + } + /** + *
+     * Names of files imported by this file.
+     * 
+ * + * repeated string dependency = 3; + */ + public int getDependencyCount() { + return dependency_.size(); + } + /** + *
+     * Names of files imported by this file.
+     * 
+ * + * repeated string dependency = 3; + */ + public java.lang.String getDependency(int index) { + return dependency_.get(index); + } + /** + *
+     * Names of files imported by this file.
+     * 
+ * + * repeated string dependency = 3; + */ + public com.google.protobuf.ByteString + getDependencyBytes(int index) { + return dependency_.getByteString(index); + } + + public static final int PUBLIC_DEPENDENCY_FIELD_NUMBER = 10; + private com.google.protobuf.Internal.IntList publicDependency_; + /** + *
+     * Indexes of the public imported files in the dependency list above.
+     * 
+ * + * repeated int32 public_dependency = 10; + */ + public java.util.List + getPublicDependencyList() { + return publicDependency_; + } + /** + *
+     * Indexes of the public imported files in the dependency list above.
+     * 
+ * + * repeated int32 public_dependency = 10; + */ + public int getPublicDependencyCount() { + return publicDependency_.size(); + } + /** + *
+     * Indexes of the public imported files in the dependency list above.
+     * 
+ * + * repeated int32 public_dependency = 10; + */ + public int getPublicDependency(int index) { + return publicDependency_.getInt(index); + } + + public static final int WEAK_DEPENDENCY_FIELD_NUMBER = 11; + private com.google.protobuf.Internal.IntList weakDependency_; + /** + *
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * 
+ * + * repeated int32 weak_dependency = 11; + */ + public java.util.List + getWeakDependencyList() { + return weakDependency_; + } + /** + *
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * 
+ * + * repeated int32 weak_dependency = 11; + */ + public int getWeakDependencyCount() { + return weakDependency_.size(); + } + /** + *
+     * Indexes of the weak imported files in the dependency list.
+     * For Google-internal migration only. Do not use.
+     * 
+ * + * repeated int32 weak_dependency = 11; + */ + public int getWeakDependency(int index) { + return weakDependency_.getInt(index); + } + + public static final int MESSAGE_TYPE_FIELD_NUMBER = 4; + private java.util.List messageType_; + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public java.util.List getMessageTypeList() { + return messageType_; + } + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public java.util.List + getMessageTypeOrBuilderList() { + return messageType_; + } + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public int getMessageTypeCount() { + return messageType_.size(); + } + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getMessageType(int index) { + return messageType_.get(index); + } + /** + *
+     * All top-level definitions in this file.
+     * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder( + int index) { + return messageType_.get(index); + } + + public static final int ENUM_TYPE_FIELD_NUMBER = 5; + private java.util.List enumType_; + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public java.util.List getEnumTypeList() { + return enumType_; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public java.util.List + getEnumTypeOrBuilderList() { + return enumType_; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public int getEnumTypeCount() { + return enumType_.size(); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto getEnumType(int index) { + return enumType_.get(index); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder( + int index) { + return enumType_.get(index); + } + + public static final int SERVICE_FIELD_NUMBER = 6; + private java.util.List service_; + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public java.util.List getServiceList() { + return service_; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public java.util.List + getServiceOrBuilderList() { + return service_; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public int getServiceCount() { + return service_.size(); + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto getService(int index) { + return service_.get(index); + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder( + int index) { + return service_.get(index); + } + + public static final int EXTENSION_FIELD_NUMBER = 7; + private java.util.List extension_; + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public java.util.List getExtensionList() { + return extension_; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public java.util.List + getExtensionOrBuilderList() { + return extension_; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public int getExtensionCount() { + return extension_.size(); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getExtension(int index) { + return extension_.get(index); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder( + int index) { + return extension_.get(index); + } + + public static final int OPTIONS_FIELD_NUMBER = 8; + private com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions options_; + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public boolean hasOptions() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions getOptions() { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.getDefaultInstance() : options_; + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.getDefaultInstance() : options_; + } + + public static final int SOURCE_CODE_INFO_FIELD_NUMBER = 9; + private com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo sourceCodeInfo_; + /** + *
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field without harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public boolean hasSourceCodeInfo() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + *
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field without harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() { + return sourceCodeInfo_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.getDefaultInstance() : sourceCodeInfo_; + } + /** + *
+     * This field contains optional information about the original source code.
+     * You may safely remove this entire field without harming runtime
+     * functionality of the descriptors -- the information is needed only by
+     * development tools.
+     * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() { + return sourceCodeInfo_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.getDefaultInstance() : sourceCodeInfo_; + } + + public static final int SYNTAX_FIELD_NUMBER = 12; + private volatile java.lang.Object syntax_; + /** + *
+     * The syntax of the proto file.
+     * The supported values are "proto2" and "proto3".
+     * 
+ * + * optional string syntax = 12; + */ + public boolean hasSyntax() { + return ((bitField0_ & 0x00000010) != 0); + } + /** + *
+     * The syntax of the proto file.
+     * The supported values are "proto2" and "proto3".
+     * 
+ * + * optional string syntax = 12; + */ + public java.lang.String getSyntax() { + java.lang.Object ref = syntax_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + syntax_ = s; + } + return s; + } + } + /** + *
+     * The syntax of the proto file.
+     * The supported values are "proto2" and "proto3".
+     * 
+ * + * optional string syntax = 12; + */ + public com.google.protobuf.ByteString + getSyntaxBytes() { + java.lang.Object ref = syntax_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + syntax_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + for (int i = 0; i < getMessageTypeCount(); i++) { + if (!getMessageType(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getEnumTypeCount(); i++) { + if (!getEnumType(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getServiceCount(); i++) { + if (!getService(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getExtensionCount(); i++) { + if (!getExtension(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOptions()) { + if (!getOptions().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + if (((bitField0_ & 0x00000002) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, package_); + } + for (int i = 0; i < dependency_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, dependency_.getRaw(i)); + } + for (int i = 0; i < messageType_.size(); i++) { + output.writeMessage(4, messageType_.get(i)); + } + for (int i = 0; i < enumType_.size(); i++) { + output.writeMessage(5, enumType_.get(i)); + } + for (int i = 0; i < service_.size(); i++) { + output.writeMessage(6, service_.get(i)); + } + for (int i = 0; i < extension_.size(); i++) { + output.writeMessage(7, extension_.get(i)); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(8, getOptions()); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(9, getSourceCodeInfo()); + } + for (int i = 0; i < publicDependency_.size(); i++) { + output.writeInt32(10, publicDependency_.getInt(i)); + } + for (int i = 0; i < weakDependency_.size(); i++) { + output.writeInt32(11, weakDependency_.getInt(i)); + } + if (((bitField0_ & 0x00000010) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 12, syntax_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, package_); + } + { + int dataSize = 0; + for (int i = 0; i < dependency_.size(); i++) { + dataSize += computeStringSizeNoTag(dependency_.getRaw(i)); + } + size += dataSize; + size += 1 * getDependencyList().size(); + } + for (int i = 0; i < messageType_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, messageType_.get(i)); + } + for (int i = 0; i < enumType_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, enumType_.get(i)); + } + for (int i = 0; i < service_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, service_.get(i)); + } + for (int i = 0; i < extension_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, extension_.get(i)); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, getOptions()); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, getSourceCodeInfo()); + } + { + int dataSize = 0; + for (int i = 0; i < publicDependency_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(publicDependency_.getInt(i)); + } + size += dataSize; + size += 1 * getPublicDependencyList().size(); + } + { + int dataSize = 0; + for (int i = 0; i < weakDependency_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(weakDependency_.getInt(i)); + } + size += dataSize; + size += 1 * getWeakDependencyList().size(); + } + if (((bitField0_ & 0x00000010) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, syntax_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto other = (com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto) obj; + + if (hasName() != other.hasName()) return false; + if (hasName()) { + if (!getName() + .equals(other.getName())) return false; + } + if (hasPackage() != other.hasPackage()) return false; + if (hasPackage()) { + if (!getPackage() + .equals(other.getPackage())) return false; + } + if (!getDependencyList() + .equals(other.getDependencyList())) return false; + if (!getPublicDependencyList() + .equals(other.getPublicDependencyList())) return false; + if (!getWeakDependencyList() + .equals(other.getWeakDependencyList())) return false; + if (!getMessageTypeList() + .equals(other.getMessageTypeList())) return false; + if (!getEnumTypeList() + .equals(other.getEnumTypeList())) return false; + if (!getServiceList() + .equals(other.getServiceList())) return false; + if (!getExtensionList() + .equals(other.getExtensionList())) return false; + if (hasOptions() != other.hasOptions()) return false; + if (hasOptions()) { + if (!getOptions() + .equals(other.getOptions())) return false; + } + if (hasSourceCodeInfo() != other.hasSourceCodeInfo()) return false; + if (hasSourceCodeInfo()) { + if (!getSourceCodeInfo() + .equals(other.getSourceCodeInfo())) return false; + } + if (hasSyntax() != other.hasSyntax()) return false; + if (hasSyntax()) { + if (!getSyntax() + .equals(other.getSyntax())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasName()) { + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + } + if (hasPackage()) { + hash = (37 * hash) + PACKAGE_FIELD_NUMBER; + hash = (53 * hash) + getPackage().hashCode(); + } + if (getDependencyCount() > 0) { + hash = (37 * hash) + DEPENDENCY_FIELD_NUMBER; + hash = (53 * hash) + getDependencyList().hashCode(); + } + if (getPublicDependencyCount() > 0) { + hash = (37 * hash) + PUBLIC_DEPENDENCY_FIELD_NUMBER; + hash = (53 * hash) + getPublicDependencyList().hashCode(); + } + if (getWeakDependencyCount() > 0) { + hash = (37 * hash) + WEAK_DEPENDENCY_FIELD_NUMBER; + hash = (53 * hash) + getWeakDependencyList().hashCode(); + } + if (getMessageTypeCount() > 0) { + hash = (37 * hash) + MESSAGE_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getMessageTypeList().hashCode(); + } + if (getEnumTypeCount() > 0) { + hash = (37 * hash) + ENUM_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getEnumTypeList().hashCode(); + } + if (getServiceCount() > 0) { + hash = (37 * hash) + SERVICE_FIELD_NUMBER; + hash = (53 * hash) + getServiceList().hashCode(); + } + if (getExtensionCount() > 0) { + hash = (37 * hash) + EXTENSION_FIELD_NUMBER; + hash = (53 * hash) + getExtensionList().hashCode(); + } + if (hasOptions()) { + hash = (37 * hash) + OPTIONS_FIELD_NUMBER; + hash = (53 * hash) + getOptions().hashCode(); + } + if (hasSourceCodeInfo()) { + hash = (37 * hash) + SOURCE_CODE_INFO_FIELD_NUMBER; + hash = (53 * hash) + getSourceCodeInfo().hashCode(); + } + if (hasSyntax()) { + hash = (37 * hash) + SYNTAX_FIELD_NUMBER; + hash = (53 * hash) + getSyntax().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Describes a complete .proto file.
+     * 
+ * + * Protobuf type {@code google.protobuf.FileDescriptorProto} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:google.protobuf.FileDescriptorProto) + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProtoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.class, com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getMessageTypeFieldBuilder(); + getEnumTypeFieldBuilder(); + getServiceFieldBuilder(); + getExtensionFieldBuilder(); + getOptionsFieldBuilder(); + getSourceCodeInfoFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + package_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000004); + publicDependency_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000008); + weakDependency_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000010); + if (messageTypeBuilder_ == null) { + messageType_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + } else { + messageTypeBuilder_.clear(); + } + if (enumTypeBuilder_ == null) { + enumType_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000040); + } else { + enumTypeBuilder_.clear(); + } + if (serviceBuilder_ == null) { + service_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000080); + } else { + serviceBuilder_.clear(); + } + if (extensionBuilder_ == null) { + extension_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + } else { + extensionBuilder_.clear(); + } + if (optionsBuilder_ == null) { + options_ = null; + } else { + optionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + if (sourceCodeInfoBuilder_ == null) { + sourceCodeInfo_ = null; + } else { + sourceCodeInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + syntax_ = ""; + bitField0_ = (bitField0_ & ~0x00000800); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto build() { + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto buildPartial() { + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto result = new com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.package_ = package_; + if (((bitField0_ & 0x00000004) != 0)) { + dependency_ = dependency_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.dependency_ = dependency_; + if (((bitField0_ & 0x00000008) != 0)) { + publicDependency_.makeImmutable(); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.publicDependency_ = publicDependency_; + if (((bitField0_ & 0x00000010) != 0)) { + weakDependency_.makeImmutable(); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.weakDependency_ = weakDependency_; + if (messageTypeBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0)) { + messageType_ = java.util.Collections.unmodifiableList(messageType_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.messageType_ = messageType_; + } else { + result.messageType_ = messageTypeBuilder_.build(); + } + if (enumTypeBuilder_ == null) { + if (((bitField0_ & 0x00000040) != 0)) { + enumType_ = java.util.Collections.unmodifiableList(enumType_); + bitField0_ = (bitField0_ & ~0x00000040); + } + result.enumType_ = enumType_; + } else { + result.enumType_ = enumTypeBuilder_.build(); + } + if (serviceBuilder_ == null) { + if (((bitField0_ & 0x00000080) != 0)) { + service_ = java.util.Collections.unmodifiableList(service_); + bitField0_ = (bitField0_ & ~0x00000080); + } + result.service_ = service_; + } else { + result.service_ = serviceBuilder_.build(); + } + if (extensionBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0)) { + extension_ = java.util.Collections.unmodifiableList(extension_); + bitField0_ = (bitField0_ & ~0x00000100); + } + result.extension_ = extension_; + } else { + result.extension_ = extensionBuilder_.build(); + } + if (((from_bitField0_ & 0x00000200) != 0)) { + if (optionsBuilder_ == null) { + result.options_ = options_; + } else { + result.options_ = optionsBuilder_.build(); + } + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000400) != 0)) { + if (sourceCodeInfoBuilder_ == null) { + result.sourceCodeInfo_ = sourceCodeInfo_; + } else { + result.sourceCodeInfo_ = sourceCodeInfoBuilder_.build(); + } + to_bitField0_ |= 0x00000008; + } + if (((from_bitField0_ & 0x00000800) != 0)) { + to_bitField0_ |= 0x00000010; + } + result.syntax_ = syntax_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto) { + return mergeFrom((com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto other) { + if (other == com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto.getDefaultInstance()) return this; + if (other.hasName()) { + bitField0_ |= 0x00000001; + name_ = other.name_; + onChanged(); + } + if (other.hasPackage()) { + bitField0_ |= 0x00000002; + package_ = other.package_; + onChanged(); + } + if (!other.dependency_.isEmpty()) { + if (dependency_.isEmpty()) { + dependency_ = other.dependency_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureDependencyIsMutable(); + dependency_.addAll(other.dependency_); + } + onChanged(); + } + if (!other.publicDependency_.isEmpty()) { + if (publicDependency_.isEmpty()) { + publicDependency_ = other.publicDependency_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensurePublicDependencyIsMutable(); + publicDependency_.addAll(other.publicDependency_); + } + onChanged(); + } + if (!other.weakDependency_.isEmpty()) { + if (weakDependency_.isEmpty()) { + weakDependency_ = other.weakDependency_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensureWeakDependencyIsMutable(); + weakDependency_.addAll(other.weakDependency_); + } + onChanged(); + } + if (messageTypeBuilder_ == null) { + if (!other.messageType_.isEmpty()) { + if (messageType_.isEmpty()) { + messageType_ = other.messageType_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureMessageTypeIsMutable(); + messageType_.addAll(other.messageType_); + } + onChanged(); + } + } else { + if (!other.messageType_.isEmpty()) { + if (messageTypeBuilder_.isEmpty()) { + messageTypeBuilder_.dispose(); + messageTypeBuilder_ = null; + messageType_ = other.messageType_; + bitField0_ = (bitField0_ & ~0x00000020); + messageTypeBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getMessageTypeFieldBuilder() : null; + } else { + messageTypeBuilder_.addAllMessages(other.messageType_); + } + } + } + if (enumTypeBuilder_ == null) { + if (!other.enumType_.isEmpty()) { + if (enumType_.isEmpty()) { + enumType_ = other.enumType_; + bitField0_ = (bitField0_ & ~0x00000040); + } else { + ensureEnumTypeIsMutable(); + enumType_.addAll(other.enumType_); + } + onChanged(); + } + } else { + if (!other.enumType_.isEmpty()) { + if (enumTypeBuilder_.isEmpty()) { + enumTypeBuilder_.dispose(); + enumTypeBuilder_ = null; + enumType_ = other.enumType_; + bitField0_ = (bitField0_ & ~0x00000040); + enumTypeBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getEnumTypeFieldBuilder() : null; + } else { + enumTypeBuilder_.addAllMessages(other.enumType_); + } + } + } + if (serviceBuilder_ == null) { + if (!other.service_.isEmpty()) { + if (service_.isEmpty()) { + service_ = other.service_; + bitField0_ = (bitField0_ & ~0x00000080); + } else { + ensureServiceIsMutable(); + service_.addAll(other.service_); + } + onChanged(); + } + } else { + if (!other.service_.isEmpty()) { + if (serviceBuilder_.isEmpty()) { + serviceBuilder_.dispose(); + serviceBuilder_ = null; + service_ = other.service_; + bitField0_ = (bitField0_ & ~0x00000080); + serviceBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getServiceFieldBuilder() : null; + } else { + serviceBuilder_.addAllMessages(other.service_); + } + } + } + if (extensionBuilder_ == null) { + if (!other.extension_.isEmpty()) { + if (extension_.isEmpty()) { + extension_ = other.extension_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensureExtensionIsMutable(); + extension_.addAll(other.extension_); + } + onChanged(); + } + } else { + if (!other.extension_.isEmpty()) { + if (extensionBuilder_.isEmpty()) { + extensionBuilder_.dispose(); + extensionBuilder_ = null; + extension_ = other.extension_; + bitField0_ = (bitField0_ & ~0x00000100); + extensionBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getExtensionFieldBuilder() : null; + } else { + extensionBuilder_.addAllMessages(other.extension_); + } + } + } + if (other.hasOptions()) { + mergeOptions(other.getOptions()); + } + if (other.hasSourceCodeInfo()) { + mergeSourceCodeInfo(other.getSourceCodeInfo()); + } + if (other.hasSyntax()) { + bitField0_ |= 0x00000800; + syntax_ = other.syntax_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + for (int i = 0; i < getMessageTypeCount(); i++) { + if (!getMessageType(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getEnumTypeCount(); i++) { + if (!getEnumType(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getServiceCount(); i++) { + if (!getService(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getExtensionCount(); i++) { + if (!getExtension(i).isInitialized()) { + return false; + } + } + if (hasOptions()) { + if (!getOptions().isInitialized()) { + return false; + } + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object name_ = ""; + /** + *
+       * file name, relative to root of source tree
+       * 
+ * + * optional string name = 1; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * file name, relative to root of source tree
+       * 
+ * + * optional string name = 1; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * file name, relative to root of source tree
+       * 
+ * + * optional string name = 1; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * file name, relative to root of source tree
+       * 
+ * + * optional string name = 1; + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + /** + *
+       * file name, relative to root of source tree
+       * 
+ * + * optional string name = 1; + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + *
+       * file name, relative to root of source tree
+       * 
+ * + * optional string name = 1; + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + + private java.lang.Object package_ = ""; + /** + *
+       * e.g. "foo", "foo.bar", etc.
+       * 
+ * + * optional string package = 2; + */ + public boolean hasPackage() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+       * e.g. "foo", "foo.bar", etc.
+       * 
+ * + * optional string package = 2; + */ + public java.lang.String getPackage() { + java.lang.Object ref = package_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + package_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * e.g. "foo", "foo.bar", etc.
+       * 
+ * + * optional string package = 2; + */ + public com.google.protobuf.ByteString + getPackageBytes() { + java.lang.Object ref = package_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + package_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * e.g. "foo", "foo.bar", etc.
+       * 
+ * + * optional string package = 2; + */ + public Builder setPackage( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + package_ = value; + onChanged(); + return this; + } + /** + *
+       * e.g. "foo", "foo.bar", etc.
+       * 
+ * + * optional string package = 2; + */ + public Builder clearPackage() { + bitField0_ = (bitField0_ & ~0x00000002); + package_ = getDefaultInstance().getPackage(); + onChanged(); + return this; + } + /** + *
+       * e.g. "foo", "foo.bar", etc.
+       * 
+ * + * optional string package = 2; + */ + public Builder setPackageBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + package_ = value; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringList dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY; + private void ensureDependencyIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + dependency_ = new com.google.protobuf.LazyStringArrayList(dependency_); + bitField0_ |= 0x00000004; + } + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public com.google.protobuf.ProtocolStringList + getDependencyList() { + return dependency_.getUnmodifiableView(); + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public int getDependencyCount() { + return dependency_.size(); + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public java.lang.String getDependency(int index) { + return dependency_.get(index); + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public com.google.protobuf.ByteString + getDependencyBytes(int index) { + return dependency_.getByteString(index); + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public Builder setDependency( + int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureDependencyIsMutable(); + dependency_.set(index, value); + onChanged(); + return this; + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public Builder addDependency( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureDependencyIsMutable(); + dependency_.add(value); + onChanged(); + return this; + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public Builder addAllDependency( + java.lang.Iterable values) { + ensureDependencyIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, dependency_); + onChanged(); + return this; + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public Builder clearDependency() { + dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + *
+       * Names of files imported by this file.
+       * 
+ * + * repeated string dependency = 3; + */ + public Builder addDependencyBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + ensureDependencyIsMutable(); + dependency_.add(value); + onChanged(); + return this; + } + + private com.google.protobuf.Internal.IntList publicDependency_ = emptyIntList(); + private void ensurePublicDependencyIsMutable() { + if (!((bitField0_ & 0x00000008) != 0)) { + publicDependency_ = mutableCopy(publicDependency_); + bitField0_ |= 0x00000008; + } + } + /** + *
+       * Indexes of the public imported files in the dependency list above.
+       * 
+ * + * repeated int32 public_dependency = 10; + */ + public java.util.List + getPublicDependencyList() { + return ((bitField0_ & 0x00000008) != 0) ? + java.util.Collections.unmodifiableList(publicDependency_) : publicDependency_; + } + /** + *
+       * Indexes of the public imported files in the dependency list above.
+       * 
+ * + * repeated int32 public_dependency = 10; + */ + public int getPublicDependencyCount() { + return publicDependency_.size(); + } + /** + *
+       * Indexes of the public imported files in the dependency list above.
+       * 
+ * + * repeated int32 public_dependency = 10; + */ + public int getPublicDependency(int index) { + return publicDependency_.getInt(index); + } + /** + *
+       * Indexes of the public imported files in the dependency list above.
+       * 
+ * + * repeated int32 public_dependency = 10; + */ + public Builder setPublicDependency( + int index, int value) { + ensurePublicDependencyIsMutable(); + publicDependency_.setInt(index, value); + onChanged(); + return this; + } + /** + *
+       * Indexes of the public imported files in the dependency list above.
+       * 
+ * + * repeated int32 public_dependency = 10; + */ + public Builder addPublicDependency(int value) { + ensurePublicDependencyIsMutable(); + publicDependency_.addInt(value); + onChanged(); + return this; + } + /** + *
+       * Indexes of the public imported files in the dependency list above.
+       * 
+ * + * repeated int32 public_dependency = 10; + */ + public Builder addAllPublicDependency( + java.lang.Iterable values) { + ensurePublicDependencyIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, publicDependency_); + onChanged(); + return this; + } + /** + *
+       * Indexes of the public imported files in the dependency list above.
+       * 
+ * + * repeated int32 public_dependency = 10; + */ + public Builder clearPublicDependency() { + publicDependency_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + private com.google.protobuf.Internal.IntList weakDependency_ = emptyIntList(); + private void ensureWeakDependencyIsMutable() { + if (!((bitField0_ & 0x00000010) != 0)) { + weakDependency_ = mutableCopy(weakDependency_); + bitField0_ |= 0x00000010; + } + } + /** + *
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * 
+ * + * repeated int32 weak_dependency = 11; + */ + public java.util.List + getWeakDependencyList() { + return ((bitField0_ & 0x00000010) != 0) ? + java.util.Collections.unmodifiableList(weakDependency_) : weakDependency_; + } + /** + *
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * 
+ * + * repeated int32 weak_dependency = 11; + */ + public int getWeakDependencyCount() { + return weakDependency_.size(); + } + /** + *
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * 
+ * + * repeated int32 weak_dependency = 11; + */ + public int getWeakDependency(int index) { + return weakDependency_.getInt(index); + } + /** + *
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * 
+ * + * repeated int32 weak_dependency = 11; + */ + public Builder setWeakDependency( + int index, int value) { + ensureWeakDependencyIsMutable(); + weakDependency_.setInt(index, value); + onChanged(); + return this; + } + /** + *
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * 
+ * + * repeated int32 weak_dependency = 11; + */ + public Builder addWeakDependency(int value) { + ensureWeakDependencyIsMutable(); + weakDependency_.addInt(value); + onChanged(); + return this; + } + /** + *
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * 
+ * + * repeated int32 weak_dependency = 11; + */ + public Builder addAllWeakDependency( + java.lang.Iterable values) { + ensureWeakDependencyIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, weakDependency_); + onChanged(); + return this; + } + /** + *
+       * Indexes of the weak imported files in the dependency list.
+       * For Google-internal migration only. Do not use.
+       * 
+ * + * repeated int32 weak_dependency = 11; + */ + public Builder clearWeakDependency() { + weakDependency_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + private java.util.List messageType_ = + java.util.Collections.emptyList(); + private void ensureMessageTypeIsMutable() { + if (!((bitField0_ & 0x00000020) != 0)) { + messageType_ = new java.util.ArrayList(messageType_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder> messageTypeBuilder_; + + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public java.util.List getMessageTypeList() { + if (messageTypeBuilder_ == null) { + return java.util.Collections.unmodifiableList(messageType_); + } else { + return messageTypeBuilder_.getMessageList(); + } + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public int getMessageTypeCount() { + if (messageTypeBuilder_ == null) { + return messageType_.size(); + } else { + return messageTypeBuilder_.getCount(); + } + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getMessageType(int index) { + if (messageTypeBuilder_ == null) { + return messageType_.get(index); + } else { + return messageTypeBuilder_.getMessage(index); + } + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder setMessageType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto value) { + if (messageTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTypeIsMutable(); + messageType_.set(index, value); + onChanged(); + } else { + messageTypeBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder setMessageType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder builderForValue) { + if (messageTypeBuilder_ == null) { + ensureMessageTypeIsMutable(); + messageType_.set(index, builderForValue.build()); + onChanged(); + } else { + messageTypeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder addMessageType(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto value) { + if (messageTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTypeIsMutable(); + messageType_.add(value); + onChanged(); + } else { + messageTypeBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder addMessageType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto value) { + if (messageTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMessageTypeIsMutable(); + messageType_.add(index, value); + onChanged(); + } else { + messageTypeBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder addMessageType( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder builderForValue) { + if (messageTypeBuilder_ == null) { + ensureMessageTypeIsMutable(); + messageType_.add(builderForValue.build()); + onChanged(); + } else { + messageTypeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder addMessageType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder builderForValue) { + if (messageTypeBuilder_ == null) { + ensureMessageTypeIsMutable(); + messageType_.add(index, builderForValue.build()); + onChanged(); + } else { + messageTypeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder addAllMessageType( + java.lang.Iterable values) { + if (messageTypeBuilder_ == null) { + ensureMessageTypeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, messageType_); + onChanged(); + } else { + messageTypeBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder clearMessageType() { + if (messageTypeBuilder_ == null) { + messageType_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + messageTypeBuilder_.clear(); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public Builder removeMessageType(int index) { + if (messageTypeBuilder_ == null) { + ensureMessageTypeIsMutable(); + messageType_.remove(index); + onChanged(); + } else { + messageTypeBuilder_.remove(index); + } + return this; + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder getMessageTypeBuilder( + int index) { + return getMessageTypeFieldBuilder().getBuilder(index); + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder( + int index) { + if (messageTypeBuilder_ == null) { + return messageType_.get(index); } else { + return messageTypeBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public java.util.List + getMessageTypeOrBuilderList() { + if (messageTypeBuilder_ != null) { + return messageTypeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(messageType_); + } + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder addMessageTypeBuilder() { + return getMessageTypeFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.getDefaultInstance()); + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder addMessageTypeBuilder( + int index) { + return getMessageTypeFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.getDefaultInstance()); + } + /** + *
+       * All top-level definitions in this file.
+       * 
+ * + * repeated .google.protobuf.DescriptorProto message_type = 4; + */ + public java.util.List + getMessageTypeBuilderList() { + return getMessageTypeFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder> + getMessageTypeFieldBuilder() { + if (messageTypeBuilder_ == null) { + messageTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder>( + messageType_, + ((bitField0_ & 0x00000020) != 0), + getParentForChildren(), + isClean()); + messageType_ = null; + } + return messageTypeBuilder_; + } + + private java.util.List enumType_ = + java.util.Collections.emptyList(); + private void ensureEnumTypeIsMutable() { + if (!((bitField0_ & 0x00000040) != 0)) { + enumType_ = new java.util.ArrayList(enumType_); + bitField0_ |= 0x00000040; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder> enumTypeBuilder_; + + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public java.util.List getEnumTypeList() { + if (enumTypeBuilder_ == null) { + return java.util.Collections.unmodifiableList(enumType_); + } else { + return enumTypeBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public int getEnumTypeCount() { + if (enumTypeBuilder_ == null) { + return enumType_.size(); + } else { + return enumTypeBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto getEnumType(int index) { + if (enumTypeBuilder_ == null) { + return enumType_.get(index); + } else { + return enumTypeBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder setEnumType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto value) { + if (enumTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEnumTypeIsMutable(); + enumType_.set(index, value); + onChanged(); + } else { + enumTypeBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder setEnumType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + enumType_.set(index, builderForValue.build()); + onChanged(); + } else { + enumTypeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder addEnumType(com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto value) { + if (enumTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEnumTypeIsMutable(); + enumType_.add(value); + onChanged(); + } else { + enumTypeBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder addEnumType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto value) { + if (enumTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEnumTypeIsMutable(); + enumType_.add(index, value); + onChanged(); + } else { + enumTypeBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder addEnumType( + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + enumType_.add(builderForValue.build()); + onChanged(); + } else { + enumTypeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder addEnumType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + enumType_.add(index, builderForValue.build()); + onChanged(); + } else { + enumTypeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder addAllEnumType( + java.lang.Iterable values) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, enumType_); + onChanged(); + } else { + enumTypeBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder clearEnumType() { + if (enumTypeBuilder_ == null) { + enumType_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + } else { + enumTypeBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public Builder removeEnumType(int index) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + enumType_.remove(index); + onChanged(); + } else { + enumTypeBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder getEnumTypeBuilder( + int index) { + return getEnumTypeFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder( + int index) { + if (enumTypeBuilder_ == null) { + return enumType_.get(index); } else { + return enumTypeBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public java.util.List + getEnumTypeOrBuilderList() { + if (enumTypeBuilder_ != null) { + return enumTypeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(enumType_); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder() { + return getEnumTypeFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder( + int index) { + return getEnumTypeFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + public java.util.List + getEnumTypeBuilderList() { + return getEnumTypeFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder> + getEnumTypeFieldBuilder() { + if (enumTypeBuilder_ == null) { + enumTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder>( + enumType_, + ((bitField0_ & 0x00000040) != 0), + getParentForChildren(), + isClean()); + enumType_ = null; + } + return enumTypeBuilder_; + } + + private java.util.List service_ = + java.util.Collections.emptyList(); + private void ensureServiceIsMutable() { + if (!((bitField0_ & 0x00000080) != 0)) { + service_ = new java.util.ArrayList(service_); + bitField0_ |= 0x00000080; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProtoOrBuilder> serviceBuilder_; + + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public java.util.List getServiceList() { + if (serviceBuilder_ == null) { + return java.util.Collections.unmodifiableList(service_); + } else { + return serviceBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public int getServiceCount() { + if (serviceBuilder_ == null) { + return service_.size(); + } else { + return serviceBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto getService(int index) { + if (serviceBuilder_ == null) { + return service_.get(index); + } else { + return serviceBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder setService( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto value) { + if (serviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureServiceIsMutable(); + service_.set(index, value); + onChanged(); + } else { + serviceBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder setService( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + if (serviceBuilder_ == null) { + ensureServiceIsMutable(); + service_.set(index, builderForValue.build()); + onChanged(); + } else { + serviceBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder addService(com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto value) { + if (serviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureServiceIsMutable(); + service_.add(value); + onChanged(); + } else { + serviceBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder addService( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto value) { + if (serviceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureServiceIsMutable(); + service_.add(index, value); + onChanged(); + } else { + serviceBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder addService( + com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + if (serviceBuilder_ == null) { + ensureServiceIsMutable(); + service_.add(builderForValue.build()); + onChanged(); + } else { + serviceBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder addService( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + if (serviceBuilder_ == null) { + ensureServiceIsMutable(); + service_.add(index, builderForValue.build()); + onChanged(); + } else { + serviceBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder addAllService( + java.lang.Iterable values) { + if (serviceBuilder_ == null) { + ensureServiceIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, service_); + onChanged(); + } else { + serviceBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder clearService() { + if (serviceBuilder_ == null) { + service_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000080); + onChanged(); + } else { + serviceBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public Builder removeService(int index) { + if (serviceBuilder_ == null) { + ensureServiceIsMutable(); + service_.remove(index); + onChanged(); + } else { + serviceBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder getServiceBuilder( + int index) { + return getServiceFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder( + int index) { + if (serviceBuilder_ == null) { + return service_.get(index); } else { + return serviceBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public java.util.List + getServiceOrBuilderList() { + if (serviceBuilder_ != null) { + return serviceBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(service_); + } + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder addServiceBuilder() { + return getServiceFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder addServiceBuilder( + int index) { + return getServiceFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + public java.util.List + getServiceBuilderList() { + return getServiceFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProtoOrBuilder> + getServiceFieldBuilder() { + if (serviceBuilder_ == null) { + serviceBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.ServiceDescriptorProtoOrBuilder>( + service_, + ((bitField0_ & 0x00000080) != 0), + getParentForChildren(), + isClean()); + service_ = null; + } + return serviceBuilder_; + } + + private java.util.List extension_ = + java.util.Collections.emptyList(); + private void ensureExtensionIsMutable() { + if (!((bitField0_ & 0x00000100) != 0)) { + extension_ = new java.util.ArrayList(extension_); + bitField0_ |= 0x00000100; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder> extensionBuilder_; + + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public java.util.List getExtensionList() { + if (extensionBuilder_ == null) { + return java.util.Collections.unmodifiableList(extension_); + } else { + return extensionBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public int getExtensionCount() { + if (extensionBuilder_ == null) { + return extension_.size(); + } else { + return extensionBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getExtension(int index) { + if (extensionBuilder_ == null) { + return extension_.get(index); + } else { + return extensionBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder setExtension( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (extensionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionIsMutable(); + extension_.set(index, value); + onChanged(); + } else { + extensionBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder setExtension( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + extension_.set(index, builderForValue.build()); + onChanged(); + } else { + extensionBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder addExtension(com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (extensionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionIsMutable(); + extension_.add(value); + onChanged(); + } else { + extensionBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder addExtension( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (extensionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionIsMutable(); + extension_.add(index, value); + onChanged(); + } else { + extensionBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder addExtension( + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + extension_.add(builderForValue.build()); + onChanged(); + } else { + extensionBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder addExtension( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + extension_.add(index, builderForValue.build()); + onChanged(); + } else { + extensionBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder addAllExtension( + java.lang.Iterable values) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, extension_); + onChanged(); + } else { + extensionBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder clearExtension() { + if (extensionBuilder_ == null) { + extension_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + onChanged(); + } else { + extensionBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public Builder removeExtension(int index) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + extension_.remove(index); + onChanged(); + } else { + extensionBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder getExtensionBuilder( + int index) { + return getExtensionFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder( + int index) { + if (extensionBuilder_ == null) { + return extension_.get(index); } else { + return extensionBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public java.util.List + getExtensionOrBuilderList() { + if (extensionBuilder_ != null) { + return extensionBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(extension_); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder() { + return getExtensionFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder( + int index) { + return getExtensionFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + public java.util.List + getExtensionBuilderList() { + return getExtensionFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder> + getExtensionFieldBuilder() { + if (extensionBuilder_ == null) { + extensionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder>( + extension_, + ((bitField0_ & 0x00000100) != 0), + getParentForChildren(), + isClean()); + extension_ = null; + } + return extensionBuilder_; + } + + private com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions options_; + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions, com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FileOptionsOrBuilder> optionsBuilder_; + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public boolean hasOptions() { + return ((bitField0_ & 0x00000200) != 0); + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions getOptions() { + if (optionsBuilder_ == null) { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.getDefaultInstance() : options_; + } else { + return optionsBuilder_.getMessage(); + } + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public Builder setOptions(com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions value) { + if (optionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + options_ = value; + onChanged(); + } else { + optionsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000200; + return this; + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public Builder setOptions( + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.Builder builderForValue) { + if (optionsBuilder_ == null) { + options_ = builderForValue.build(); + onChanged(); + } else { + optionsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + return this; + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public Builder mergeOptions(com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions value) { + if (optionsBuilder_ == null) { + if (((bitField0_ & 0x00000200) != 0) && + options_ != null && + options_ != com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.getDefaultInstance()) { + options_ = + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.newBuilder(options_).mergeFrom(value).buildPartial(); + } else { + options_ = value; + } + onChanged(); + } else { + optionsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000200; + return this; + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public Builder clearOptions() { + if (optionsBuilder_ == null) { + options_ = null; + onChanged(); + } else { + optionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.Builder getOptionsBuilder() { + bitField0_ |= 0x00000200; + onChanged(); + return getOptionsFieldBuilder().getBuilder(); + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() { + if (optionsBuilder_ != null) { + return optionsBuilder_.getMessageOrBuilder(); + } else { + return options_ == null ? + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.getDefaultInstance() : options_; + } + } + /** + * optional .google.protobuf.FileOptions options = 8; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions, com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FileOptionsOrBuilder> + getOptionsFieldBuilder() { + if (optionsBuilder_ == null) { + optionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions, com.pingcap.kafkareader.proto.DescriptorProtos.FileOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FileOptionsOrBuilder>( + getOptions(), + getParentForChildren(), + isClean()); + options_ = null; + } + return optionsBuilder_; + } + + private com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo sourceCodeInfo_; + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo, com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfoOrBuilder> sourceCodeInfoBuilder_; + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public boolean hasSourceCodeInfo() { + return ((bitField0_ & 0x00000400) != 0); + } + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() { + if (sourceCodeInfoBuilder_ == null) { + return sourceCodeInfo_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.getDefaultInstance() : sourceCodeInfo_; + } else { + return sourceCodeInfoBuilder_.getMessage(); + } + } + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public Builder setSourceCodeInfo(com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo value) { + if (sourceCodeInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + sourceCodeInfo_ = value; + onChanged(); + } else { + sourceCodeInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000400; + return this; + } + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public Builder setSourceCodeInfo( + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.Builder builderForValue) { + if (sourceCodeInfoBuilder_ == null) { + sourceCodeInfo_ = builderForValue.build(); + onChanged(); + } else { + sourceCodeInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000400; + return this; + } + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public Builder mergeSourceCodeInfo(com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo value) { + if (sourceCodeInfoBuilder_ == null) { + if (((bitField0_ & 0x00000400) != 0) && + sourceCodeInfo_ != null && + sourceCodeInfo_ != com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.getDefaultInstance()) { + sourceCodeInfo_ = + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.newBuilder(sourceCodeInfo_).mergeFrom(value).buildPartial(); + } else { + sourceCodeInfo_ = value; + } + onChanged(); + } else { + sourceCodeInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000400; + return this; + } + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public Builder clearSourceCodeInfo() { + if (sourceCodeInfoBuilder_ == null) { + sourceCodeInfo_ = null; + onChanged(); + } else { + sourceCodeInfoBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000400); + return this; + } + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.Builder getSourceCodeInfoBuilder() { + bitField0_ |= 0x00000400; + onChanged(); + return getSourceCodeInfoFieldBuilder().getBuilder(); + } + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() { + if (sourceCodeInfoBuilder_ != null) { + return sourceCodeInfoBuilder_.getMessageOrBuilder(); + } else { + return sourceCodeInfo_ == null ? + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.getDefaultInstance() : sourceCodeInfo_; + } + } + /** + *
+       * This field contains optional information about the original source code.
+       * You may safely remove this entire field without harming runtime
+       * functionality of the descriptors -- the information is needed only by
+       * development tools.
+       * 
+ * + * optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo, com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfoOrBuilder> + getSourceCodeInfoFieldBuilder() { + if (sourceCodeInfoBuilder_ == null) { + sourceCodeInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo, com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfo.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.SourceCodeInfoOrBuilder>( + getSourceCodeInfo(), + getParentForChildren(), + isClean()); + sourceCodeInfo_ = null; + } + return sourceCodeInfoBuilder_; + } + + private java.lang.Object syntax_ = ""; + /** + *
+       * The syntax of the proto file.
+       * The supported values are "proto2" and "proto3".
+       * 
+ * + * optional string syntax = 12; + */ + public boolean hasSyntax() { + return ((bitField0_ & 0x00000800) != 0); + } + /** + *
+       * The syntax of the proto file.
+       * The supported values are "proto2" and "proto3".
+       * 
+ * + * optional string syntax = 12; + */ + public java.lang.String getSyntax() { + java.lang.Object ref = syntax_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + syntax_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * The syntax of the proto file.
+       * The supported values are "proto2" and "proto3".
+       * 
+ * + * optional string syntax = 12; + */ + public com.google.protobuf.ByteString + getSyntaxBytes() { + java.lang.Object ref = syntax_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + syntax_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * The syntax of the proto file.
+       * The supported values are "proto2" and "proto3".
+       * 
+ * + * optional string syntax = 12; + */ + public Builder setSyntax( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000800; + syntax_ = value; + onChanged(); + return this; + } + /** + *
+       * The syntax of the proto file.
+       * The supported values are "proto2" and "proto3".
+       * 
+ * + * optional string syntax = 12; + */ + public Builder clearSyntax() { + bitField0_ = (bitField0_ & ~0x00000800); + syntax_ = getDefaultInstance().getSyntax(); + onChanged(); + return this; + } + /** + *
+       * The syntax of the proto file.
+       * The supported values are "proto2" and "proto3".
+       * 
+ * + * optional string syntax = 12; + */ + public Builder setSyntaxBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000800; + syntax_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorProto) + } + + // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto) + private static final com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto(); + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public FileDescriptorProto parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new FileDescriptorProto(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.FileDescriptorProto getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DescriptorProtoOrBuilder extends + // @@protoc_insertion_point(interface_extends:google.protobuf.DescriptorProto) + com.google.protobuf.MessageOrBuilder { + + /** + * optional string name = 1; + */ + boolean hasName(); + /** + * optional string name = 1; + */ + java.lang.String getName(); + /** + * optional string name = 1; + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + java.util.List + getFieldList(); + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getField(int index); + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + int getFieldCount(); + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + java.util.List + getFieldOrBuilderList(); + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder( + int index); + + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + java.util.List + getExtensionList(); + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getExtension(int index); + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + int getExtensionCount(); + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + java.util.List + getExtensionOrBuilderList(); + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder( + int index); + + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + java.util.List + getNestedTypeList(); + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getNestedType(int index); + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + int getNestedTypeCount(); + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + java.util.List + getNestedTypeOrBuilderList(); + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder( + int index); + + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + java.util.List + getEnumTypeList(); + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto getEnumType(int index); + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + int getEnumTypeCount(); + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + java.util.List + getEnumTypeOrBuilderList(); + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder( + int index); + + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + java.util.List + getExtensionRangeList(); + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index); + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + int getExtensionRangeCount(); + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + java.util.List + getExtensionRangeOrBuilderList(); + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder( + int index); + + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + java.util.List + getOneofDeclList(); + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto getOneofDecl(int index); + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + int getOneofDeclCount(); + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + java.util.List + getOneofDeclOrBuilderList(); + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder( + int index); + + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + boolean hasOptions(); + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions getOptions(); + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder(); + + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + java.util.List + getReservedRangeList(); + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange getReservedRange(int index); + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + int getReservedRangeCount(); + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + java.util.List + getReservedRangeOrBuilderList(); + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRangeOrBuilder getReservedRangeOrBuilder( + int index); + + /** + *
+     * Reserved field names, which may not be used by fields in the same message.
+     * A given name may only be reserved once.
+     * 
+ * + * repeated string reserved_name = 10; + */ + java.util.List + getReservedNameList(); + /** + *
+     * Reserved field names, which may not be used by fields in the same message.
+     * A given name may only be reserved once.
+     * 
+ * + * repeated string reserved_name = 10; + */ + int getReservedNameCount(); + /** + *
+     * Reserved field names, which may not be used by fields in the same message.
+     * A given name may only be reserved once.
+     * 
+ * + * repeated string reserved_name = 10; + */ + java.lang.String getReservedName(int index); + /** + *
+     * Reserved field names, which may not be used by fields in the same message.
+     * A given name may only be reserved once.
+     * 
+ * + * repeated string reserved_name = 10; + */ + com.google.protobuf.ByteString + getReservedNameBytes(int index); + } + /** + *
+   * Describes a message type.
+   * 
+ * + * Protobuf type {@code google.protobuf.DescriptorProto} + */ + public static final class DescriptorProto extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:google.protobuf.DescriptorProto) + DescriptorProtoOrBuilder { + private static final long serialVersionUID = 0L; + // Use DescriptorProto.newBuilder() to construct. + private DescriptorProto(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DescriptorProto() { + name_ = ""; + field_ = java.util.Collections.emptyList(); + extension_ = java.util.Collections.emptyList(); + nestedType_ = java.util.Collections.emptyList(); + enumType_ = java.util.Collections.emptyList(); + extensionRange_ = java.util.Collections.emptyList(); + oneofDecl_ = java.util.Collections.emptyList(); + reservedRange_ = java.util.Collections.emptyList(); + reservedName_ = com.google.protobuf.LazyStringArrayList.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new DescriptorProto(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DescriptorProto( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + name_ = bs; + break; + } + case 18: { + if (!((mutable_bitField0_ & 0x00000002) != 0)) { + field_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000002; + } + field_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry)); + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000008) != 0)) { + nestedType_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000008; + } + nestedType_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.PARSER, extensionRegistry)); + break; + } + case 34: { + if (!((mutable_bitField0_ & 0x00000010) != 0)) { + enumType_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000010; + } + enumType_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.PARSER, extensionRegistry)); + break; + } + case 42: { + if (!((mutable_bitField0_ & 0x00000020) != 0)) { + extensionRange_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000020; + } + extensionRange_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.PARSER, extensionRegistry)); + break; + } + case 50: { + if (!((mutable_bitField0_ & 0x00000004) != 0)) { + extension_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + extension_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry)); + break; + } + case 58: { + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.Builder subBuilder = null; + if (((bitField0_ & 0x00000002) != 0)) { + subBuilder = options_.toBuilder(); + } + options_ = input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(options_); + options_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000002; + break; + } + case 66: { + if (!((mutable_bitField0_ & 0x00000040) != 0)) { + oneofDecl_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000040; + } + oneofDecl_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.PARSER, extensionRegistry)); + break; + } + case 74: { + if (!((mutable_bitField0_ & 0x00000100) != 0)) { + reservedRange_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000100; + } + reservedRange_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.PARSER, extensionRegistry)); + break; + } + case 82: { + com.google.protobuf.ByteString bs = input.readBytes(); + if (!((mutable_bitField0_ & 0x00000200) != 0)) { + reservedName_ = new com.google.protobuf.LazyStringArrayList(); + mutable_bitField0_ |= 0x00000200; + } + reservedName_.add(bs); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000002) != 0)) { + field_ = java.util.Collections.unmodifiableList(field_); + } + if (((mutable_bitField0_ & 0x00000008) != 0)) { + nestedType_ = java.util.Collections.unmodifiableList(nestedType_); + } + if (((mutable_bitField0_ & 0x00000010) != 0)) { + enumType_ = java.util.Collections.unmodifiableList(enumType_); + } + if (((mutable_bitField0_ & 0x00000020) != 0)) { + extensionRange_ = java.util.Collections.unmodifiableList(extensionRange_); + } + if (((mutable_bitField0_ & 0x00000004) != 0)) { + extension_ = java.util.Collections.unmodifiableList(extension_); + } + if (((mutable_bitField0_ & 0x00000040) != 0)) { + oneofDecl_ = java.util.Collections.unmodifiableList(oneofDecl_); + } + if (((mutable_bitField0_ & 0x00000100) != 0)) { + reservedRange_ = java.util.Collections.unmodifiableList(reservedRange_); + } + if (((mutable_bitField0_ & 0x00000200) != 0)) { + reservedName_ = reservedName_.getUnmodifiableView(); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.class, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder.class); + } + + public interface ExtensionRangeOrBuilder extends + // @@protoc_insertion_point(interface_extends:google.protobuf.DescriptorProto.ExtensionRange) + com.google.protobuf.MessageOrBuilder { + + /** + * optional int32 start = 1; + */ + boolean hasStart(); + /** + * optional int32 start = 1; + */ + int getStart(); + + /** + * optional int32 end = 2; + */ + boolean hasEnd(); + /** + * optional int32 end = 2; + */ + int getEnd(); + + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + boolean hasOptions(); + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions getOptions(); + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptionsOrBuilder getOptionsOrBuilder(); + } + /** + * Protobuf type {@code google.protobuf.DescriptorProto.ExtensionRange} + */ + public static final class ExtensionRange extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:google.protobuf.DescriptorProto.ExtensionRange) + ExtensionRangeOrBuilder { + private static final long serialVersionUID = 0L; + // Use ExtensionRange.newBuilder() to construct. + private ExtensionRange(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ExtensionRange() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ExtensionRange(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ExtensionRange( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + bitField0_ |= 0x00000001; + start_ = input.readInt32(); + break; + } + case 16: { + bitField0_ |= 0x00000002; + end_ = input.readInt32(); + break; + } + case 26: { + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.Builder subBuilder = null; + if (((bitField0_ & 0x00000004) != 0)) { + subBuilder = options_.toBuilder(); + } + options_ = input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(options_); + options_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000004; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.class, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder.class); + } + + private int bitField0_; + public static final int START_FIELD_NUMBER = 1; + private int start_; + /** + * optional int32 start = 1; + */ + public boolean hasStart() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional int32 start = 1; + */ + public int getStart() { + return start_; + } + + public static final int END_FIELD_NUMBER = 2; + private int end_; + /** + * optional int32 end = 2; + */ + public boolean hasEnd() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional int32 end = 2; + */ + public int getEnd() { + return end_; + } + + public static final int OPTIONS_FIELD_NUMBER = 3; + private com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions options_; + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public boolean hasOptions() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions getOptions() { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.getDefaultInstance() : options_; + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptionsOrBuilder getOptionsOrBuilder() { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.getDefaultInstance() : options_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (hasOptions()) { + if (!getOptions().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeInt32(1, start_); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeInt32(2, end_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(3, getOptions()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, start_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, end_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getOptions()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange other = (com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange) obj; + + if (hasStart() != other.hasStart()) return false; + if (hasStart()) { + if (getStart() + != other.getStart()) return false; + } + if (hasEnd() != other.hasEnd()) return false; + if (hasEnd()) { + if (getEnd() + != other.getEnd()) return false; + } + if (hasOptions() != other.hasOptions()) return false; + if (hasOptions()) { + if (!getOptions() + .equals(other.getOptions())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasStart()) { + hash = (37 * hash) + START_FIELD_NUMBER; + hash = (53 * hash) + getStart(); + } + if (hasEnd()) { + hash = (37 * hash) + END_FIELD_NUMBER; + hash = (53 * hash) + getEnd(); + } + if (hasOptions()) { + hash = (37 * hash) + OPTIONS_FIELD_NUMBER; + hash = (53 * hash) + getOptions().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code google.protobuf.DescriptorProto.ExtensionRange} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:google.protobuf.DescriptorProto.ExtensionRange) + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.class, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getOptionsFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + start_ = 0; + bitField0_ = (bitField0_ & ~0x00000001); + end_ = 0; + bitField0_ = (bitField0_ & ~0x00000002); + if (optionsBuilder_ == null) { + options_ = null; + } else { + optionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange build() { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange buildPartial() { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange result = new com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.start_ = start_; + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.end_ = end_; + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + if (optionsBuilder_ == null) { + result.options_ = options_; + } else { + result.options_ = optionsBuilder_.build(); + } + to_bitField0_ |= 0x00000004; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange) { + return mergeFrom((com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange other) { + if (other == com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance()) return this; + if (other.hasStart()) { + setStart(other.getStart()); + } + if (other.hasEnd()) { + setEnd(other.getEnd()); + } + if (other.hasOptions()) { + mergeOptions(other.getOptions()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + if (hasOptions()) { + if (!getOptions().isInitialized()) { + return false; + } + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int start_ ; + /** + * optional int32 start = 1; + */ + public boolean hasStart() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional int32 start = 1; + */ + public int getStart() { + return start_; + } + /** + * optional int32 start = 1; + */ + public Builder setStart(int value) { + bitField0_ |= 0x00000001; + start_ = value; + onChanged(); + return this; + } + /** + * optional int32 start = 1; + */ + public Builder clearStart() { + bitField0_ = (bitField0_ & ~0x00000001); + start_ = 0; + onChanged(); + return this; + } + + private int end_ ; + /** + * optional int32 end = 2; + */ + public boolean hasEnd() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional int32 end = 2; + */ + public int getEnd() { + return end_; + } + /** + * optional int32 end = 2; + */ + public Builder setEnd(int value) { + bitField0_ |= 0x00000002; + end_ = value; + onChanged(); + return this; + } + /** + * optional int32 end = 2; + */ + public Builder clearEnd() { + bitField0_ = (bitField0_ & ~0x00000002); + end_ = 0; + onChanged(); + return this; + } + + private com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions options_; + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions, com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptionsOrBuilder> optionsBuilder_; + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public boolean hasOptions() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions getOptions() { + if (optionsBuilder_ == null) { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.getDefaultInstance() : options_; + } else { + return optionsBuilder_.getMessage(); + } + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public Builder setOptions(com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions value) { + if (optionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + options_ = value; + onChanged(); + } else { + optionsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public Builder setOptions( + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.Builder builderForValue) { + if (optionsBuilder_ == null) { + options_ = builderForValue.build(); + onChanged(); + } else { + optionsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public Builder mergeOptions(com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions value) { + if (optionsBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) && + options_ != null && + options_ != com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.getDefaultInstance()) { + options_ = + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.newBuilder(options_).mergeFrom(value).buildPartial(); + } else { + options_ = value; + } + onChanged(); + } else { + optionsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public Builder clearOptions() { + if (optionsBuilder_ == null) { + options_ = null; + onChanged(); + } else { + optionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.Builder getOptionsBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getOptionsFieldBuilder().getBuilder(); + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptionsOrBuilder getOptionsOrBuilder() { + if (optionsBuilder_ != null) { + return optionsBuilder_.getMessageOrBuilder(); + } else { + return options_ == null ? + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.getDefaultInstance() : options_; + } + } + /** + * optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions, com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptionsOrBuilder> + getOptionsFieldBuilder() { + if (optionsBuilder_ == null) { + optionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions, com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptionsOrBuilder>( + getOptions(), + getParentForChildren(), + isClean()); + options_ = null; + } + return optionsBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto.ExtensionRange) + } + + // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange) + private static final com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange(); + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ExtensionRange parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ExtensionRange(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReservedRangeOrBuilder extends + // @@protoc_insertion_point(interface_extends:google.protobuf.DescriptorProto.ReservedRange) + com.google.protobuf.MessageOrBuilder { + + /** + *
+       * Inclusive.
+       * 
+ * + * optional int32 start = 1; + */ + boolean hasStart(); + /** + *
+       * Inclusive.
+       * 
+ * + * optional int32 start = 1; + */ + int getStart(); + + /** + *
+       * Exclusive.
+       * 
+ * + * optional int32 end = 2; + */ + boolean hasEnd(); + /** + *
+       * Exclusive.
+       * 
+ * + * optional int32 end = 2; + */ + int getEnd(); + } + /** + *
+     * Range of reserved tag numbers. Reserved tag numbers may not be used by
+     * fields or extension ranges in the same message. Reserved ranges may
+     * not overlap.
+     * 
+ * + * Protobuf type {@code google.protobuf.DescriptorProto.ReservedRange} + */ + public static final class ReservedRange extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:google.protobuf.DescriptorProto.ReservedRange) + ReservedRangeOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReservedRange.newBuilder() to construct. + private ReservedRange(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReservedRange() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReservedRange(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReservedRange( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + bitField0_ |= 0x00000001; + start_ = input.readInt32(); + break; + } + case 16: { + bitField0_ |= 0x00000002; + end_ = input.readInt32(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.class, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder.class); + } + + private int bitField0_; + public static final int START_FIELD_NUMBER = 1; + private int start_; + /** + *
+       * Inclusive.
+       * 
+ * + * optional int32 start = 1; + */ + public boolean hasStart() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * Inclusive.
+       * 
+ * + * optional int32 start = 1; + */ + public int getStart() { + return start_; + } + + public static final int END_FIELD_NUMBER = 2; + private int end_; + /** + *
+       * Exclusive.
+       * 
+ * + * optional int32 end = 2; + */ + public boolean hasEnd() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+       * Exclusive.
+       * 
+ * + * optional int32 end = 2; + */ + public int getEnd() { + return end_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeInt32(1, start_); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeInt32(2, end_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, start_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, end_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange other = (com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange) obj; + + if (hasStart() != other.hasStart()) return false; + if (hasStart()) { + if (getStart() + != other.getStart()) return false; + } + if (hasEnd() != other.hasEnd()) return false; + if (hasEnd()) { + if (getEnd() + != other.getEnd()) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasStart()) { + hash = (37 * hash) + START_FIELD_NUMBER; + hash = (53 * hash) + getStart(); + } + if (hasEnd()) { + hash = (37 * hash) + END_FIELD_NUMBER; + hash = (53 * hash) + getEnd(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+       * Range of reserved tag numbers. Reserved tag numbers may not be used by
+       * fields or extension ranges in the same message. Reserved ranges may
+       * not overlap.
+       * 
+ * + * Protobuf type {@code google.protobuf.DescriptorProto.ReservedRange} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:google.protobuf.DescriptorProto.ReservedRange) + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRangeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.class, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + start_ = 0; + bitField0_ = (bitField0_ & ~0x00000001); + end_ = 0; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ReservedRange_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange build() { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange buildPartial() { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange result = new com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.start_ = start_; + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.end_ = end_; + to_bitField0_ |= 0x00000002; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange) { + return mergeFrom((com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange other) { + if (other == com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.getDefaultInstance()) return this; + if (other.hasStart()) { + setStart(other.getStart()); + } + if (other.hasEnd()) { + setEnd(other.getEnd()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int start_ ; + /** + *
+         * Inclusive.
+         * 
+ * + * optional int32 start = 1; + */ + public boolean hasStart() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+         * Inclusive.
+         * 
+ * + * optional int32 start = 1; + */ + public int getStart() { + return start_; + } + /** + *
+         * Inclusive.
+         * 
+ * + * optional int32 start = 1; + */ + public Builder setStart(int value) { + bitField0_ |= 0x00000001; + start_ = value; + onChanged(); + return this; + } + /** + *
+         * Inclusive.
+         * 
+ * + * optional int32 start = 1; + */ + public Builder clearStart() { + bitField0_ = (bitField0_ & ~0x00000001); + start_ = 0; + onChanged(); + return this; + } + + private int end_ ; + /** + *
+         * Exclusive.
+         * 
+ * + * optional int32 end = 2; + */ + public boolean hasEnd() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+         * Exclusive.
+         * 
+ * + * optional int32 end = 2; + */ + public int getEnd() { + return end_; + } + /** + *
+         * Exclusive.
+         * 
+ * + * optional int32 end = 2; + */ + public Builder setEnd(int value) { + bitField0_ |= 0x00000002; + end_ = value; + onChanged(); + return this; + } + /** + *
+         * Exclusive.
+         * 
+ * + * optional int32 end = 2; + */ + public Builder clearEnd() { + bitField0_ = (bitField0_ & ~0x00000002); + end_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto.ReservedRange) + } + + // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ReservedRange) + private static final com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange(); + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReservedRange parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReservedRange(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object name_; + /** + * optional string name = 1; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional string name = 1; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + /** + * optional string name = 1; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int FIELD_FIELD_NUMBER = 2; + private java.util.List field_; + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public java.util.List getFieldList() { + return field_; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public java.util.List + getFieldOrBuilderList() { + return field_; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public int getFieldCount() { + return field_.size(); + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getField(int index) { + return field_.get(index); + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder( + int index) { + return field_.get(index); + } + + public static final int EXTENSION_FIELD_NUMBER = 6; + private java.util.List extension_; + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public java.util.List getExtensionList() { + return extension_; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public java.util.List + getExtensionOrBuilderList() { + return extension_; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public int getExtensionCount() { + return extension_.size(); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getExtension(int index) { + return extension_.get(index); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder( + int index) { + return extension_.get(index); + } + + public static final int NESTED_TYPE_FIELD_NUMBER = 3; + private java.util.List nestedType_; + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public java.util.List getNestedTypeList() { + return nestedType_; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public java.util.List + getNestedTypeOrBuilderList() { + return nestedType_; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public int getNestedTypeCount() { + return nestedType_.size(); + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getNestedType(int index) { + return nestedType_.get(index); + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder( + int index) { + return nestedType_.get(index); + } + + public static final int ENUM_TYPE_FIELD_NUMBER = 4; + private java.util.List enumType_; + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public java.util.List getEnumTypeList() { + return enumType_; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public java.util.List + getEnumTypeOrBuilderList() { + return enumType_; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public int getEnumTypeCount() { + return enumType_.size(); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto getEnumType(int index) { + return enumType_.get(index); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder( + int index) { + return enumType_.get(index); + } + + public static final int EXTENSION_RANGE_FIELD_NUMBER = 5; + private java.util.List extensionRange_; + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public java.util.List getExtensionRangeList() { + return extensionRange_; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public java.util.List + getExtensionRangeOrBuilderList() { + return extensionRange_; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public int getExtensionRangeCount() { + return extensionRange_.size(); + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) { + return extensionRange_.get(index); + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder( + int index) { + return extensionRange_.get(index); + } + + public static final int ONEOF_DECL_FIELD_NUMBER = 8; + private java.util.List oneofDecl_; + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public java.util.List getOneofDeclList() { + return oneofDecl_; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public java.util.List + getOneofDeclOrBuilderList() { + return oneofDecl_; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public int getOneofDeclCount() { + return oneofDecl_.size(); + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto getOneofDecl(int index) { + return oneofDecl_.get(index); + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder( + int index) { + return oneofDecl_.get(index); + } + + public static final int OPTIONS_FIELD_NUMBER = 7; + private com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions options_; + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public boolean hasOptions() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions getOptions() { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.getDefaultInstance() : options_; + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder() { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.getDefaultInstance() : options_; + } + + public static final int RESERVED_RANGE_FIELD_NUMBER = 9; + private java.util.List reservedRange_; + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public java.util.List getReservedRangeList() { + return reservedRange_; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public java.util.List + getReservedRangeOrBuilderList() { + return reservedRange_; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public int getReservedRangeCount() { + return reservedRange_.size(); + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange getReservedRange(int index) { + return reservedRange_.get(index); + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRangeOrBuilder getReservedRangeOrBuilder( + int index) { + return reservedRange_.get(index); + } + + public static final int RESERVED_NAME_FIELD_NUMBER = 10; + private com.google.protobuf.LazyStringList reservedName_; + /** + *
+     * Reserved field names, which may not be used by fields in the same message.
+     * A given name may only be reserved once.
+     * 
+ * + * repeated string reserved_name = 10; + */ + public com.google.protobuf.ProtocolStringList + getReservedNameList() { + return reservedName_; + } + /** + *
+     * Reserved field names, which may not be used by fields in the same message.
+     * A given name may only be reserved once.
+     * 
+ * + * repeated string reserved_name = 10; + */ + public int getReservedNameCount() { + return reservedName_.size(); + } + /** + *
+     * Reserved field names, which may not be used by fields in the same message.
+     * A given name may only be reserved once.
+     * 
+ * + * repeated string reserved_name = 10; + */ + public java.lang.String getReservedName(int index) { + return reservedName_.get(index); + } + /** + *
+     * Reserved field names, which may not be used by fields in the same message.
+     * A given name may only be reserved once.
+     * 
+ * + * repeated string reserved_name = 10; + */ + public com.google.protobuf.ByteString + getReservedNameBytes(int index) { + return reservedName_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + for (int i = 0; i < getFieldCount(); i++) { + if (!getField(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getExtensionCount(); i++) { + if (!getExtension(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getNestedTypeCount(); i++) { + if (!getNestedType(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getEnumTypeCount(); i++) { + if (!getEnumType(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getExtensionRangeCount(); i++) { + if (!getExtensionRange(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + for (int i = 0; i < getOneofDeclCount(); i++) { + if (!getOneofDecl(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (hasOptions()) { + if (!getOptions().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + for (int i = 0; i < field_.size(); i++) { + output.writeMessage(2, field_.get(i)); + } + for (int i = 0; i < nestedType_.size(); i++) { + output.writeMessage(3, nestedType_.get(i)); + } + for (int i = 0; i < enumType_.size(); i++) { + output.writeMessage(4, enumType_.get(i)); + } + for (int i = 0; i < extensionRange_.size(); i++) { + output.writeMessage(5, extensionRange_.get(i)); + } + for (int i = 0; i < extension_.size(); i++) { + output.writeMessage(6, extension_.get(i)); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(7, getOptions()); + } + for (int i = 0; i < oneofDecl_.size(); i++) { + output.writeMessage(8, oneofDecl_.get(i)); + } + for (int i = 0; i < reservedRange_.size(); i++) { + output.writeMessage(9, reservedRange_.get(i)); + } + for (int i = 0; i < reservedName_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 10, reservedName_.getRaw(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + for (int i = 0; i < field_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, field_.get(i)); + } + for (int i = 0; i < nestedType_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, nestedType_.get(i)); + } + for (int i = 0; i < enumType_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, enumType_.get(i)); + } + for (int i = 0; i < extensionRange_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, extensionRange_.get(i)); + } + for (int i = 0; i < extension_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, extension_.get(i)); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, getOptions()); + } + for (int i = 0; i < oneofDecl_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, oneofDecl_.get(i)); + } + for (int i = 0; i < reservedRange_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, reservedRange_.get(i)); + } + { + int dataSize = 0; + for (int i = 0; i < reservedName_.size(); i++) { + dataSize += computeStringSizeNoTag(reservedName_.getRaw(i)); + } + size += dataSize; + size += 1 * getReservedNameList().size(); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto other = (com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto) obj; + + if (hasName() != other.hasName()) return false; + if (hasName()) { + if (!getName() + .equals(other.getName())) return false; + } + if (!getFieldList() + .equals(other.getFieldList())) return false; + if (!getExtensionList() + .equals(other.getExtensionList())) return false; + if (!getNestedTypeList() + .equals(other.getNestedTypeList())) return false; + if (!getEnumTypeList() + .equals(other.getEnumTypeList())) return false; + if (!getExtensionRangeList() + .equals(other.getExtensionRangeList())) return false; + if (!getOneofDeclList() + .equals(other.getOneofDeclList())) return false; + if (hasOptions() != other.hasOptions()) return false; + if (hasOptions()) { + if (!getOptions() + .equals(other.getOptions())) return false; + } + if (!getReservedRangeList() + .equals(other.getReservedRangeList())) return false; + if (!getReservedNameList() + .equals(other.getReservedNameList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasName()) { + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + } + if (getFieldCount() > 0) { + hash = (37 * hash) + FIELD_FIELD_NUMBER; + hash = (53 * hash) + getFieldList().hashCode(); + } + if (getExtensionCount() > 0) { + hash = (37 * hash) + EXTENSION_FIELD_NUMBER; + hash = (53 * hash) + getExtensionList().hashCode(); + } + if (getNestedTypeCount() > 0) { + hash = (37 * hash) + NESTED_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getNestedTypeList().hashCode(); + } + if (getEnumTypeCount() > 0) { + hash = (37 * hash) + ENUM_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getEnumTypeList().hashCode(); + } + if (getExtensionRangeCount() > 0) { + hash = (37 * hash) + EXTENSION_RANGE_FIELD_NUMBER; + hash = (53 * hash) + getExtensionRangeList().hashCode(); + } + if (getOneofDeclCount() > 0) { + hash = (37 * hash) + ONEOF_DECL_FIELD_NUMBER; + hash = (53 * hash) + getOneofDeclList().hashCode(); + } + if (hasOptions()) { + hash = (37 * hash) + OPTIONS_FIELD_NUMBER; + hash = (53 * hash) + getOptions().hashCode(); + } + if (getReservedRangeCount() > 0) { + hash = (37 * hash) + RESERVED_RANGE_FIELD_NUMBER; + hash = (53 * hash) + getReservedRangeList().hashCode(); + } + if (getReservedNameCount() > 0) { + hash = (37 * hash) + RESERVED_NAME_FIELD_NUMBER; + hash = (53 * hash) + getReservedNameList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Describes a message type.
+     * 
+ * + * Protobuf type {@code google.protobuf.DescriptorProto} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:google.protobuf.DescriptorProto) + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.class, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getFieldFieldBuilder(); + getExtensionFieldBuilder(); + getNestedTypeFieldBuilder(); + getEnumTypeFieldBuilder(); + getExtensionRangeFieldBuilder(); + getOneofDeclFieldBuilder(); + getOptionsFieldBuilder(); + getReservedRangeFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + if (fieldBuilder_ == null) { + field_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + } else { + fieldBuilder_.clear(); + } + if (extensionBuilder_ == null) { + extension_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + extensionBuilder_.clear(); + } + if (nestedTypeBuilder_ == null) { + nestedType_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + } else { + nestedTypeBuilder_.clear(); + } + if (enumTypeBuilder_ == null) { + enumType_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + } else { + enumTypeBuilder_.clear(); + } + if (extensionRangeBuilder_ == null) { + extensionRange_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + } else { + extensionRangeBuilder_.clear(); + } + if (oneofDeclBuilder_ == null) { + oneofDecl_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000040); + } else { + oneofDeclBuilder_.clear(); + } + if (optionsBuilder_ == null) { + options_ = null; + } else { + optionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + if (reservedRangeBuilder_ == null) { + reservedRange_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + } else { + reservedRangeBuilder_.clear(); + } + reservedName_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000200); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto build() { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto buildPartial() { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto result = new com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (fieldBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + field_ = java.util.Collections.unmodifiableList(field_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.field_ = field_; + } else { + result.field_ = fieldBuilder_.build(); + } + if (extensionBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + extension_ = java.util.Collections.unmodifiableList(extension_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.extension_ = extension_; + } else { + result.extension_ = extensionBuilder_.build(); + } + if (nestedTypeBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0)) { + nestedType_ = java.util.Collections.unmodifiableList(nestedType_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.nestedType_ = nestedType_; + } else { + result.nestedType_ = nestedTypeBuilder_.build(); + } + if (enumTypeBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0)) { + enumType_ = java.util.Collections.unmodifiableList(enumType_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.enumType_ = enumType_; + } else { + result.enumType_ = enumTypeBuilder_.build(); + } + if (extensionRangeBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0)) { + extensionRange_ = java.util.Collections.unmodifiableList(extensionRange_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.extensionRange_ = extensionRange_; + } else { + result.extensionRange_ = extensionRangeBuilder_.build(); + } + if (oneofDeclBuilder_ == null) { + if (((bitField0_ & 0x00000040) != 0)) { + oneofDecl_ = java.util.Collections.unmodifiableList(oneofDecl_); + bitField0_ = (bitField0_ & ~0x00000040); + } + result.oneofDecl_ = oneofDecl_; + } else { + result.oneofDecl_ = oneofDeclBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) != 0)) { + if (optionsBuilder_ == null) { + result.options_ = options_; + } else { + result.options_ = optionsBuilder_.build(); + } + to_bitField0_ |= 0x00000002; + } + if (reservedRangeBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0)) { + reservedRange_ = java.util.Collections.unmodifiableList(reservedRange_); + bitField0_ = (bitField0_ & ~0x00000100); + } + result.reservedRange_ = reservedRange_; + } else { + result.reservedRange_ = reservedRangeBuilder_.build(); + } + if (((bitField0_ & 0x00000200) != 0)) { + reservedName_ = reservedName_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000200); + } + result.reservedName_ = reservedName_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto) { + return mergeFrom((com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto other) { + if (other == com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.getDefaultInstance()) return this; + if (other.hasName()) { + bitField0_ |= 0x00000001; + name_ = other.name_; + onChanged(); + } + if (fieldBuilder_ == null) { + if (!other.field_.isEmpty()) { + if (field_.isEmpty()) { + field_ = other.field_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureFieldIsMutable(); + field_.addAll(other.field_); + } + onChanged(); + } + } else { + if (!other.field_.isEmpty()) { + if (fieldBuilder_.isEmpty()) { + fieldBuilder_.dispose(); + fieldBuilder_ = null; + field_ = other.field_; + bitField0_ = (bitField0_ & ~0x00000002); + fieldBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getFieldFieldBuilder() : null; + } else { + fieldBuilder_.addAllMessages(other.field_); + } + } + } + if (extensionBuilder_ == null) { + if (!other.extension_.isEmpty()) { + if (extension_.isEmpty()) { + extension_ = other.extension_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureExtensionIsMutable(); + extension_.addAll(other.extension_); + } + onChanged(); + } + } else { + if (!other.extension_.isEmpty()) { + if (extensionBuilder_.isEmpty()) { + extensionBuilder_.dispose(); + extensionBuilder_ = null; + extension_ = other.extension_; + bitField0_ = (bitField0_ & ~0x00000004); + extensionBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getExtensionFieldBuilder() : null; + } else { + extensionBuilder_.addAllMessages(other.extension_); + } + } + } + if (nestedTypeBuilder_ == null) { + if (!other.nestedType_.isEmpty()) { + if (nestedType_.isEmpty()) { + nestedType_ = other.nestedType_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureNestedTypeIsMutable(); + nestedType_.addAll(other.nestedType_); + } + onChanged(); + } + } else { + if (!other.nestedType_.isEmpty()) { + if (nestedTypeBuilder_.isEmpty()) { + nestedTypeBuilder_.dispose(); + nestedTypeBuilder_ = null; + nestedType_ = other.nestedType_; + bitField0_ = (bitField0_ & ~0x00000008); + nestedTypeBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getNestedTypeFieldBuilder() : null; + } else { + nestedTypeBuilder_.addAllMessages(other.nestedType_); + } + } + } + if (enumTypeBuilder_ == null) { + if (!other.enumType_.isEmpty()) { + if (enumType_.isEmpty()) { + enumType_ = other.enumType_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensureEnumTypeIsMutable(); + enumType_.addAll(other.enumType_); + } + onChanged(); + } + } else { + if (!other.enumType_.isEmpty()) { + if (enumTypeBuilder_.isEmpty()) { + enumTypeBuilder_.dispose(); + enumTypeBuilder_ = null; + enumType_ = other.enumType_; + bitField0_ = (bitField0_ & ~0x00000010); + enumTypeBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getEnumTypeFieldBuilder() : null; + } else { + enumTypeBuilder_.addAllMessages(other.enumType_); + } + } + } + if (extensionRangeBuilder_ == null) { + if (!other.extensionRange_.isEmpty()) { + if (extensionRange_.isEmpty()) { + extensionRange_ = other.extensionRange_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureExtensionRangeIsMutable(); + extensionRange_.addAll(other.extensionRange_); + } + onChanged(); + } + } else { + if (!other.extensionRange_.isEmpty()) { + if (extensionRangeBuilder_.isEmpty()) { + extensionRangeBuilder_.dispose(); + extensionRangeBuilder_ = null; + extensionRange_ = other.extensionRange_; + bitField0_ = (bitField0_ & ~0x00000020); + extensionRangeBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getExtensionRangeFieldBuilder() : null; + } else { + extensionRangeBuilder_.addAllMessages(other.extensionRange_); + } + } + } + if (oneofDeclBuilder_ == null) { + if (!other.oneofDecl_.isEmpty()) { + if (oneofDecl_.isEmpty()) { + oneofDecl_ = other.oneofDecl_; + bitField0_ = (bitField0_ & ~0x00000040); + } else { + ensureOneofDeclIsMutable(); + oneofDecl_.addAll(other.oneofDecl_); + } + onChanged(); + } + } else { + if (!other.oneofDecl_.isEmpty()) { + if (oneofDeclBuilder_.isEmpty()) { + oneofDeclBuilder_.dispose(); + oneofDeclBuilder_ = null; + oneofDecl_ = other.oneofDecl_; + bitField0_ = (bitField0_ & ~0x00000040); + oneofDeclBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getOneofDeclFieldBuilder() : null; + } else { + oneofDeclBuilder_.addAllMessages(other.oneofDecl_); + } + } + } + if (other.hasOptions()) { + mergeOptions(other.getOptions()); + } + if (reservedRangeBuilder_ == null) { + if (!other.reservedRange_.isEmpty()) { + if (reservedRange_.isEmpty()) { + reservedRange_ = other.reservedRange_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensureReservedRangeIsMutable(); + reservedRange_.addAll(other.reservedRange_); + } + onChanged(); + } + } else { + if (!other.reservedRange_.isEmpty()) { + if (reservedRangeBuilder_.isEmpty()) { + reservedRangeBuilder_.dispose(); + reservedRangeBuilder_ = null; + reservedRange_ = other.reservedRange_; + bitField0_ = (bitField0_ & ~0x00000100); + reservedRangeBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getReservedRangeFieldBuilder() : null; + } else { + reservedRangeBuilder_.addAllMessages(other.reservedRange_); + } + } + } + if (!other.reservedName_.isEmpty()) { + if (reservedName_.isEmpty()) { + reservedName_ = other.reservedName_; + bitField0_ = (bitField0_ & ~0x00000200); + } else { + ensureReservedNameIsMutable(); + reservedName_.addAll(other.reservedName_); + } + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + for (int i = 0; i < getFieldCount(); i++) { + if (!getField(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getExtensionCount(); i++) { + if (!getExtension(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getNestedTypeCount(); i++) { + if (!getNestedType(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getEnumTypeCount(); i++) { + if (!getEnumType(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getExtensionRangeCount(); i++) { + if (!getExtensionRange(i).isInitialized()) { + return false; + } + } + for (int i = 0; i < getOneofDeclCount(); i++) { + if (!getOneofDecl(i).isInitialized()) { + return false; + } + } + if (hasOptions()) { + if (!getOptions().isInitialized()) { + return false; + } + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object name_ = ""; + /** + * optional string name = 1; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional string name = 1; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string name = 1; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string name = 1; + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + /** + * optional string name = 1; + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + * optional string name = 1; + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + + private java.util.List field_ = + java.util.Collections.emptyList(); + private void ensureFieldIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + field_ = new java.util.ArrayList(field_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder> fieldBuilder_; + + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public java.util.List getFieldList() { + if (fieldBuilder_ == null) { + return java.util.Collections.unmodifiableList(field_); + } else { + return fieldBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public int getFieldCount() { + if (fieldBuilder_ == null) { + return field_.size(); + } else { + return fieldBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getField(int index) { + if (fieldBuilder_ == null) { + return field_.get(index); + } else { + return fieldBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder setField( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (fieldBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFieldIsMutable(); + field_.set(index, value); + onChanged(); + } else { + fieldBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder setField( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (fieldBuilder_ == null) { + ensureFieldIsMutable(); + field_.set(index, builderForValue.build()); + onChanged(); + } else { + fieldBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder addField(com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (fieldBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFieldIsMutable(); + field_.add(value); + onChanged(); + } else { + fieldBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder addField( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (fieldBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureFieldIsMutable(); + field_.add(index, value); + onChanged(); + } else { + fieldBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder addField( + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (fieldBuilder_ == null) { + ensureFieldIsMutable(); + field_.add(builderForValue.build()); + onChanged(); + } else { + fieldBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder addField( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (fieldBuilder_ == null) { + ensureFieldIsMutable(); + field_.add(index, builderForValue.build()); + onChanged(); + } else { + fieldBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder addAllField( + java.lang.Iterable values) { + if (fieldBuilder_ == null) { + ensureFieldIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, field_); + onChanged(); + } else { + fieldBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder clearField() { + if (fieldBuilder_ == null) { + field_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + fieldBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public Builder removeField(int index) { + if (fieldBuilder_ == null) { + ensureFieldIsMutable(); + field_.remove(index); + onChanged(); + } else { + fieldBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder getFieldBuilder( + int index) { + return getFieldFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder( + int index) { + if (fieldBuilder_ == null) { + return field_.get(index); } else { + return fieldBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public java.util.List + getFieldOrBuilderList() { + if (fieldBuilder_ != null) { + return fieldBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(field_); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder addFieldBuilder() { + return getFieldFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder addFieldBuilder( + int index) { + return getFieldFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + public java.util.List + getFieldBuilderList() { + return getFieldFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder> + getFieldFieldBuilder() { + if (fieldBuilder_ == null) { + fieldBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder>( + field_, + ((bitField0_ & 0x00000002) != 0), + getParentForChildren(), + isClean()); + field_ = null; + } + return fieldBuilder_; + } + + private java.util.List extension_ = + java.util.Collections.emptyList(); + private void ensureExtensionIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + extension_ = new java.util.ArrayList(extension_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder> extensionBuilder_; + + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public java.util.List getExtensionList() { + if (extensionBuilder_ == null) { + return java.util.Collections.unmodifiableList(extension_); + } else { + return extensionBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public int getExtensionCount() { + if (extensionBuilder_ == null) { + return extension_.size(); + } else { + return extensionBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto getExtension(int index) { + if (extensionBuilder_ == null) { + return extension_.get(index); + } else { + return extensionBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder setExtension( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (extensionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionIsMutable(); + extension_.set(index, value); + onChanged(); + } else { + extensionBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder setExtension( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + extension_.set(index, builderForValue.build()); + onChanged(); + } else { + extensionBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder addExtension(com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (extensionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionIsMutable(); + extension_.add(value); + onChanged(); + } else { + extensionBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder addExtension( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto value) { + if (extensionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionIsMutable(); + extension_.add(index, value); + onChanged(); + } else { + extensionBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder addExtension( + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + extension_.add(builderForValue.build()); + onChanged(); + } else { + extensionBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder addExtension( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + extension_.add(index, builderForValue.build()); + onChanged(); + } else { + extensionBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder addAllExtension( + java.lang.Iterable values) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, extension_); + onChanged(); + } else { + extensionBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder clearExtension() { + if (extensionBuilder_ == null) { + extension_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + extensionBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public Builder removeExtension(int index) { + if (extensionBuilder_ == null) { + ensureExtensionIsMutable(); + extension_.remove(index); + onChanged(); + } else { + extensionBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder getExtensionBuilder( + int index) { + return getExtensionFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder( + int index) { + if (extensionBuilder_ == null) { + return extension_.get(index); } else { + return extensionBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public java.util.List + getExtensionOrBuilderList() { + if (extensionBuilder_ != null) { + return extensionBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(extension_); + } + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder() { + return getExtensionFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder( + int index) { + return getExtensionFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + public java.util.List + getExtensionBuilderList() { + return getExtensionFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder> + getExtensionFieldBuilder() { + if (extensionBuilder_ == null) { + extensionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProtoOrBuilder>( + extension_, + ((bitField0_ & 0x00000004) != 0), + getParentForChildren(), + isClean()); + extension_ = null; + } + return extensionBuilder_; + } + + private java.util.List nestedType_ = + java.util.Collections.emptyList(); + private void ensureNestedTypeIsMutable() { + if (!((bitField0_ & 0x00000008) != 0)) { + nestedType_ = new java.util.ArrayList(nestedType_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder> nestedTypeBuilder_; + + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public java.util.List getNestedTypeList() { + if (nestedTypeBuilder_ == null) { + return java.util.Collections.unmodifiableList(nestedType_); + } else { + return nestedTypeBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public int getNestedTypeCount() { + if (nestedTypeBuilder_ == null) { + return nestedType_.size(); + } else { + return nestedTypeBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getNestedType(int index) { + if (nestedTypeBuilder_ == null) { + return nestedType_.get(index); + } else { + return nestedTypeBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder setNestedType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto value) { + if (nestedTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNestedTypeIsMutable(); + nestedType_.set(index, value); + onChanged(); + } else { + nestedTypeBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder setNestedType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder builderForValue) { + if (nestedTypeBuilder_ == null) { + ensureNestedTypeIsMutable(); + nestedType_.set(index, builderForValue.build()); + onChanged(); + } else { + nestedTypeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder addNestedType(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto value) { + if (nestedTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNestedTypeIsMutable(); + nestedType_.add(value); + onChanged(); + } else { + nestedTypeBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder addNestedType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto value) { + if (nestedTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureNestedTypeIsMutable(); + nestedType_.add(index, value); + onChanged(); + } else { + nestedTypeBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder addNestedType( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder builderForValue) { + if (nestedTypeBuilder_ == null) { + ensureNestedTypeIsMutable(); + nestedType_.add(builderForValue.build()); + onChanged(); + } else { + nestedTypeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder addNestedType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder builderForValue) { + if (nestedTypeBuilder_ == null) { + ensureNestedTypeIsMutable(); + nestedType_.add(index, builderForValue.build()); + onChanged(); + } else { + nestedTypeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder addAllNestedType( + java.lang.Iterable values) { + if (nestedTypeBuilder_ == null) { + ensureNestedTypeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, nestedType_); + onChanged(); + } else { + nestedTypeBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder clearNestedType() { + if (nestedTypeBuilder_ == null) { + nestedType_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + nestedTypeBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public Builder removeNestedType(int index) { + if (nestedTypeBuilder_ == null) { + ensureNestedTypeIsMutable(); + nestedType_.remove(index); + onChanged(); + } else { + nestedTypeBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder getNestedTypeBuilder( + int index) { + return getNestedTypeFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder( + int index) { + if (nestedTypeBuilder_ == null) { + return nestedType_.get(index); } else { + return nestedTypeBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public java.util.List + getNestedTypeOrBuilderList() { + if (nestedTypeBuilder_ != null) { + return nestedTypeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(nestedType_); + } + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder addNestedTypeBuilder() { + return getNestedTypeFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder addNestedTypeBuilder( + int index) { + return getNestedTypeFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + public java.util.List + getNestedTypeBuilderList() { + return getNestedTypeFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder> + getNestedTypeFieldBuilder() { + if (nestedTypeBuilder_ == null) { + nestedTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProtoOrBuilder>( + nestedType_, + ((bitField0_ & 0x00000008) != 0), + getParentForChildren(), + isClean()); + nestedType_ = null; + } + return nestedTypeBuilder_; + } + + private java.util.List enumType_ = + java.util.Collections.emptyList(); + private void ensureEnumTypeIsMutable() { + if (!((bitField0_ & 0x00000010) != 0)) { + enumType_ = new java.util.ArrayList(enumType_); + bitField0_ |= 0x00000010; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder> enumTypeBuilder_; + + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public java.util.List getEnumTypeList() { + if (enumTypeBuilder_ == null) { + return java.util.Collections.unmodifiableList(enumType_); + } else { + return enumTypeBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public int getEnumTypeCount() { + if (enumTypeBuilder_ == null) { + return enumType_.size(); + } else { + return enumTypeBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto getEnumType(int index) { + if (enumTypeBuilder_ == null) { + return enumType_.get(index); + } else { + return enumTypeBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder setEnumType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto value) { + if (enumTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEnumTypeIsMutable(); + enumType_.set(index, value); + onChanged(); + } else { + enumTypeBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder setEnumType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + enumType_.set(index, builderForValue.build()); + onChanged(); + } else { + enumTypeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder addEnumType(com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto value) { + if (enumTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEnumTypeIsMutable(); + enumType_.add(value); + onChanged(); + } else { + enumTypeBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder addEnumType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto value) { + if (enumTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEnumTypeIsMutable(); + enumType_.add(index, value); + onChanged(); + } else { + enumTypeBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder addEnumType( + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + enumType_.add(builderForValue.build()); + onChanged(); + } else { + enumTypeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder addEnumType( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + enumType_.add(index, builderForValue.build()); + onChanged(); + } else { + enumTypeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder addAllEnumType( + java.lang.Iterable values) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, enumType_); + onChanged(); + } else { + enumTypeBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder clearEnumType() { + if (enumTypeBuilder_ == null) { + enumType_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + } else { + enumTypeBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public Builder removeEnumType(int index) { + if (enumTypeBuilder_ == null) { + ensureEnumTypeIsMutable(); + enumType_.remove(index); + onChanged(); + } else { + enumTypeBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder getEnumTypeBuilder( + int index) { + return getEnumTypeFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder( + int index) { + if (enumTypeBuilder_ == null) { + return enumType_.get(index); } else { + return enumTypeBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public java.util.List + getEnumTypeOrBuilderList() { + if (enumTypeBuilder_ != null) { + return enumTypeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(enumType_); + } + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder() { + return getEnumTypeFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder( + int index) { + return getEnumTypeFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + public java.util.List + getEnumTypeBuilderList() { + return getEnumTypeFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder> + getEnumTypeFieldBuilder() { + if (enumTypeBuilder_ == null) { + enumTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.EnumDescriptorProtoOrBuilder>( + enumType_, + ((bitField0_ & 0x00000010) != 0), + getParentForChildren(), + isClean()); + enumType_ = null; + } + return enumTypeBuilder_; + } + + private java.util.List extensionRange_ = + java.util.Collections.emptyList(); + private void ensureExtensionRangeIsMutable() { + if (!((bitField0_ & 0x00000020) != 0)) { + extensionRange_ = new java.util.ArrayList(extensionRange_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> extensionRangeBuilder_; + + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public java.util.List getExtensionRangeList() { + if (extensionRangeBuilder_ == null) { + return java.util.Collections.unmodifiableList(extensionRange_); + } else { + return extensionRangeBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public int getExtensionRangeCount() { + if (extensionRangeBuilder_ == null) { + return extensionRange_.size(); + } else { + return extensionRangeBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) { + if (extensionRangeBuilder_ == null) { + return extensionRange_.get(index); + } else { + return extensionRangeBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder setExtensionRange( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange value) { + if (extensionRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionRangeIsMutable(); + extensionRange_.set(index, value); + onChanged(); + } else { + extensionRangeBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder setExtensionRange( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) { + if (extensionRangeBuilder_ == null) { + ensureExtensionRangeIsMutable(); + extensionRange_.set(index, builderForValue.build()); + onChanged(); + } else { + extensionRangeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder addExtensionRange(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange value) { + if (extensionRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionRangeIsMutable(); + extensionRange_.add(value); + onChanged(); + } else { + extensionRangeBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder addExtensionRange( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange value) { + if (extensionRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureExtensionRangeIsMutable(); + extensionRange_.add(index, value); + onChanged(); + } else { + extensionRangeBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder addExtensionRange( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) { + if (extensionRangeBuilder_ == null) { + ensureExtensionRangeIsMutable(); + extensionRange_.add(builderForValue.build()); + onChanged(); + } else { + extensionRangeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder addExtensionRange( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) { + if (extensionRangeBuilder_ == null) { + ensureExtensionRangeIsMutable(); + extensionRange_.add(index, builderForValue.build()); + onChanged(); + } else { + extensionRangeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder addAllExtensionRange( + java.lang.Iterable values) { + if (extensionRangeBuilder_ == null) { + ensureExtensionRangeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, extensionRange_); + onChanged(); + } else { + extensionRangeBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder clearExtensionRange() { + if (extensionRangeBuilder_ == null) { + extensionRange_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + extensionRangeBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public Builder removeExtensionRange(int index) { + if (extensionRangeBuilder_ == null) { + ensureExtensionRangeIsMutable(); + extensionRange_.remove(index); + onChanged(); + } else { + extensionRangeBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder getExtensionRangeBuilder( + int index) { + return getExtensionRangeFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder( + int index) { + if (extensionRangeBuilder_ == null) { + return extensionRange_.get(index); } else { + return extensionRangeBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public java.util.List + getExtensionRangeOrBuilderList() { + if (extensionRangeBuilder_ != null) { + return extensionRangeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(extensionRange_); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder addExtensionRangeBuilder() { + return getExtensionRangeFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance()); + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder addExtensionRangeBuilder( + int index) { + return getExtensionRangeFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance()); + } + /** + * repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + public java.util.List + getExtensionRangeBuilderList() { + return getExtensionRangeFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> + getExtensionRangeFieldBuilder() { + if (extensionRangeBuilder_ == null) { + extensionRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder>( + extensionRange_, + ((bitField0_ & 0x00000020) != 0), + getParentForChildren(), + isClean()); + extensionRange_ = null; + } + return extensionRangeBuilder_; + } + + private java.util.List oneofDecl_ = + java.util.Collections.emptyList(); + private void ensureOneofDeclIsMutable() { + if (!((bitField0_ & 0x00000040) != 0)) { + oneofDecl_ = new java.util.ArrayList(oneofDecl_); + bitField0_ |= 0x00000040; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProtoOrBuilder> oneofDeclBuilder_; + + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public java.util.List getOneofDeclList() { + if (oneofDeclBuilder_ == null) { + return java.util.Collections.unmodifiableList(oneofDecl_); + } else { + return oneofDeclBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public int getOneofDeclCount() { + if (oneofDeclBuilder_ == null) { + return oneofDecl_.size(); + } else { + return oneofDeclBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto getOneofDecl(int index) { + if (oneofDeclBuilder_ == null) { + return oneofDecl_.get(index); + } else { + return oneofDeclBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder setOneofDecl( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto value) { + if (oneofDeclBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOneofDeclIsMutable(); + oneofDecl_.set(index, value); + onChanged(); + } else { + oneofDeclBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder setOneofDecl( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder builderForValue) { + if (oneofDeclBuilder_ == null) { + ensureOneofDeclIsMutable(); + oneofDecl_.set(index, builderForValue.build()); + onChanged(); + } else { + oneofDeclBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder addOneofDecl(com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto value) { + if (oneofDeclBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOneofDeclIsMutable(); + oneofDecl_.add(value); + onChanged(); + } else { + oneofDeclBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder addOneofDecl( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto value) { + if (oneofDeclBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureOneofDeclIsMutable(); + oneofDecl_.add(index, value); + onChanged(); + } else { + oneofDeclBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder addOneofDecl( + com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder builderForValue) { + if (oneofDeclBuilder_ == null) { + ensureOneofDeclIsMutable(); + oneofDecl_.add(builderForValue.build()); + onChanged(); + } else { + oneofDeclBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder addOneofDecl( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder builderForValue) { + if (oneofDeclBuilder_ == null) { + ensureOneofDeclIsMutable(); + oneofDecl_.add(index, builderForValue.build()); + onChanged(); + } else { + oneofDeclBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder addAllOneofDecl( + java.lang.Iterable values) { + if (oneofDeclBuilder_ == null) { + ensureOneofDeclIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, oneofDecl_); + onChanged(); + } else { + oneofDeclBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder clearOneofDecl() { + if (oneofDeclBuilder_ == null) { + oneofDecl_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + } else { + oneofDeclBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public Builder removeOneofDecl(int index) { + if (oneofDeclBuilder_ == null) { + ensureOneofDeclIsMutable(); + oneofDecl_.remove(index); + onChanged(); + } else { + oneofDeclBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder getOneofDeclBuilder( + int index) { + return getOneofDeclFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder( + int index) { + if (oneofDeclBuilder_ == null) { + return oneofDecl_.get(index); } else { + return oneofDeclBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public java.util.List + getOneofDeclOrBuilderList() { + if (oneofDeclBuilder_ != null) { + return oneofDeclBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(oneofDecl_); + } + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder addOneofDeclBuilder() { + return getOneofDeclFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder addOneofDeclBuilder( + int index) { + return getOneofDeclFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.getDefaultInstance()); + } + /** + * repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + public java.util.List + getOneofDeclBuilderList() { + return getOneofDeclFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProtoOrBuilder> + getOneofDeclFieldBuilder() { + if (oneofDeclBuilder_ == null) { + oneofDeclBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProto.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.OneofDescriptorProtoOrBuilder>( + oneofDecl_, + ((bitField0_ & 0x00000040) != 0), + getParentForChildren(), + isClean()); + oneofDecl_ = null; + } + return oneofDeclBuilder_; + } + + private com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions options_; + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions, com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptionsOrBuilder> optionsBuilder_; + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public boolean hasOptions() { + return ((bitField0_ & 0x00000080) != 0); + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions getOptions() { + if (optionsBuilder_ == null) { + return options_ == null ? com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.getDefaultInstance() : options_; + } else { + return optionsBuilder_.getMessage(); + } + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public Builder setOptions(com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions value) { + if (optionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + options_ = value; + onChanged(); + } else { + optionsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + return this; + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public Builder setOptions( + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.Builder builderForValue) { + if (optionsBuilder_ == null) { + options_ = builderForValue.build(); + onChanged(); + } else { + optionsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + return this; + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public Builder mergeOptions(com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions value) { + if (optionsBuilder_ == null) { + if (((bitField0_ & 0x00000080) != 0) && + options_ != null && + options_ != com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.getDefaultInstance()) { + options_ = + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.newBuilder(options_).mergeFrom(value).buildPartial(); + } else { + options_ = value; + } + onChanged(); + } else { + optionsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + return this; + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public Builder clearOptions() { + if (optionsBuilder_ == null) { + options_ = null; + onChanged(); + } else { + optionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + return this; + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.Builder getOptionsBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getOptionsFieldBuilder().getBuilder(); + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder() { + if (optionsBuilder_ != null) { + return optionsBuilder_.getMessageOrBuilder(); + } else { + return options_ == null ? + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.getDefaultInstance() : options_; + } + } + /** + * optional .google.protobuf.MessageOptions options = 7; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions, com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptionsOrBuilder> + getOptionsFieldBuilder() { + if (optionsBuilder_ == null) { + optionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions, com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptions.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.MessageOptionsOrBuilder>( + getOptions(), + getParentForChildren(), + isClean()); + options_ = null; + } + return optionsBuilder_; + } + + private java.util.List reservedRange_ = + java.util.Collections.emptyList(); + private void ensureReservedRangeIsMutable() { + if (!((bitField0_ & 0x00000100) != 0)) { + reservedRange_ = new java.util.ArrayList(reservedRange_); + bitField0_ |= 0x00000100; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRangeOrBuilder> reservedRangeBuilder_; + + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public java.util.List getReservedRangeList() { + if (reservedRangeBuilder_ == null) { + return java.util.Collections.unmodifiableList(reservedRange_); + } else { + return reservedRangeBuilder_.getMessageList(); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public int getReservedRangeCount() { + if (reservedRangeBuilder_ == null) { + return reservedRange_.size(); + } else { + return reservedRangeBuilder_.getCount(); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange getReservedRange(int index) { + if (reservedRangeBuilder_ == null) { + return reservedRange_.get(index); + } else { + return reservedRangeBuilder_.getMessage(index); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder setReservedRange( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange value) { + if (reservedRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReservedRangeIsMutable(); + reservedRange_.set(index, value); + onChanged(); + } else { + reservedRangeBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder setReservedRange( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder builderForValue) { + if (reservedRangeBuilder_ == null) { + ensureReservedRangeIsMutable(); + reservedRange_.set(index, builderForValue.build()); + onChanged(); + } else { + reservedRangeBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder addReservedRange(com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange value) { + if (reservedRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReservedRangeIsMutable(); + reservedRange_.add(value); + onChanged(); + } else { + reservedRangeBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder addReservedRange( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange value) { + if (reservedRangeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureReservedRangeIsMutable(); + reservedRange_.add(index, value); + onChanged(); + } else { + reservedRangeBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder addReservedRange( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder builderForValue) { + if (reservedRangeBuilder_ == null) { + ensureReservedRangeIsMutable(); + reservedRange_.add(builderForValue.build()); + onChanged(); + } else { + reservedRangeBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder addReservedRange( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder builderForValue) { + if (reservedRangeBuilder_ == null) { + ensureReservedRangeIsMutable(); + reservedRange_.add(index, builderForValue.build()); + onChanged(); + } else { + reservedRangeBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder addAllReservedRange( + java.lang.Iterable values) { + if (reservedRangeBuilder_ == null) { + ensureReservedRangeIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, reservedRange_); + onChanged(); + } else { + reservedRangeBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder clearReservedRange() { + if (reservedRangeBuilder_ == null) { + reservedRange_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + onChanged(); + } else { + reservedRangeBuilder_.clear(); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public Builder removeReservedRange(int index) { + if (reservedRangeBuilder_ == null) { + ensureReservedRangeIsMutable(); + reservedRange_.remove(index); + onChanged(); + } else { + reservedRangeBuilder_.remove(index); + } + return this; + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder getReservedRangeBuilder( + int index) { + return getReservedRangeFieldBuilder().getBuilder(index); + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRangeOrBuilder getReservedRangeOrBuilder( + int index) { + if (reservedRangeBuilder_ == null) { + return reservedRange_.get(index); } else { + return reservedRangeBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public java.util.List + getReservedRangeOrBuilderList() { + if (reservedRangeBuilder_ != null) { + return reservedRangeBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(reservedRange_); + } + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder addReservedRangeBuilder() { + return getReservedRangeFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.getDefaultInstance()); + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder addReservedRangeBuilder( + int index) { + return getReservedRangeFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.getDefaultInstance()); + } + /** + * repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + public java.util.List + getReservedRangeBuilderList() { + return getReservedRangeFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRangeOrBuilder> + getReservedRangeFieldBuilder() { + if (reservedRangeBuilder_ == null) { + reservedRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRange.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto.ReservedRangeOrBuilder>( + reservedRange_, + ((bitField0_ & 0x00000100) != 0), + getParentForChildren(), + isClean()); + reservedRange_ = null; + } + return reservedRangeBuilder_; + } + + private com.google.protobuf.LazyStringList reservedName_ = com.google.protobuf.LazyStringArrayList.EMPTY; + private void ensureReservedNameIsMutable() { + if (!((bitField0_ & 0x00000200) != 0)) { + reservedName_ = new com.google.protobuf.LazyStringArrayList(reservedName_); + bitField0_ |= 0x00000200; + } + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public com.google.protobuf.ProtocolStringList + getReservedNameList() { + return reservedName_.getUnmodifiableView(); + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public int getReservedNameCount() { + return reservedName_.size(); + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public java.lang.String getReservedName(int index) { + return reservedName_.get(index); + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public com.google.protobuf.ByteString + getReservedNameBytes(int index) { + return reservedName_.getByteString(index); + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public Builder setReservedName( + int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureReservedNameIsMutable(); + reservedName_.set(index, value); + onChanged(); + return this; + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public Builder addReservedName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureReservedNameIsMutable(); + reservedName_.add(value); + onChanged(); + return this; + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public Builder addAllReservedName( + java.lang.Iterable values) { + ensureReservedNameIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, reservedName_); + onChanged(); + return this; + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public Builder clearReservedName() { + reservedName_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000200); + onChanged(); + return this; + } + /** + *
+       * Reserved field names, which may not be used by fields in the same message.
+       * A given name may only be reserved once.
+       * 
+ * + * repeated string reserved_name = 10; + */ + public Builder addReservedNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + ensureReservedNameIsMutable(); + reservedName_.add(value); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto) + } + + // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto) + private static final com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto(); + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DescriptorProto parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DescriptorProto(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.DescriptorProto getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ExtensionRangeOptionsOrBuilder extends + // @@protoc_insertion_point(interface_extends:google.protobuf.ExtensionRangeOptions) + com.google.protobuf.GeneratedMessageV3. + ExtendableMessageOrBuilder { + + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + java.util.List + getUninterpretedOptionList(); + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index); + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + int getUninterpretedOptionCount(); + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + java.util.List + getUninterpretedOptionOrBuilderList(); + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder( + int index); + } + /** + * Protobuf type {@code google.protobuf.ExtensionRangeOptions} + */ + public static final class ExtensionRangeOptions extends + com.google.protobuf.GeneratedMessageV3.ExtendableMessage< + ExtensionRangeOptions> implements + // @@protoc_insertion_point(message_implements:google.protobuf.ExtensionRangeOptions) + ExtensionRangeOptionsOrBuilder { + private static final long serialVersionUID = 0L; + // Use ExtensionRangeOptions.newBuilder() to construct. + private ExtensionRangeOptions(com.google.protobuf.GeneratedMessageV3.ExtendableBuilder builder) { + super(builder); + } + private ExtensionRangeOptions() { + uninterpretedOption_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ExtensionRangeOptions(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ExtensionRangeOptions( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 7994: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + uninterpretedOption_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + uninterpretedOption_.add( + input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.class, com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.Builder.class); + } + + public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999; + private java.util.List uninterpretedOption_; + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public java.util.List getUninterpretedOptionList() { + return uninterpretedOption_; + } + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public java.util.List + getUninterpretedOptionOrBuilderList() { + return uninterpretedOption_; + } + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public int getUninterpretedOptionCount() { + return uninterpretedOption_.size(); + } + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) { + return uninterpretedOption_.get(index); + } + /** + *
+     * The parser stores options it doesn't recognize here. See above.
+     * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder( + int index) { + return uninterpretedOption_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + for (int i = 0; i < getUninterpretedOptionCount(); i++) { + if (!getUninterpretedOption(i).isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } + if (!extensionsAreInitialized()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + com.google.protobuf.GeneratedMessageV3 + .ExtendableMessage.ExtensionWriter + extensionWriter = newExtensionWriter(); + for (int i = 0; i < uninterpretedOption_.size(); i++) { + output.writeMessage(999, uninterpretedOption_.get(i)); + } + extensionWriter.writeUntil(536870912, output); + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < uninterpretedOption_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(999, uninterpretedOption_.get(i)); + } + size += extensionsSerializedSize(); + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions)) { + return super.equals(obj); + } + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions other = (com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions) obj; + + if (!getUninterpretedOptionList() + .equals(other.getUninterpretedOptionList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + if (!getExtensionFields().equals(other.getExtensionFields())) + return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getUninterpretedOptionCount() > 0) { + hash = (37 * hash) + UNINTERPRETED_OPTION_FIELD_NUMBER; + hash = (53 * hash) + getUninterpretedOptionList().hashCode(); + } + hash = hashFields(hash, getExtensionFields()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code google.protobuf.ExtensionRangeOptions} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.ExtendableBuilder< + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions, Builder> implements + // @@protoc_insertion_point(builder_implements:google.protobuf.ExtensionRangeOptions) + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptionsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.class, com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.Builder.class); + } + + // Construct using com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getUninterpretedOptionFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (uninterpretedOptionBuilder_ == null) { + uninterpretedOption_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + uninterpretedOptionBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_ExtensionRangeOptions_descriptor; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions getDefaultInstanceForType() { + return com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.getDefaultInstance(); + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions build() { + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions buildPartial() { + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions result = new com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions(this); + int from_bitField0_ = bitField0_; + if (uninterpretedOptionBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.uninterpretedOption_ = uninterpretedOption_; + } else { + result.uninterpretedOption_ = uninterpretedOptionBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder setExtension( + com.google.protobuf.GeneratedMessage.GeneratedExtension< + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions, Type> extension, + Type value) { + return super.setExtension(extension, value); + } + @java.lang.Override + public Builder setExtension( + com.google.protobuf.GeneratedMessage.GeneratedExtension< + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions, java.util.List> extension, + int index, Type value) { + return super.setExtension(extension, index, value); + } + @java.lang.Override + public Builder addExtension( + com.google.protobuf.GeneratedMessage.GeneratedExtension< + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions, java.util.List> extension, + Type value) { + return super.addExtension(extension, value); + } + @java.lang.Override + public Builder clearExtension( + com.google.protobuf.GeneratedMessage.GeneratedExtension< + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions, ?> extension) { + return super.clearExtension(extension); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions) { + return mergeFrom((com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions other) { + if (other == com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions.getDefaultInstance()) return this; + if (uninterpretedOptionBuilder_ == null) { + if (!other.uninterpretedOption_.isEmpty()) { + if (uninterpretedOption_.isEmpty()) { + uninterpretedOption_ = other.uninterpretedOption_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureUninterpretedOptionIsMutable(); + uninterpretedOption_.addAll(other.uninterpretedOption_); + } + onChanged(); + } + } else { + if (!other.uninterpretedOption_.isEmpty()) { + if (uninterpretedOptionBuilder_.isEmpty()) { + uninterpretedOptionBuilder_.dispose(); + uninterpretedOptionBuilder_ = null; + uninterpretedOption_ = other.uninterpretedOption_; + bitField0_ = (bitField0_ & ~0x00000001); + uninterpretedOptionBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getUninterpretedOptionFieldBuilder() : null; + } else { + uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_); + } + } + } + this.mergeExtensionFields(other); + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + for (int i = 0; i < getUninterpretedOptionCount(); i++) { + if (!getUninterpretedOption(i).isInitialized()) { + return false; + } + } + if (!extensionsAreInitialized()) { + return false; + } + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List uninterpretedOption_ = + java.util.Collections.emptyList(); + private void ensureUninterpretedOptionIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + uninterpretedOption_ = new java.util.ArrayList(uninterpretedOption_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_; + + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public java.util.List getUninterpretedOptionList() { + if (uninterpretedOptionBuilder_ == null) { + return java.util.Collections.unmodifiableList(uninterpretedOption_); + } else { + return uninterpretedOptionBuilder_.getMessageList(); + } + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public int getUninterpretedOptionCount() { + if (uninterpretedOptionBuilder_ == null) { + return uninterpretedOption_.size(); + } else { + return uninterpretedOptionBuilder_.getCount(); + } + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) { + if (uninterpretedOptionBuilder_ == null) { + return uninterpretedOption_.get(index); + } else { + return uninterpretedOptionBuilder_.getMessage(index); + } + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder setUninterpretedOption( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption value) { + if (uninterpretedOptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUninterpretedOptionIsMutable(); + uninterpretedOption_.set(index, value); + onChanged(); + } else { + uninterpretedOptionBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder setUninterpretedOption( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + if (uninterpretedOptionBuilder_ == null) { + ensureUninterpretedOptionIsMutable(); + uninterpretedOption_.set(index, builderForValue.build()); + onChanged(); + } else { + uninterpretedOptionBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder addUninterpretedOption(com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption value) { + if (uninterpretedOptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUninterpretedOptionIsMutable(); + uninterpretedOption_.add(value); + onChanged(); + } else { + uninterpretedOptionBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder addUninterpretedOption( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption value) { + if (uninterpretedOptionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUninterpretedOptionIsMutable(); + uninterpretedOption_.add(index, value); + onChanged(); + } else { + uninterpretedOptionBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder addUninterpretedOption( + com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + if (uninterpretedOptionBuilder_ == null) { + ensureUninterpretedOptionIsMutable(); + uninterpretedOption_.add(builderForValue.build()); + onChanged(); + } else { + uninterpretedOptionBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder addUninterpretedOption( + int index, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + if (uninterpretedOptionBuilder_ == null) { + ensureUninterpretedOptionIsMutable(); + uninterpretedOption_.add(index, builderForValue.build()); + onChanged(); + } else { + uninterpretedOptionBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder addAllUninterpretedOption( + java.lang.Iterable values) { + if (uninterpretedOptionBuilder_ == null) { + ensureUninterpretedOptionIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, uninterpretedOption_); + onChanged(); + } else { + uninterpretedOptionBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder clearUninterpretedOption() { + if (uninterpretedOptionBuilder_ == null) { + uninterpretedOption_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + uninterpretedOptionBuilder_.clear(); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public Builder removeUninterpretedOption(int index) { + if (uninterpretedOptionBuilder_ == null) { + ensureUninterpretedOptionIsMutable(); + uninterpretedOption_.remove(index); + onChanged(); + } else { + uninterpretedOptionBuilder_.remove(index); + } + return this; + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder( + int index) { + return getUninterpretedOptionFieldBuilder().getBuilder(index); + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder( + int index) { + if (uninterpretedOptionBuilder_ == null) { + return uninterpretedOption_.get(index); } else { + return uninterpretedOptionBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public java.util.List + getUninterpretedOptionOrBuilderList() { + if (uninterpretedOptionBuilder_ != null) { + return uninterpretedOptionBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(uninterpretedOption_); + } + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() { + return getUninterpretedOptionFieldBuilder().addBuilder( + com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.getDefaultInstance()); + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder( + int index) { + return getUninterpretedOptionFieldBuilder().addBuilder( + index, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.getDefaultInstance()); + } + /** + *
+       * The parser stores options it doesn't recognize here. See above.
+       * 
+ * + * repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + public java.util.List + getUninterpretedOptionBuilderList() { + return getUninterpretedOptionFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOptionOrBuilder> + getUninterpretedOptionFieldBuilder() { + if (uninterpretedOptionBuilder_ == null) { + uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOption.Builder, com.pingcap.kafkareader.proto.DescriptorProtos.UninterpretedOptionOrBuilder>( + uninterpretedOption_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + uninterpretedOption_ = null; + } + return uninterpretedOptionBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:google.protobuf.ExtensionRangeOptions) + } + + // @@protoc_insertion_point(class_scope:google.protobuf.ExtensionRangeOptions) + private static final com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions(); + } + + public static com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ExtensionRangeOptions parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ExtensionRangeOptions(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.pingcap.kafkareader.proto.DescriptorProtos.ExtensionRangeOptions getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface FieldDescriptorProtoOrBuilder extends + // @@protoc_insertion_point(interface_extends:google.protobuf.FieldDescriptorProto) + com.google.protobuf.MessageOrBuilder { + + /** + * optional string name = 1; + */ + boolean hasName(); + /** + * optional string name = 1; + */ + java.lang.String getName(); + /** + * optional string name = 1; + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + * optional int32 number = 3; + */ + boolean hasNumber(); + /** + * optional int32 number = 3; + */ + int getNumber(); + + /** + * optional .google.protobuf.FieldDescriptorProto.Label label = 4; + */ + boolean hasLabel(); + /** + * optional .google.protobuf.FieldDescriptorProto.Label label = 4; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Label getLabel(); + + /** + *
+     * If type_name is set, this need not be set.  If both this and type_name
+     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
+     * 
+ * + * optional .google.protobuf.FieldDescriptorProto.Type type = 5; + */ + boolean hasType(); + /** + *
+     * If type_name is set, this need not be set.  If both this and type_name
+     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
+     * 
+ * + * optional .google.protobuf.FieldDescriptorProto.Type type = 5; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Type getType(); + + /** + *
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * 
+ * + * optional string type_name = 6; + */ + boolean hasTypeName(); + /** + *
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * 
+ * + * optional string type_name = 6; + */ + java.lang.String getTypeName(); + /** + *
+     * For message and enum types, this is the name of the type.  If the name
+     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+     * rules are used to find the type (i.e. first the nested types within this
+     * message are searched, then within the parent, on up to the root
+     * namespace).
+     * 
+ * + * optional string type_name = 6; + */ + com.google.protobuf.ByteString + getTypeNameBytes(); + + /** + *
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * 
+ * + * optional string extendee = 2; + */ + boolean hasExtendee(); + /** + *
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * 
+ * + * optional string extendee = 2; + */ + java.lang.String getExtendee(); + /** + *
+     * For extensions, this is the name of the type being extended.  It is
+     * resolved in the same manner as type_name.
+     * 
+ * + * optional string extendee = 2; + */ + com.google.protobuf.ByteString + getExtendeeBytes(); + + /** + *
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * 
+ * + * optional string default_value = 7; + */ + boolean hasDefaultValue(); + /** + *
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * 
+ * + * optional string default_value = 7; + */ + java.lang.String getDefaultValue(); + /** + *
+     * For numeric types, contains the original text representation of the value.
+     * For booleans, "true" or "false".
+     * For strings, contains the default text contents (not escaped in any way).
+     * For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+     * TODO(kenton):  Base-64 encode?
+     * 
+ * + * optional string default_value = 7; + */ + com.google.protobuf.ByteString + getDefaultValueBytes(); + + /** + *
+     * If set, gives the index of a oneof in the containing type's oneof_decl
+     * list.  This field is a member of that oneof.
+     * 
+ * + * optional int32 oneof_index = 9; + */ + boolean hasOneofIndex(); + /** + *
+     * If set, gives the index of a oneof in the containing type's oneof_decl
+     * list.  This field is a member of that oneof.
+     * 
+ * + * optional int32 oneof_index = 9; + */ + int getOneofIndex(); + + /** + *
+     * JSON name of this field. The value is set by protocol compiler. If the
+     * user has set a "json_name" option on this field, that option's value
+     * will be used. Otherwise, it's deduced from the field's name by converting
+     * it to camelCase.
+     * 
+ * + * optional string json_name = 10; + */ + boolean hasJsonName(); + /** + *
+     * JSON name of this field. The value is set by protocol compiler. If the
+     * user has set a "json_name" option on this field, that option's value
+     * will be used. Otherwise, it's deduced from the field's name by converting
+     * it to camelCase.
+     * 
+ * + * optional string json_name = 10; + */ + java.lang.String getJsonName(); + /** + *
+     * JSON name of this field. The value is set by protocol compiler. If the
+     * user has set a "json_name" option on this field, that option's value
+     * will be used. Otherwise, it's deduced from the field's name by converting
+     * it to camelCase.
+     * 
+ * + * optional string json_name = 10; + */ + com.google.protobuf.ByteString + getJsonNameBytes(); + + /** + * optional .google.protobuf.FieldOptions options = 8; + */ + boolean hasOptions(); + /** + * optional .google.protobuf.FieldOptions options = 8; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldOptions getOptions(); + /** + * optional .google.protobuf.FieldOptions options = 8; + */ + com.pingcap.kafkareader.proto.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder(); + } + /** + *
+   * Describes a field within a message.
+   * 
+ * + * Protobuf type {@code google.protobuf.FieldDescriptorProto} + */ + public static final class FieldDescriptorProto extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:google.protobuf.FieldDescriptorProto) + FieldDescriptorProtoOrBuilder { + private static final long serialVersionUID = 0L; + // Use FieldDescriptorProto.newBuilder() to construct. + private FieldDescriptorProto(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private FieldDescriptorProto() { + name_ = ""; + label_ = 1; + type_ = 1; + typeName_ = ""; + extendee_ = ""; + defaultValue_ = ""; + jsonName_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new FieldDescriptorProto(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private FieldDescriptorProto( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + name_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000020; + extendee_ = bs; + break; + } + case 24: { + bitField0_ |= 0x00000002; + number_ = input.readInt32(); + break; + } + case 32: { + int rawValue = input.readEnum(); + @SuppressWarnings("deprecation") + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Label value = com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Label.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(4, rawValue); + } else { + bitField0_ |= 0x00000004; + label_ = rawValue; + } + break; + } + case 40: { + int rawValue = input.readEnum(); + @SuppressWarnings("deprecation") + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Type value = com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Type.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(5, rawValue); + } else { + bitField0_ |= 0x00000008; + type_ = rawValue; + } + break; + } + case 50: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000010; + typeName_ = bs; + break; + } + case 58: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000040; + defaultValue_ = bs; + break; + } + case 66: { + com.pingcap.kafkareader.proto.DescriptorProtos.FieldOptions.Builder subBuilder = null; + if (((bitField0_ & 0x00000200) != 0)) { + subBuilder = options_.toBuilder(); + } + options_ = input.readMessage(com.pingcap.kafkareader.proto.DescriptorProtos.FieldOptions.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(options_); + options_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000200; + break; + } + case 72: { + bitField0_ |= 0x00000080; + oneofIndex_ = input.readInt32(); + break; + } + case 82: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000100; + jsonName_ = bs; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.pingcap.kafkareader.proto.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.class, com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.Builder.class); + } + + /** + * Protobuf enum {@code google.protobuf.FieldDescriptorProto.Type} + */ + public enum Type + implements com.google.protobuf.ProtocolMessageEnum { + /** + *
+       * 0 is reserved for errors.
+       * Order is weird for historical reasons.
+       * 
+ * + * TYPE_DOUBLE = 1; + */ + TYPE_DOUBLE(1), + /** + * TYPE_FLOAT = 2; + */ + TYPE_FLOAT(2), + /** + *
+       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+       * negative values are likely.
+       * 
+ * + * TYPE_INT64 = 3; + */ + TYPE_INT64(3), + /** + * TYPE_UINT64 = 4; + */ + TYPE_UINT64(4), + /** + *
+       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+       * negative values are likely.
+       * 
+ * + * TYPE_INT32 = 5; + */ + TYPE_INT32(5), + /** + * TYPE_FIXED64 = 6; + */ + TYPE_FIXED64(6), + /** + * TYPE_FIXED32 = 7; + */ + TYPE_FIXED32(7), + /** + * TYPE_BOOL = 8; + */ + TYPE_BOOL(8), + /** + * TYPE_STRING = 9; + */ + TYPE_STRING(9), + /** + *
+       * Tag-delimited aggregate.
+       * Group type is deprecated and not supported in proto3. However, Proto3
+       * implementations should still be able to parse the group wire format and
+       * treat group fields as unknown fields.
+       * 
+ * + * TYPE_GROUP = 10; + */ + TYPE_GROUP(10), + /** + *
+       * Length-delimited aggregate.
+       * 
+ * + * TYPE_MESSAGE = 11; + */ + TYPE_MESSAGE(11), + /** + *
+       * New in version 2.
+       * 
+ * + * TYPE_BYTES = 12; + */ + TYPE_BYTES(12), + /** + * TYPE_UINT32 = 13; + */ + TYPE_UINT32(13), + /** + * TYPE_ENUM = 14; + */ + TYPE_ENUM(14), + /** + * TYPE_SFIXED32 = 15; + */ + TYPE_SFIXED32(15), + /** + * TYPE_SFIXED64 = 16; + */ + TYPE_SFIXED64(16), + /** + *
+       * Uses ZigZag encoding.
+       * 
+ * + * TYPE_SINT32 = 17; + */ + TYPE_SINT32(17), + /** + *
+       * Uses ZigZag encoding.
+       * 
+ * + * TYPE_SINT64 = 18; + */ + TYPE_SINT64(18), + ; + + /** + *
+       * 0 is reserved for errors.
+       * Order is weird for historical reasons.
+       * 
+ * + * TYPE_DOUBLE = 1; + */ + public static final int TYPE_DOUBLE_VALUE = 1; + /** + * TYPE_FLOAT = 2; + */ + public static final int TYPE_FLOAT_VALUE = 2; + /** + *
+       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+       * negative values are likely.
+       * 
+ * + * TYPE_INT64 = 3; + */ + public static final int TYPE_INT64_VALUE = 3; + /** + * TYPE_UINT64 = 4; + */ + public static final int TYPE_UINT64_VALUE = 4; + /** + *
+       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+       * negative values are likely.
+       * 
+ * + * TYPE_INT32 = 5; + */ + public static final int TYPE_INT32_VALUE = 5; + /** + * TYPE_FIXED64 = 6; + */ + public static final int TYPE_FIXED64_VALUE = 6; + /** + * TYPE_FIXED32 = 7; + */ + public static final int TYPE_FIXED32_VALUE = 7; + /** + * TYPE_BOOL = 8; + */ + public static final int TYPE_BOOL_VALUE = 8; + /** + * TYPE_STRING = 9; + */ + public static final int TYPE_STRING_VALUE = 9; + /** + *
+       * Tag-delimited aggregate.
+       * Group type is deprecated and not supported in proto3. However, Proto3
+       * implementations should still be able to parse the group wire format and
+       * treat group fields as unknown fields.
+       * 
+ * + * TYPE_GROUP = 10; + */ + public static final int TYPE_GROUP_VALUE = 10; + /** + *
+       * Length-delimited aggregate.
+       * 
+ * + * TYPE_MESSAGE = 11; + */ + public static final int TYPE_MESSAGE_VALUE = 11; + /** + *
+       * New in version 2.
+       * 
+ * + * TYPE_BYTES = 12; + */ + public static final int TYPE_BYTES_VALUE = 12; + /** + * TYPE_UINT32 = 13; + */ + public static final int TYPE_UINT32_VALUE = 13; + /** + * TYPE_ENUM = 14; + */ + public static final int TYPE_ENUM_VALUE = 14; + /** + * TYPE_SFIXED32 = 15; + */ + public static final int TYPE_SFIXED32_VALUE = 15; + /** + * TYPE_SFIXED64 = 16; + */ + public static final int TYPE_SFIXED64_VALUE = 16; + /** + *
+       * Uses ZigZag encoding.
+       * 
+ * + * TYPE_SINT32 = 17; + */ + public static final int TYPE_SINT32_VALUE = 17; + /** + *
+       * Uses ZigZag encoding.
+       * 
+ * + * TYPE_SINT64 = 18; + */ + public static final int TYPE_SINT64_VALUE = 18; + + + public final int getNumber() { + return value; + } + + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static Type valueOf(int value) { + return forNumber(value); + } + + public static Type forNumber(int value) { + switch (value) { + case 1: return TYPE_DOUBLE; + case 2: return TYPE_FLOAT; + case 3: return TYPE_INT64; + case 4: return TYPE_UINT64; + case 5: return TYPE_INT32; + case 6: return TYPE_FIXED64; + case 7: return TYPE_FIXED32; + case 8: return TYPE_BOOL; + case 9: return TYPE_STRING; + case 10: return TYPE_GROUP; + case 11: return TYPE_MESSAGE; + case 12: return TYPE_BYTES; + case 13: return TYPE_UINT32; + case 14: return TYPE_ENUM; + case 15: return TYPE_SFIXED32; + case 16: return TYPE_SFIXED64; + case 17: return TYPE_SINT32; + case 18: return TYPE_SINT64; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + Type> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return com.pingcap.kafkareader.proto.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(0); + } + + private static final Type[] VALUES = values(); + + public static Type valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private Type(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Type) + } + + /** + * Protobuf enum {@code google.protobuf.FieldDescriptorProto.Label} + */ + public enum Label + implements com.google.protobuf.ProtocolMessageEnum { + /** + *
+       * 0 is reserved for errors
+       * 
+ * + * LABEL_OPTIONAL = 1; + */ + LABEL_OPTIONAL(1), + /** + * LABEL_REQUIRED = 2; + */ + LABEL_REQUIRED(2), + /** + * LABEL_REPEATED = 3; + */ + LABEL_REPEATED(3), + ; + + /** + *
+       * 0 is reserved for errors
+       * 
+ * + * LABEL_OPTIONAL = 1; + */ + public static final int LABEL_OPTIONAL_VALUE = 1; + /** + * LABEL_REQUIRED = 2; + */ + public static final int LABEL_REQUIRED_VALUE = 2; + /** + * LABEL_REPEATED = 3; + */ + public static final int LABEL_REPEATED_VALUE = 3; + + + public final int getNumber() { + return value; + } + + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static Label valueOf(int value) { + return forNumber(value); + } + + public static Label forNumber(int value) { + switch (value) { + case 1: return LABEL_OPTIONAL; + case 2: return LABEL_REQUIRED; + case 3: return LABEL_REPEATED; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap